我正在尝试索引一个包含几个希腊短语的文档。使用 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
第一条建议:如果您需要希腊语,请尽可能使用xetex
或luatex
代替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
。