TeXで\ifdefinedの使いかた
TL;DR
\newcommand{\A}{test}
\ifdefined\A
\verb|\A| は ``\A'' と定義されています
\else
\verb|\A| は未定義です
\fi
\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言語あまり詳しくないですが、使いこなしたいですね。
Author And Source
この問題について(TeXで\ifdefinedの使いかた), 我々は、より多くの情報をここで見つけました https://qiita.com/mathbbN/items/9b34fd781507c5ebb405著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .