简短问题:
是否已经有一个 LaTeX 包添加了命令 \RefWithPage LaTeX 脚本,仅当超出阈值时才添加页码?
语境:
使用该包newfloat
定义一些自动移动到附录以供参考的图表和表格,我使用了一些基本命令,例如
\renewcommand{\refWithPage}[1]{\ref{#1}, page~\pageref{#1}}
和
\renewcommand{\refWithPageInParenthesis}[1]{\ref{#1} (page~\pageref{#1})}
为这些图表和表格的提及添加页码(以下称为浮动页码)。
当我将这些浮动元素移入和移出附录时,我想摆脱决定是否使用\ref
或的麻烦\refWithPage
,并考虑扩展我的命令来检查当前页面( )和浮动元素结束的\the\value{page}
页面( )之间的距离。\pageref{...}
我很确定我可以对其进行编程,但我不想重新发明轮子并在已经存在的解决方案中添加另一个解决方案,而是尝试找到一个已经存在的解决方案(没有找到任何解决方案),并想在这里快速询问。
答案1
感谢评论中的指点,我能够将解决方案扩展到类似的问题如何改变 Fancyref 的页码编号行为?并
- 将其移至包中并
- 使阈值距离成为包的一个参数。
以下是使用示例(保存在文件中test.tex
):
\documentclass{article}
\usepackage{fancyref}
\usepackage[threshold=4]{faraway}
\begin{document}
\begin{figure}
\caption{Dummy figure}
\label{fig:dummy}
\end{figure}
\clearpage
\Fref{fig:dummy} contains a dummy figure.
\clearpage
\Fref{fig:dummy} contains a dummy figure.
\clearpage
\Fref{fig:dummy} contains a dummy figure.
\clearpage
\Fref{fig:dummy} contains a dummy figure.
\clearpage
\Fref{fig:dummy} contains a dummy figure.
\end{document}
因为我在上面的例子中将阈值参数的值设为 4,所以这会生成一个 6 页的 pdf 文档,这样
- 包含图,
- 包含文本“图 1 包含一个虚拟图形。”
- 包含文本“图 1 包含一个虚拟图形。”
- 包含文本“图 1 包含一个虚拟图形。”
- 包含文本“第 1 页的图 1 包含一个虚拟图形。”
- 包含文本“第 1 页的图 1 包含一个虚拟图形。”
以下是该文件的代码faraway.sty
:
\ProvidesPackage{faraway}
\RequirePackage{fancyref}
\RequirePackage{xkeyval}
\define@key{faraway.sty}{threshold}[5]{%
\ifnum#1 < -1
\GenericError{Error!}{Threshold must be positive}
\fi
\def\kvfaraway@threshold{#1}%
}
\ExecuteOptionsX{threshold} % Provide the default value (5 here)
\ProcessOptionsX%
\newcommand{\ValueOfThreshold}{%
\kvfaraway@threshold%
}
\renewcommand*{\reftextfaceafter}{\unskip}
\renewcommand*{\reftextafter}{\unskip}
\renewcommand*{\reftextfacebefore}{\unskip}
\renewcommand*{\reftextbefore}{\unskip}
\makeatletter
\let\saved@reftextfaraway\reftextfaraway
\renewcommand*{\reftextfaraway}[1]{%
\begingroup
\def\ref@unknown@value{??}%
\ifx\@tempa\ref@unknown@value
\count@=0 %
\else
\count@\thevpagerefnum\relax
\advance\count@ by -\@tempa\relax
\ifnum\count@<0 \count@=-\count@\fi
\fi
\ifnum\count@<\kvfaraway@threshold%
\unskip
\else
\saved@reftextfaraway{#1}%
\fi
\endgroup
}
\makeatother
(感谢@user31729 的回答 为包裹赋予数值这非常有帮助)