有条件内容

有条件内容

我正在用 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

你可以将\unskipand/or\ignorespaces作为条件的一部分。但是,当你将可能的输出组合在一个宏中时,版本控制会更容易:

enter image description here

\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

相关内容