我想定义一个命令\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
了和。(当我用替换时会得到相同的结果)\printbibliography
lfba2020
\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}