Biblatex:引用出现不同的参考标记

Biblatex:引用出现不同的参考标记

我正在编写报告,使用biblatex这个biblatex-chem包,并且\fullfootcite因为与脚注集成而使用这个命令。然而我注意到

  1. 如果同一参考文献被引用多次,它将以不同的参考编号出现,并且在页脚中出现两次;
  2. 尽管我使用了该autopunct=true选项,文本中的引用仍然出现在逗号之前,而不是应该出现在逗号之后。

    \documentclass[11pt,a4paper]{memoir}
    \usepackage[backend=biber,style=chem-acs,subentry,minnames=3,maxnames=100,autopunct=true]{biblatex}
    \bibliography{bibli}
    
    \begin{document}
    A procedure\footfullcite{Harjani:2009hd}, which was reported. The same procedure\footfullcite{Harjani:2009hd} applied with another product.
    \end{document}
    

答案1

\autocite移动尾随标点符号。chem-acs样式会加载选项设置autopunct=true和。因此,您可以使用而不是来实现autocite=superscript所需的内联引用输出。对于脚注,您可以重新定义为\autocite\footfullcite\supercite\superfullciteJoseph Wright 的另一种引用风格

\documentclass{article}
\usepackage[style=chem-acs,subentry,citetracker]{biblatex}
\usepackage[colorlinks]{hyperref}

\makeatletter
% http://www.texdev.net/2010/03/08/biblatex-numbered-citations-as-footnotes/
\DeclareCiteCommand{\supercite}[\cbx@superscript]%
  {\usebibmacro{cite:init}%
   \let\multicitedelim=\supercitedelim
   \iffieldundef{prenote}{}{\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}{}{\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \usebibmacro{superfullcite}%
   \usebibmacro{cite:comp}}
  {}
  {\usebibmacro{cite:dump}}

\newbibmacro*{superfullcite}{%
  \ifciteseen{}{\xappto\cbx@citehook{%
    \noexpand\footnotetext[\thefield{labelnumber}]{\fullcite{\thefield{entrykey}}.}}}}

\newrobustcmd{\cbx@superscript}[1]{%
  \mkbibsuperscript{#1}%
  \cbx@citehook
  \global\let\cbx@citehook=\empty}
\let\cbx@citehook=\empty
\makeatother

\addbibresource{biblatex-examples.bib}
\begin{document}
\null\vfill\noindent
New citation \autocite{stdmodel}.
New and recurrent citations \autocite{stdmodel,companion}.
\clearpage
\null\vfill\noindent
New citation \autocite{ctan}.
Recurrent citations from previous and current pages \autocite{companion,glashow,ctan}.
\clearpage
\printbibliography
\end{document}

这是第一页的输出:

在此处输入图片描述

第二:

在此处输入图片描述

请注意,这样可以避免重复引用脚注,因为只在第一次引用条目时打印脚注。每页最多打印一次脚注可以做到,但是解决起来比较混乱。

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=chem-acs,subentry,citetracker,pagetracker=page]{biblatex}
\usepackage[colorlinks]{hyperref}

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

% save current and last inline instcount, save key if seen first on page
\newbibmacro*{cite:super:foot}{%
  \xdef\cbx@key{\thefield{entrykey}}%
  \ifsamepage{\value{instcount}}{\csuse{cbx@instcount@\cbx@key}}{}{%
    \listxadd{\cbx@savelist}{\cbx@key}%
    \ifnumequal{\value{cbx@tempcntd}}{0}{%
      \defcounter{cbx@tempcntc}{\value{instcount}}%
      \loop\ifnum\value{cbx@tempcntc}>0
        \ifsamepage{\value{instcount}}{\value{cbx@tempcntc}}
          {\ifcsundef{blx@fnpage@\number\numexpr\value{cbx@tempcntc}}
             {\setcounter{cbx@tempcntd}{\value{cbx@tempcntc}}}{}%
           \stepcounter{cbx@tempcntc}}
          {\setcounter{cbx@tempcntc}{0}}%
      \repeat}{}}%
  \csnumgdef{cbx@instcount@\cbx@key}{\value{instcount}}}
\let\cbx@savelist\@empty
\newcounter{cbx@tempcntc}
\newcounter{cbx@tempcntd}
\setcounter{cbx@tempcntd}{0}

\newrobustcmd*{\cbx@superscript}[1]{%
  \global\toggletrue{cbx@supercite}
  \mkbibsuperscript{#1}%
  \cbx@footnote%
  \global\togglefalse{cbx@supercite}}
\let\cbx@savelist\@empty
\newtoggle{cbx@supercite}

\AtEveryCitekey{%
  \ifciteseen{}{\csnumgdef{cbx@instcount@\thefield{entrykey}}{-1}}%
  \iftoggle{cbx@supercite}{}{\cbx@footnote}}
\AtEveryBibitem{\cbx@footnote}
\AtEveryLositem{\cbx@footnote}

% defer citation footnotes to last inline reference instance on page
\newrobustcmd*{\cbx@footnote}{%
  \ifboolexpr{ not test {\ifdefempty{\cbx@savelist}}
               and test {\ifnumequal{\value{instcount}}{\value{cbx@tempcntd}}} }
    {\cbx@sortlist@init%
     \let\do\cbx@do
     \dolistloop{\cbx@sortlist}%
     \global\let\cbx@savelist\@empty
     \setcounter{cbx@tempcntd}{0}}{}}

% print footnotes in 'sorting' order
\def\cbx@do#1{%
  \ifinlist{#1}{\cbx@savelist}
    {\begingroup
     \blx@resetdata
     \blx@getdata@cite{#1}%
     \blx@setoptions@type\abx@field@entrytype
     \blx@setoptions@entry
     \blx@execute
     \blx@beglang
     \iffieldundef{shorthand}
       {\gdef\@thefnmark{\printfield{labelprefix}\printfield{labelnumber}}}
       {\gdef\@thefnmark{\printfield{shorthand}}}%
     \gappto\@thefnmark{\blx@initunit}%
     \ifhyperref
       {\H@@footnotetext{\blx@driver\abx@field@entrytype}}
       {\@footnotetext{\blx@driver\abx@field@entrytype}}%
     \blx@endlang
     \endgroup}
    {}}

% access internal list of sorted entry keys
\def\cbx@sortlist@init{%
  \global\letcs{\cbx@sortlist}
    {blx@slist@entry@\the\c@refsection @\blx@refcontext@context}}
\let\cbx@sortlist\@empty
\makeatother

\addbibresource{biblatex-examples.bib}
\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
\begin{document}
\null\vfill\noindent
New citation \autocite{stdmodel}.
New and recurrent citations \autocite{stdmodel,companion}.
Vanilla footnote with citation.\footnote{Following \textcite{weinberg}...}
\clearpage
\null\vfill\noindent
New citation \autocite{ctan}.
Recurrent citations from previous and current pages \autocite{companion,glashow,ctan}.
\clearpage
\printbibliography
\end{document}

这是第一页的输出:

在此处输入图片描述

第二:

在此处输入图片描述

相关内容