新規コマンドの追加
\makeatletter
\newcommand*{\myCaption}[1]{{\def\@captype{figure}\caption{#1}}}
\newcommand*{\myLabel}[1]{{\def\@captype{figure}\label{#1}}}
\makeatother
上記のコマンドをプリアンブルに加えます.
図のキャプションを使いたいときは\myCaption{キャプション名}
とします.
図のラベルを入れたいときは\myLabel{ラベル名}
とします.
コマンドの解説
安易にコマンドを追加したくない人のために,コマンドの解説を書きました.
makeatletter
とmakeatother
makeatletter
は,新規にコマンドを追加するときの最初に記述するものです.
makeatother
は,新規にコマンドを追加するときの最後に記述するものです.
\newcommand*{}[]{{}}
このコマンドによって新規にコマンドを追加することができます.内容は以下の通りです.
\newcommand*{\新規の命令名}[引数の個数]{{命令の内容}}
新規の命令名について
ここにはユーザが指定する新規の命令名を記述します.
すでに登録されている命令と同じ名前を記述するとエラーになります.
引数について
引数とは,コマンドと一緒に{}
で入力するもののことです.
figure
内のcaption
コマンドの場合,
\caption{1次関数のグラフ}
と記述しますが,この「1次関数のグラフ」というのが引数になります.
\newcommand*
内の[]
の中には,その引数の数を記述します.
引数には入力順序があり,#数字
で数字
番目の引数を扱うことができます.
引数が2つの場合を考えてみます.
例えば,以下のように新規にコマンドを登録した場合,
\newcommand*{\myString}[2]{{\color{#2}\Large #1}}}
引数は2つ指定しているため,コマンドを使用するときは,
\myString{あいうえお}{blue}
というように,引数に応じて{}
を右に追加します.
命令内容について
ここにはユーザが指定する新規の命令の内容を記述します.
今回は図のキャプションやラベルを好きな場所で使えるようにするために,\def@captype{figure}
コマンドを使います.
このコマンドは,その行に対してfigure
コマンド内のコマンドを使えるようにするために記述します.他にも,table
コマンド内のコマンドを使いたいときは\def@captype{table}
と記述します.
ここまでで,以下の通りに記述することもできます.
% 引数なし
\makeatletter
\newcommand*{\myCaption}{{\def\@captype{figure}}}
\newcommand*{\myLabel}{{\def\@captype{figure}}}
\makeatother
図のキャプションを使いたいときは\myCaption\caption{キャプション名}
とします.
図のラベルを入れたいときは\myLabel\label{ラベル名}
とします.
しかし,新規にコマンドを登録したのにも関わらず,さらに\caption{}
や\label{}
として追記するのでは効率がよくないため,新規のコマンドの登録時に\caption{}
や\label{}
まで含めておいた方がいいと思われます.
\newcommand*
について
今回紹介したコマンドでは\newcommand*
と記述していますが,\newcommand
と記述しても大丈夫です.
違いは,引数に改行を許可するかどうかです.
\newcommand
の場合は引数に改行があってもコンパイルは通りますが,\newcommand*
の場合は引数に改行があるとコンパイルが通りません.ユーザの意図しない改行によって文書がおかしくならないように,予め\newcommand*
にしておくことをおすすめします.
\newcommand{\myString}[1]{{#1}}
...
これは\myString{あいう
えお}です.
% OK
\newcommand*{\myString}[1]{{#1}}
...
これは\myString{あいう
えお}です.
% エラー
\newcommand*
内の{{}}
について
命令は外側の{}
に加えて,内部にも{}
を加えることをおすすめします.
例えば,以下のようにコマンドを登録した場合,
\newcommand*{\myString}[1]{\Large #1} % {}がない
これを実際の文書で書くと,命令内容は以下の通りに解釈されていることになります.
この\myString{関数}は一次関数である.
↑
↓
この\Large 関数は一次関数である.
つまり,コマンド以降の文字すべてが\Large
コマンドによって大きくなってしまうということです.
ここで,命令内容を{}
でさらに囲んで登録すると,
\newcommand*{\myString}[1]{{\Large #1}} % {}を追加した
これを実際の文書で書くと,命令内容は以下の通りに解釈されていることになります.
この\myString{関数}は一次関数である.
↑
↓
この{\Large 関数}は一次関数である.
となり,「関数」という文字のみに\Large
コマンドが適用されていることが分かります.