为什么涉及新计数器时引用不正确?

为什么涉及新计数器时引用不正确?

MWE 如下。

\documentclass{book}
\usepackage{lipsum}
\usepackage{hyperref}

\usepackage{marginnote}%
\newcounter{original}
\newcommand{\bmark}{\ensuremath{|}}
%produce a breaking mark and a source page number-------------------
\newcommand{\original}{\refstepcounter{original}%increment page counter
    \marginnote{\small\theoriginal}%print source page number in marginpar
    \label{O\theoriginal}%add a label
    \bmark{} %print breaking mark
}

\begin{document}
\frontmatter
\renewcommand{\thepage}{\Roman{page}}

\renewcommand{\theoriginal}{\Roman{original}}
\setcounter{original}{0}

\lipsum[1]
\original

\clearpage
\lipsum[2]
\original

\clearpage
\lipsum[3]
\original

\mainmatter
\renewcommand{\theoriginal}{\arabic{original}}
\setcounter{original}{0}

\chapter{Example}
\lipsum[4]
\original

\clearpage
\lipsum[5]
\original

\clearpage
\lipsum[6]
\original

\chapter{Reference tests}

Number \ref{O2}

\end{document}

如你所见,我\original在上面定义了一个命令。我用它\original来为现在重新输入的原书中的原文产生一个标记和一个源页面。

当我使用\ref{O2}(参见底部的代码)来指代数字 2 时,该数字不大于由\original时,它引用的是 II 而不是 2,尽管它以正确的方式打印 2。为什么?有办法解决吗?

答案1

确实不清楚您想要实现什么。

获得正确锚点的一个解决方案是将计数器链接到另一个计数器。

\documentclass{book}

\usepackage{lipsum}
\usepackage{marginnote}

\usepackage{hyperref}

\newcounter{parentoriginal}
\newcounter{original}[parentoriginal]
\newcommand{\resetoriginal}{\stepcounter{parentoriginal}}
\renewcommand{\theHoriginal}{\theparentoriginal.\arabic{original}}

\newcommand{\bmark}{\ensuremath{|}}
%produce a breaking mark and a source page number-------------------
\newcommand{\original}{%
  \refstepcounter{original}%
  \marginnote{\small\theoriginal}%print source page number in marginpar
  \label{O\theoriginal}%add a label
  \bmark{}%print breaking mark
}

\begin{document}
\frontmatter
\renewcommand{\thepage}{\Roman{page}}
\renewcommand{\theoriginal}{\Roman{original}}

\resetoriginal

\lipsum[1]
\original

\clearpage
\lipsum*[2]\original

\clearpage
\lipsum*[3]\original

\mainmatter
\renewcommand{\theoriginal}{\arabic{original}}
\resetoriginal

\chapter{Example}
\lipsum*[4]\original

\clearpage
\lipsum*[5]\original

\clearpage
\lipsum*[6]\original

\chapter{Reference tests}

Number \ref{O2}

\end{document}

另一个解决方案是修改\theHoriginal

\documentclass{book}

\usepackage{lipsum}
\usepackage{marginnote}

\usepackage{hyperref}

\newcounter{original}
\newcommand{\resetoriginal}{\setcounter{original}{0}}

\newcommand{\bmark}{\ensuremath{|}}
%produce a breaking mark and a source page number-------------------
\newcommand{\original}{%
  \refstepcounter{original}%
  \marginnote{\small\theoriginal}%print source page number in marginpar
  \label{O\theoriginal}%add a label
  \bmark{}%print breaking mark
}

\begin{document}

\frontmatter
\renewcommand{\thepage}{\Roman{page}}
\renewcommand{\theoriginal}{\Roman{original}}
\renewcommand{\theHoriginal}{F\arabic{original}}

\resetoriginal

\lipsum[1]
\original

\clearpage
\lipsum*[2]\original

\clearpage
\lipsum*[3]\original

\mainmatter
\renewcommand{\theoriginal}{\arabic{original}}
\renewcommand{\theHoriginal}{M\arabic{original}}
\resetoriginal

\chapter{Example}
\lipsum*[4]\original

\clearpage
\lipsum*[5]\original

\clearpage
\lipsum*[6]\original

\chapter{Reference tests}

Number \ref{O2}

\end{document}

相关内容