如何在 LaTeX 中使用“预处理器”标志

如何在 LaTeX 中使用“预处理器”标志

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

相关内容