![使用 biblatex DeclareCiteCommand 清空 citeindex](https://linux22.com/image/412777/%E4%BD%BF%E7%94%A8%20biblatex%20DeclareCiteCommand%20%E6%B8%85%E7%A9%BA%20citeindex.png)
我想防止 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
(定义所有标准样式和许多贡献样式使用的书目驱动程序和更复杂的 bibmacrosbiblatex
;并非所有贡献样式都会加载此文件,但大多数都会)<bibstyle>.bbx
<citestyle>.cbx
其中和<bibstyle>
是<citestyle>
您使用的参考书目和引用样式的名称。请注意,这些文件可能会通过\RequireBibliographyStyle
和\RequireCitationStyle
或其他方法加载其他样式。
我通常只 grep 整个biblatex
目录(https://github.com/plk/biblatex/tree/master/tex/latex/biblatex) 当我在寻找定义时。