Biblatex 输入字段,用于打印实际的纸质关键词

Biblatex 输入字段,用于打印实际的纸质关键词

使用 bibtex 时,关键字字段通常用于与已发表论文相关的实际元数据关键字,但在 biblatex 中,关键字字段用于参考书目过滤器,并且“通常不打印”。也就是说,关键字字段的含义已经改变:它现在用于根据主题对条目进行排序,而不是作为论文中实际元数据的占位符。因此,现在的问题是:为了存储并可能打印论文元数据中出现的关键字,哪个字段或其他解决方案是放置论文关键字元数据的正确/推荐位置?

(仍然存在的类似字段是摘要字段,其仍然用于论文摘要。在这方面,旧的 bibtex 条目可以按原样重复使用。)

答案1

如果您愿意,您可以biblatex打印该字段的内容keywords

字段的内容不会对 隐藏biblatex,它们可以被打印。但该字段具有特殊格式 - 它不是用 分隔的普通列表and,而是一个逗号分隔值的列表,biblatex没有内置函数。所以我们需要做一些我们通常会自己做的\print...事情。biblatex

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\NewBibliographyString{keyword,keywords}
\DefineBibliographyStrings{english}{%
  keyword  = {keyword},
  keywords = {keywords},
}

\newcounter{cbx@keyword@total}
\newcounter{cbx@keyword@count}
\newcommand*{\keywordscount}[1]{%
  \stepcounter{cbx@keyword@total}}

\newcommand*{\keywordsprint}[1]{%
  \stepcounter{cbx@keyword@count}%
  \ifnumless{\value{cbx@keyword@count}}{2}
    {}
    {\addcomma\space}%
  #1}

\DeclareFieldFormat{keywords}{%
  \setcounter{cbx@keyword@total}{0}%
  \setcounter{cbx@keyword@count}{0}%
  \forcsvlist{\keywordscount}{#1}%
  \ifnumgreater{\value{cbx@keyword@total}}{1}
    {\bibstring{keywords}}
    {\bibstring{keyword}}%
  \addcolon\space
  \forcsvlist{\keywordsprint}{#1}%
}

\renewbibmacro*{addendum+pubstate}{%
  \printfield{addendum}%
  \newunit\newblock
  \printfield{pubstate}%
  \newunit\newblock
  \printfield{keywords}}

\begin{filecontents}{\jobname.bib}
@book{appleby,
  author   = {Humphrey Appleby},
  title    = {On the Importance of the Civil Service},
  date     = {1980},
  keywords = {civil-service,importance},
}
\end{filecontents}
\addbibresource{\jobname.bib}


\begin{document}
\cite{appleby}
\printbibliography
\end{document}

Appleby, Humphrey (1980)。《论公务员制度的重要性》。关键词:公务员制度、重要性。


如果您不执着于使用keywords其 csv 格式,您可以定义一个新的、普通的列表字段并使用它。

由于此解决方案使用了biblatex常规列表功能,我们可以减少上面所需的辅助函数。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\begin{filecontents*}{printkeywords.dbx}
\ProvidesFile{printkeywords.dbx}[2020/03/16 add printable keyword list to biblatex data model]

\DeclareDatamodelFields[type=list,datatype=literal]{printkeywords}
\DeclareDatamodelEntryfields{printkeywords}
\end{filecontents*}

\usepackage[style=authoryear, backend=biber, datamodel=printkeywords]{biblatex}

\NewBibliographyString{keyword,keywords}
\DefineBibliographyStrings{english}{%
  keyword  = {keyword},
  keywords = {keywords},
}

\DeclareListWrapperFormat{printkeywords}{%
  \ifnumgreater{\value{listtotal}}{1}
    {\bibstring{keywords}}
    {\bibstring{keyword}}
  \addcolon\space
  #1}

\DeclareListFormat{printkeywords}{%
  \usebibmacro{list:plain}%
  #1\isdot}


\renewbibmacro*{addendum+pubstate}{%
  \printfield{addendum}%
  \newunit\newblock
  \printfield{pubstate}%
  \newunit\newblock
  \printlist{printkeywords}}

\begin{filecontents}{\jobname.bib}
@book{appleby,
  author        = {Humphrey Appleby},
  title         = {On the Importance of the Civil Service},
  date          = {1980},
  printkeywords = {civil-service and importance},
}
\end{filecontents}
\addbibresource{\jobname.bib}


\begin{document}
\cite{appleby}
\printbibliography
\end{document}

MWE 的输出是相同的。

相关内容