平均能量损失

平均能量损失

我正在定义自己的书目打印输出,以便与 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}

MWE 输出

相关内容