biblatex verbose-style:页面上第一次出现引用的完整引用

biblatex verbose-style:页面上第一次出现引用的完整引用

在 biblatex 的详细样式中,只有当引用在整篇文章中第一次出现时才会打印完整引用,之后总是打印简短的引用。我希望有相同的行为,但在页面级别。

其工作方式如下:某一引文第一次出现在某一页时,将打印完整引文,该来源的所有后续引文将缩短。然后在下一页,该来源的第一次引文再次是完整引文,所有后续引文再次缩短。

我发现了一个相当古老的问题,它朝着同样的方向发展,然而,我无法将答案应用到我的问题上:biblatex:是否有类似于 \ifciteseen 但在同一页内的命令?

答案1

您可以使用我的答案biblatex:是否有类似于 \ifciteseen 但在同一页内的命令?

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}

\usepackage[style=verbose]{biblatex}

\usepackage[colorlinks]{hyperref}

\makeatletter
\AtEveryCitekey{%
  \ifcsundef{cbx@instcount@curr@\the\c@refsection @\thefield{entrykey}}
    {\csnumgdef{cbx@instcount@curr@\the\c@refsection @\thefield{entrykey}}{0}}
    {}%
  \csnumgdef{cbx@instcount@last@\the\c@refsection @\thefield{entrykey}}{%
    \csuse{cbx@instcount@curr@\the\c@refsection @\thefield{entrykey}}}%
  \csnumgdef{cbx@instcount@curr@\the\c@refsection @\thefield{entrykey}}{\value{instcount}}}

\newcommand\iflastciteonsamepage{%
  \ifsamepage
    {\number\csuse{cbx@instcount@curr@\the\c@refsection @\thefield{entrykey}}}
    {\number\csuse{cbx@instcount@last@\the\c@refsection @\thefield{entrykey}}}}
\makeatother

\renewbibmacro*{cite}{%
  \usebibmacro{cite:citepages}%
  \iflastciteonsamepage
    {\iffieldundef{shorthand}
       {\usebibmacro{cite:short}}
       {\usebibmacro{cite:shorthand}}}
    {\usebibmacro{cite:full}}}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{worman}
dolor \autocite{sigfridsson}
sit \autocite{nussbaum}
amet \autocite{worman}

\clearpage

Lorem \autocite{sigfridsson}
ipsum \autocite{nussbaum}
dolor \autocite{sigfridsson}
sit \autocite{worman}
amet \autocite{nussbaum}

\printbibliography
\end{document}

长脚注和短脚注。

相关内容