
Como posso limitar o espaço em torno de um ponto final que não seja ponto final (ou seja, que não termine uma frase)?
No meu artigo, preciso me referir a nomes qualificados (como A.x
). Atualmente, eu os defino como \texttt{A.x}
. No entanto, isso às vezes gera algum espaço em torno do período, por exemplo no trecho a seguir:
Eu gostaria de ter apenas um pouquinho de espaço ao redor do símbolo de ponto final separando as partes do nome, mas tudo que consegui encontrar estava relacionado ao espaçamento no modo matemático. Além disso, tentei alterar temporariamente o catcode .
para 11, da seguinte maneira:
\newcommand{\codename}[1]{
\begingroup
\catcode`.=11
\texttt{#1}
\endgroup
}
então usando \codename{A.x}
. No entanto, isso não ajudou.
Qualquer ajuda é muito apreciada.
Responder1
Você pode definir um comando:
\newcommand{\codename}[2]{#1\kern-.05em.\kern-.05em#2}
Então compare A.x
com \codename{A}{x}
:
O uso \kern
evitará quebras e alongamentos de linha. Você pode ajustar o fator de kern como quiser. Eu escolhi -.05em
o comprimento em ambos os lados, mas em uma fonte diferente você pode precisar de comprimentos diferentes antes e depois.
Responder2
Vejo que o principal problema do OP é que ele não gosta do fato de \texttt
definir pontos na mesma largura de todos os outros caracteres.
Aqui eu uso um ciclo de token para resolver o problema. Eu pesquiso cada token do argumento para \codename
. Cada vez que encontro um .
, eu o substituo por \nobreak{\textrm{.}}\nobreak
. Isso significa que nomes de código com vários pontos não são problema para a macro.
Isso evitará o espaçamento introduzido pelos pontos como consequência do contexto e, ao definir os pontos em \textrm
, evitará a largura extra do ponto, mesmo que esteja \codename
definido em \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}