nameref 循环引用导致 TeX 容量超出

nameref 循环引用导致 TeX 容量超出

更新:感谢大家的帮助,看来我只是误解了 \nameref 的工作原理。我没有意识到它打印了整个标题,因此正如 Ulrike 所评论的那样,代码看起来只是无限/迭代扩展的自引用。我需要找到另一个包/命令来实现我想要的。对不起,我的错误!我会接受 Simon 的回答并关闭问题。

我正在尝试使用 minted 包将一些代码块插入我的 LaTeX 文档(如果相关的话,我正在使用 TeXStudio)。我想在标题中说明这些不同的文件如何相互关联,为此,我在第一个代码块的标题中引用了第二个代码块,反之亦然(即有一个引用循环)。我使用了一个附加环境(“代码”),这样长代码就可以跨越多个页面。

当我使用 \ref 命令(它仅提供代码块/列表的编号)时,一切都按预期工作。工作代码的 MWE:

\documentclass{article}
\usepackage{minted}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[hidelinks]{hyperref}
\usepackage{cleveref}


\newenvironment{code}{\captionsetup{type=listing}}{}

\begin{document}


\begin{code}
    \captionof{listing}{Some reference to \ref{code:secondcode}.}
    \label{code:firstcode}
\end{code}

\begin{code}
    \captionof{listing}{Some reference to \ref{code:firstcode}.}
    \label{code:secondcode}
\end{code}

\end{document}

但是,如果我将 \ref 换成 \nameref,则编译时会抛出一个错误:第 15 行:超出 TeX 容量,抱歉 [grouping levels=255]。...e 引用 \nameref{code:secondcode}。}

非工作代码的 MWE:

\documentclass{article}
\usepackage{minted}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[hidelinks]{hyperref}
\usepackage{cleveref}


\newenvironment{code}{\captionsetup{type=listing}}{}

\begin{document}


\begin{code}
    \captionof{listing}{Some reference to \nameref{code:secondcode}.}
    \label{code:firstcode}
\end{code}

\begin{code}
    \captionof{listing}{Some reference to \nameref{code:firstcode}.}
    \label{code:secondcode}
\end{code}

\end{document}

我很乐意以某种方式解决这个问题,但我不知道该怎么做,而且解决 nameref 子包中的问题也超出了我的 LaTeX 技能。我不确定它是否与 caption 或 listing 包有任何关系。

有什么建议么?

编辑:忘了说 - 当删除其中一个 \namerefs 时,代码也能正常工作,因此它以某种方式与循环引用相关。

更简单的例子,只需加载nameref

\documentclass{article}

\usepackage{nameref}

\begin{document}


\begin{figure}
    \caption{Some reference to \nameref{code:secondcode}.}
    \label{code:firstcode}
\end{figure}

\begin{figure}
    \caption{Some reference to \nameref{code:firstcode}.}
    \label{code:secondcode}
\end{figure}

\end{document}

答案1

使用\Cref而不是\nameref

\documentclass{article}
\usepackage{minted}
\usepackage{caption}
\usepackage{subcaption}
\usepackage[hidelinks]{hyperref}
\usepackage{cleveref}


\newenvironment{code}{\captionsetup{type=listing}}{}

\begin{document}
    
    
    \begin{code}
        \captionof{listing}{Some reference to \Cref{code:secondcode}.}
        \label{code:firstcode}
    \end{code}
    
    \begin{code}
        \captionof{listing}{Some reference to \Cref{code:firstcode}.}
        \label{code:secondcode}
    \end{code}
    
\end{document}

A

相关内容