ト部蛸焼のブログ

日頃知ったことをアウトプットするためのブログ

LaTeXに関する雑多なメモ

この記事はLaTeXに関する備忘録です。記事になっていない項目の中には再現性がないものが含まれる可能性があります。予めご了承ください。なお,括弧内は追記した日付を表しています*1

文書を書く前に

パッケージのインストール時にすること(2021.04.13)

styファイルを新たに追加する際には,そのファイルの存在をLaTeX側に知らせる必要がある。これはターミナルなどで「sudo mktexlsr」を実行することで実現できる*2

自作パッケージを作る場合(2021.09.18)

自分でstyファイルを作成する方法を知りたい場合は以下の(他の方が執筆なさった)記事が参考になります。

参考記事: LaTeXでパッケージ(スタイルファイル)を自作する - Qiita

LaTeX2eの基本部分

styファイル読み込み時のオプションについて(2021.06.20)

\documentclassで指定したオプションは\usepackageにも引き継がれる[1]。したがって,以下に示す3つのコードは等価になる。

% Code 1 %
\documentclass[uplatex]{jsarticle}
\usepackage[dvipdfmx]{hyperref}

% Code 2 %
\documentclass[uplatex, dvipdfmx]{jsarticle}
\usepackage[dvipdfmx]{hyperref}

% Code 3 %
\documentclass[uplatex, dvipdfmx]{jsarticle}
\usepackage{hyperref}

コマンド定義について

\newcommand,\def,\DeclareMathOperator(2019.07.14)
記事(自作コマンドが作る快適なLaTeX環境 - ト部蛸焼のブログ)を書いた。もっと多様なコマンド定義をしたい場合はxparseパッケージを利用する(別の記事(\NewDocumentCommandによる自由な引数設定 - ト部蛸焼のブログ)を参照)。

コマンド内で改行を使う方法(2021.04.13)
人は普段から改行を\parで行う*3のだから\parを使えば良い。

“文数両用”のコマンドを作る方法(2021.06.20)
数式モードの中でも外でも同じ呼び出し方で使えるコマンドを作りたいとする。例えば,「 \textsf{P}_1」と出力するコマンドは,数式モードからだと単に「\textsf{P}_1」で良いが,そうでない場合は「$\textsf{P}_1$」(半角ドルだとはてなブログ上でも数式モードに入ってしまうため全角ドルで書いていますが,LaTeXのコードでは半角ドルを使います。)というように一度数式モードの中に入る必要がある。この状況をうまく克服して,数式モードの中からも外からも単一のコマンドによって$\textsf{P}_1$を呼び出せるようにしたいとする。このような場合,\ensuremathを使ってコマンドを定義すればよい[1]。

% LaTeX2eノーマルによる
\newcommand{\hoge}{%
  \ensuremath{\textsf{P}_1}%
}%
% xparseによる
\NewDocumentCommand{\hoge}{}{%
  \ensuremath{\textsf{P}_1}%
}%

コマンド名の取得—\csname ~ \endcsname—(2021.09.18)
詳細はTeX入門/マクロの作成 - TeX Wikiを参照のこと。


カウンタ

カウンタの値によって処理を変える(2019.10.14)
記事(カウンタとif文でうまいこと問題番号を付ける - ト部蛸焼のブログ)を書いた。カウンタの値が1のとき*4だけ処理を変える方法は以下の通り。

\newcounter{qnum}%
\newcommand{\toi}{%
  \refstepcounter{qnum}% qnum += 1
  \ifnum \value{qnum}>1%
    % qnum > 1 のときの処理 %
  \else%
    % qnum ≦ 1 のときの処理 %
  \fi%
}

カウンタの表示形式(2021.04.14)
通常,カウンタはアラビア数字で「1,2,3」と出力されるが,これはローマ数字や英字に変更できる。変更のしかたを以下に示す。

% 「qnum」というカウンタが既に定義されているとする %
\arabic{qnum} % 1, 2, 3
\roman{qnum}  % i, ii, iii
\Roman{qnum}  % I, II, III
\alph{qnum}   % a, b, c
\Alph{qnum}   % A, B, C

テキストモードの特殊なコマンド

上付き文字と下付き文字(2021.06.20)
上付き文字や下付き文字は数式モードに入らずとも使用できる。上付き文字には\textsuperscriptコマンドを,下付き文字には\textsubscriptコマンドを使えばよい。ただし,これらは行を跨いでの出力はできないため注意[1]。

リガチャ禁止(2021.06.20)
習慣的にリガチャをしない単語が存在する*5。このようなとき,リガチャを防ぐには「\textcompwordmark」を挿入すればよい[1]。

陽にスペースを出力する(2021.06.20)
プログラミング言語によるサンプルコードを書くときに,英字スペースの有無を陽に示す記号「␣」を書くことがある。この記号は\textvisiblespaceによって出力できる[1]。

