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言語あまり詳しくないですが、使いこなしたいですね。