LoginSignup
1
0

More than 5 years have passed since last update.

TeXで\ifdefinedの使いかた

Last updated at Posted at 2018-11-14

TL;DR

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

コンパイルすると以下のようになります。
image.png
先頭の\newcommandを消すと以下のようになります。
image.png

何がうれしいの?

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

1
0
1

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
1
0