C 程序员经常使用如下结构
#ifdef foo
printf("foo is defined ");
#endif
#ifndef foo
printf("foo is not defined ");
#endif
通过传递编译器标志-Dfoo
或仅仅将某个代码粘贴#define foo 0
在代码中的某个地方来在编译过程中选择某些代码路径。
在 LaTeX 中也能实现吗?所以我正在寻找类似
\ifdef foo{
short summary, tldr
}
\ifndef foo{
long explanation
}
这对于从包含长描述的现有 TeX 文件生成简短摘要文档特别有用。我希望能够传递类似于-Dfoo
编译器标志的内容,或者只是foo
在 Latex 文件顶部附近的某个地方定义,就像我在 C 情况下所做的那样。
答案1
您可以使用\ifdefined
检查宏是否已定义。要检查宏是否已定义不是定义后,通过添加前缀来反转条件\unless
。
\documentclass{article}
%\newcommand\foo{}
\begin{document}
\ifdefined\foo
short summary, tldr
\fi
\unless\ifdefined\foo
long explanation
\fi
\end{document}
答案2
在 ConTeXt MkIV 中,您可以使用模式实现此行为。
\starttext
\startmode[foo]
short summary, tldr
\stopmode
\startnotmode[foo]
long explanation
\stopnotmode
\stoptext
ConTeXt 模式的优点在于您可以从context
程序的命令行打开它们。
$ context --mode=foo test.mkvi