我正在定义自己的书目打印输出,以便与 biblatex/biber 一起使用:
\usepackage[minnames=20,maxnames=60,backend=biber,
natbib=true,sorting=none]{biblatex}
\addbibresource{thisbiblio.bib}
\newcommand{\articleinfo}[1]{
\citename{#1}{author},
``\textit{\citefield{#1}{title}}'',
\citefield{#1}{journaltitle}
\textbf{\citefield{#1}{volume}},
\citefield{#1}{pages}
(\citefield{#1}{year}). \citefield{#1}{note}
}
上面的命令 ( \articleinfo{}
) 在 bibtex 文件 ( ) 中查找某个标签(参数 #1)thisbiblio.bib
,当在文档主体中调用时,它会从 bibtex 条目的字段中打印一堆信息。我有一个名为 的自定义字段note
,我想用它来打印自定义信息,例如“这篇论文的预印本可从 [url] 获得”。但是,我希望这是可选的,即,note
仅当 bibtex 文件中为此特定条目定义了该字段时才打印该字段,否则将其留空。目前我得到了一个笔记打印输出(像这样,用粗体显示)。我该如何实现?
答案1
\newcommand
我建议不要用和创建新命令\citefield
,而是创建一个新的 cite 命令。然后您可以利用 的biblatex
标点符号跟踪器和\printfield
命令来测试字段是否被使用。
根据您的具体要求,您可以使用布尔值和测试来最小化针对不同类型的文章重复的代码,以确定是否存在各种字段。
平均能量损失
\documentclass{article}
\usepackage[minnames=20,maxnames=60,natbib=true,sorting=none]{biblatex}
\addbibresource{biblatex-examples.bib}
% I'm not sure if your field formats should be global or not.
% I've set the article ones globally to match your question.
\DeclareFieldFormat[article]{title}{\mkbibquote{\mkbibemph{#1}}}
\DeclareFieldFormat[article]{journaltitle}{#1}
\DeclareFieldFormat[article]{volume}{\mkbibbold{#1}}
\DeclareFieldFormat[article]{pages}{\mknormrange{#1}}
\DeclareCiteCommand{\articleinfo}
{\usebibmacro{prenote}}
{\renewcommand*{\newunitpunct}{\addcomma\space}%
\usebibmacro{articleinfo}}
{\multicitedelim}
{\usebibmacro{postnote}}
\newbibmacro*{articleinfo}{%
\usebibmacro{author}%
\newunit
\usebibmacro{title}%
\newunit
\usebibmacro{journal}%
\setunit*{\addspace}%
\printfield{volume}%
\newunit
\printfield{pages}%
\setunit{\addspace}%
\printtext[parens]{\usebibmacro{date}}%
\setunit{\addperiod\space}%
\printfield{note}}
\begin{document}
\articleinfo{baez/article}
\end{document}