我正在创建一个名为的命令,\fullref{<label>}
该命令接受一个标签并输出标记对象的编号和名称,以及可选的页码,如果该对象位于与交叉引用调用发生的页面不同的页面上,则可以在该页上找到该对象。
例子:
让一个标签\label{chap_intro}
和一个文本… as seen in chapter \fullref{chap_intro}.
。
如果它们在同一页面上,则文本将输出:
…如第 1.1 章“简介”所示。
如果它们在不同的页面上,则文本将输出:
…如第 1.1 章第 2 页“简介”所示。
到目前为止,这是我的命令:
乳胶
\newcommand{\fullref}[1]{\ref{#1}: "\nameref{#1}" \ifthenelse{
\equal{\thepage}{\pageref{#1}} % if the current page and the referenced page are the same
}
{} % then do nothing
{ on page \pageref{#1}} % else append "on page …" if different
}
即使在同一页面上,它也显示“在第...页”。
我做错了什么?
答案1
这瓦里雷夫包及其\vref
用户宏可以完成您的\fullref
宏所要完成的任务。
该软件包与 配合使用babel
,并且它提供了自定义方法,当交叉引用对象恰好位于交叉引用调用上、附近或远处时,应如何排版。此自定义通过重新定义宏\reftextbefore
、\reftextfacebefore
、\reftextafter
、\reftextfaceafter
和来实现\reftextfaraway
;有关完整详细信息,请参阅软件包用户指南的第 5 节。