TeX에서\ifdefined를 사용하는 방법

2202 단어 TeXmemo

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로 읽으러 간다. 라는 두 번의 파일 액세스가 발생했습니다.
중복이라고 느꼈으므로 다음과 같이 리팩토링했습니다.
共通プリアンブル(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 언어별로 자세하지는 않지만, 잘 다루고 싶네요.

좋은 웹페이지 즐겨찾기