Interletraje condicional con caracteres personalizados

Interletraje condicional con caracteres personalizados

He estado leyendo respuestas a preguntas sobre látex en el pasado para abordar un problema que tengo. Estoy usando una fuente que contiene símbolos y asigno los símbolos a un comando de látex. Para este MWE, puede utilizar cualquier fuente con símbolos que no se encuentren en el juego de caracteres latinos.Aquíes el que estoy usando (acabo de cambiar el nombre del archivo a Symbols.otf), yaquíHay alguna documentación al respecto, incluidos los comandos XeLaTeX. Esta parte funciona bien:

\documentclass[10pt,twoside]{book}

\makeatletter
\newfontface\honourific[Path = ./fonts/]{Symbols.otf}
\newcommand{\hn}[1]{{\honourific\XeTeXglyph #1}}
\newcommand{\RahimahumuLlah}{{\large\hn{83}\kern0.25em}}

\begin{document}

 ...and a similar statement has been reported as being the view of Imām Mālik Ibn Anas \RahimahumuLlah.

\begin{document}

Ahora, cuando intento usarlo \firstcommanden mi composición tipográfica, funciona; sin embargo, cuando hay un punto, coma, dos puntos, punto y coma u otro signo de puntuación, el símbolo puede tener mucho más o mucho menos espacio del necesario después. Es por eso que configuré el interletraje predeterminado en 0,25 em, lo que funciona muy bien en la mayoría de situaciones. Lo que quiero hacer es configurarlo de manera que verifique si hay un signo de puntuación aplicable justo después del símbolo (punto, coma, dos puntos...) y, de ser así, aplique 0,05 em si se trata de un interletraje.

Encontré algunas discusiones sobre el comando @ifnextchar, particularmenteeste hiloque había comenzado enestepublicación en el foro. Intenté implementar la respuesta final del cartel del foro en mi código, pero lo que encontré fue que no evaluaba ni las condiciones verdaderas ni las falsas.

Si pudiera ofrecer alguna aclaración sobre cómo implementar este o cualquier otro método de interletraje condicional, se lo agradecería mucho.

Gracias

Editar:

Ok, hice algunas pruebas y es posible que haya reducido el problema. Usar xspace no funciona y tampoco ejecutar manualmente los condicionales para detectar la puntuación. Utilicé este código para intentar encontrar dónde estaba mi problema:

\makeatletter
\newcommand{\punctuationcheck}{%
    \@ifnextchar){parens\relax}{%
    \@ifnextchar]{square bracket\relax}{%
        \@ifnextchar.{fullstop\relax}{%
            \@ifnextchar,{comma\relax}{space
            }%
        }%
    }%
}%
}

\makeatother

Cuando ejecuto este código, no detecta una coma y en su lugar simplemente inserta la palabra 'espacio', independientemente de si un espacio viene después de la coma o no. Eché un vistazo a la respuesta.aquíy señaló el uso de {}comandos posteriores para preservar los espacios según sea necesario. Probé esto y funcionó. El problema ahora es ¿cómo puedo forzar a LaTeX a agregar un {}después de cada uno de mis comandos personalizados para no tener que acordarme de hacerlo cuando estoy escribiendo mi documento?

Edición 2: Resuelto

Entonces resulta que dónde pones el \xspacecomando en la definición realmente importa.

Primera Instancia: \newcommand{\RahimahumuLlah}{{\large\hn{83}\xspace}}

No veía que el comando funcionara. Moví el comando justo antes de la última llave:

\newcommand{\RahimahumuLlah}{{\large\hn{83}}\xspace}

Y funciona.

Respuesta1

Podrías copiar el xspacecódigo del paquete que hace exactamente esto, aparte del hecho de que agrega un espacio normal en lugar de tu kern.

información relacionada