![如何定义一个包含 if 但不包含关闭 fi 的宏,以及另一个包含关闭 fi 的宏](https://linux22.com/image/428144/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E4%B8%80%E4%B8%AA%E5%8C%85%E5%90%AB%20if%20%E4%BD%86%E4%B8%8D%E5%8C%85%E5%90%AB%E5%85%B3%E9%97%AD%20fi%20%E7%9A%84%E5%AE%8F%EF%BC%8C%E4%BB%A5%E5%8F%8A%E5%8F%A6%E4%B8%80%E4%B8%AA%E5%8C%85%E5%90%AB%E5%85%B3%E9%97%AD%20fi%20%E7%9A%84%E5%AE%8F.png)
我正在编写一份 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
在该点之前设置布尔测试的状态。