我正在使用 Ubuntu 仓库中的 texlive 版本,但后来开始需要一些软件包最新版本中的一些功能,因此我用来自的新系统替换了仓库中的 texlivehttps://tug.org/texlive/acquire-netinstall.html
然后,一些编译完美的文档开始给出这个错误信息(我们称之为“错误”):
ERROR: Paragraph ended before \Hy@setref@link was complete.
(在一次轻微的心脏病发作之后)我设法将问题隔离到这个(有点像 MWE):
\documentclass{abntex2} % subclass of memoir that loads hyperref
% using any other class is not an option
\usepackage[
backend = biber,
%style = abnt, % this option doesn't matter for the bug
]{biblatex}
\usepackage[thref]{ntheorem}
\begin{document}
\section{Lorem ipsum}\label{loremipsum}
Reference to section~\ref{loremipsum}.
Some other text.
\end{document}
一些评论:
- 部分版本 :
ntheorem: 1.33 2011/08/15
,,abntex2: 1.9.7 2018/11/24
。hyperref: 7.00 2022/06/20
- 将类从 更改为
abntex2
(memoir
其基类)可以消除该错误; - 省略该
thref
选项可ntheorem
消除该bug,但还必须删除编译生成的文件,然后重新编译; - 加载
amsmath
(无论是否选择amsmath
)ntheorem
对该错误没有影响; - 使用
hyperref
中的选项ntheorem
也无效。
看来我并不真正需要thref
包的文档中描述的功能,所以现在我只需将其删除,但如果有更精明的人可以告诉您出了什么问题、是否有办法修复它等,我将不胜感激。
(虽然ntheorem[thref]
似乎hyperref
不太相处融洽,它们与 Ubuntu 存储库中稍微过时的版本运行良好,与类运行良好memoir
,并且ntheorem
应该(理论上=根据其文档)与一起工作hyperref
,只要您给它正确的加载选项,所以我认为指出这个“错误”是有一定价值的)。
答案1
不变的东西
thref
的选择是ntheorem
和始终与不一致hyperref
。
没有hyperref 标签类似
\label{theo}[additional text]
会写
\newlabel{theo}{{1}{1}}[additional text]
到 aux 文件,然后\thref
可以检索additional text
。
如果hyperref
加载,则不再起作用。ntheorem
这里包含一些修复代码,以检索至少一个“关键字”,但可选参数\label
不再可用:
\documentclass{article}
\usepackage[thref,hyperref]{ntheorem}
\usepackage{hyperref}
\begin{document}
\newtheorem{prop}{Proposition}
\begin{prop}[Hallo]\label{theo}[additional text]
abc
\end{prop}
Cite with thref: \thref{theo}
\end{document}
有什么新鲜事
从几个月开始,hyperref
不再延迟加载到nameref
,\begin{document}
而是直接加载。对于您的示例,这意味着hyperref
和nameref
都已加载前 ntheorem
因此不再覆盖其\label
定义来至少部分修复该thref
选项造成的损害。
因此,要么不要使用此选项,要么强制加载ntheorem
之前的内容hyperref
:
\AddToHook{package/hyperref/before}{\RequirePackage[thref,hyperref]{ntheorem}}
\documentclass ...
2023 年有什么新内容
自 LaTeX 版本 2023-06-01 起,LaTeX 内核本身定义\label
为链接所需。hyperref
因此以后不再重新定义它。
现在thref
ntheorem 选项确实有害,因为它\label
以 LaTeX 和 无法使用的方式重新定义hyperref
。不应再使用该选项!