背景
在我正在排版的 Beamer Presentation 中,作者想要两件事:
- 作者希望既有脚注引用,又有演示文稿末尾的参考列表。
- 在脚注引用中,作者希望列出参考文献的作者和参考文献的出版信息,但不是标题或任何不必要的 URL。
到目前为止,我有解决方案。
- 我可以使用
biblatex
's\footfullcite
或\footcite
命令来引用脚注。 - 对于脚注样式,
chem-acs
参考书目样式适用于标准参考书目项目。
MWE #1:工作案例
\documentclass{beamer}
\begin{filecontents}{test.bib}
@article{testArt,
AUTHOR = {Author, Aa},
TITLE = {A long title illustrating the need to remove the title from footnote citations, at least in Presentations},
JOURNAL = {Lorem Ipsum Stud.},
VOLUME = {15},
PAGES = {1--20},
YEAR = {1999},
URL = {https://math.stackexchange.com},
}
\end{filecontents}
\usepackage[backend=biber,style=chem-acs]{biblatex}
\addbibresource{test.bib}
\begin{document}
\begin{frame}
An important fact\footfullcite{testArt} is useful for the following results.
\end{frame}
\begin{frame}{References}
\printbibliography
\end{frame}
\end{document}
问题
问题是作者还想引用一篇arXiv
文章,如果我使用类型@online
来biblatex
格式化arXiv
参考文献,chem-acs
我不知道该怎么做。它打印标题,而不是任何信息eprint
。
MWE #2:破案
\documentclass{beamer}
\begin{filecontents}{testAppend.bib}
@article{testArt,
AUTHOR = {Author, Aa},
TITLE = {A long title illustrating the need to remove the title from footnote citations, at least in Presentations},
JOURNAL = {Lorem Ipsum Stud.},
VOLUME = {15},
PAGES = {1--20},
YEAR = {1999},
URL = {https://math.stackexchange.com},
}
@online{fakearXiv,
AUTHOR = {Buthor, Bb},
TITLE = {Not a real arXiv article},
DATE = {1950-05-01},
EPRINTTYPE = {arXiv},
EPRINT = {5005.01},
EPRINTCLASS = {math.GM},
}
\end{filecontents}
\usepackage[backend=biber,style=chem-acs]{biblatex}
\addbibresource{testAppend.bib}
\begin{document}
\begin{frame}
An important fact\footfullcite{testArt} is useful for the following results.
We also mention the following result.\footfullcite{fakearXiv}
\end{frame}
\begin{frame}{References}
\printbibliography
\end{frame}
\end{document}
(chem-angew
没有给出明显不同的结果——有一个日期,但仅此而已)。
我认为有两种可行但烦人的解决方案:
A。手动格式化所有脚注引用(\nocite
适当使用),并使用标准参考书目样式来获取正确的演示文稿结尾引用。
B.创建一种新biblatex
样式,其文内引用样式类似于所需的脚注样式(但允许@online
),并且其参考书目样式是任何适当的样式。
问题
是否有其他解决方法,可以保留脚注的作者和出版物格式,但允许
@online
(以及可能的其他不寻常的格式)?
目标
全部我需要的是@article
,并且@online
对于当前的任务来说也是如此;但是,我会尝试给出更通用的标准。(感谢评论者 moewe 的建议。)
A好的解决方案将包括以下字段,用于给定种类的脚注引用,并且不包括title
。(对演示文稿末尾的参考书目没有格式要求;标点符号、格式和排序都很灵活。)
@article
:作者、期刊、年份、卷(可选数字)、页码。
@book
:作者、地点:出版商、(可选版本)、年份(可选卷/部分/等)
@collection
:编辑、地点:出版商、(可选版本)、年份(可选卷/部分/等)
@incollection
:作者,在:编辑,位置:出版商,(可选版本),年份,页数。(可选卷/部分/等)
@inproceedings
:相同,但可以添加组织。
@online
:作者、年份(可选)、EPrint。
@thesis
:作者,(可选类型),机构,年份。
我认为这足以说明问题。作者/编辑,一些字段表明出版商和/或地点(或电子等价物),部分来源的页面,年份。
(注:在这一层次上,问题 233851可能就足够了。[感谢用户 moewe 提醒我注意这个问题。])
A伟大的解决方案将完成上述操作,除了每当文档中的两个来源具有相同的作者和年份时,就必须打印标题或简称(类似于authortitle-terse
,但限制性更强)。
一个出色的解决方案将执行上述操作,并具有更具描述性的最终参考书目文件(特别是允许标题)。(如果不有效地制定新的参考书目样式,这可能是不可能的。)
答案1
由于脚注引用和最后的参考书目中的信息差别很大,我认为有必要完全重新实现独立于参考书目的引用,这实际上允许您将这种引用样式与几乎所有参考书目样式一起使用。
这个想法是为每种条目类型定义一个引用宏,然后打印您想要看到的简短引用。
optionallabeltitle
如果同一作者列表中的同一年份有多个条目,则该宏会打印标题。目前,该宏仅针对@book
s 调用,因为它似乎只与此相关。但您当然可以扩展它。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{testArt,
AUTHOR = {Author, Aa},
TITLE = {A long title illustrating the need to remove the title from footnote citations, at least in Presentations},
JOURNAL = {Lorem Ipsum Stud.},
VOLUME = {15},
PAGES = {1--20},
YEAR = {1999},
URL = {https://math.stackexchange.com},
}
@online{fakearXiv,
AUTHOR = {Buthor, Bb},
TITLE = {Not a real arXiv article},
DATE = {1950-05-01},
EPRINTTYPE = {arXiv},
EPRINT = {5005.01},
EPRINTCLASS = {math.GM},
}
\end{filecontents}
\usepackage[backend=biber,style=chem-acs,labeldateparts,eprint=true]{biblatex}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\newbibmacro{cite:type:article}{%
\usebibmacro{author/translator+others}%
\newunit
\usebibmacro{journal+issuetitle}%
\setunit{\bibpagespunct}%
\printfield{pages}}
\newbibmacro{cite:type:online}{%
\usebibmacro{author/editor+others/translator+others}%
\newunit
\ifboolexpr{test {\iffieldequalstr{eprinttype}{arXiv}} or
test {\iffieldequalstr{eprinttype}{arxiv}}}
{}
{\printlabeldate}%
\newunit
\iftoggle{bbx:eprint}
{\usebibmacro{eprint}}
{}%
\newunit
\iffieldundef{eprint}
{\usebibmacro{url}}
{}}
\newbibmacro{cite:type:book}{%
\usebibmacro{author/translator+others}%
\setunit{\printdelim{nametitledelim}}%
\usebibmacro{optionallabeltitle}%
\newunit
\usebibmacro{cite:publisher+location+edition+date}}
\newbibmacro{cite:type:collection}{%
\usebibmacro{editor+others}%
\newunit
\usebibmacro{cite:publisher+location+edition+date}}
\newbibmacro{cite:type:incollection}{%
\usebibmacro{author/translator+others}%
\newunit
\usebibmacro{in:}%
\usebibmacro{cite:type:collection}%
\setunit{\bibpagespunct}%
\printfield{pages}}
\newbibmacro{cite:type:proceedings}{%
\usebibmacro{editor+others}%
\newunit
\printfield{organization}%
\newunit
\usebibmacro{cite:publisher+location+edition+date}}
\newbibmacro{cite:type:inproceedings}{%
\usebibmacro{author/translator+others}%
\newunit
\usebibmacro{in:}%
\usebibmacro{cite:type:proceedings}%
\setunit{\bibpagespunct}%
\printfield{pages}}
\newbibmacro{cite:type:thesis}{%
\usebibmacro{author}%
\newunit
\printfield{type}%
\newunit
\printlist{institution}%
\setunit*{\addcomma\space}%
\printlabeldate
}
\newbibmacro*{optionallabeltitle}{%
\iffieldundef{extradate}
{}
{\ifnumgreater{\thefield{extradate}}{0}
{\printfield[citetitle]{labeltitle}}
{}}}
\newbibmacro*{cite:publisher+location+edition+date}{%
\printlist{location}%
\setunit*{\addcolon\space}
\printlist{publisher}%
\setunit*{\addcomma\space}%
\printfield{edition}%
\setunit*{\addcomma\space}%
\printlabeldate
\newunit
\iffieldundef{maintitle}
{\printfield{volume}%
\printfield{part}}
{}%
}
\makeatletter
\DeclareCiteCommand{\foothalffullcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\ifbibmacroundef{cite:type:\thefield{entrytype}}
{\blx@warning{No cite macro for entry type '\thefield{entrytype}'.\MessageBreak
Falling back to full bibldriver}%
\usedriver{}{\thefield{entrytype}}}
{\usebibmacro*{cite:type:\thefield{entrytype}}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\makeatother
\DeclareMultiCiteCommand{\foothalffullcites}[\mkbibfootnote]{\foothalffullcite}{\multicitedelim}
\DeclareAutoCiteCommand{foothalffullcite}{\foothalffullcite}{\foothalffullcites}
\ExecuteBibliographyOptions{autocite=foothalffullcite}
\begin{document}
An important fact\autocite{testArt} is useful for the following results.
We also mention\autocite{fakearXiv} the following result.\autocite{markey}
Dolor\autocite{knuth:ct:b} sit\autocite{knuth:ct:c} amet\autocite{companion}
Lorem\autocite{westfahl:space} ipsum \autocite{gaonkar:in}
Lorem\autocite{geer} ipsum \autocite{loh}
Lorem\autocite{pines} ipsum \autocite{brandt}
\printbibliography
\end{document}