这是使用 pdfcsplain、xetex 和 luatex 在纯 TeX 中显示西班牙语连字符和 UTF8 字符我尝试使用或不使用 OPmac 来处理pdfcsplain
西班牙语文档。
在引用的问题中,egreg 针对西班牙语连字符xetex
/的解决方案luatex
对于普通文本非常有效,...但对于 OPmac 宏,我发现了两个问题:
1) 加载 OpenType 字体,因为 egreg 的 MWE 似乎与 OPmac 宏不兼容,因为文本或 \tit Mañana
丢失\sec Mañana
并ñ
使用默认字体打印“Maana”(但在普通文本中是可以的)。
这是一个小问题,因为 \input ucode
加号\input cs-xxxxx
(其中xxxxx
必须是 TeX Gyre 字体)产生了正确的输出(这是一个有点有限的解决方案,但幸运的是有一个不错的字体系列)。
2)最严重的问题与连字解决方案有关,因为或宏\uselanguage{espanol}
会产生错误,因此无法编译 PDF。\caption/f
\caption/t
要测试的最小不工作示例:
\font\tenrm="DejaVu Serif" at 12pt
\tenrm
\input opmac
\tit Mañana % Missing "ñ'', without DejaVu Serif
\sec Mañana % Missing "ñ'' without DejaVu Serif
Mañana % No problem
\input ucode
\input cs-pagella % only TeX Gyre fonts (try \input cs-charter)
\tit Mañana % Now OK
\sec Mañana % Now OK
\uselanguage{espanol} % Spanish hyphenation (see egreg's answer)
\caption/f Test % Error only due to \uselanguage{espanol}
\bye
答案1
我认为您需要以标准xetex
或luatex
格式运行 OPmac。它们是使用etex.src
宏生成的,并且所有语言的连字符都已预加载。因此,您无需重新生成格式,只需xetex
在命令行上运行即可。
\uselanguage{espanol}
西班牙语连字符模式按上述格式在文档中激活。
OPmac 使用三个自动生成的单词:章节、表格、图表。它必须知道这些单词在所选语言中的翻译。但只有捷克语和斯洛伐克语翻译可用,因为 OPmac 的作者不是多语言人士(:)。因此,您必须用您的语言设置这三个单词。如果您要\mtext
在宏中使用宏(多语言文本),则需要更多单词。
此外,必须设置所用语言的快捷方式:es
对于西班牙语。OPmac 仅设置en
、cs
和sk
。这些快捷方式仅在 csplain 中为所有语言设置,但您使用的是etex.src
宏格式。因此,您必须这样写:
{\uselanguage{espanol} \sxdef{lan:\the\language}{es}}
这是 OPmac 文档中的错误,没有提到这一点。我希望这个问题能得到纠正。感谢您的测试和报告。
最后,您可以使用 OTF 字体,但要加载所有变体:\tenrm
、\tenit
和。这意味着,您必须加载整个系列。然后粗体变体用于标题。您的错误是未加载粗体变\tenbf
体\tenbi
。然后默认的 Knuth 非 OTF 字体用于标题。
OPmac 使用 csplain 的字体选择系统:如果加载了整个系列\tenrm
、\tenit
和,\tenbf
则将\tenbi
以所有所需大小使用它。文档中普通文本的大小由设置。使用原始字体时\typosize
不要使用at12pt
子句。\font
你的例子看起来像:
\input opmac
\font\tenrm="DejaVu Serif"
\font\tenbf="DejaVu Serif/B"
\font\tenit="DejaVu Serif/I"
\font\tenbi="DejaVu Serif/IB"
\tenrm
{\uselanguage{espanol} \sxdef{lan:\the\language}{es}}
\sdef{mt:chap:es}{Capítulo}
\sdef{mt:t:es}{Tabla}
\sdef{mt:f:es}{Figura}
\uselanguage{espanol} % Spanish hyphenation
\typosize[12/14.4]
\tit Mañana
\sec Mañana
Mañana
\caption/f Test
\bye
使用xetex example
或进行处理luatex example
。