你好,乳胶社区!
我正在尝试设置一个特定的命令来引用期刊文章,该命令不显示作者,而是显示期刊标题、日期和文章标题。
我找到了这个答案:如何在 biblatex 中创建 \citejournal、\citebooktitle、\cite... 命令?
我的问题是它没有提供日期和文章标题所以我对它做了一些修改:
\DeclareCiteCommand{\citejournal}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{journal}
\usebibmacro{date}
\usebibmacro{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
现在几乎完美了,因为我可以看到期刊和文章标题,但没有显示日期。
以下是我使用的引用的简短 MWE:
\documentclass{article}
\usepackage[style=authoryear,backend=biber]{biblatex}
\DeclareCiteCommand{\citejournal}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{journal}
\usebibmacro{date}
\usebibmacro{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{test,
author = {Author, A.},
date = {2011-06-12},
title = {Some relevant article},
journal = {Test journal}
}
\end{filecontents}
\bibliography{\jobname}
\begin{document}
Some text~\citejournal{test}
\printbibliography
\end{document}
答案1
基本上,您会看到date
bibmacro 正在被清除,因此没有任何内容可打印。这是您使用authoryear
样式的结果biblatex
。示例文档对于authoryear
样式给出了更多的细节:
由于此样式在参考书目中将日期标签打印在作者/编辑之后,因此参考书目中实际上有两个日期:完整日期规范(例如,“2001”、“2006 年 6 月”、“2008 年 1 月 5 日”)和日期标签(例如,“2006a”),如引文中所示。mergedate 选项控制日期规范是否与日期标签合并。
因此,当样式将两个字段合并在一起时,它会省去 bibmacrodate
并“禁用”它以避免任何问题。
您的选择是:
添加
mergedata=false
以防止样式合并日期,这将保持 bibmacrodate
完整,但也(可能)影响参考书目中项目的呈现。用重新创建 bibmacro
\renewbibmacro*{date}{\printdate}
- 这是宏的原始定义。在引用命令中切换到使用
\usebibmacro{date+extrayear}
。这是样式定义的“较新的”bibmacro,用于制作在参考书目中紧跟在作者之后出现的日期标签。使用不具备这些特性的不同风格。
无论如何,您可能希望根据需要调整字段之间的分隔符。下面的示例练习了上面的选项 3,并在每个单元之间插入了空格。
\DeclareCiteCommand{\citejournal}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{journal}
\setunit{\addspace} % space delimiter
\usebibmacro{date+extrayear}
\setunit{\addspace} % space delimiter
\usebibmacro{title}}
{\multicitedelim}
{\usebibmacro{postnote}}
结果: