为什么这个命令会导致单词之间的间距比使用这个命令时\textbf
弃用的间距更宽?\bf
\documentclass{article}
\usepackage{hyperref}
\begin{document}
\makeatletter
\newcommand*{\textlabel}[2]{
\edef\@currentlabel{#1}
\phantomsection
#1\label{#2}
}
\makeatother
\begin{description}
\item[item] \textbf{\textlabel{First text}{ref1}} \\
Description!
\item[item] {\bf \textlabel{Second text}{ref2}} \\
Description!
\end{description}
\end{document}
输出:
答案1
您的定义中有三个虚假空格\textlabel
。如果通过屏蔽行尾来删除它们,结果是一样的:
\makeatletter
\newcommand*{\textlabel}[2]{% <- Here
\edef\@currentlabel{#1}% <- Here
\phantomsection
#1\label{#2}% <- Here
}
\makeatother
为什么在第二种情况下空格不显示?因为\textbf
本身就开启了一个段落,而 while\bf
则不。所以在第二种情况下空格被忽略,因为 TeX 仍然没有排版段落。
正确的命令使用语法类似于\bf
:\bfseries
它是一个声明,因此需要一对括号,或者可以在环境中发出。但最好\textbf
在运行文本中使用:你可以看到两者之间的区别
{\bf stuff} boldfaced
和
\textbf{stuff} boldfaced
因为在第二种情况下,LaTeX 添加了“斜体校正”来补偿“f”碰到单词间的空间。