
Как ограничить пробел вокруг точки, которая не является точкой (т. е. не завершает предложение)?
В моей статье мне нужно ссылаться на квалифицированные имена (например, 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
Я вижу, что главная проблема автора поста в том, что ему не нравится тот факт, что \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}