在 XeTeX 中加载lmroman10-regular
字体后,我无法以 TeX 的传统方式访问重音符号:\'
\"
\c
等等。我需要写Erd\H os
since,因为我的键盘上没有合适的“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
输出: