varioref 的 \labelformat 适用于自己的环境

varioref 的 \labelformat 适用于自己的环境

我为简短的伪算法定义了自己的环境,我想使用命令\labelformat来更改的输出\vref。 Varioref 的文档说:

“该命令有两个参数:第一个是计数器的名称,第二个是引用时的表示。这意味着,为了成功使用,必须知道用于生成标签的计数器名称,尽管实际上这不会造成问题。当前计数器编号被选为参数。”

这对于部分来说有效,但不适用于我自己的环境。

梅威瑟:

\documentclass{book}
\usepackage{amsmath}
\usepackage{varioref}

\labelformat{section}{Section~#1}
\labelformat{algctr}{Algorithm~#1}

% own environment for short algorithms
\newcounter{algctr}

\newenvironment{algo}[1]{           
    \medskip\noindent%
    \refstepcounter{algctr}%
    \textbf{Algorithm \thealgctr: #1}\\%
    \begin{minipage}{\textwidth}%
        \leftskip=1.5em%
}{\end{minipage}\par\medskip}%
\numberwithin{algctr}{chapter}

\begin{document}
\section{Testsection}
\label{ex1}
Reference to section: \vref{ex1}, reference to algorithm: \vref{ex2}.
\begin{algo}{Example}\label{ex2}
This is an example.
\end{algo}

\end{document}

输出:

错误输出

答案1

\labelformat命令提供了一种更改计数器行为的方法,但要使该方法有效,计数器必须存在。当您稍后定义计数器时,该定义将重新安装默认行为,因为既不检查是否已定义某些内容。

因此,如果你将计数器声明移到一切\labelformat正常之前(或多或少,你还需要\par在环境定义中添加一个,就像\medskip在 LaTeX 中一样)不是启动垂直模式但使用\vspace),但你会得到:

在此处输入图片描述

相关内容