修飾名の句読点の周りのスペースを削除する

修飾名の句読点の周りのスペースを削除する

終止符ではない(つまり、文を終わらせない)ピリオドの周りのスペースを制限するにはどうすればよいですか?

私の論文では、修飾名 ( など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}

ここに画像の説明を入力してください

関連情報