
¿Cómo puedo limitar el espacio alrededor de un punto que no son puntos (es decir, no terminan una oración)?
En mi artículo, necesito hacer referencia a nombres calificados (como A.x
). Actualmente, los escribo como \texttt{A.x}
. Sin embargo, esto a veces genera algo de espacio alrededor del punto, por ejemplo en el siguiente fragmento:
Me gustaría tener solo un poquito de espacio alrededor del símbolo de punto que separa las partes del nombre, pero todo lo que pude encontrar estaba relacionado con el espaciado en modo matemático. Además, intenté cambiar temporalmente el código cat .
a 11, de la siguiente manera:
\newcommand{\codename}[1]{
\begingroup
\catcode`.=11
\texttt{#1}
\endgroup
}
luego usando \codename{A.x}
. Sin embargo, eso no ayudó.
Cualquier ayuda es muy apreciada.
Respuesta1
Puedes definir un comando:
\newcommand{\codename}[2]{#1\kern-.05em.\kern-.05em#2}
Luego compara A.x
con \codename{A}{x}
:
El uso \kern
evitará saltos de línea y estiramientos. Puedes ajustar el factor kern como quieras. Elegí -.05em
la longitud en ambos lados, pero en una fuente diferente es posible que necesites diferentes longitudes antes y después.
Respuesta2
Veo que el problema principal del OP es que no le gusta el hecho de que \texttt
los puntos tengan el mismo ancho que todos los demás caracteres.
Aquí utilizo un ciclo de token para abordar el problema. Busco en cada muestra del argumento para \codename
. Cada vez que encuentro un .
, lo reemplazo por \nobreak{\textrm{.}}\nobreak
. Esto significa que los nombres en clave con varios puntos no suponen ningún problema para la macro.
Esto evitará el espaciado introducido por los puntos como consecuencia del contexto y, al configurar los puntos en \textrm
, evitará el ancho adicional del punto, incluso si \codename
está configurado en \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}