使用 scrreprt 的“双面”选项时,脚注中的引用会出现在错误的页面上

使用 scrreprt 的“双面”选项时,脚注中的引用会出现在错误的页面上

scrreprt对于我的工作,我使用biblatex自定义引文命令这个答案。使用单面布局时一切都很好,但如果我使用twoside选项,有时脚注中的参考资料不会与脚注标记出现在同一页,而是移动到下一页或更远。

下面是显示该问题的 MWE:

\documentclass[b5paper,headinclude=true,DIV=12,toc=bibliographynumbered,
%twoside%<- uncomment this
]{scrreprt}
\usepackage{lipsum,hyperref}
\hypersetup{pdfborder={0 0 0},colorlinks=true,unicode}
\usepackage[style=chem-acs,sorting=none,citetracker,pagetracker,backend=biber]{biblatex}
\addbibresource{biblatex-chem.bib}

\makeatletter

% user-level citation command
\DeclareCiteCommand{\sfcite}[\cbx@superscript]
    {\usebibmacro{cite:init}%
        \let\multicitedelim\supercitedelim
        \iffieldundef{prenote}{}{\BibliographyWarning{Ignoring prenote}}%
        \iffieldundef{postnote}{}{\BibliographyWarning{Ignoring postnote}}}
    {\usebibmacro{citeindex}%
        \usebibmacro{cite:super:foot}%
        \usebibmacro{cite:comp}}
    {}
    {\usebibmacro{cite:dump}}

% initialize or save last instcount, save key if seen first on page
\newbibmacro*{cite:super:foot}{%
    \xdef\cbx@key{\thefield{entrykey}}%
    \ifciteseen{}{\csnumgdef{cbx@instcount@\cbx@key}{-100}}%
    \ifsamepage{\value{instcount}}{\csuse{cbx@instcount@\cbx@key}}
        {}{\listxadd{\cbx@savelist}{\cbx@key}}%
    \csnumgdef{cbx@instcount@\cbx@key}{\value{instcount}}}

% citation output
\newrobustcmd*{\cbx@superscript}[1]{%
    \global\toggletrue{cbx@sfcite}
    \mkbibsuperscript{#1}% Footnote's superscript in lining figures
    \cbx@footnote%
    \global\togglefalse{cbx@sfcite}}
\let\cbx@savelist\@empty
\newtoggle{cbx@sfcite}

\AtEveryCitekey{\iftoggle{cbx@sfcite}{}{\cbx@footnote}}

% prints footnotes if last reference on page
\newrobustcmd*{\cbx@footnote}{%
    \ifboolexpr{ test {\ifsamepage{\value{instcount}}{\value{instcount}+1}}
              or test {\ifdefempty{\cbx@savelist}} }
    {}
    {\cbx@sortlist@init%
    \let\do\cbx@do
    \dolistloop{\cbx@sortlist}%
    \global\let\cbx@savelist\@empty}}

% list handler that prints footnotes in order
\def\cbx@do#1{%
    \ifinlist{#1}{\cbx@savelist}
        {\begingroup
            \blx@getdata@cite{#1}%
            \blx@setoptions@type\abx@field@entrytype
            \blx@setoptions@entry
            \footnotetext[\thefield{labelnumber}]{%
            \blx@driver\abx@field@entrytype}%
        \endgroup}
        {}}

% internal list of sorted entry keys
\def\cbx@sortlist@init{%
    \ifcsundef{blx@sort@\the\c@refsection}
        {\global\letcs{\cbx@sortlist}
            {blx@slists@\the\c@refsection @entry@\blx@sorting}}% Biber
        {\global\letcs{\cbx@sortlist}{blx@sort@\the\c@refsection}}}% BibTeX
\let\cbx@sortlist\@empty

\makeatother
\begin{document}
\chapter{First Chapter}
\section{Section}
\subsection{Subsection}
\lipsum*[1]%
\sfcite{Arduengo1991,Booth1962,Augustine1995,Coghill2006}

\lipsum*[2]%
\sfcite{Danopoulos2008}

\lipsum*[3-5]%
\sfcite{Dehnicke1981,Smidt1959}

\lipsum*[5-6]%
\sfcite{Rees2000}

\lipsum*[1-2]

\printbibliography
\end{document}

如果我twoside在 MWE 中取消注释并运行pdflatexbiber那么pdflatex所有脚注引用都会出现在正确的位置,但我需要pdflatex再运行一次才能在 pdf 文件的目录中获取参考书目。运行此操作后,参考文献 6 和 7 移至下一页。

问题是为什么会发生这种情况以及如何解决这个问题。

答案1

使用 启用页面跟踪器pagetracker=page。双面文档pagetracker变为pagetracker=spread。因此\ifsamepage变为“同页”/“对开页”测试。

相关内容