指的是“以上”还是“以下”?

指的是“以上”还是“以下”?

我想知道这是否是一种好的做法,如果是的话,如何实现,以引用如下:“如上所述多于......”或者我是不是走得太远了,只需输入这个词就可以了?

我读过一些关于的内容varioref,但它似乎会产生页码或章节编号,但我找不到如何打印某个章节是位于参考文献之上还是之下。

答案1

您还可以自己实现标签,方法是让标签定义一个标志,然后引用检查标志是否存在。需要一些额外的记录来警告未定义的标签。

\documentclass{article}

\makeatletter
\newcount\here@undef
\newcommand{\here}[1]{%
  \@ifundefined{here@#1@undef}{}{\advance\here@undef by -1}%
  \@namedef{here@#1}{}}
\newcommand{\where}[1]{%
  \@ifundefined{here@#1}{%
    below%
    \@ifundefined{here@#1@undef}{%
      \@namedef{here@#1@undef}{}%
      \advance\here@undef by 1
    }{}%
  }{%
    above%
  }%
}
\AtEndDocument{%
  \ifnum\here@undef>0
    \GenericWarning{}{There were undefined above/below labels}%
  \fi}
\makeatother

\begin{document}

As mentioned \where{test}, $2+2=4$.

We state that $2+2=4$.\here{test}

As mentioned \where{test}, $2+2=4$.

\end{document}

结果

答案2

varioref事实上,你只需要给\vpageref命令一个提示,告诉它要写什么来引用同一页面上的元素。摘自文档:

但实际上\vpageref允许更多的控制。如果有两个可选参数。使用第一个参数,可以指定如果标签和引用位于同一页,则应使用的文本。如果两者彼此靠近,那么这将非常有用,这样它们可能会被分页符分隔开,也可能不会。在这种情况下,我们通常知道(!)引用是在标签之前还是之后,这样我们就可以这样说……参见示例,\vpageref[above]{ex:foo}它显示了……然后会出现“……参见示例多于 这表明 。 。 。 ”

重点是,如果标签和元素之间有分页符,\vpageref则会注意到这一点并插入类似在上一页反而。

答案3

您可以检查页面上标记的 y 坐标并进行比较以决定是否应该打印abovebelowzrefsavepos模块可以帮助解决这个问题:

在此处输入图片描述

\documentclass{article}

\usepackage{zref-savepos}

\newcounter{whereq}
\newcommand{\location}[1]{\zsaveposy{#1}}
\newcommand{\where}[1]{%
  \stepcounter{whereq}% New "where" request
  \location{whereq-\thewhereq}% Mark location
  % Test location based on y-coordinate
  \ifdim\zposy{whereq-\thewhereq}sp<\zposy{#1}sp
    above%
  \else
    below%
  \fi}

\begin{document}

As mentioned \where{test}, $2+2=4$.

We state that $2+2=4$.\location{test}

As mentioned \where{test}, $2+2=4$.

\end{document}

当然,上面的代码并不关心你在哪个页面上执行\location\where。但是,它也可以扩展到以页码为条件。

相关内容