\ifciteibid 宏在哪里定义?

\ifciteibid 宏在哪里定义?

是否有用于 biblatex 引用样式定制的宏ifciteibid和其他测试?我在哪里可以找到它们?它们是否易于重新定义?

先感谢您。

答案1

作为艾伦·芒恩指出在评论中\ifciteibid,手册中记录了类似的引用跟踪器。§4.6.2中记录了biblatex类似的测试。\ifciteibid独立测试,控制这些测试的某些行为的相应选项在§3.1.2.3 中进行了解释[序言选项 > ] 内部

类似的测试的实现\ifciteibid由几个部分组成,所有(或大部分)部分可以在中找到biblatex.sty

第一部分是测试本身的实现(biblatex.styv3.16中的 ll. 2924-2953)。\ifciteibid以下定义将根据前导选项进行切换。

% {<true>}{<false>}
\def\blx@ifciteibid@global{%
  \ifbool{citetracker}
    {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}
    {\@secondoftwo}}

\def\blx@ifciteibid@context{%
  \ifbool{citetracker}
    {\iftoggle{blx@footnote}
       {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
       {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
    {\@secondoftwo}}

\def\blx@ifciteibid@strict{%
  \ifbool{citetracker}
    {\blx@ifcitesingle
       {\blx@ifciteibid@global}
       {\@secondoftwo}}
    {\@secondoftwo}}

\def\blx@ifciteibid@constrict{%
  \ifbool{citetracker}
    {\blx@ifcitesingle
       {\iftoggle{blx@footnote}
          {\blx@ifmpfncheck
             {\blx@imc@iffieldequals{entrykey}\blx@lastkey@foot}
             {\@secondoftwo}}
          {\blx@imc@iffieldequals{entrykey}\blx@lastkey@text}}
       {\@secondoftwo}}
    {\@secondoftwo}}

实施的第二部分是引用跟踪本身(ll. 11227-11263 在biblatex.styv3.16 中)因为ibid我们有

% ibidem tracker
\def\blx@ibidtracker@global{%
  \ifbool{citetracker}
    {\global\let\blx@lastkey@text\abx@field@entrykey}
    {}}

\def\blx@ibidtracker@context{%
  \ifbool{citetracker}
    {\iftoggle{blx@footnote}
       {\global\let\blx@lastkey@foot\abx@field@entrykey}
       {\global\let\blx@lastkey@text\abx@field@entrykey}}
    {}}

\def\blx@ibidtracker@strict{%
  \blx@ifcitesingle
    {\blx@ibidtracker@global}
    {\blx@ibidreset@global}}%

\def\blx@ibidtracker@constrict{%
  \blx@ifcitesingle
    {\blx@mpfnsave
     \blx@ibidtracker@context}
    {\blx@ibidreset@context}}%

\def\blx@ibidreset@force{%
  \global\undef\blx@lastkey@text
  \global\undef\blx@lastkey@foot
  \blx@mpfnreset}

\def\blx@ibidreset@global{%
  \global\undef\blx@lastkey@text}

\def\blx@ibidreset@context{%
  \iftoggle{blx@footnote}
    {\blx@mpfnreset
     \global\undef\blx@lastkey@foot}
    {\global\undef\blx@lastkey@text}}

再次,使用哪一个定义取决于前导码设置。

具体来说,选择测试的确切行为的前导选项实现如下(biblatex.styv3.16中的 ll. 14844-14871

\DeclareBiblatexOption{global,type,entry}[string]{ibidtracker}[true]{%
  \ifcsdef{blx@opt@ibidtracker@#1}
    {\csuse{blx@opt@ibidtracker@#1}}
    {\blx@err@invopt{ibidtracker=#1}{}}}
\def\blx@opt@ibidtracker@true{%
  \let\blx@imc@ifciteibid\blx@ifciteibid@global
  \let\blx@ibidtracker\blx@ibidtracker@global
  \let\blx@ibidreset\blx@ibidreset@global
  \booltrue{citetracker}}
\def\blx@opt@ibidtracker@false{%
  \let\blx@imc@ifciteibid\@secondoftwo
  \let\blx@ibidtracker\relax
  \let\blx@ibidreset\relax}
\def\blx@opt@ibidtracker@context{%
  \let\blx@imc@ifciteibid\blx@ifciteibid@context
  \let\blx@ibidtracker\blx@ibidtracker@context
  \let\blx@ibidreset\blx@ibidreset@context
  \booltrue{citetracker}}
\def\blx@opt@ibidtracker@strict{%
  \let\blx@imc@ifciteibid\blx@ifciteibid@strict
  \let\blx@ibidtracker\blx@ibidtracker@strict
  \let\blx@ibidreset\blx@ibidreset@global
  \booltrue{citetracker}}
\def\blx@opt@ibidtracker@constrict{%
  \let\blx@imc@ifciteibid\blx@ifciteibid@constrict
  \let\blx@ibidtracker\blx@ibidtracker@constrict
  \let\blx@ibidreset\blx@ibidreset@context
  \booltrue{citetracker}}

所有这些测试的大致思路都是相同的:命令(根据选项定义为\blx@ibidtracker之一)将当前引用的条目键保存在辅助宏中。 ( 的内部名称)然后可以将辅助宏中的条目键与当前正在处理的条目的键进行比较。根据设置,可能会区分脚注和文内引用,并且可能会尝试抑制可能产生歧义的“ibid。”如果其中一个 cite 调用同时提到了多个来源。\blx@ibidtracker@...\blx@imc@ifciteibid\ifciteibidbiblatex

相关内容