考虑以下 MWE(感谢这篇好文章源自 Maïeul Rouquette(法语),可以同时实现以下功能:
- 用 构建的索引
(tex)xindy
, - 超链接页码和“查看”,
(命名,说,test.tex
):
\begin{filecontents*}{\jobname.xdy}
(markup-keyword-list :open "\targetindexentry{" :close "}" )
(markup-crossref-list :class "see" :open "\seelink{" :sep "; " :close "}{}")
(define-crossref-class "hyperindexformat")
(markup-crossref-list :class "hyperindexformat" :open
"\hyperindexformat{" :sep "; " :close "}{}")
(markup-locref :open "\hyperpage{" :close "}")
(markup-locref :open "\hyperpage{" :close "}" :attr "hyperpage")
\end{filecontents*}
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
\pdftex_if_engine:TF
{
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
}{
\usepackage{fontspec}
}
\ExplSyntaxOff
\usepackage[xindy]{imakeidx}
\usepackage[hyperindex=false]{hyperref}%
%
\newcommand{\targetindexentry}[1]{\hypertarget{index:#1}{#1}}
\newcommand{\seelink}[1]{\see{\hyperlink{index:#1}{#1}}}
%
\makeindex[options=-M \jobname.xdy]
%
\begin{document}
Foo%
\index{café!bar}%
\index{bar}%
%
\printindex
%
\end{document}
如果使用以下命令进行编译:
pdflatex test
(或lualatex test
或xelatex test
),texindy -M test.xdy test.idx
pdflatex test
(或lualatex test
或xelatex test
),
我们注意到 3 种不同的行为:
使用 时
pdflatex
,会出现一个警告(虽然没有什么实际意义,但似乎很严重):pdfTeX 警告(ext4):具有相同标识符(name{index:bar})的目标已被使用,重复项被忽略 \AtBegShi@Output ...ipout \box \AtBeginShipoutBox \fi \fi l.39 \end{document}
使用 时
lualatex
,会出现警告:警告(pdf 后端):忽略名称为“index:bar”的重复目标
有了
xelatex
,一切都好。
我猜测该警告pdflatex
来自文件中的 LICR .ind
:
\begin{theindex}
\providecommand*\lettergroupDefault[1]{}
\providecommand*\lettergroup[1]{%
\par\textbf{#1}\par
\nopagebreak
}
\lettergroup{B}
\item \targetindexentry{bar}, \hyperpage{1}
\indexspace
\lettergroup{C}
\item \targetindexentry{caf\IeC {\'e}}
\subitem \targetindexentry{bar}, \hyperpage{1}
\end{theindex}
以下是我的问题:
如何消除pdflatex
(以及lualatex
) 情况下的警告? (并且如何解释在两种情况下文件相同的情况下xelatex
和之间的差异?)lualatex
.ind