以下 MWE\beginsong
使用 pdflatex 编译时会为每个生成 PDF 书签,但使用 lua/xelatex 编译时则不会
\documentclass{article}
\usepackage{lipsum}
\usepackage[bookmarks=true]{hyperref}
\usepackage[lyric]{songs}
\begin{document}
\begin{songs}{}
\beginsong{My Song}
\beginverse
\lipsum[1]
\endverse
\endsong
\end{songs}
\end{document}
答案1
手册“PDF 书签和链接”第 11.6.3 节指出
每个 \beginsong 环境都会添加一个 PDF 书签(如果生成 PDF)
...并提供用于自定义此行为的代码片段。如果在可执行文件中包含了默认代码片段的等效内容,则 xelatex 会生成 pdf 书签。我猜想上面提到的“如果生成 PDF”会转化为某种依赖于 pdflatex 的检查,而使用其他引擎时会失败。
以下是修改后的有效 MWE:
\documentclass{article}
\usepackage{lipsum}
\usepackage[bookmarks=true]{hyperref}
\usepackage[lyric]{songs}
% Required for pdf bookmarks if using xelatex/lualatex instead of pdflatex
\renewcommand{\songtarget}[2]
{\pdfbookmark[#1]{\thesongnum. \songtitle}{#2}}
\renewcommand{\songlink}[2]{\hyperlink{#1}{#2}}
\begin{document}
\begin{songs}{}
\beginsong{My Song}
\beginverse
\lipsum[1]
\endverse
\endsong
\end{songs}
\end{document}