使用 biblatex 条目类型选择正确的字段

使用 biblatex 条目类型选择正确的字段

我需要根据条目类型使用 biblatex 从参考文献中选择性地检索标题。

也就是说,对于文章、收藏、书内以及描述在较大作品中出版的较小作品的类似条目类型,我想要书籍或期刊的标题作品出现于(即书名或期刊领域),而不是文章本身的标题。对于书籍和其他专著,我只需要普通的标题。

我可以从 biblatex 文档中看到如何按条目类型选择性地打印参考文献,但我看不出如何从单个键中获取条目类型。是否有类似的东西\getentrytype{<key>}可以返回字符串“article”、“incollection”、“book”等,以便我可以让 LaTeX 以编程方式决定要检索哪个字段?

答案1

如果你不需要正常的行为labeltitle(所以这个想法可能不适用于基于作者标题的样式),那么一种方法就是重新配置labeltitle分辨率,这样你就可以得到所需的标题类型

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

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

\DeclareLabeltitle[article]{%
  \field{journaltitle}
}

\DeclareLabeltitle[inbook,incollection,inproceedings]{%
  \field{booktitle}
  \field{maintitle}
}

\DeclareFieldFormat*{citetitle}{\mkbibemph{#1}}

\addbibresource{biblatex-examples.bib}


\begin{document}
\citetitle{sigfridsson}

\citetitle{worman}

\citetitle{nussbaum}

\citetitle{geer}

\citetitle{pines}

\printbibliography
\end{document}

计算化学杂志//人物表述//亚里士多德的《动物的动能》//伯爵、圣人、主教、吟游诗人——和音乐//中世纪犹太历史和文学研究


如果该labeltitle解决方案对您不起作用,您将必须采用该方法的手动版本。

以下实现了\petercitetitle通常打印字段title,但可以配置为根据类型打印不同的字段。

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

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

\DeclareFieldFormat*{petercitetitle}{\mkbibemph{#1}}

\DeclareCiteCommand{\petercitetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifbibmacroundef{peter:citetitle:\strfield{entrytype}}
     {\printfield[petercitetitle]{title}}
     {\usebibmacro*{peter:citetitle:\strfield{entrytype}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}


% you can define exceptions to printing 'title'
% for type <type> by defining a bibmacro called
% 'peter:citetitle:<type>'
% the macros usually have the same structure, so this
% could be packed up into a macro

\newbibmacro*{peter:citetitle:article}{%
  \printfield[petercitetitle]{journaltitle}}

\newbibmacro*{peter:citetitle:inbook}{%
  \printfield[petercitetitle]{booktitle}}

\letbibmacro*{peter:citetitle:incollection}{peter:citetitle:inbook}
\letbibmacro*{peter:citetitle:inproceedings}{peter:citetitle:inbook}

\addbibresource{biblatex-examples.bib}


\begin{document}
\petercitetitle{sigfridsson}

\petercitetitle{worman}

\petercitetitle{nussbaum}

\petercitetitle{geer}

\petercitetitle{pines}

\printbibliography
\end{document}

计算化学杂志//人物塑造//亚里士多德的《动物的动能》//伯爵、圣人、主教、吟游诗人——和音乐//中世纪犹太历史和文学研究

\strfield{entrykey}与您要执行的操作类似\getentrytype{<key>}(除了它始终适用于当前的<key>,您无法轻松提取当前未处理的条目的条目类型,您必须使用切换到该条目\entrydata)。

相关内容