有人知道为什么下面的代码在下面的数学表达式中添加了一个额外的空格吗?
这个例子
\documentclass{article}
\usepackage{mathtools}
\NewDocumentCommand\withouthspace{m m}{%
\frac{d#1}{d#2}}
\NewDocumentCommand\withhspace{O{0pt} m m}{%
\frac{d\hspace{#1}#2}{d\hspace{#1}#3}} % <--- adds extra space
\begin{document}
\parindent=0pt
\begin{equation*}
\begin{split}
\withouthspace{f(x)}{x} \\
\withhspace{f(x)}{x}
\end{split}
\end{equation*}
aaa\hspace{0pt}bbb. % <--- no extra space
\(aaa\hspace{0pt}bbb\). % <--- no extra space
\end{document}
答案1
你可以将示例简化为
\documentclass{article}
\showoutput
\begin{document}
$df$ $d\hspace{0pt}f$
\end{document}
产生
....\mathon
....\OML/cmm/m/it/10 d
....\kern-1.66667
....\OML/cmm/m/it/10 f
....\kern1.0764
....\mathoff
....\glue 3.33333 plus 1.66666 minus 1.11111
....\mathon
....\OML/cmm/m/it/10 d
....\glue 0.0
....\OML/cmm/m/it/10 f
....\kern1.0764
....\mathoff
第二种情况下插入的 0pt 粘连会抑制 d 和 f 之间字体指定的负字距
您在示例中看不到它ab
,但在文本模式下可以看到它,比如说,字体Va
的字距也为负值cmr
。