使用 biblatex DeclareCiteCommand 清空 citeindex

使用 biblatex DeclareCiteCommand 清空 citeindex

我想防止 biblatex 使用 OldStyle 图形作为 supercite 索引。

梅威瑟:

% !TEX engine=xelatex
\documentclass{scrreprt}

\usepackage{fontspec}
\setmainfont
     [ BoldFont       = texgyrepagella-bold.otf ,
       ItalicFont     = texgyrepagella-italic.otf ,
       BoldItalicFont = texgyrepagella-bolditalic.otf,
       Numbers = OldStyle ]
     {texgyrepagella-regular.otf}
 \linespread{1.05}

\newfontfamily\biblatexfont{texgyrepagella-regular.otf}

\usepackage{filecontents}
\begin{filecontents}{mwe.bib}
  @book{book_sze,
    title = {Physics of Semiconductor Devices},
    author = {Sze, S.M.},
    date = {1969},
    publisher = {{WILEY-INTERSCIENCE}},
    location = {{Bell Telephone Laboratories, Incorporated Murray Hill, New Jersey}},
  }
\end{filecontents}


\usepackage{biblatex}
\addbibresource{mwe.bib}

\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
  {}{}{\biblatexfont\usebibmacro{citeindex}}
  {\supercitedelim}{}

\begin{document}
  Test sentence\supercite{book_sze} 1234567
\end{document}

我没有得到任何 citeindex,条目是空的。我正在使用 XeLaTeX。这是错误的 bibmacros 吗?但如果是这样,我在哪里可以找到包含有效 bibmacros 的列表?

答案1

citeindex将作者姓名和标题发送到索引(使用\index),但您的文档没有设置索引,因此该宏不会为您做任何有用的事情。您可以在biblatex.def(v3.14 中第 2305-2309 行)

您的设置中的原始定义\supercite(如果您没有将任何样式选项传递给,biblatex则相当于style=numeric,)可以在以下位置找到:numeric.cbx(版本 3.14 中第 98-108 行)

\DeclareCiteCommand{\supercite}[\mkbibsuperscript]
  {\iffieldundef{prenote}
     {}
     {\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}
     {}
     {\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\supercitedelim}
  {}

如果你将其与 MWE 中的定义进行比较,你会发现 MWE 缺少对前后注的检查和警告,更重要的是,MWE 缺少

\usebibmacro{cite}

bibmacrocite负责以样式numeric(和大多数其他样式)打印实际的引用标签,所以这解释了为什么如果您将其省略则看不到任何内容。

我可能会定义你\supercite如下

\newrobustcmd{\mkbibsuperscriptoldstyle}[1]{\mkbibsuperscript{{\biblatexfont#1}}}

\DeclareCiteCommand{\supercite}[\mkbibsuperscriptoldstyle]
  {\iffieldundef{prenote}
     {}
     {\BibliographyWarning{Ignoring prenote argument}}%
   \iffieldundef{postnote}
     {}
     {\BibliographyWarning{Ignoring postnote argument}}}
  {\usebibmacro{citeindex}%
   \usebibmacro{cite}}
  {\supercitedelim}
  {}

(从技术上讲,双括号\mkbibsuperscript{{\biblatexfont#1}}不是必需的,因为\mkbibsuperscript已经有一个明确的组可以防止字体更改泄漏,但我不知道您是否要依赖该实现细节。)


没有所有已定义的 bibmacros 的列表,但仅凭这个列表可能没什么用,因为您需要知道 bibmacros 的实际定义才能理解事物。您应该能够在

  • biblatex.def(基本 bibmacro 和格式定义,始终由 加载biblatex
  • standard.bbx(定义所有标准样式和许多贡献样式使用的书目驱动程序和更复杂的 bibmacros biblatex;并非所有贡献样式都会加载此文件,但大多数都会)
  • <bibstyle>.bbx<citestyle>.cbx其中和<bibstyle><citestyle>您使用的参考书目和引用样式的名称。请注意,这些文件可能会通过\RequireBibliographyStyle\RequireCitationStyle或其他方法加载其他样式。

我通常只 grep 整个biblatex目录(https://github.com/plk/biblatex/tree/master/tex/latex/biblatex) 当我在寻找定义时。

相关内容