TeXで\ifdefinedの使いかた


TL;DR

\newcommand{\A}{test}
\ifdefined\A
    \verb|\A| は ``\A'' と定義されています
\else
    \verb|\A| は未定義です
\fi

コンパイルすると以下のようになります。

先頭の\newcommandを消すと以下のようになります。

何がうれしいの?

subfilesを用いて以下のような構造でM個のpdfの組成をしていました。

共通プリアンブル(preamble.tex)
├── 課題1(main1.tex)
│   ├── 設問1(section1.tex)
│   │   ︙
│   └── 設問N(sectionN.tex)
├── 課題2(main2.tex)
│   ├── 設問1(section1.tex)
│   │   ︙
│   └── 設問N(sectionN.tex)
│   ︙
└── 課題M(mainM.tex)
    ├── 設問1(section1.tex)
    │   ︙
    └── 設問N(sectionN.tex)

section1.texをコンパイルすると、subfilesの機能でmain.texのプリアンブルを読みに行き、そこで指定されているpreamble.texに読みに行く。という2回のファイルアクセスが起きていました。
冗長だと感じたので以下のようにリファクタリングしました。

共通プリアンブル(preamble.tex)
├── 課題1(main1.tex)
├── 設問1(section1.tex)
│   ︙
├── 設問N(sectionN.tex)
│   ︙
├── 課題N(main1.tex)
├── 設問1(section1.tex)
│   ︙
└── 設問N(sectionN.tex)

この木構造はプリアンブルの参照を表しています。ファイル名が競合しているように見えますが、実際にはディレクトリを分けています。

しかし、section1.texを個別のコンパイルするときpreamble.texを読み込んだ段階で\titleが未定義だと怒られてしまいます。
section1.tex本文では一度も\titleを使わないのですが困ります。
今まではmain.texで定義されていたために問題は起こりませんでした。
解決として\ifdefinedで未定義かチェックをするようにpreamble.texを書き換えました。

感想

TeX言語あまり詳しくないですが、使いこなしたいですね。