为什么我不能将 \ref*{} 扩展为字符串?

为什么我不能将 \ref*{} 扩展为字符串?

在下面的代码中,如果将 更改\def为 ,\edef代码将崩溃。您也无法执行正常的字符串操作或测试。删除hyperref(并替换\ref*\ref)可以很好地处理\edef。有没有办法将其转换\ref*为可用的字符串?

\documentclass{article}
\usepackage{hyperref}
\begin{document}
\section{Section}\label{first}

\def\temp{\ref*{first}}\noindent Section = \temp

%\edef\temp{\ref*{first}}\noindent Section = \temp

\end{document}

答案1

\ref\edef无论你是否加载都无法进入hyperref。代码

\documentclass{article}
\begin{document}
\section{Section}\label{first}

\edef\temp{\ref{first}}\noindent Section = \temp

\end{document}

停止于

! Missing control sequence inserted.
<inserted text> 
                \inaccessible 
l.5 ...\temp{\ref{first}}\noindent Section = \temp

仅当标签已写入文件时才.aux有效。在任何情况下,都不能输入\edef带有 -variant 或可选参数的命令(除非使用 以特殊方式定义)。*\edefxparse

解决方案:

\documentclass{article}
\usepackage{refcount}
\usepackage{hyperref}
\begin{document}
\section{Section}\label{first}

\edef\temp{\getrefnumber{first}}\noindent Section = \temp

\end{document}

\label在添加后第一次运行时,\temp将扩展为0。重新运行 LaTeX 后,您将获得正确的引用。

答案2

我不确定我的答案是否完美地回答了这个问题,但我遇到的问题似乎非常相关,所以我无论如何都会发布我的答案 - 希望它对某些人有用。

我必须使用引用执行计算,即,将某个数字添加到 的值,例如\ref{some-label}。但是, 的结果\ref{some-label}未被识别为数字(尽管输出(如果打印)是一个数字)。因此,我无法将其用作数字,并收到! Missing number, treated as zero.错误消息。相反,使用\getrefnumber{some-label}解决了问题,即,然后可以进行计算。

相关内容