LoginSignup
0
0

More than 3 years have passed since last update.

任意の場所に図のcaptionを入れたり,labelを追加したりする

Last updated at Posted at 2019-06-28

新規コマンドの追加

\makeatletter
\newcommand*{\myCaption}[1]{{\def\@captype{figure}\caption{#1}}}
\newcommand*{\myLabel}[1]{{\def\@captype{figure}\label{#1}}}
\makeatother

上記のコマンドをプリアンブルに加えます.
図のキャプションを使いたいときは\myCaption{キャプション名}とします.
図のラベルを入れたいときは\myLabel{ラベル名}とします.

コマンドの解説

安易にコマンドを追加したくない人のために,コマンドの解説を書きました.

makeatlettermakeatother

makeatletterは,新規にコマンドを追加するときの最初に記述するものです.
makeatotherは,新規にコマンドを追加するときの最後に記述するものです.

\newcommand*{}[]{{}}

このコマンドによって新規にコマンドを追加することができます.内容は以下の通りです.

\newcommand*{\新規の命令名}[引数の個数]{{命令の内容}}

新規の命令名について

ここにはユーザが指定する新規の命令名を記述します.
:warning:すでに登録されている命令と同じ名前を記述するとエラーになります.

引数について

引数とは,コマンドと一緒に{}で入力するもののことです.

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コマンドが適用されていることが分かります.

参考文献

完全攻略! LaTeX のマクロ定義

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0