![有条件内容](https://linux22.com/image/274818/%E6%9C%89%E6%9D%A1%E4%BB%B6%E5%86%85%E5%AE%B9.png)
我正在用 LaTeX 编写一份文档,希望将其编译为两个不同的版本,即 V1 和 V2(具有两种不同的格式规范)。有时我需要将一些 V2 中没有的内容插入 V1 中,反之亦然。为了指定要编译哪个版本,我有一个名为 的变量cond
,我将其设置为True
以标记 V1 格式,并False
标记 V2 格式。然后,指定以下命令:
% Display the argument if \cond is True
\newcommand{\IfCondTrue}[1]{\expandafter\ifstrequal\expandafter{\cond}{True}{#1}{}}
% Display the argument if \cond is False
\newcommand{\IfCondFalse}[1]{\expandafter\ifstrequal\expandafter{\cond}{True}{}{#1}}
因此,要将 V2 中没有的内容插入 V1,我只需将其插入命令中\IfCondTrue{...}
。
除了一个问题外,它完全按照预期工作;当我插入的内容是段落文本时,例如。This is fake \IfCondTrue{text}.
如果cond
设置为False
,则单词text
不会按预期显示。不幸的是,它将要用空格代替。例如,假设在 V1 中我想要This is fake text.
而在 V2 中我想要This is fake hooplah.
,那么理想情况下我可以写:This is fake \IfCondTrue{text}\IfCondFalse{hooplah}.
。然后,当 V1 编译时,我将看到(和This is fake text .
之间有一个空格)。text
.
我该如何修改上述命令,使它们在不显示内容时不会显示空白?
谢谢
答案1
你可以将\unskip
and/or\ignorespaces
作为条件的一部分。但是,当你将可能的输出组合在一个宏中时,版本控制会更容易:
\documentclass{article}
% Display the argument if \cond is True/False
\newcommand{\IfCond}[2]{%
\ifnum\pdfstrcmp{\cond}{True}=0
\ifnum\pdfstrcmp{}{#1}=0\unskip\else#1\fi%
\else
\ifnum\pdfstrcmp{}{#2}=0\unskip\else#2\fi%
\fi\ignorespaces}
% Display the argument if \cond is False
\newcommand{\IfCondFalse}[1]{%
\ifnum\pdfstrcmp{\cond}{True}=0 \unskip\else #1\fi\ignorespaces}
\begin{document}
\def\cond{True}% Version control
This is fake \IfCond{text}{hooplah}. \par
This is fake \IfCond{}{hooplah}.
\def\cond{False}% Version control
This is fake \IfCond{text}{hooplah}. \par
This is fake \IfCond{text}{}.
\end{document}
字符串比较是使用 pdfTeX 的完成的\pdfstrcmp
。