大写字母和大写字母的字体不同

大写字母和大写字母的字体不同

当文本中出现大写字母时,是否可以使用不同的字体。

因此,如果我有一句话“这是一些文本”,那么我希望第一个 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}


结果如下。

在此处输入图片描述

相关内容