我需要根据条目类型使用 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
)。