在以下片段中,我在 \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
我们只能看到o
和d
、b
和w
等等之间的隐式字距。
但是, 的工作方式\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