如何定义一个包含 if 但不包含关闭 fi 的宏,以及另一个包含关闭 fi 的宏

如何定义一个包含 if 但不包含关闭 fi 的宏,以及另一个包含关闭 fi 的宏

我正在编写一份 LaTeX 文档,并在多个位置进行书写。为了加快编译速度,我用\iffalse, \fi构造包围了一些部分。当我在一天结束时校对文档时,我想将所有要编译的注释部分都包括在内,而无需手动注释\iffalse, \fi。因此,我尝试定义宏,但 LaTeX 会报错,可能是因为命令定义中\iffalse的需要在后面跟一个\fi。有没有办法实现这一点,即不定义必须本身包含语法正确的代码的命令,而只是定义一个在任何地方都替换的宏?

\documentclass{article}
\newcommand{\iffalsePrint}{\iffalse}
\newcommand{\fiPrint}{\fi}
% at the end of the day, enable all sections for printing, change this in a single place here
% \newcommand{\iffalsePrint}{}
% \newcommand{\fiPrint}{}

\begin{document}

\iffalsePrint
text to appear when above is uncommented
\fiPrint

another text

\iffalsePrint
second text
\fiPrint

third text

\end{document}

答案1

在 tex 看到之后,\iffalse宏如何定义并不重要,因为它们永远不会扩展,所以你\fiPrint无法工作,你可以使用\let\fiPrint\fi 它以便它被视为\fi但仍然会存在嵌套情况的问题。

标准机制是使用

\newif\ifPrint`

要声明命令,请使用以下代码包围条件块:

\ifPrint
conditional text here
\fi

该块将被使用或跳过,取决于您是否执行\Printtrue\Printfalse在该点之前设置布尔测试的状态。

相关内容