コンテンツにスキップ

TeX

インストール

Mac

arXivでのリンクのようにLaTeXでハイパーリンクを目立たせる

結論から言えば次のページのように設定すればいい.

これはQiitaだから問題ないとは思うのもの, 他人のページはよく消えて悲しい想いをすることもよくある. 自分用の備忘録としていくつか転載の形で同じ内容を記録する.

基本設定

1
2
3
4
\usepackage[dvipdfmx]{color, hyperref}
\usepackage{pxjahyper}
\usepackage{cite}
\usepackage{xcolor}

リンクに色をつける

ふつうの HTML のようにリンクの文字列に色をつける方法を採用した.

1
2
3
4
5
6
7
\usepackage{xcolor}
\hypersetup{
    colorlinks=true,
    citecolor=blue,
    linkcolor=red,
    urlcolor=blue
}

色はお好みで変えられる.

リンクを枠で囲う

最近全然見ていないのでわからないものの, 昔は枠で囲われていた気がする. そのスタイル.

1
2
3
4
5
6
\hypersetup{
    colorlinks=false,
    citebordercolor=green,
    linkbordercolor=red,
    urlbordercolor=cyan,
}

追加メモ

次のページも参考になる.

hyperref・setcounterでchapterを初期化したあとにリンクの遷移先も適正化したい

結論から言えば次のページのように設定すればいい.

試していないがchapter以外でもできるはずだ. コードはこちらにも引用しておこう. 次のように書けばいい.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
\documentclass{report}
\usepackage[hypertexnames=false]{hyperref}
\newcommand*\initChapCounter{\setcounter{chapter}{0}}

\begin{document}
\tableofcontents
\chapter{Foo}
\initChapCounter
\chapter{Bar}
\end{document}

backmatterだと後書きの意味ではじめからコマンドがあるようだから, 適当にinitChapCounterという名前に変えておいた. これで同じファイルの中にコンテンツをためやすくなった.

jsbookでpartごとにchapterを初期化するときにリンクを正しく動かす対処法

問題の説明

まず問題が何かを説明すると, 次のような現象が起きていた.

  • texで複数部構成にした
  • \setcounter{chapter}{0}で部ごとに章番号を振り直している
  • このとき目次のリンクで2.5章(2部の5章)をクリックすると1.5章(1部の5章)に飛ぶ

具体的には次のようなコマンドを使っていた.

1
\newcommand*\initChapCounter{\setcounter{chapter}{0} \renewcommand\theHchapter{back.\arabic{chapter}}}

メモによるとここを参考にしたようだ.

解決法

次のツイートで教えて頂いた.

これをプリアンブルに設定した上で, 上で定義していたinitChapCounterを削除したら各種リンクが正しく動くようになった. 以前もはまって今回また二週間くらいはまっていたので非常に助かった. ありがたいことこの上ない. これでコンテンツ制作・参照が本当にはかどる.

戒め

次のようなコメントを頂いた.

指摘を頂いたのは次の箇所だろう.

1
\renewcommand\theHchapter{back.\arabic{chapter}}}

ここで(謎のback.はさておき)\arabic{part}のような記述が必要なのだとかそういう意味だろう. よく調べもしないでコピペするのは駄目という太古からの教えを守らないとこういう悲劇が起きる. 人, これを知的怠惰という. ここに戒めとして記録しておく.

もっといえば「だろう」ではなくきちんと調べて検証するべきところだが, 再び知的怠惰さを発揮して調査をさぼる.

KaTeX

Web関連参照.

LaTeX+tikzサンプル集

matplotlibで描いた絵をtikz化

自分用メモで, オリジナルはこれ. Tikzについても適当なタイミングで試したい.

ではmatplotlib利用に関してコードとともに説明する.

インストール

まずはmatplotlib2tikzをインストールする.

1
pip install matplotlib2tikz

他にもいろいろ要求されるかもしれない. 私の環境では次のインストールが必要だった.

1
pip install PyHamcrest msgpack-python

これらはエラーが出ていたので, それに合わせてインストールすれば問題ないはず.

基本的な使い方

パッケージ読み込みは次の通り.

1
from matplotlib2tikz import save as tikz_save

tikz ファイルは次のように生成する.

1
tikz_save('hoge.tex')

簡単な Python サンプル

本質的にはmatplotlibの使い方. $y=\sin x, y = \cos x$を描いて, scos.texに保存する.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import matplotlib.pyplot as plt
import matplotlib2tikz.save as tikz_save
import numpy as np

x = np.linspace(-4.0, 4.0, 100)
y1 = np.cos(x)
y2 = np.sin(x)

plt.plot(x, y1, label = '$y=\cos x$')
plt.plot(x, y2, label = '$y=\sin x$')

plt.xlabel('$x$')
plt.ylabel('$y$')

plt.ylim(-1.0, 1.0)


