在下面的代码中,如果将 更改\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 或可选参数的命令(除非使用 以特殊方式定义)。*
\edef
xparse
解决方案:
\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}
解决了问题,即,然后可以进行计算。