algorithmパッケージでもcaptionに一貫性を持たせよう
今回はアルゴリズムを LaTeX レポートや LaTeX 論文に載せたい人向けの記事です*1.
理工系あるいは情報系の学生は,日夜 LaTeX レポートに追われているといいます [要出典].特に情報系の学生の場合には,LaTeX レポートにプログラミングのコードやアルゴリズムの説明を載せる必要があることが少なくありません.
今回は,いくつかあるアルゴリズム記述系パッケージの中でも algorithm.sty と algpseudocode.sty を取り上げ,そこに caption を付けた場合に生じる問題について取り上げます.
algorithm.sty と algpseudocode.sty
アルゴリズムを LaTeX で記述する手助けとなるパッケージはいくつか知られています.今回はその中でも algorithm.sty と algpseudocode.sty を取り上げます.なお,それぞれのパッケージの頒布元は以下の通りです*2.algorithm パッケージ: https://ctan.org/pkg/algorithms
algpseudocode パッケージ: https://www.ctan.org/pkg/algorithmicx *3
今回の記事ではこれらのパッケージの基本的な使い方の紹介は省略します.付属の文書*4や別の記事を参照ください.
取り上げる問題点
何も考えずに algorithm パッケージを使うと以下のようなコードを書くことになります.コードの下に出力される結果も示します.\documentclass[uplatex,dvipdfmx,twocolumn]{jsbook} \usepackage{algorithm,algpseudocode} \begin{document} \chapter{はじめに} \section{図や表を挿入する} \begin{figure}[htbp] \caption{線分AB} %(そのほかは省略) \end{figure} \begin{table}[htbp] \caption{買い物のメモ} %(そのほかは省略) \end{table} \section{アルゴリズムを挿入する} \begin{algorithm}[htbp] \caption{典型的なアルゴリズム} %(そのほかは省略) \end{algorithm} \end{document}
inconsistency を愛していそうなコードですね……具体的には caption の以下の箇所に一貫性がありません.
次の章で,一つずつこれらを解決していきましょう.
なお,手っ取り早く完成したコードを見たい人は記事の終わりまで飛んでください.
解決法
「Algorithm」を「アルゴリズム」に変更
これで解決します.\renewcommand{\ALG@name}{アルゴリズム}
ただし,この記述は \makeatletter と \makeatother で挟まれた位置でしてください*5.
アルゴリズムの通し番号にチャプター番号などを付記する
これについては algorithm.sty を読み込むときにオプションをつければ解決します.オプション引数に代入したカウンタと連動して通し番号が管理されます. (以下の例をご覧ください.)\usepackage[chapter]{algorithm} % chapterごとに通し番号がリセット \usepackage[section]{algorithm} % sectionごとに通し番号がリセット
通し番号と凡例の文章との間にスペースを挿入
新しく caption パッケージを読み込みます.何やらエラーメッセージが吐かれますが,大丈夫なようです.\usepackage{caption} \captionsetup[plain]{labelsep=quad} \captionsetup[boxed]{labelsep=quad} \captionsetup[ruled]{labelsep=quad}
類似した記述が三つあるのは今回のパッケージが上の三つの float 環境のすべてを使用しうるためです.特に何もいじっていない場合は最下の「ruled」だけを書けば十分です.ちなみにこの \captionsetup はちゃんと三つを独立に書く必要があります.
しかし,このままだと次の図のように図や表も設定が変わってしまいます.
こうなる理由は簡単で,caption パッケージの設定はすべての float タイプ*6に適用されるからです.これを修正するためには以下を追加します.
\captionsetup{labelsep=quad} %オプション引数がないことに注意
「図」と「表」のほうも太字に変更
最後に若干の修正を加えます.先ほど,ラベルの区切りを指定したところに「labelfont=bf」を指定すれば終わりです.これで冒頭に挙げた問題点は全て直したことになります.
完成コード
実際に最終版のコードと出力結果を掲載しましょう.\documentclass[uplatex,dvipdfmx,twocolumn]{jsbook} \usepackage[chapter]{algorithm} \usepackage{algpseudocode} \usepackage{caption} \makeatletter \renewcommand{\ALG@name}{アルゴリズム} \captionsetup{labelfont=bf,labelsep=quad} \captionsetup[plain]{labelfont=bf,labelsep=quad} \captionsetup[boxed]{labelfont=bf,labelsep=quad} \captionsetup[ruled]{labelfont=bf,labelsep=quad} \makeatother \begin{document} %%%% ここは変更していない %%%% \end{document}
これでcaptionに一貫性が戻りました.
追記 (2020-01-16)
caption.sty を読み込んだときのエラーメッセージについてです.caption.sty の説明文書には,次のような記述があります.The caption package v3.0 did not support any document classes other than the standard LaTeX ones: article, report, and book. Therefore the default settings used to be fixed, but now the caption package supports more classes, therefore they are now set in dependence on the document class used.
したがって,この記述を見る限りは,問題は解決されていると思われます.
*1:ここでは「LaTeX レポート」や「LaTeX 論文」は LaTeX を用いて書かれたレポートや論文を指しています.
*2:パッケージの内部でいくつかの別のパッケージを必要としますのでご注意ください.
*3:陽に呼び出すのは algpseudocode パッケージだけですが,このパッケージの内部でいろいろ呼び出されるので,頒布元の URL にある sty ファイルは全部ダウンロードすることをおすすめします.
*4:ターミナルで「texdoc PACKAGE_NAME」を入力すると開けます.
*5:命令に@を使うときに必要な処理です.なお,sty ファイルではこの処理は不要です.
*6:figure や table のこと.algorithm パッケージが作る algorithm 環境も float タイプの一つ.algorithm パッケージでは内部で float パッケージというものを読み込んで,そこに定義されている「plain」「boxed」「ruled」の三種類の float を利用します.そのため,ここではこれら三つも float タイプの一つになります.
*7:labelsep には「period」や「newline」などほかにも種類があります.詳しくはパッケージの説明文書などを参照ください.また,新たに区切り方を設定することも可能です.その場合はまず「\DeclareCaptionLabelSeparator{periodspace}{.\ }」のように新たなセパレータを定義します.そしてその後に「\captionsetup{labelsep=periodspace}」などと通常通りに設定します.