Другой шрифт для заглавных/верхних букв

Другой шрифт для заглавных/верхних букв

Можно ли использовать другой шрифт всякий раз, когда в тексте встречается заглавная/верхняя буква?

Итак, если у меня есть предложение «Это какой-то текст», то я бы хотел, чтобы первая буква T была написана другим шрифтом, чем остальной текст.

Если у меня есть предложение «Это какой-то текст с аббревиатурой GMT», то я бы хотел, чтобы первые буквы T и GMT были бы отличны от остальных.

Аналогично, для фразы «Это текст, содержащий имя собственное: Лондон», я бы хотел, чтобы первые буквы T и L были разными шрифтами.

Я делюсь скриншотом того эффекта, который мне бы хотелось.введите описание изображения здесь

Мне нужно сделать это для всего документа (возможно, для нескольких глав). Поэтому я надеюсь найти способ сделать это автоматически, без необходимости менять каждую букву по отдельности.

решение1

При компиляции с помощью XeLaTeX вы можете использовать этот \XeTeXinterchartoksмеханизм.

Идея состоит в том, чтобы определить класс символов, состоящий из латинских заглавных символов, которые имеют шестнадцатеричные коды символов от 0041 (A) до 005A (Z).

Затем вы определяете переход от всех других символов к этому новому классу. Другие символы имеют класс 0 или 4095 для границ слов. В этом переходе вы можете вставить \calследующую заглавную букву в качестве аргумента. Если я правильно понимаю, вставка этого макроса вызовет другой переход, если после первой есть еще заглавные буквы, поэтому последующие буквы также будут отображаться в качестве аргумента \cal.

MWE, в значительной степени основанный наXeLaTeX: Как указать другое семейство шрифтов для латинского текста внутри нелатинского текста?иИзменение размера цифр основного шрифта в 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}

Результат:

введите описание изображения здесь

Обратите внимание, что вы можете временно отключить механизм перехода, \XeTeXinterchartokenstate = 0\relaxесли вам где-то нужны неизмененные заглавные буквы.

решение2

Я делюсь своим кодом/решением на случай, если это поможет кому-то еще. Это основано на ответе Marijn и ссылках в этом посте.

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


Вот результат.

введите описание изображения здесь

Связанный контент