这个问题源自于SourceForge.net:biblatex自 2010 年 4 月起。有用户指出,某种biblatex
样式 ( verbose-inote
) 与pagenote
包(引用其文档,“提供与脚注类似的注释,只是排版在不同的页面上”)。以下是作者 Philipp Lehman 的回应biblatex
:
看起来 pagenote 包中有一个错误,它似乎不支持 pagenotes 中的 \label:
\documentclass{scrartcl} \usepackage{pagenote} \makepagenote \begin{document} Text\pagenote{Page note.\label{test1}} Text\pagenote{See note \ref{test1}.} Text\pagenote{Another page note.\label{test2}} Text\pagenote{See note \ref{test2}.} \printnotes \end{document}
它与 endnotes 包配合得很好,所以我建议您尝试一下:
\documentclass{scrartcl} \usepackage{endnotes} \begin{document} Text\endnote{Endnote.\label{test1}} Text\endnote{See note \ref{test1}.} Text\endnote{Another endnote.\label{test2}} Text\endnote{See note \ref{test2}.} \theendnotes \end{document}
verbose-inote 样式使用 \label+\ref 机制。由于这是 LaTeX 的标准功能,因此我认为这是 pagenote 包的一个错误/限制。
最近,我查看了一下endnotes.sty
(其中还包含包文档)并偶然发现了以下更改说明:
1991 年 9 月 19 日,伦敦,Dominik Wujastyk 修改:
移动了线路
\edef\@currentlabel{\csname p@endnote\endcsname\@theenmark}
脱离 @endnotetext 的定义并进入 @doanenote 的定义,以便 \label 和 \ref 命令在尾注中正常工作。否则,\label 仅指向 \theendnotes 命令前面的最后一个节标题(或其他内容)。
软件包以前的这个错误endnotes
实际上相当于 的当前行为pagenote
。我不清楚软件包的作者pagenote
Peter Wilson 是否不想包含交叉引用机制,或者是否也遇到了与以前pagenote
类似的错误,但对于的详细 inote 样式,中的+机制将非常有用。endnotes
biblatex
\label
\ref
pagenote
现在,你可能已经猜到了真正的问题:pagenote.sty
为了支持标准 LaTeX 交叉引用机制,需要进行哪些修改/添加?
答案1
经过多次尝试和错误,我终于想出了一个看似可行的解决方案。但我怀疑我的方法有些冗长,还有改进的空间。
翻阅endnotes.sty
和pagenote.sty
,我注意到提供了在文件(包含尾注文本的辅助文件)endnotes
中写入更多数据的功能。基本上,部分机制(尤其是)是“外包”的。我尝试了的单次出现,以便将数据写入辅助文件,并且在某些时候部分成功了——页面注释的交叉引用有点奏效,但重置新章节/节的计数器(没有包选项的默认行为)被破坏了。.ent
\refstepcounter
\edef\@currentlabel
pagenote
\refstepcounter
pagenote
continuous
我目前的方法是创建一个“镜像”pagenote
计数器的新计数器。每次\@wrpnote
宏增加原始计数器时,它也会写入\refstepcounter{pnotemirror}
辅助.ent
文件,并且每次原始计数器的值为 0(即已被\chapter
或\section
命令重置)时,“镜像”计数器也会重置。虽然很笨拙,但似乎有效。
\documentclass{scrartcl}
\usepackage[%
continuous% Default: pagenote counter is reset with new chapters/sections
]{pagenote}
\makepagenote
\usepackage{etoolbox}
\newcounter{pnotemirror}
\makeatletter
\renewcommand{\@wrpnote}[2][]{%
\ifnumequal{\value{pagenote}}{0}% NEW
{\@pnwrite\@notefile{}{\string\setcounter{pnotemirror}{0}}}% NEW
{}% NEW
\refstepcounter{pagenote}%
\notenumintext{\thepagenote}%
\ifpnhaschapter
\ifnum\value{pnotesavechap}=\value{chapter}\else
\setcounter{pnotesavechap}{\value{chapter}}%
\addtonotes{\pagenotesubhead{\thechapter}{\f@rtoc}}%
\fi
\else
\ifnum\value{pnotesavechap}=\value{section}\else
\setcounter{pnotesavechap}{\value{section}}%
\addtonotes{\pagenotesubhead{\thesection}{}}%
\fi
\fi
\@pnwrite\@notefile{}
% {\string\noteentry{\thepagenote}{#1}{#2}{\thepage}}% DELETED
{\string\refstepcounter{pnotemirror}\string\noteentry{\thepagenote}{#1}{#2}{\thepage}}% NEW
\endgroup
\@esphack}
\makeatother
\begin{document}
\section{foo}
Text\pagenote{Page note.\label{test1}}
Text\pagenote{See note \ref{test1}.}
Text\pagenote{Another page note.\label{test2}}
Text\pagenote{See note \ref{test2}.}
\section{bar}
Text\pagenote{Page note.\label{test3}}
Text\pagenote{See note \ref{test3}.}
Text\pagenote{Another page note.\label{test4}}
Text\pagenote{See note \ref{test4}.}
\printnotes
\end{document}
编辑:memoir
类模拟了包的功能pagenote
,因此也存在同样的错误。由于memoir
使用了不同的宏名,为了方便起见,这里提供了一个“补丁” memoir
(将在文档序言中添加):
\usepackage{etoolbox}
\newcounter{pnotemirror}
\makeatletter
\renewcommand{\m@m@wrpnote}[2][]{%
\@ifmtarg{#1}{%
\ifnumequal{\value{pagenote}}{0}%
{\m@m@pnwrite\@notefile{}{\string\setcounter{pnotemirror}{0}}}%
{}%
\refstepcounter{pagenote}%
\notenumintext{\thepagenote}}{}%
\ifm@mpn@new@chap
\global\m@mpn@new@chapfalse
\addtonotes{\string\pagenotesubhead{\@chapapp}{\thechapter}{\pnchap}}%
\fi
\ifm@mpn@new@schap
\global\m@mpn@new@schapfalse
\addtonotes{\string\pagenotesubhead{\@chapapp}{}{\pnschap}}%
\fi
\m@m@pnwrite\@notefile{}
{\string\refstepcounter{pnotemirror}\string\noteentry{\thepagenote}{#1}{#2}{\thepage}}%
\endgroup
\@esphack}
\makeatother