删除合格名称中句号周围的空格

删除合格名称中句号周围的空格

我如何才能限制句号周围非句号的空间(即,不结束句子)?

在我的论文中,我需要引用限定名称(例如A.x)。目前,我将它们排版为\texttt{A.x}。但是,这有时会在句号周围产生一些空格,例如在以下代码片段中:

带空格的合格名称。

我希望在分隔名称各部分的句点符号周围只留出一点点空间,但我能找到的所有内容都与数学模式下的间距有关。此外,我尝试暂时将 catcode 更改为.11,如下所示:

\newcommand{\codename}[1]{
  \begingroup
  \catcode`.=11
  \texttt{#1}
  \endgroup
}

然后使用\codename{A.x}。然而,这并没有帮助。

非常感谢您的帮助。

答案1

您可以定义一个命令:

\newcommand{\codename}[2]{#1\kern-.05em.\kern-.05em#2}

然后A.x比较\codename{A}{x}

在此处输入图片描述

使用\kern将防止换行和拉伸。您可以根据需要调整字距系数。我选择了-.05em两边的长度,但在不同的字体中,您可能需要前后不同的长度。

答案2

我认为 OP 的主要问题是他不喜欢将\texttt点设置为与所有其他字符相同的宽度。

这里我使用一个标记循环来解决这个问题。我搜索 参数的每个标记\codename。每当我找到 时.,我就用 替换它\nobreak{\textrm{.}}\nobreak。这意味着带有多个点的代码名称对于宏来说没有问题。

这将避免由于上下文而由点引入的间距,并且通过在 中设置点\textrm,它将避免点的额外宽度,即使\codename在 中设置了\texttt

\documentclass{article}
\usepackage{tokcycle}
\Characterdirective{\ifx.#1\addcytoks{\nobreak{\textrm{.}}\nobreak}\else
  \addcytoks{#1}\fi}
\newcommand\codename[1]{\tokencyclexpress#1\endtokencyclexpress}
\begin{document}
Here is \codename{A.1} code name.
Code names such as \texttt{\codename{A.2.4}}, can contain multiple dots!
By setting the dots in textrm, extra spacing is avoided even if the 
codename is set in texttt.
\end{document}

在此处输入图片描述

相关内容