簡易的な箱(2021.06.20)

\makebox[<width>][<pos>]{<text>}
\framebox[<width>][<pos>]{<text>}
\parbox[<pos>][<height>][<inner-pos>]{<width>}{<text>}

\makeboxと\frameboxは,widthに指定した幅,posで指定した位置で,textを箱に入れる。makeboxの場合には枠は出力されず,frameboxの場合には枠も出力される。

widthには,\height(ベースラインより上の高さを表す),\depth(ベースラインより下の高さ(深さ)を表す),\totalheight(\heightと\depthの合計の高さを表す),\width(幅と同じ分の高さを表す)といったコマンドを使うこともできる。また,posはl(左詰めを表す),r(右詰めを表す),s(均等割り付けを表す)で指定する。

\parboxは,まずposに指定した位置に,heightとwidthで指定した大きさの箱を考え,その内部にtextを表示させる。このときtextと箱の位置関係をinner-posで指定した設定で定める。inner-posが省略された場合はposと同じに設定される。

posやinner-posはt(上揃えを表す),b(下揃えを表す),c(中央揃えを表す),s(均等割り付けを表す)で指定する。

f:id:tobetakoyaki:20210620172933j:plain:w250
parboxのイメージ

詳細な説明は別の文献[1]を参照のこと。

文章のハイライト(2020.07.26)

f:id:tobetakoyaki:20200724005047p:plain
文章のハイライトのイメージ

上の図の「準同型性」のように,文字の背景に色を付けて,さらに文字の下に説明を付けるようにしたいときの方法を,この記事(LaTeX文書で文字列をハイライト&真下にキャプションしてみたい - ト部蛸焼のブログ)で紹介した。

表(tabular)のセル間隔を変更する(2021.04.13)

tabular環境による表は列と列の間の幅を「@{~~}」で~~に指定することができる。

\begin{tabular}{r@{.}l@{\quad}l}
  3 & 5 & 最大 \\
  1 & 1 & 最小 \\
  2 & 5 & \\
\end{tabular} 

list環境(2021.05.02)

参考記事


algorithm,algpseudocode

キャプションの出力をいじる(2020.01.15)

caption.styを用いてキャプションの形式を変えたいときの方法。これについては記事(algorithmパッケージでもcaptionに一貫性を持たせよう - ト部蛸焼のブログ)を書いた。

RequireやEnsureのようなものを増強する(2021.06.17)

algpseudocode.styではalgorithm環境の内部で使うとその冒頭にアルゴリズムの説明を挿入することができるコマンド(RequireやEnsureなど)がデフォルトで定義されている。これと類似したコマンドを新規に作成したい場合,次に示すように\algnewcommandを使って新しくコマンドを定義すればよい*6。出力のイメージは下図の「Input」や「Output」を参照されたい。

\algnewcommand\algorithmicinput{\textbf{Input}}
\algnewcommand\algorithmicoutput{\textbf{Output}}
\algnewcommand\Input{\item[\algorithmicinput]}
\algnewcommand\Output{\item[\algorithmicoutput]}

出力は以下の図の通り.

f:id:tobetakoyaki:20210617015000p:plain:h350
冒頭に「Input」と「Output」を追加してアルゴリズムの機能を説明させた様子

beamer

パッケージの基本(2020.12.08)

記事(Beamerによるスライドの体裁を整える - ト部蛸焼のブログ)を書いた。以下のような小技を書いている。

  • フォントをいじる
  • テーマの配色をいじる
  • フレーム番号の大きさをいじる
  • フレームタイトルのフォントをいじる
  • 脚註番号をいじる

特定のフレームに対してmini frameを生成しない方法(2021.04.24)

特定のフレームに関する"mini frame" *7 の出力を停止したい場合の対処法。ここに載っている→How to remove some pages from the navigation bullets in Beamer? - TeX - LaTeX Stack Exchange

これを利用すると,例えば以下のコードのように*8,\AtBeginSection*9で挿入されるフレームをnavigation barのmini frameの数に含めないという設定が可能になる。

% 引用先のサイトにある以下の2つのコマンドを定義しておく
% - \beamer@writeslidentry@miniframesoff
% - \miniframesoff

\AtBeginSection{%
  {% 【A】
    \miniframesoff%
    \begin{frame}\frametitle{目次}%
      \tableofcontents[currentsection]%
    \end{frame}%
  }% 【A】
}%

hyperref

\texorpdfstring(2021.09.18)

hyperrefパッケージを使用する場合,章見出しに数式を用いると警告が出されます。PDFのしおりに使えない文字列を使用していることが原因のようで,これを回避するコマンドに\texorpdfstringがあります。例えば「$\zeta(2)$の値」というタイトルのsectionを作りたい場合は以下のように代替テキストと一緒に記述します。

