Fonte diferente para letras maiúsculas/maiúsculas

Fonte diferente para letras maiúsculas/maiúsculas

É possível usar uma fonte diferente sempre que uma letra maiúscula/maiúscula aparecer no texto.

Portanto, se eu tiver uma frase "Este é um texto.", gostaria que o primeiro T tivesse uma fonte diferente do restante do texto.

Se eu tiver uma frase: "Este é um texto com uma sigla GMT", gostaria que o primeiro T e GMT tivessem uma fonte diferente do resto.

Da mesma forma, para "Este é um texto com um nome próprio: Londres", gostaria que o primeiro T e o L tivessem uma fonte diferente.

Estou compartilhando uma captura de tela do tipo de efeito que gostaria.insira a descrição da imagem aqui

Preciso fazer isso para todo o meu documento (possivelmente vários capítulos). Espero encontrar uma maneira de fazer isso automaticamente, sem precisar alterar cada letra individualmente.

Responder1

Ao compilar com XeLaTeX você pode usar o \XeTeXinterchartoksmecanismo.

A ideia é definir uma classe de caracteres composta por caracteres latinos maiúsculos, que possuem códigos de caracteres hexadecimais de 0041 (A) a 005A (Z).

Então você define uma transição de todos os outros personagens para esta nova classe. Os demais caracteres possuem classe 0 ou 4095 para limites de palavras. Nesta transição você pode inserir \cala próxima letra maiúscula como argumento. Se bem entendi, a inserção desta macro irá desencadear outra transição se houver mais letras maiúsculas após a primeira, então as letras subsequentes também serão exibidas como o argumento de \cal.

MWE, em grande parte baseado emXeLaTeX: Como especificar uma família de fontes diferente para texto latino em texto não latino?eAlterando o tamanho dos dígitos da fonte principal no 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:

insira a descrição da imagem aqui

Observe que você pode desativar temporariamente o mecanismo de transição \XeTeXinterchartokenstate = 0\relaxse precisar de letras maiúsculas inalteradas em algum lugar.

Responder2

Estou compartilhando meu código/solução caso isso ajude outra pessoa. Isso se baseia na resposta de Marijn e nos links dessa postagem.

\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}


Aqui está o resultado.

insira a descrição da imagem aqui

informação relacionada