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 中取消注释并运行pdflatex
,biber
那么pdflatex
所有脚注引用都会出现在正确的位置,但我需要pdflatex
再运行一次才能在 pdf 文件的目录中获取参考书目。运行此操作后,参考文献 6 和 7 移至下一页。
问题是为什么会发生这种情况以及如何解决这个问题。
答案1
使用 启用页面跟踪器pagetracker=page
。双面文档pagetracker
变为pagetracker=spread
。因此\ifsamepage
变为“同页”/“对开页”测试。