plt.legend()


plt.grid()


tikz_save('scos.tex')

TeXで読み込んでコンパイル

scos.texと同じディレクトリに次のようなTeXファイルを置く.

1
2
3
4
5
6
7
8
\documentclass[border=0.5pt,class=jsarticle,uplatex]{standalone}
\usepackage[dvipdfmx]{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}

\begin{document}
\input{scos.tex}
\end{document}

ふだんuplatexを使っているので, その前提で修正を入れている.

次の野望

もっとTikzで遊びたい.

pdflatexを使って見開きのPDFを分割する方法

一言で言えば次のツイートのリンク先を参照した.

最近, 数学関係のコンテンツはiPhoneに突っ込み, iPhoneで通勤中や適当な空き時間に眺めるようにしている. いくつかスキャンしたコンテンツもあり, それがひどく読みづらいのでどうにかならないかとずっと思っていたため, 非常に助かった.

リンク先が消えて悲しい思いをしたことが何度もあるので, コードを引用しておく.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
\def\target{input.pdf}%% 対象PDFファイル名
\def\ratio{0}%% 中央を何パーセント切り落とすか。負の数の場合は中央を両側に含める。-99〜99の百分率値を指定。

\documentclass{minimal}
\usepackage{graphicx}

%%% 総ページ数の取得
\pdfximage{\target}
\newcount\pagecount
\pagecount=\pdflastximagepages

%%% 先頭ページを読んで生成PDFのページサイズを決定(/Rotate も反映)
\setbox0\hbox{\includegraphics{\target}}
\newdimen\originalwidth
\originalwidth=\wd0

%%% 生成PDFのページサイズを決定
\usepackage[papersize={\dimexpr\originalwidth*(100-\ratio)/200\relax,\ht0},margin=0pt]{geometry}
\usepackage{pdfpages}

\begin{document}
\parindent=0pt

%%% 画像配置を実行
\newcount\thispage
\loop
\advance\thispage1
%%% 左ページの配置
\ifnum\thispage>1
  \setbox0\hbox{\includegraphics[page=\thispage]{\target}}
\fi
\copy0\newpage
%%% 右ページの配置
\leavevmode\kern\pdfpagewidth\kern-\originalwidth\box0\newpage
\ifnum\thispage<\pagecount\repeat

\end{document}

これを split.tex として保存し, pdflatex split でコンパイルすると, 分割版の PDF ができる.

注意: もとの PDF ファイル名に拡張子との区切り以外でドットがあると, 「Unknown graphics extension」などと言われてしまう. 例えば「phasetr.math_tour.pdf」というファイル名だと「phasetr.math」のところのドットがよくない. 単純にドットをアンダースコアに変えて, あとでまた戻す, といった処理を入れればいい.

記事にも書いてあるように, PDFを切り落としているわけではなく, ずらして表示させているにすぎないので, ファイル容量が増えてしまうようだ. ただ手元で試したファイルは容量が変わらないようだった.

細かいところは元記事を読んでほしい. 改めてリンクを張っておく.

texのメモリ設定

1
2
3
main_memory.hugetex = 80000000
main_memory = 80000000
stack_size = 100000
  • 次のコマンドを実行する
1
2
sudo fmtutil-sys --byfmt uptex
sudo fmtutil-sys --all

The Little Schemerのように左右に対応する段組を作る

  • parcolumnsパッケージを利用するとよい.
  • パッケージのインクルード
1
\usepackage{parcolumns}
  • 段組の設定と使用: 詳しい内容はドキュメントを見ること
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
\begin{parcolumns}[nofirstindent=true]{2}
  \colchunk{ここに質問または左側のテキストを入力します。}
  \colchunk{ここに答えまたは右側のテキストを入力します。}
  \colplacechunks
\end{parcolumns}
\begin{parcolumns}[nofirstindent=true]{2}
  \colchunk{ここに質問または左側のテキストを入力します。}
  \colchunk{ここに答えまたは右側のテキストを入力します。}
  \colplacechunks
\end{parcolumns}

uplatexでの多言語対応, 中韓とキリル文字, ギリシャ文字

端的に書くとTeX Wikiの次のページの設定をした.

まとめると次の通り.

TeXコマンド 内容
\selectlanguage{} 以後、異なる言語を \selectlanguage で指定するまで lang の言語で組版する
\begin{otherlanguage}{} \end{otherlanguage} が出てくるまで lang の言語で組版する
\foreignlanguage{}{text} text の部分を lang で指定された言語で組版する
\textlatin{text} ラテン文字以外で記述されているテキストの中にラテン文字で記述されている text を挿入する
\textgreek{text} ギリシア文字以外で記述されているテキストの中にギリシア文字で記述されている text を挿入する

通常は \selectlanguage, 他の言語の引用には \begin{otherlanguage} を, 単語レベルでの引用には \foreignlanguage を用いるとよいでしょう.

