与 babel [greek] 一起使用时索引生成不正确

与 babel [greek] 一起使用时索引生成不正确

我正在尝试索引一个包含几个希腊短语的文档。使用 babel\textgreek一切顺利……直到我进入索引。所有来自\frontmatter(带有罗马页码)的条目都丢失了。

手动编辑 .idx 文件并冻结它们,我可以解决这个问题,但这不是解决方案。如果 babel 选项中没有希腊语,则问题不存在,但不幸的是我需要它...

有谁知道如何正确生成 .idx (没有不必要的\fontencoding内容\indexentry)?非常感谢。

%TexLive 2018
%pdfLaTeX or luaLaTeX
%
%Index without greek:
% --------------
%Riesenindex
%Auszeichnung, 1         Seite, 2
%In Fussnote, iii        Text, ii, 1
%                        TEXT, iii
%
%Index with greek
% --------------
%Auszeichnung, 1         Text, 1
%Seite, 2

%first 3 lines of .idx with greek
% ------------------------------
%\indexentry{Text}{{\fontencoding  {OT1}\selectfont  ii}}
%\indexentry{Text@\textsc{Text}}{{\fontencoding  {OT1}\selectfont  iii}}
%\indexentry{In Fussnote}{{\fontencoding  {OT1}\selectfont  iii}}

%error message in .ilg with greek
% ------------------------------
%!! Input index error (file = IndexTstMaster.idx, line = x):
%   -- Illegal space within numerals in second argument.

% ------------------------------------------------------------------------------

\documentclass [paper=C5]{scrbook} 

% ------------------------------------------------------------------------------
%\usepackage [ngerman]{babel}  % english
\usepackage [main=ngerman,greek.ancient]{babel}  % english
\usepackage{imakeidx}      % with xindy there is no improvement
\makeindex[title=Riesenindex]

\begin {document}
   \frontmatter 
   Etwas Text\index{Text} hier;
   \newpage
   Etwas mehr Text\index{Text@\textsc{Text}} hier.%
   \footnote {\index{In Fussnote}Eine Fussnote}
   % ---
   \mainmatter
   \chapter {Kabidel}
   Viel Text\index{Text} hier; \emph{Auszeichnung\index{Auszeichnung}}
   \newpage
   Auf neuer\index{Seite}.
%  \textgreek{Καὶ ταῦτα μὲν δὴ ταῦτα}{}.
   Und so weiter.
   % ---
   \printindex
\end {document}

答案1

第一条建议:如果您需要希腊语,请尽可能使用xetexluatex代替pdftex。请参阅希腊语在 babel 站点。

但是如果你想坚持pdftex,只需恢复之前的默认定义\@roman如下\begin{document}

\makeatletter
\def\@roman#1{\romannumeral #1}
\makeatother

即使希腊语不是主要语言,希腊语的 babel 风格也会重新定义它,这似乎不是一个好主意。

第二条建议:main=仅当默认选择主语言方式失败时才使用。默认方式是:

\usepackage [greek.ancient, ngerman]{babel}

主要语言是最后一个。

更新。 使用xetex或,luatex如果您只需要几个短语,您甚至不需要明确声明希腊语(请参阅手册babel和“主要是单语文档”部分)。默认的 LaTeX 字体不包含希腊字母,因此您必须声明它:

\documentclass{article}

\usepackage[english]{babel}
\babelfont[ancientgreek]{rm}{NewComputerModern10}

\begin{document}

This is a piece of text from \foreignlanguage{ancientgreek}{Ὀδύσσεια},
taken from Wikisource: \foreignlanguage{ancientgreek}{Ἄνδρα μοι ἔννεπε,
Μοῦσα, πολύτροπον, ὃς μάλα πολλὰ πλάγχθη, ἐπεὶ Τροίης ἱερὸν πτολίεθρον
ἔπερσε}.

\end{document}

在此处输入图片描述

答案2

我发现解决这个问题的唯一方法是使用 XeLaTeX 并手动指定希腊字体(当然这并不意味着它唯一的方法)。在这种情况下,可以使用 babel 或 polyglossia 包。[在我的实际项目中,这需要做相当多的工作……而且它可以编译太慢了!]

% compile with XeLaTeX
\documentclass [paper=C5]{scrbook} 

% ------------------------------------------------------------------------------
\usepackage {fontspec}
\usepackage [ngerman]{babel}  % english

\font\griik="[libertinusserif-regular.otf]" % any font with greek chars would do

\usepackage{imakeidx}      % mit xindy wird die Sache nicht besser
\makeindex[title=Riesenindex]

\begin {document}
   \frontmatter 
   Etwas Text\index{Text} hier;
   \newpage
   Etwas mehr Text\index{Text@\textsc{Text}} hier.%
   \footnote {\index{In Fussnote}Eine Fussnote}
   % ---
   \mainmatter
   \chapter {Kabidel}
   Viel Text\index{Text} hier; \emph{Auszeichnung\index{Auszeichnung}}
   \newpage
   Auf neuer\index{Seite}.
   {\griik Καὶ ταῦτα μὲν δὴ ταῦτα}
%  \textgreek{Καὶ ταῦτα μὲν δὴ ταῦτα}{}.
   Und so weiter.
   % ---
   \printindex
\end {document}

答案3

请注意,该函数\textgreek(类似于\textcyrillic)仅改变字体编码。它没有设置“巴别语言”,也没有选择希腊语连字模式!

如果你只需要希腊文中的一些符号或单词(没有连字符、没有自动字符串、没有枚举,...),最简单的解决方案是加载文本alpha包(来自希腊方丹克),而不是使用 Babel 的“希腊语”选项。然后,要么在“任何地方”使用希腊文字字符,要么替换 \textgreek-> \ensuregreek

为了正确使用连字符、自动生成的字符串的翻译、在第二级枚举中使用希腊数字而不是拉丁字母的音译,以及修复非标准 LGR 字体编码的问题,您应该使用希腊语选项并实际设置希腊语 \emph{language},而不仅仅是 emph{script}: \textgreek -> \foreignlanguage{greek}

\documentclass{scrbook} 

\usepackage[ngerman]{babel}
\usepackage{textalpha}
\usepackage{imakeidx}
\makeindex[title=Riesenindex]

\begin {document}
   \frontmatter 
   Etwas Text\index{Text} hier;
   \newpage
   Etwas mehr Text\index{Text@\textsc{Text}} hier.%
   \footnote {\index{In Fussnote}Eine Fussnote}
   % ---
   \mainmatter
   \chapter {Kabidel}
   Viel Text\index{Text} hier; \emph{Auszeichnung\index{Auszeichnung}}
   \newpage
   Auf neuer\index{Seite}.
   
   After loading \emph{textalpha}, you may use Greek literal characters
   anywhere in the document:
   This is fine for single upright symbols like π.
   
   For better kerning and to avoid needless font encoding switches, quotes
   should we wrapped in \verb|\ensuregreek|, if the document should be
   compiled with 8-bit TeX (pdftex).
   \ensuregreek{Καὶ ταῦτα μὲν δὴ ταῦτα.}

   % ---
   \printindex
\end {document}

巴别塔希腊语开发版本允许使用新的临时修饰符来解决原始文档中的问题local-LGR-fixes

相关内容