更新至 TeX Live 2018 后 Polyglossia 设置 \textgreek 出现问题

更新至 TeX Live 2018 后 Polyglossia 设置 \textgreek 出现问题

我曾经使用以下方法为希腊文本设置特定字体多语\newfontfamily{\textgreek}[Ligatures=TeX]{Vusillus Old Face}

更新到 TeX Live 2018 后,我的所有文档都无法再编译,并抛出错误:

LaTeX 错误:“xparse/command-already-defined”命令 '\textgreek' 已定义!如需立即帮助,请输入 H 。

这确实很不幸,因为这意味着更新会破坏与数百个文档的兼容性。但是,我的问题是:

  1. 在 polyglossia 中发生了什么,我不能再使用上面提到的
    命令来设置特定语言的字体?
  2. 我现在该怎么办?
  3. 我怎样才能以最简单的方式使我的旧文档再次编译?

顺便说一句,我使用 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\setfontfamilyfontspec文档)。

正如 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而不是polyglossiababel支持 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}

两个示例的输出相同

再见 – 一切都结束了。

相关内容