我使用 autoref 来引用文中的表格,例如
在 中
\autoref{tab:main_result}
,您可以看到...
我希望能够引用一个列出所调用页面的变量tab:main_result
。最终目标是能够将该引用放入表格注释中(例如“有关此表格的讨论,请参阅第 XX 页”)。
这可能吗?我知道我可以参考表格注释中的部分,但我希望能够参考页面。
答案1
像这样吗?
\documentclass{article}
\usepackage{varioref}
\usepackage[colorlinks]{hyperref}
\usepackage[noabbrev]{cleveref}
\begin{document}
\begin{table} \caption{A}\label{tab:main} \end{table}
\clearpage \null \clearpage
In \vref{tab:main}, you can see \dots
For a discussion of \cref{tab:main}, see \cpageref{tab:main}.
\end{document}
答案2
我第一次读到这个时,以为问题是在询问一个命令,该命令给出包含对给定表的引用的页面列表。也就是说,类似于反向引用for\autoref
而不是 for \cite
。重读该问题可能没有要求这样做,但尽管如此,我认为这是一个有趣的问题,下面的代码是提供此功能的一种方法。
该代码通过重新定义\autoref
命令来工作,以便每当调用它时,它首先将当前页码添加到相应的latex3序列。在文档末尾,此序列将保存到辅助文件中。一旦文档至少被编译一次,该命令\pagerefs{...}
可用于打印引用出现的页面列表。因此,例如,下面的 MWE 产生:
以下是代码:
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\usepackage{xparse}
\usepackage{hyperref}
\ExplSyntaxOn
\NewDocumentCommand\PageReferences{mm}{
\seq_if_exist:cF {g__pages_#1_seq}{
\seq_new:c {g__pages_#1_seq}
\seq_gset_from_clist:cn {g__pages_#1_seq} {#2}
}
}
\RenewDocumentCommand\autoref{sm}{
\seq_if_exist:cF {g_pages_#2_seq}{
\seq_new:c {g_pages_#2_seq}
\AtEndDocument{
\iow_now:cx { @auxout } {
\token_to_str:N \PageReferences{#2} { \seq_use:cn {g_pages_#2_seq}{,}}
}
}
}
\seq_if_in:cxF {g_pages_#2_seq} {\thepage} {
\seq_gput_right:cx {g_pages_#2_seq} {\thepage}
}
% now call the real autoref, which is really \HyPsd@autoref
\IfBooleanTF{#1}{\csuse{HyPsd@autoref}*{#2}}{\csuse{HyPsd@autoref}{#2}}
}
\NewDocumentCommand\pagerefs{m}{
\seq_if_exist:cTF {g__pages_#1_seq}{
\seq_use:cnnn {g__pages_#1_seq} { ~and~ } { ,~ } { ,~and~ }
}{??}
}
\ExplSyntaxOff
\begin{document}
\begin{equation}\label{E:1} 1+1=2 \end{equation}
Look at \autoref{E:1}! It occurs on pages \pagerefs{E:1}.
\lipsum
Look at \autoref{E:1}
\lipsum
Look at \autoref{E:1}
\lipsum
Look at \autoref{E:1}
\lipsum
Look at \autoref{E:1}
\lipsum
Look at \autoref{E:1}
\lipsum
\end{document}