サンプルソースコードは次の通り.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
\documentclass[uplatex,dvipdfmx,a5paper,]{ujarticle}

% subsetcion のところの texorpdfstring 対応: そこを外せばなくてもいい
\usepackage{hyperref}

% 中韓対応
% CJK fontの設定
\DeclareFontFamily{JY2}{jpnrm}{}
\DeclareFontFamily{JY2}{schrm}{}
\DeclareFontFamily{JY2}{tchrm}{}
\DeclareFontFamily{JY2}{korrm}{}
\DeclareFontShape{JY2}{jpnrm}{m}{n}{<->s*[0.962216]upjpnrm-h}{}
\DeclareFontShape{JY2}{schrm}{m}{n}{<->s*[0.962216]upschrm-h}{}
\DeclareFontShape{JY2}{tchrm}{m}{n}{<->s*[0.962216]uptchrm-h}{}
\DeclareFontShape{JY2}{korrm}{m}{n}{<->s*[0.962216]upkorrm-h}{}
\DeclareFontShape{JY2}{jpnrm}{bx}{n}{<->ssub*jpnrm/m/n}{}
\DeclareFontShape{JY2}{schrm}{bx}{n}{<->ssub*schrm/m/n}{}
\DeclareFontShape{JY2}{tchrm}{bx}{n}{<->ssub*tchrm/m/n}{}
\DeclareFontShape{JY2}{korrm}{bx}{n}{<->ssub*korrm/m/n}{}
\DeclareRobustCommand\jpnrm{\kanjifamily{jpnrm}\selectfont}
\DeclareRobustCommand\schrm{\kanjifamily{schrm}\selectfont}
\DeclareRobustCommand\tchrm{\kanjifamily{tchrm}\selectfont}
\DeclareRobustCommand\korrm{\kanjifamily{korrm}\selectfont}

% 欧文対応その 1
\usepackage[utf8x]{inputenc}
\usepackage[T2A,T2B,T2C,T1]{fontenc}
\usepackage[french,german,czech,russian,greek,japanese]{babel}
\usepackage[main=japanese]{pxbabel}

\begin{document}
% 欧文対応その 2
% 欧文対応
\kcatcode"E7=15%  c:U+00E7   15: not cjk character
\kcatcode"154=15%  ?:U+0154
\kcatcode`П=15
\kcatcode`α=15
\kcatcode`?=15
\kcatcode`“=15

\section{多言語出力確認}

\subsection{日本語}

すべての人間は、生まれながらにして自由であり、かつ、尊厳と権利とについて平等である。 人間は、理性と良心とを授けられており、互いに同胞の精神をもって行動しなければならない。

\subsection{\texorpdfstring{中国語・簡体字 \schrm{简体中文}}{中国語・簡体字 }}

\schrm{人人生而自由, 在尊严和权利上一律平等.
他们赋有理性和良心, 并应以兄弟关系的精神相对待.}

\subsection{\texorpdfstring{中国語・繁体字 \tchrm{繁體中文}}{中国語・繁体字 }}

\tchrm{人人生而自由, 在尊嚴和權利上一律平等.
他們賦有理性和良心, 並應以兄弟關係的精神相對待.}

\subsection{\texorpdfstring{韓国語 \foreignlanguage{korean}{한국어}}{韓国語 }}

\foreignlanguage{korean}{모든 인간은 태어날 때부터 자유로우며 그 존엄과 권리에 있어 동등하다.
인간은 천부적으로 이성과 양심을 부여받았으며 서로 형제애의 정신으로 행동하여야 한다.}

\subsection{\texorpdfstring{フランス語 \foreignlanguage{french}{Français}}{フランス語 }}

\foreignlanguage{french}{Tous les êtres humains naissent libres et égaux en dignité et en droits.
Ils sont doués de raison et de conscience et doivent agir les uns envers les autres dans un esprit de fraternité.}

\subsection{ドイツ語 Deutsch}

\foreignlanguage{german}{Alle Menschen sind frei und gleich an Würde und Rechten geboren.
Sie sind mit Vernunft und Gewissen begabt und sollen einander im Geiste der Brüderlichkeit begegnen.}

\subsection{チェコ語 Czech}

\foreignlanguage{czech}{Všichni lidé rodí se svobodní a sobě rovní co do důstojnosti a práv.
Jsou nadáni rozumem a svědomím a mají spolu jednat v duchu bratrství.}

\subsection{\texorpdfstring{ロシア語 \foreignlanguage{russian}{Русский}}{ロシア語 }}

\foreignlanguage{russian}{Все люди рождаются свободными и равными в своем достоинстве и правах.
Они наделены разумом и совестью и должны поступать в отношении друг друга в духе братства.}

\subsection{\texorpdfstring{ギリシア語 \foreignlanguage{greek}{Ελληνικά}}{ギリシア語 }}