% 「$\zeta(2)$の値」というタイトルにしたい
%
% 警告が出る例
\section{$\zeta(2)$の値} %
%
% \texorpdfstring{TeX用}{PDFのしおりなど用}
\section{\texorpdfstring{$\zeta(2)$}{ζ(2)}の値} % 

mathtools

\vdotswithin(2021.10.26)

\vdots( \vdots)の出力される位置を良い位置に合わせてくれるコマンド。\vdotswithinと\shortvdotswithinの2種類がある。

f:id:tobetakoyaki:20211026165011p:plain:w500
\vdotsと\vdotswithinの比較

tcolorbox

枠のない箱(2021.04.13)

tcbsetに相当する位置に「frame hidden」または「frame empty」を入れればOK。

tikz

表記(2021.04.13)

正しくはTikZ*10。「TikZ ist kein Zeichenprogramm」の略*11。これはドイツ語であり,日本語では「TikZはドローツールではない」という意味になる。「kein」は否定の意味を出すため強調されて斜体になっている。

改行(2021.04.13)

TikZで描画するノードに文字を入力する場合,nodeのオプションとして「align」を指定すると改行が可能になる。alignにはleft/center/rightの3種類を設定できる。

\begin{tikzpicture}%
  \node[align=left] at (0,0) {1行目\\2行目};%
\end{tikzpicture}%

overblace,underblace(2021.04.13)

underblaceは\underblaceに対応。出力例は以下の通り。

%% プリアンブルにて %%
\usetikzlibrary{decorations.pathreplacing}%

%% 使いたい箇所にて %%
\draw[decoration={brace,amplitude=0.5em,aspect=0.1,raise=-3pt},decorate] (0,0) -- (2,2);%

decorationのキーについて:

  • brace (括弧) 括弧を出すよという合図
  • amplitude (振幅) 括弧の伸びる方向と垂直方向にどれだけ幅を持たせるか default = 2.5pt
  • aspect (比) 括弧のちょびんと出ているところの出力位置を指定 ( 0 \le \mathrm{aspect} \le 1が理想) default = 0.5
  • raise 括弧をどれだけ離すか

なお,最後のdecorateがないとdecorationの中身の機能は活きない。

aspect=0.5のときには以下で括弧の「つまみ」部分に文字が出力される。

\draw [decoration={brace,amplitude=0.5em,raise=-3pt},decorate] (0,0) -- node [below]{\footnotesize 10 bits} (1,0);%

titlesec(2021.04.10)

記事(titlesecパッケージで見出しの書式を変える - ト部蛸焼のブログ)を書いた。そのときの参考コード(Overleaf版)はここ→Overleaf, Online LaTeX Editor

xparse(2020.04.26)

記事(\NewDocumentCommandによる自由な引数設定 - ト部蛸焼のブログ)を書いた。



参考文献

[1] "LaTeX 2e for authors". LaTeX 3 Project Team. 2020/5/25 published ver.

*1:過去記事の紹介になっているものはその記事の公開日を表示しています。

*2:これにより「ls-R」と呼ばれる「ファイルの一覧表」を更新することができ,いま新たに追加したファイルの存在をLaTeX側に知らせることができます。参考:LaTeX入門/各種パッケージの利用 - TeX Wiki

*3:通常の文章では空行を挟むことによっても改行はできる。コマンド定義においては空行を挟むことによっては改行ができない場合がある。

*4:ただしこのカウンタは1以上の自然数を出力することしか想定しないものとする。

*5:例えば「shelfful」という語は「shelf + full」という語の構成を強調するため,リガチャを行わない。

*6:サンプルコード中のコマンド名はRequireやEnsureのものを参照した。

*7:ナビゲーションバー (navigation bar) の下でいま発表しているフレームの全体における位置を示す(デフォルトでは)円形のシンボルのこと。

*8:このコードでは【A】で示したグルーピングによって,コマンド定義の数を減らすことができる。より具体的にはHow to remove some pages from the navigation bullets in Beamer? - TeX - LaTeX Stack Exchangeのうち\beamer@writeslidentry@miniframesonと\miniframesonの2つを定義する必要がなくなっている。

*9:このコマンドは\section{}をコードに挿入するたびにその直後に決まって表示される定型スライドを設定するために用いられる。例えば新しいsectionに移る際に,これから発表するsectionだけをハイライトしたスライドを出力するという設定をすることができる。なお,このコマンドは上書きする形で定義がなされる。

*10:この節以外では面倒なので「TikZ」と書く。許してほしい。

*11:このように正式名の頭文字を繋げて略語とした「頭字語」(acronym)の中でも,正式名にその略語自身が登場するようなものを「再帰的頭字語」(recursive acronym)というらしい。