Removendo espaço em torno do ponto final no nome qualificado

Removendo espaço em torno do ponto final no nome qualificado

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:

Nome qualificado com espaçamento.

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.xcom \codename{A}{x}:

insira a descrição da imagem aqui

O uso \kernevitará quebras e alongamentos de linha. Você pode ajustar o fator de kern como quiser. Eu escolhi -.05emo 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 \textttdefinir 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 \codenamedefinido 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}

insira a descrição da imagem aqui

informação relacionada