\foreignlanguage{greek}{'Ολοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα.
Είναι προικισμένοι με λογική και συνείδηση, και οφείλουν να συμπεριφέρονται μεταξύ τους με πνεύμα αδελφοσύνης.}

\end{document}

簡体中文が一部出ない: 簡体中文特有の文字っぽい気がする. そのうちサンスクリット文字やアラビア文字も必要になりそう. 必要になった時点で追記しよう.

可換図式のコマンド: dash, 矢印の部分を単純な棒にする

可換図式のコマンド: phantom, 上から下に向けて部分集合などを書く

参考図

1
2
3
4
5
6
\begin{equation}
\begin{tikzcd}
\setone{\text{$R$の根基$J$}} \arrow[d, phantom, "\subset" rotate=90] \arrow[r, leftrightarrow] & \setone{\text{代数多様体$X \subset k^n$}} \arrow[d, phantom, "\subset" rotate=90] \\
\setone{\text{$R$の素イデアル$P$}} \arrow[r, leftrightarrow] & \setone{\text{既約な代数多様体$X \subset k^n$}}
\end{tikzcd}.
\end{equation}

可換図式のコマンド: mapsfrom: mapstoの逆

可換図式のコマンド: \draw[->, dashed] (a12) to[bend left=25] node{$\scriptstyle g_{\lambda}$} (a33);: 矢印を曲げる

可換図式で矢印を包含記号にしたい: tikz-cdを使おう

