大寫/大寫字母的不同字體

大寫/大寫字母的不同字體

每當文字中出現大寫/大寫字母時,是否可以使用不同的字體。

因此,如果我有一個句子,“這是一些文字。”,那麼我希望第一個 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}


這是結果。

在此輸入影像描述

相關內容