我曾经使用以下方法为希腊文本设置特定字体多语和\newfontfamily{\textgreek}[Ligatures=TeX]{Vusillus Old Face}
。
更新到 TeX Live 2018 后,我的所有文档都无法再编译,并抛出错误:
LaTeX 错误:“xparse/command-already-defined”命令 '\textgreek' 已定义!如需立即帮助,请输入 H 。
这确实很不幸,因为这意味着更新会破坏与数百个文档的兼容性。但是,我的问题是:
- 在 polyglossia 中发生了什么,我不能再使用上面提到的
命令来设置特定语言的字体? - 我现在该怎么办?
- 我怎样才能以最简单的方式使我的旧文档再次编译?
顺便说一句,我使用 polyglossia 是因为它与 XeLaTeX 兼容。这是一个最小的不工作示例:
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{polyglossia}
\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}
\newfontfamily{\textgreek}[Ligatures=TeX]{Vusillus Old Face}
\begin{document}
textgreek{πάντα ῥεῖ} – Alles fließt.
\end{document}
答案1
fontspec
最近更改了 的行为\newfontfamily
。现在如果被定义,则会\newfontfamily<cmd>
抛出错误。之前的行为与现在的行为相同。它只会覆盖命令的旧定义。(请参阅第 9 页<cmd>
\newfontfamily
\setfontfamily
fontspec
文档)。
正如 David Carlisle 在评论中解释的那样,\textgreek
这是由 定义的命令来polyglossia
排版希腊语。(为所有加载的语言polyglossia
定义\text<language>
。另请参阅第 5 页polyglossia
文档。
所以当你
\newfontfamily{\textgreek}[Ligatures=TeX]{Vusillus Old Face}
新版本的fontspec
会抛出错误,因为\textgreek
已经定义。旧版本的fontspec
会覆盖polyglossia
的定义\textgreek
,这可能意味着您实际上没有获得正确的语言切换。
指定希腊字体的正确方法是重新定义\greekfont
。另请参阅第 6-7 页polyglossia
文档。
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{polyglossia}
\setmainlanguage[spelling=old,babelshorthands=true,script=latin]{german}
\setotherlanguage[variant=polytonic]{greek}
\newfontfamily{\greekfont}[Ligatures=TeX]{Linux Libertine O}
\begin{document}
\textgreek{πάντα ῥεῖ} – Alles fließt.
\end{document}
您也可以使用babel
而不是polyglossia
。babel
支持 LuaLaTeX 和 XeLaTeX 并且正在积极开发中。(polyglossia
开发似乎最近停滞了。)对于使用拉丁文字的西方语言来说,polyglossia
它仅仅比 好一点babel
。对于希腊语来说 babel
,它也能给出非常好的结果。即使对于 RTL 语言,最近的babel
发展看起来也很有希望。
\documentclass[a4paper,10pt,twoside]{memoir}
\usepackage{fontspec}
\usepackage[polutonikogreek,german]{babel}
\babelfont{rm}{Latin Modern Roman}
\babelfont[polutonikogreek]{rm}{Linux Libertine O}
\begin{document}
\foreignlanguage{polutonikogreek}{πάντα ῥεῖ} – Alles fließt.
\end{document}
两个示例的输出相同