1
2
3
4
$$\begin{tikzcd} % [row sep=small]
E \arrow[r, "\sigma"] & E' \\
F \arrow[r, "\sigma_0"'] \arrow[u, phantom, sloped, "\subset"] & F' \arrow[u, phantom, sloped, "\subset"]
\end{tikzcd}$$

極限$\lim$の下に複数行を書きたい: subarray

1
2
3
4
5
6
7
\begin{align}
\lim_{
\begin{subarray}{c}
L \to \infty, N \to \infty \\
\frac{N}{(2L)^d} \to \lambda_l
\end{subarray}}
\end{align}

コマンドを単語境界指定で一括置換する

  • Perplexityに聞いた.
  • 次のような形でsedを使えばよい
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash
set -euo pipefail

cmd='s/(^|[^[:alnum:]])\\dabsmu([^[:alnum:]]|$)/\1\\opdmsr{\\abs{\\mu}}\2/g'
sed -i '' -E ${cmd} math_expedition.org

files=("mycommands-char-bb.tex" "mycommands-char-bf.tex" "mycommands-char-bold.tex" "mycommands-char-cal.tex" "mycommands-char-frak.tex" "mycommands-char-rm.tex" "mycommands-char-scr.tex" "mycommands-char-sf.tex" "mycommands-char-vec.tex" "mycommands.tex")
for file in "${files[@]}"; do
    sed -i '' -E ${cmd} $file
done

式入りtex文書をepub化方法: 2016-08時の私的まとめ

このツイートがそれなりにふぉばられていたので, 実際にいまやっていることについてまとめておく. 自分用の備忘録でもある.

上のように書いたけれども, 結局はtex4ebookは使わずにpandocでやっている. 結論から書くとpandocに対して次のフィルターをかけて式をjpgに変換し, それを入れている.

フォーク元のmr_konnさんのプログラムではsvgへ変換していて, それを私がjpgに書き換えて使っている. mr_konnさんのまとめについては次のスライド参照. ついでにmr_konnさんの元リポジトリもリンクを張っておこう.

さて, 私の執筆環境 (?) についてもう少し書いておこう. 正直, かなり無茶苦茶なスタイルだろう. 私の異常なところはあとで書くとして, まずはmr_konnさんのスライドにもある定理環境と式の話だ.

pandocを使っていても定理や命題の環境は適切に変換してくれない. mr_konnさんのenv-to-div-filterフィルターがよきにはからってくれるのかもしれないが, 参照つきでやってくれるのかよくわからない(試していない). そこで私は力づくで前から採番してdivに変換して対応している.

その上であとの問題は式. これもmath-to-svg-filterもといmath-to-jpg-filterを使っている. しかしこれが困りもので, 実際には上のスライド中でmr_konnさんが書いている通りでうまく動かなかった. 原因はよくわかっていない. Haskellもよくわからないのでpandocまわりの動きが追い切れない. そこでとにかく力づくで対応した.

またepubと言っても私の主目的はKindle出版で, Kindleではまだsvgやmathmlが使えない. そこでsvgではなくjpgにしたのだ. svgの方が圧縮したときの容量もご機嫌なのだが仕方ない. 式が多くなると相当のボリュームになる.

それはそれとして, 実際にやったのは次のような変換経路だ.

  • texをJSON に変換
  • JSONにmath-to-jpg-filterを通して再度JSONに変換
  • JSONをepubに変換する.

直接texからepubに持っていければいいのだが, いまの私の技術力では無理だった.

ちなみに言うと私の執筆スタイルはさらにむちゃくちゃだ. 元のファイルはorg (Emacs 御用達のフォーマット)を基礎にして書いている. 「基礎にして」というのは章や節の折り畳みに関するところだけ使っていて, あとの形式はpandoc+markdownのフォーマットに従っているからだ. 例えばorgであればリンクを貼るとき [[ URL ][ リンクの文字列 ]] という形式で書く. それをorg文書であるにも関わらずpandoc+markdownスタイルの【[リンクの文字列] (URL)】という形式で書いているというわけだ.

これは個人的な理由がある. Emacsのmarkdownモードが重くてまともに動かなかったからだ. 別のエディタを使え, とかEmacs整備しろとかいろいろあるといえばある. しかしもうEmacsが手に馴染みきってしまっていて今更変えるのがつらい. 一方で折り畳みは愛用している機能で無くてはならない機能だ. 何かあって乗り換えが必要になったとき, orgからmarkdownに速やかに移行できるようにしたい.

そういう割と謎のモチベーションにも支配されつつ, 苦肉の策として折り畳みの部分にEmacs+orgパワーを使わせてもらい, あとはpandocでよしなに, というわけで pandoc+markdown 形式にした. もちろんpandocに流すときにorgの折り畳み用セクションの部分をmarkdown形式に変えている.

表についてもorgモードの表スタイルをうまく使っていて, それをpandoc+markdownの形式に変換している.

けっこう面倒なのは画像の処理だ. 完全に掌握しきれていないのだけれども, markdown の書式と TeX の書式と html への書式とで pandoc でうまいこと変換できなかった. そこで適当なスクリプトを使って TeX の場合, epub に流す場合とで直接自分で書き換えている. しかもこの書式が私独自の書式だ. 自分の首を締めまくっている気がする. 技術力の低さが恨めしい.

そうして org を markdown に変換し, それから markdown を tex に変換している.

まとめると結局次のようなステップになっている.

  • pandoc markdown を主体にしつつ折り畳みのための章の部分だけ org で書く.
  • org のコメントと章分けと表を変換して markdown にする.
  • 画像の書式を書き換える.
  • pandoc で markdown を tex に変換する.
  • tex を math-to-jpg-filter をかませつつ json に変換する.
  • json を epub に変換する.

スクリプト作成と調整があり, 最初は本当に面倒だったがいまは自動化したので一応は楽だとは思う. 式入りの成果物としては次の Amazon ページに置いてある本だ.

  • http://tinyurl.com/hd3hbth

具体的には次の 2 冊.

かなりひどい執筆環境なので真似したい方もいなかろうが, 具体的に知りたいという方がいればスクリプトも公開する. コードも相当ひどいが自分にとって読みやすくかつ動けばいいのでとりあえず気にしていない.

最後になったが実は scholarly markdown というのもある.

  • http://scholarlymarkdown.com/

TeX と HTML だけならこちらの方が遥かに完成度が高い. これも pandoc を元にしている. 現状 epub 対応していないから使っていないだけだ. これを epub 対応させてみたいという野望だけはある. しかし技術力が追いつかない. Haskell を勉強したい理由の 1 つでもある.

そのうち数値計算も Haskell でやってみたい. 当分は Python+Anaconda で scipy, numpy, matplotlib あたりを使って頑張るけれども.

式の中で文章を入れて改行させたいときはparboxかminipage

遥か昔の名残で今は使わない方がいいコマンドなのかもしれないが, とりあえず2017-05-20時点の私の環境で動いた記録.

それはそうとちょっと聞くとすぐにコメントもらえるTwitterは本当に尊い. Twitterがなくなったらリアルに相当困る気しかしない.

parbox

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
\begin{align}
{\mathcal{O}}
=
{\left\{U \in P(X)
\, \middle| \,
\parbox{18.5em}
{$a \in U$かつ$X$の点列${(x_n)_{{n \in {\mathbb{N}}}}}$が$a$に収束するならば,
${\left\{{n \in {\mathbb{N}}}
\, \middle| \,
x_n \notin U\right\}}$は有限集合である}\right\}}.
\end{align}

minipage

\begin{align} {\mathcal{O}} = {\left{U \in P(X) \, \middle| \, \begin{minipage} {18.5em} $a \in U$かつ$X$の点列${(x_n)_{{n \in {\mathbb{N}}}}}$が$a$に収束するならば, ${\left{{n \in {\mathbb{N}}} \, \middle| \, x_n \notin U\right}}$は有限集合である\end{minipage}\right}}. \end{align}

補足

本来はもう少しまともな書き方をしているけれども, 自分のコマンド定義をしているので, pandocを適当に使って適当に変換したコードを載せている.

手元のTeXでは変換されることを確認したがMathJaxでは適切に変換されないようだ.

関連ツイート集

その1: y.さんから

このy.さん, 黒木さんがTeXのやつので紹介しているy.さんだろうか. フォローされていると思わなかった.

その2: 石塚さんから

その3: MarriageTheoremさん

数学的な転置の記法を取るときに$t$を適切な位置に置きたい

嫌な出力とほしい出力例

嫌な出力とほしい出力例

結論

このツイートで教えて頂いた. 次のようなコマンドを定義すればよい.

1
\newcommand{\setSymbolUpLeft}[2]{{\vphantom{#1}}^{#2}{#1}}

これで次のように書くと(私の)意図通りになる.

1
2
\setSymbolUpLeft{\circ}{\sum_{ k = 0 }^{ N - 1 } ...}
\setSymbolUpLeft{\circ}{\rbk{\exp \sqbk{\int_0^1 f(x) \dx}}}

応用

元素記号で左上に書きたいときにも使えるだろう. これは次のようにセットすればよい.

1
2
\newcommand{\setSymbolDownLeft}[2]{{\vphantom{#2}}_{#1}{#2}}
\setSymbolDownLeft{1}{H}

疑問

それこそ化学で元素記号を書くとき左下につけたい場合が出てくる. 元素記号で下に伸ばす必要があるのかわからないが, 下に伸ばしたい場合はどうすればいいのだろうか?

イメージ画像

はじめに貼った通り. これは上記コマンド定義のもとで次のコードで作った.

1
2
3
4
5
6
\begin{align}
\text{嫌な出力: }&
{}^\circ \rbk{\exp \sqbk{\int_0^1 f(x) \dx}}. \\
\text{ほしい出力: }&
\setSymbolUpLeft{\circ}{\rbk{\exp \sqbk{\int_0^1 f(x) \dx}}}.
\end{align}

経緯

いろいろあって中村徹『超準解析と物理学』を読んでいた. これで標準化写像としてまさに数学スタイルの転置のように左上に$\circ$をつけていた. これをどう書けばふと気になった. これまで転置の記号で困っていたこともあってツイートしてみたら教えてもらった. ありがたい.

余談: 転置の記号

私は基本的に齋藤正彦『線型代数入門』で育った. この本が左上つきの$t$で転置を表していたのでそれを使っている. 物理では右上に$T$を使うと思う. このページでは次のような記号群が紹介されている.

1
2
3
4
5
6
7
\begin{align}
A^T \\
A^\mathrm{T} \\
A^\mathsf{T} \\
A^\intercal \\
A^\top
\end{align}

行列の転置を書きたくなるたいていの数学の文脈でかぶらない記号は$\top$だろう. ただ明らかに他の用途がある記号を流用するのも気持ち悪い. 私の観測範囲ではサンセリフ体は使う機会は圏の記号くらいで比較的少なく, 私の用途からすると, 転置を右上つきにするならサンセリフ体にするだろうか.

私は現代数学探険隊といった数学コンテンツを作っている. ここでまさに上のような転置の記号がいい感じに表示されない問題に出会い, 一時期転置の記号を書き換えることも検討していた. ただ, 大量にある上, 微妙な調整が必要になるから面倒だと思っていたところで, 今回いい感じに表示されている事例を見つけたので虚空に向かって質問したら即解決したという話.

ソースコードを張る

  • シンプルにはverbatim環境を使えばよい
    • 長い行を折り返してくれないので注意する
    • 日本語コメントなら折り返してくれる?
  • lstlisting, jlstlistingパッケージを使う手もある
    • 長い行を折り返してくれないので注意する
1
\lstinputlisting[caption=yaml to bib, label=myref2bib_bayes]{myref_to_bib.py}}

ダッシュ記号つきの和の記号を定義したい: 元素記号は別

出したい記号

次の画像のような記号を出力したい.

ダッシュ記号つきの和

結論

次の定義を追加すればいい.

1
\DeclareMathOperator*{\primedsum}{\sideset{}{^{\prime}}\sum}

これで次のように書けば上の記号を出力できる.

1
\primedsum_{k=1}^\infty

元素記号はmhchemパッケージを使って書くべきらしい. これはTeXによる化学組版を参照すること. \sidesetで書けると思ったら書けなかったので, 自分用にタイトルに入れておいた.

説明

これも結論から書くと次のページを参考にすればいい.

上の定義ではこのページとは少し変えて\DeclareMathOperator*を使っている.

ディンキン図形のコマンド

書きたい記号のTeXコマンドを手書きで探す

時々使うだけでよく忘れる記号まとめ

  • 色々な矢印
  • a \mid b: $a$は$b$で割り切れる.
  • a \nmid b: $a$は$b$で割り切れない.
  • \varinjlim, `\varprojlim: 下に矢印がついた帰納的極限・射影的極限.
  • P \iff Q: 同値
  • P \implies Q
  • P \impliedby Q
  • \parbox{17.0em}{文章}: 式中の段組
  • \overset{\text{上に文}}{\iff}: 記号の上に文字
  • x \lesssim y: 超準解析, フォン・ノイマンの射影の順序
  • x \gtrsim y: 超準解析, フォン・ノイマンの射影の順序
  • x \propto y: 比例
  • x \simeq y:
  • \simeq:
  • \cong:
  • \equiv:
  • \hookrightarrow: 埋め込みなどで使う曲がった矢印
  • \curverightarrow: 作用を表す曲がった矢印
  • \curlyeqprec: ⋞
  • \preccurlyeq: ≼
  • \rightarrowtail: ホモロジー代数でよく出てくる単射の記号
  • \twoheadrightarrow: ホモロジー代数でよく出てくる全射の記号
  • \xleftarrow{a}: 左向き矢印の上に文字列を挿入
  • \xleftarrow[a]{}: 左向き矢印の下に文字列を挿入
  • \xrighttarrow{a}: 右向き矢印の上に文字列を挿入
  • \xrighttarrow[a]{}: 右向き矢印の下に文字列を挿入
  • 内部積
    • \newcommand{\iprod}{\mathbin{\lrcorner}}

文章内で参照する式だけに数式番号をつける

「文章内で参照する式だけに数式番号をつけるように」 \usepackage{mathtools} \mathtoolsset{showonlyrefs} で実現できますね。 equation,alignなどに * をつける・つけないの判断を入力時にする必要がないので楽です。

複数行に対して一つの式番号を割り当てる

次のようにequationの中にalignalignedを入れる.

1
2
3
4
5
6
\begin{equation}
\begin{aligned}
a &= b, \\
c &= d
\end{aligned}
\end{equation}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
\begin{equation}
\begin{aligned}
\tnormsuff{\calS(f; W+z'V, S+zT)}{\alpha F}
&\leq
\frac{\alpha}{\alpha - 2} \tnormsuff{f}{\alpha F}, \\
\normsuff{\Omega(W+z'V, S+zT)}{\alpha F}
&\leq
\frac{\alpha}{\alpha - 2} \normsuff{W+z'V}{\alpha F}
\leq
\frac{\alpha}{\alpha - 2} \frac{1}{3D}
\end{aligned} % (II.2)
\end{equation}

文字の上下に添字をつける

  • $g^1_2$のような添字ではない
  • URL
  • \overset\undersetstackrelを使う
  • \overset{\text{def}}{\Longleftrightarrow}, \stackrel{\text{def}}{=}のように書けばよい

TeXの記号表

記号の一覧をまとめてみた. 時々使うのだがよく忘れるので自分用でもある. 他にもあるがとりあえずこんなところだろうというのをまとめた. 花文字とか筆記体, ギリシャ文字・ドイツ文字をまとめたページは次のリンクから.

諸事情あって TeX コマンドからはバックスラッシュを抜いている. 注意してほしい.

記号 TeX コマンド
$\S$ S
$\P$ P
$\copyright$ copyright
$\pounds$ pounds
$\pm$ pm
$\mp$ mp
$\times$ times
$\div div
$\ast$ ast
$\star$ star
$\circ$ circ
$\bullet$ bullet
$\cap$ cap
$\cup$ cup
$\sqcap$ sqcap
$\sqcup$ sqcup
$\vee$ vee
$\wedge$ wedge
$\setminus$ setminus
$\wr$ wr
$\diamond$ diamond
$\dagger$ dagger
$\ddagger$ ddagger
$\amalg$ amalg
$\bigtriangleup$ bigtriangleup
$\bigtriangledown$ bigtriangledown
$\triangleleft$ triangleleft
$\triangleright$ triangleright
$\lhd$ lhd
$\rhd$ rhd
$\unlhd$ unlhd
$\unrhd$ unrhd
$\uplus$ uplus
$\oplus$ oplus
$\ominus$ ominus
$\otimes$ otimes
$\oslash$ oslash
$\odot$ odot
$\bigcirc$ bigcirc
$\cdot$ cdot
$\leq$ leq
$\geq$ geq
$\prec$ prec
$\succ$ succ
$\preceq$ preceq
$\succeq$ succeq
$\ll$ ll
$\gg$ gg
$\subset$ subset
$\supset$ supset
$\subseteq$ subseteq
$\supseteq$ supseteq
$\sqsubset$ sqsubset
$\sqsupset$ sqsupset
$\sqsubseteq$ sqsubseteq
$\sqsupseteq$ sqsupseteq
$\in$ in
$\ni$ ni
$\vdash$ vdash
$\dashv$ dashv
$\equiv$ equiv
$\models$ models
$\sim$ sim
$\perp$ perp
$\simeq$ simeq
$\mid$ mid
$\asymp$ asymp
$\parallel$ parallel
$\approx$ approx
$\bowtie$ bowtie
$\cong$ cong
$\Join$ Join
$\neq$ neq
$\smile$ smile
$\doteq$ doteq
$\frown$ frown
$\leftarrow$ leftarrow
$\longleftarrow$ longleftarrow
$\Leftarrow$ Leftarrow
$\Longleftarrow$ Longleftarrow
$\rightarrow$ rightarrow
$\longrightarrow$ longrightarrow
$\Rightarrow$ Rightarrow
$\Longrightarrow$ Longrightarrow
$\leftrightarrow$ leftrightarrow
$\longleftrightarrow$ longleftrightarrow
$\Leftrightarrow$ Leftrightarrow
$\Longleftrightarrow$ Longleftrightarrow
$\mapsto$ mapsto
$\longmapsto$ longmapsto
$\hookleftarrow$ hookleftarrow
$\hookrightarrow$ hookrightarrow
$\leftharpoonup$ leftharpoonup
$\rightharpoonup$ rightharpoonup
$\leftharpoondown$ leftharpoondown
$\rightharpoondown$ rightharpoondown
$\rightleftharpoons$ rightleftharpoons
$\leadsto$ leadsto
$\uparrow$ uparrow
$\Uparrow$ Uparrow
$\downarrow$ downarrow
$\Downarrow$ Downarrow
$\updownarrow$ updownarrow
$\Updownarrow$ Updownarrow
$\nearrow$ nearrow
$\searrow$ searrow
$\swarrow$ swarrow
$\nwarrow$ nwarrow
$\aleph$ aleph
$\prime$ prime
$\forall$ forall
$\infty$ infty
$\hbar$ hbar
$\emptyset$ emptyset
$\exists$ exists
$\Box$ Box
$\imath$ imath
$\nabla$ nabla
$\neg$ neg
$\Diamond$ Diamond
$\jmath$ jmath
$\surd$ surd
$\flat$ flat
$\triangle$ triangle
$\ell$ ell
$\top$ top
$\natural$ natural
$\clubsuit$ clubsuit
$\wp$ wp
$\bot$ bot
$\sharp$ sharp
$\diamondsuit$ diamondsuit
$\Re$ Re
$\l$ l
$\backslash$ backslash
$\heartsuit$ heartsuit
$\Im$ Im
$\angle$ angle
$\partial$ partial
$\spadesuit$ spadesuit
$\mho$ mho
$\propto$ propto
$\sum$ sum
$\bigcap$ bigcap
$\bigodot$ bigodot
$\prod$ prod
$\bigcup$ bigcup
$\bigotimes$ bigotimes
$\coprod$ coprod
$\bigsqcup$ bigsqcup
$\bigoplus$ bigoplus
$\int$ int
$\bigvee$ bigvee
$\biguplus$ biguplus
$\oint$ oint
$\bigwedge$ bigwedge
${$ {
$}$ }
$\lfloor$ lfloor
$\rfloor$ rfloor
$\lceil$ lceil
$\rceil$ rceil
$\langle$ langle
$\rangle$ rangle
$\alpha$ alpha
$\beta$ beta
$\gamma$ gamma
$\delta$ delta
$\epsilon$ epsilon
$\zeta$ zeta
$\eta$ eta
$\theta$ theta
$\iota$ iota
$\kappa$ kappa
$\lambda$ lambda
$\mu$ mu
$\nu$ nu
$\xi$ xi
$o$ o
$\pi$ pi
$\rho$ rho
$\sigma$ sigma
$\tau$ tau
$\upsilon$ upsilon
$\phi$ phi
$\chi$ chi
$\psi$ psi
$\omega$ omega
$\Gamma$ Gamma
$\Delta$ Delta
$\Theta$ Theta
$\Lambda$ Lambda
$\Xi$ Xi
$\Pi$ Pi
$\Sigma$ Sigma
$\Upsilon$ Upsilon
$\Phi$ Phi
$\Psi$ Psi
$\Omega$ Omega
$\varepsilon$ varepsilon
$\vartheta$ vartheta
$\varpi$ varpi
$\varrho$ varrho
$\varsigma$ varsigma
$\varphi$ varphi
$\hat{a}$ hat{a}
$\acute{a}$ acute{a}
$\bar{a}$ bar{a}
$\dot{a}$ dot{a}
$\check{a}$ check{a}
$\grave{a}$ grave{a}
$\vec{a}$ vec{a}
$\ddot{a}$ ddot{a}
$\breve{a}$ breve{a}
$\tilde{a}$ tilde{a}
$\ae$ ae
$\AE$ AE
$\oe$ oe
$\OE$ OE
$\aa$ aa
$\AA$ AA
$\l$ l
$\L$ L
$\o$ o
$\O$ O
$\ss$ ss
$\i$ i
$\j$ j