奇怪的 \AtBegShi@Output 警告,用于处理特殊的 .xdy 样式文件,该文件应该能够使 (tex)xindy 和 hyperref 完美地协同工作

奇怪的 \AtBegShi@Output 警告,用于处理特殊的 .xdy 样式文件,该文件应该能够使 (tex)xindy 和 hyperref 完美地协同工作

考虑以下 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}

如果使用以下命令进行编译:

  1. pdflatex test(或lualatex testxelatex test),
  2. texindy -M test.xdy test.idx
  3. pdflatex test(或lualatex testxelatex 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

相关内容