Fuente diferente para letras mayúsculas/mayúsculas

Fuente diferente para letras mayúsculas/mayúsculas

¿Es posible utilizar una fuente diferente cada vez que aparece una letra mayúscula en el texto?

Entonces, si tengo una oración, "Este es un texto", entonces me gustaría que la primera T tenga una fuente diferente al resto del texto.

Si tengo una oración, "Este es un texto con un acrónimo GMT", entonces me gustaría que la primera T y GMT fueran una fuente diferente del resto.

De manera similar, para "Este es un texto con un nombre propio: Londres", me gustaría que la primera T y la L fueran una fuente diferente.

Comparto una captura de pantalla del tipo de efecto que me gustaría.ingrese la descripción de la imagen aquí

Necesito hacer esto para todo mi documento (posiblemente varios capítulos). Así que espero encontrar una manera de hacer esto automáticamente, sin tener que cambiar cada letra individualmente.

Respuesta1

Al compilar con XeLaTeX puedes usar el \XeTeXinterchartoksmecanismo.

La idea es definir una clase de caracteres que consta de caracteres latinos en mayúscula, que tienen códigos de caracteres hexadecimales del 0041 (A) al 005A (Z).

Luego defines una transición de todos los demás personajes a esta nueva clase. Los demás caracteres tienen clase 0 o 4095 para los límites de las palabras. En esta transición puedes insertar \calcon la siguiente letra mayúscula como argumento. Si entiendo correctamente, la inserción de esta macro activará otra transición si hay más letras mayúsculas después de la primera, por lo que las letras siguientes también se mostrarán como argumento de \cal.

MWE, basado en gran medida enXeLaTeX: ¿Cómo especificar una familia de fuentes diferente para texto latino dentro de texto no latino?yCambiar el tamaño de los dígitos de la fuente principal en Xelatex:

\documentclass{article}

\XeTeXinterchartokenstate = 1\relax
\newXeTeXintercharclass\ucletterclass
\ExplSyntaxOn
\int_step_inline:nnnn {"0041}{1}{"005A}
 { \XeTeXcharclass #1 = \ucletterclass }
\ExplSyntaxOff
\def\mycal#1{$\cal{#1}$}

\XeTeXinterchartoks 0 \ucletterclass = {\mycal}
\XeTeXinterchartoks 4095 \ucletterclass = {\mycal}

\begin{document}
This is some text.

This is some text with an acronym in it GMT

This is some text with a proper name in it: London
\end{document}

Resultado:

ingrese la descripción de la imagen aquí

Tenga en cuenta que puede desactivar el mecanismo de transición temporalmente \XeTeXinterchartokenstate = 0\relaxsi necesita letras mayúsculas sin modificar en algún lugar.

Respuesta2

Estoy compartiendo mi código/solución en caso de que ayude a alguien más. Esto se basa en la respuesta de Marijn y los enlaces de esa publicación.

\documentclass[a4paper,11pt]{book}

\usepackage[default]{frcursive}



\XeTeXinterchartokenstate = 1\relax  
\newXeTeXintercharclass\ucletterclass  
\ExplSyntaxOn   
\int_step_inline:nnnn {"0041}{1}{"005A}
 { \XeTeXcharclass #1 = \ucletterclass }
\ExplSyntaxOff
\def\mycal#1{$\cal{#1}$}


\XeTeXinterchartoks 0 \ucletterclass = {\begingroup \fontfamily{phv}\fontseries{m}\fontshape{n}\selectfont}
\XeTeXinterchartoks \ucletterclass 0 = {\endgroup}
\XeTeXinterchartoks 4095 \ucletterclass = {\begingroup \fontfamily{phv}\fontseries{m}\fontshape{n}\selectfont}
\XeTeXinterchartoks \ucletterclass 4095= {\endgroup}


\begin{document}


This is some text.

This is some text with an acronym in it GMT

This is some text with a proper name in it: London


\end{document}


Aquí está el resultado.

ingrese la descripción de la imagen aquí

información relacionada