刪除限定名稱中句號周圍的空格

刪除限定名稱中句號周圍的空格

如何限制不是句號的句點周圍的空間(即不結束句子。)?

在我的論文中,我需要引用限定名稱(例如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點設定為與所有其他字元相同的寬度。

這裡我用一個token循環來解決這個問題。我搜尋了參數的每個標記\codename。每次我找到 a 時.,我都會將其替換為\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}

在此輸入影像描述

相關內容