如何定义用于打印单个 biblatex 条目的命令?

如何定义用于打印单个 biblatex 条目的命令?

我想定义一个命令\printentry,用于打印具有与主要参考书目相同的样式和枚举的单个 biblatex 条目。

到目前为止,我的策略是声明 100 个书目类别 entry0、entry1、...、entry100,并定义\printentry如下:

\newcounter{prentry}
\newcommand{\printentry}[2][]{\nocite{#2}
    \addtocategory{entry\theprentry}{#2}
    \printbibliography[category=entry\theprentry,heading=none]
    \stepcounter{prentry}}

这是我的 MWE:

\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{references.bib}

\newcounter{int}
\makeatletter
\@whilenum\value{int}<100\do
{\expandafter\DeclareBibliographyCategory{entry\theint}\stepcounter{int}}
\makeatother

\newcounter{prentry}
\newcommand{\printentry}[2][]{\nocite{#2}
    \addtocategory{entry\theprentry}{#2}
    \printbibliography[category=entry\theprentry,heading=none]
    \stepcounter{prentry}}

\begin{document}

Text...

\printentry{lfba2020}

More text...

\printentry{lfba2019}

Even more text...

\nocite{*}
\printbibliography

\end{document}

但是,在\theprentry中有效\addtocategory,而在 中无效\printbibliography。我知道这一点是因为我已经测试过\printentry传入,并且它以所需的形式打印entry0了和。(当我用替换时会得到相同的结果)\printbibliographylfba2020\printentry{lfba2020}\printentry{lfba2019}\theprentry\arabic{prentry}

我该如何修改此代码以获得所需的结果?(或者我应该采取什么其他方法?)

其他内容。如您所见,\printentry有一个未使用的可选参数。如果可能的话,我想用它来更改条目标签(即出现在条目左侧的简写)。

答案1

由于某种原因,\printbibliography \detokenize这是类别名称。因此,在使用宏之前,您需要先将其展开。

下面的应该可以工作,但由于缺少合适的文件,我无法测试它.bib

\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{references.bib}

\newcounter{int}
\makeatletter
\@whilenum\value{int}<100\do
{\expandafter\DeclareBibliographyCategory{entry\theint}\stepcounter{int}}
\makeatother

\newcommand*{\printbibentry}[1]{\printbibliography[category=entry#1,heading=none]}

\newcounter{prentry}
\newcommand{\printentry}[2][]{\nocite{#2}%
  \addtocategory{entry\theprentry}{#2}%
  \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
  \printbibentry
  \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter
    {\theprentry}%
  \stepcounter{prentry}}

\begin{document}
Text...
\printentry{lfba2020}

More text...
\printentry{lfba2019}

Even more text...

\nocite{*}
\printbibliography
\end{document}

这是我用来仅打印文档\printbibliography中具有正常设置的某些条目的解决方案biblatex-ext

主要思想是使用 bibcheck。我们每次都使用相同的 bibcheck,并且只在本地重新定义检查所针对的列表。这避免了污染 bibcheck 或类别的名称空间。

\documentclass{article}
\usepackage[backend=biber]{biblatex}


\makeatletter
\defbibcheck{examplebib}{%
  \xifinlist{\thefield{entrykey}}{\extblxdoc@examplebib@list}
    {}
    {\skipentry}}

\newcommand*{\exampleprintbib}[1]{%
  \nocite{#1}%
  \let\extblxdoc@examplebib@list\empty
  \def\do##1{\listeadd\extblxdoc@examplebib@list{\detokenize{##1}}}%
  \docsvlist{#1}%
  \printbibliography[check=examplebib, heading=none]}
\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}
Text...
\exampleprintbib{sigfridsson}

More text...
\exampleprintbib{worman}

Even more text...

\nocite{sigfridsson,worman,geer}
\printbibliography
\end{document}

三个书目

相关内容