在 XeTeX 上使用 lmodern 字体进行强调

在 XeTeX 上使用 lmodern 字体进行强调

在 XeTeX 中加载lmroman10-regular字体后,我无法以 TeX 的传统方式访问重音符号:\' \" \c等等。我需要写Erd\H ossince,因为我的键盘上没有合适的“o”。

例子:

Before: é, \'e

\font\tenrm="[lmroman10-regular.otf]:mapping=tex-text"
\tenrm

After: é, \'e

\bye

输出:

在此处输入图片描述

我怎样才能解决这个问题?

答案1

您应该改用组合字符。不幸的是,Latin Modern 并未完全实现它们;例如,没有组合变音符,因此使用下面的代码,您只能获得字体中存在的带变音符的字符。

Before: 
\c{e}
\`{e} \'{e}
\v{e} \u{e}
\={e} \^{e}
\.{e} \H{e}
\~{e} \"{e}

\font\tenrm="[lmroman10-regular.otf]:mapping=tex-text"
\tenrm

\def\`#1{#1^^^^0300} \def\'#1{#1^^^^0301}
\def\v#1{#1^^^^030c} \def\u#1{#1^^^^0306}
\def\=#1{#1^^^^0304} \def\^#1{#1^^^^0302}
\def\.#1{#1^^^^0307} \def\H#1{#1^^^^030b}
\def\~#1{#1^^^^0303} \def\"#1{#1^^^^0308}
\def\c#1{#1^^^^0327}

After:
\c{c}
\`{e} \'{e}
\v{e} \u{e}
\={e} \^{e}
\.{e} \H{e}
\~{e} \"{e}

\bye

为什么这比使用更好\accent?因为角色是他们自己,而不是内置的盒子和字距组合。

在此处输入图片描述

如果您使用cmunrm.otf带有组合变音符的 (CMU Serif),您还会得到\c{e}(一对e+ combining cedilla)。

请注意,组合字符位于其修饰的字符之后。如果Unicode 定义了诸如e+的组合,则combining acute真实的U+00E8(带重音符号的拉丁小写字母 E)将生成 PDF 文件,可供复制和粘贴。

答案2

通过复制 TeXbook 第 356 页的定义但更改字符代码,可以修复该问题:

Before: 
\c{e}
\`{e} \'{e}
\v{e} \u{e}
\={e} \^{e}
\.{e} \H{e}
\~{e} \"{e}

\font\tenrm="[lmroman10-regular.otf]:mapping=tex-text"
\tenrm
\def\`#1{{\accent768 #1}} \def\'#1{{\accent180 #1}}
\def\v#1{{\accent711 #1}} \def\u#1{{\accent728 #1}}
\def\=#1{{\accent175 #1}} \def\^#1{{\accent710 #1}}
\def\.#1{{\accent729 #1}} \def\H#1{{\accent733 #1}}
\def\~#1{{\accent732 #1}} \def\"#1{{\accent168 #1}}
\def\c#1{{\setbox0=\hbox{#1}\ifdim\ht0=1ex \accent184 #1%
\else\ooalign{\unhbox0\crcr\hidewidth\char184\hidewidth}\fi}}

After:
\c{e}
\`{e} \'{e}
\v{e} \u{e}
\={e} \^{e}
\.{e} \H{e}
\~{e} \"{e}

\bye

输出: 在此处输入图片描述

相关内容