![如何避免 enumitem 和 nameref 出现“在段落中发现无限粘连收缩”错误](https://linux22.com/image/407168/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%20enumitem%20%E5%92%8C%20nameref%20%E5%87%BA%E7%8E%B0%E2%80%9C%E5%9C%A8%E6%AE%B5%E8%90%BD%E4%B8%AD%E5%8F%91%E7%8E%B0%E6%97%A0%E9%99%90%E7%B2%98%E8%BF%9E%E6%94%B6%E7%BC%A9%E2%80%9D%E9%94%99%E8%AF%AF.png)
组合 enumitem 和 nameref 包时似乎出现了问题。使用以下代码时,我收到错误:
! 在一段中发现无限胶水收缩。
我已经检查了软件包文档,但两个软件包都没有提到另一个软件包组合起来存在问题。
删除 enumitem 包可以消除错误,但我在文档的其他地方需要该包。这也显示了我想要的结果,即与项目标签“Label”的交叉引用。
代码:
\documentclass{article}
\usepackage{enumitem}
\usepackage{nameref}
\begin{document}
\begin{description}
\item [Label\label{Ref}] Text
\end{description}
\begin{itemize}
\item \nameref{Ref}
\end{itemize}
\end{document}
答案1
该nameref
包使用gettitlestring
具有支持的代码enumitem
,但它不完整:它只管理\enit@format
,但不管理\enit@align
。
\documentclass{article}
\usepackage{enumitem}
\usepackage{nameref}
\makeatletter
\g@addto@macro\GTS@PredefinedLeftCmds{%
\GTS@TestLeft\enit@align\GTS@Cdr % package enumitem
}
\g@addto@macro\GTS@DisablePredefinedCmds{%
\let\enit@align\@empty % package enumitem
}
\makeatother
\begin{document}
\begin{description}
\item [Label\label{Ref}] Text
\end{description}
\begin{itemize}
\item \nameref{Ref}
\end{itemize}
\end{document}
如果没有修复,.aux
文件包含
\newlabel{Ref}{{}{1}{\enit@align {\enit@format {Label\label {Ref}}}}{}{}}
修复后,
\newlabel{Ref}{{}{1}{Label}{}{}}