如何让 LuaLaTeX 与 babel 的 \textgreek 一起工作?

如何让 LuaLaTeX 与 babel 的 \textgreek 一起工作?

我完全不知道如何让 LuaLaTeX 输出希腊文本。我在 TeXlive 2009 (Linux) 和 TeXlive 2011 (Win32) 上用 PDFLaTeX 和 LuaLaTeX 测试了以下 MWE,在这两种情况下,PDFLaTeX 都产生了预期的输出,而 LuaLaTeX 似乎吞噬了希腊文本,然后什么也没做。

\documentclass{minimal}
% Use LGRx if installed else LGR. 
% Forcing one or the other makes no difference either.
\IfFileExists{lgrxenc.def}{%
    \usepackage[LGRx,T1]{fontenc}}{%
    \usepackage[LGR,T1]{fontenc}}
%\fi
\usepackage{lmodern,trace,ifluatex}
\usepackage[greek,british]{babel}
\unless\ifluatex
  \usepackage[utf8]{inputenc}
\fi
\begin{document}
% pdflatex: OK. 
%lualatex:  "τρίγωνον" is missing from the output, 
%           and the sum total of output from \traceon is this: 
%             {into \tracingonline=1}
%             {the character τ}
%             {end-group character }}
Triangle: \textgreek{\traceon τρίγωνον}.
\end{document}

答案1

如果您想使用希腊语的原始 CB 字体,那么有一种方法可以解决,但您需要有lgrenc.dfu,因此我假设它与它的兄弟字体一起可用lgrxenc.def

\documentclass{minimal}
\usepackage[LGRx,T1]{fontenc}
\usepackage{lmodern,ifluatex}
\usepackage[greek,british]{babel}
\ifluatex
  \let\LtxDeclareUnicodeCharacter\DeclareUnicodeCharacter
  \def\DeclareUnicodeCharacter#1{%
    \catcode\string"#1=\active
    \begingroup
    \lccode`~=\string"#1\relax
    \lowercase{\endgroup
      \protected\def~}}
  \input{lgrenc.dfu}
  \let\DeclareUnicodeCharacter\LtxDeclareUnicodeCharacter
\else
  \usepackage[utf8]{inputenc}
\fi
\begin{document}
Triangle: \textgreek{τρίγωνον}.
\end{document}

我使用 LuaLaTeXlgrenc.dfu来达到不同的目的,即激活希腊字符并将它们定义为所需的含义。

但是在这种情况下,我看不出使用 LuaLaTeX 的优势。

答案2

我不能 100% 确定我理解您正在加载的所有包,但我认为这是 LuaTeX 的方式:

\documentclass{minimal}

\usepackage[greek,british]{babel}

\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}

\begin{document}

Triangle: τρίγωνον.

\end{document}

三角形输出图像

您需要使用兼容的字体,您可以在以下位置找到 TeX Gyre Pagella 和其他字体字体松鼠,但它应该与你的 TeX 一起提供。

答案3

当您使用 pdflatex 和 inputenc 时,每个希腊字母输入都是一个小命令,它由lgrenc.dfu(或)中的定义映射到内部命令。然后,此内部命令由或lgrxenc.dfu中的定义映射到正确字体中的正确位置。lgrenc.deflgrxenc.de

使用 lualatex,希腊字符只是字符,它们被映射到字体中与其 unicode 值匹配的位置(例如,十六进制 03B1 表示小 alpha) - 并且此位置在字体中为空。

您可以尝试\usepackage[utf8]{luainputenc}(我不知道 texlive 2009 中是否存在)。这将转换命令中的希腊字符,就像 inputenc 使用 pdflatex 执行的那样。

但在我看来,为这些旧系统制作 lualatex 文档并不是很明智。如果 fontspec 不起作用,luatex 本身就会很旧且有缺陷。告诉这些用户只使用 pdflatex 进行编译并使用 fontspec。

相关内容