ifthenelse 添加了不需要的空间

ifthenelse 添加了不需要的空间

在以下片段中,我在 \newcommand 中使用 \ifthenelse 添加了一个空格:

\documentclass[letterpaper]{article}

\usepackage{ifthen}
\usepackage{graphicx}

\newboolean{color-version}
\setboolean{color-version}{false}

\newcommand{\figsubdir}[0]{%
\ifthenelse{\boolean{color-version}}{color}{bw}%
}

\begin{document}

../figures/GAelectrodynamics/\figsubdir/twoParameterDifferentialFig1

\end{document}

减少命令结果后的空间我看到在所有换行符后都添加了 % 符号,并且我已经这样做了,但它似乎仍然在那里。如果将上面的路径更改为 \includegraphics 语句,则会更明显地显示出来,例如:

\includegraphics[totalheight=0.4\textheight]{../figures/GAelectrodynamics/\figsubdir/twoParameterDifferentialFig1}

使用此 \includegraphics,额外的恶意空间会导致“缺少 endcsname 插入。”错误和编译炸弹。如果我消除 ifthenelse 的使用,使用如下硬编码宏:

\newcommand{\figsubdir}[0]{%
bw%
}

那么就没有多余的空间了(并且 \includegraphics 也能工作。)但是这违背了 ifthenelse 的目的。

乳胶版:

  • texlive 2019(Ubuntu 20.04.1,在 Windows WSL2 VM 中)
  • ifthen 2014/09/29 v1.1c 标准 LaTeX ifthen 包 (DPC)

答案1

没有空格,我询问了 TeX 以确认这一点:它的响应是

....\OT1/cmr/m/n/10 .
....\OT1/cmr/m/n/10 .
....\OT1/cmr/m/n/10 /
....\OT1/cmr/m/n/10 ^^L (ligature fi)
....\OT1/cmr/m/n/10 g
....\OT1/cmr/m/n/10 u
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 s
....\OT1/cmr/m/n/10 /
....\OT1/cmr/m/n/10 G
....\OT1/cmr/m/n/10 A
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 c
....\OT1/cmr/m/n/10 t
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 o
....\kern0.27779
....\OT1/cmr/m/n/10 d
....\OT1/cmr/m/n/10 y
....\OT1/cmr/m/n/10 n
....\OT1/cmr/m/n/10 a
....\OT1/cmr/m/n/10 m
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 c
....\OT1/cmr/m/n/10 s
....\OT1/cmr/m/n/10 /
....\OT1/cmr/m/n/10 b
....\kern-0.27779
....\OT1/cmr/m/n/10 w
....\OT1/cmr/m/n/10 /
....\OT1/cmr/m/n/10 t
....\kern-0.27779
....\OT1/cmr/m/n/10 w
....\kern-0.27779
....\OT1/cmr/m/n/10 o
....\OT1/cmr/m/n/10 P
....\kern-0.27779
....\OT1/cmr/m/n/10 a
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 a
....\OT1/cmr/m/n/10 m
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 t
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 D
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10
                     (ligature ff)
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 r
....\OT1/cmr/m/n/10 e
....\OT1/cmr/m/n/10 n
....\kern-0.27779
....\OT1/cmr/m/n/10 t
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 a
....\OT1/cmr/m/n/10 l
....\OT1/cmr/m/n/10 F
....\OT1/cmr/m/n/10 i
....\OT1/cmr/m/n/10 g
....\OT1/cmr/m/n/10 1

我们只能看到odbw等等之间的隐式字距。

但是, 的工作方式\ifthenelse不允许它完成您想要的工作。有更好的方法。例如,您可以加载etoolbox并执行

\usepackage{etoolbox}

\newtoggle{color-version}
%\toggletrue{color-version}% uncomment if you want the color version
\newcommand{\figsubdir}{\iftoggle{color-version}{color}{bw}}

或者手动进行测试:

\newif\ifcoloroutput
%\coloroutputtrue % uncomment if you want the color version
\newcommand{\figsubdir}{\ifcoloroutput color\else bw\fi}

也许更简单

\newcommand{\figsubdir}{bw}
%\renewcommand{\figsubdir}{color}% uncomment if you want the color version

相关内容