我试图坚持使用作者-年份的引用风格。不幸的是,我必须引用几个没有特定作者的网页。在这种情况下,BibLaTeX 使用 -entry 的标题@online
作为下一个选择。为了简洁起见,我想改用出版商和日期。
例如:
\parencite{my-bibid}
生产类似的东西
(一家高端出版商,2020 年)
这是我的 MWE:
\documentclass[fontsize=11pt, a4paper, titlepage, parskip=half]{scrartcl}
\usepackage{typearea}
\usepackage[a4paper, left=5cm, right=2.5cm, top=2.5cm, bottom=2.5cm]{geometry}
\usepackage[onehalfspacing]{setspace}
\usepackage[scaled=.92]{helvet}
\renewcommand{\familydefault}{\sfdefault}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel, german=quotes]{csquotes}
\usepackage[backend=biber, style=authoryear, sorting=nyt, giveninits=true,]{biblatex}
\DeclareNameAlias{sortname}{family-given}
\addbibresource{mybib.bib}
\DefineBibliographyStrings{german}{%
andothers = {et al.},
}
\usepackage{filecontents}
\begin{filecontents}{mybib.bib}
@online{my-bibid,
title = {This is a title way to long to put in the text as a whole string omg look it's so long it doesn't even stop good help us},
publisher = {A fancy Publisher},
year = {2020},
url = {https://latex.is.super.omg},
urldate = {2020-04-18}
}
\end{filecontents}
\begin{document}
I want to cite the publisher and the year \parencite{my-bibid}. <- looks bad
I want to cite the publisher and the year \citefield{my-bibid}{publisher} \citefield{my-bibid}{year} <- but why?!
\printbibliography
\end{document}
我从@cfr 上找到了一些很棒的代码在 BibLaTeX 文本中引用出版商
\DeclareCiteCommand\citepublisher
{\boolfalse{citetracker}% supplemented from moewe's answer: https://tex.stackexchange.com/a/207676/
\boolfalse{pagetracker}}
{\printlist{publisher}}
{\multicitedelim}
{}
不幸的是,我没能在同一命令中打印年份。哦,TexStudio 不会向我显示新\citepublisher
命令的建议。有什么窍门吗?
我感谢您的所有帮助。
答案1
\citefield
不适用于publisher
,因为publisher
它不是普通的文字字段,而是一个列表。对于列表,您必须改用\citelist
。这就是为什么成本加运费来自\citepublisher
在 BibLaTeX 文本中引用出版商使用\printlist
而不是\printfield
。如果你不知道字段的类型,你可以在文档biblatex
(第 2 条)数据库指南> § 2.2输入字段)。
当然,可以\parencite
通过操作相关的 bibmacros 直接改变和朋友的输出。
如果authoryear.cbx
找不到作者或编辑,它会打印一个替换标签
\newbibmacro*{cite:label}{%
\iffieldundef{label}
{\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
{\printtext[bibhyperref]{\printfield{label}}}}
您可以修改此宏以打印发布者(如果可用)
\renewbibmacro*{cite:label}{%
\printtext[bibhyperref]{%
\iffieldundef{label}
{\iflistundef{publisher}
{\printfield[citetitle]{labeltitle}}
{\printlist{publisher}}}
{\printfield{label}}}}
这种方法存在一个问题:从技术上讲@online
条目没有publisher
s,而是使用organization
。例如,你会发现该publisher
字段根本没有显示在参考书目中。在引用中使用它似乎有风险。
那么你可以使用organization
\renewbibmacro*{cite:label}{%
\printtext[bibhyperref]{%
\iffieldundef{label}
{\iflistundef{organization}
{\printfield[citetitle]{labeltitle}}
{\printlist{organization}}}
{\printfield{label}}}}
但我想建议两种不同的方法。
根据你心中现实世界的具体性质,最好
将发布者升级为
author
或editor
。拥有“公司”作者没有问题。author
不一定是人。请记住,带有空格的“公司名称”需要在名称字段中使用双括号保护(请参阅在书目条目的“作者”字段中使用“公司作者”(完整拼写出姓名))。另请参阅我回答如果没有作者使用组织或机构或最近当没有提供作者时,为什么 biblatex 默认使用标题而不是作者,我该如何将其更改为使用 journaltitle?。
如果需要,可以在字段中给出名称的缩写
shortauthor
:仅显示 BibLaTeX 中括号引用的第一个单词。- 如果、和都缺失,您可以使用
label
字段来提供替换标签。但是,应该指出的是, Biber 不会计算唯一性数据,因此如果同一 中有两部同名作品,您将不会在年份后获得消歧义字母。author
editor
translator
label
label
year
通常我更喜欢选项 1,但也许选项 2 更适合您的特定条目。
\documentclass[fontsize=11pt, a4paper, titlepage, parskip=half]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[autostyle, german=quotes]{csquotes}
\usepackage[backend=biber, style=authoryear, giveninits=true,]{biblatex}
\DeclareNameAlias{sortname}{family-given}
\DefineBibliographyStrings{german}{%
andothers = {et\addabbrvspace al\adddot},
}
\begin{filecontents}{\jobname.bib}
@online{test:author,
title = {This is a title way to long to put in the text as a
whole string omg look it's so long it doesn't even
stop good help us},
author = {{A fancy Publisher}},
year = {2020},
url = {https://latex.is.super.omg},
urldate = {2020-04-18}
}
@online{test:label,
title = {This is a title way to long to put in the text as a
whole string omg look it's so long it doesn't even
stop good help us},
label = {Publisher},
year = {2020},
url = {https://latex.is.super.omg},
date = {2020-04-18},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
I want to cite the publisher and the year \autocite{test:author}.
I want to cite the publisher and the year \autocite{test:label}.
\printbibliography
\end{document}
关于问题中显示的代码的一些评论
裸
.
s 不应该出现在 bibstring 的末尾。不要andothers = {et al.},
写\DefineBibliographyStrings{german}{% andothers = {et\addabbrvspace al\adddot}, }
sorting=nyt,
是默认的,style=authoryear,
因此不需要明确给出。- 您可以使用
\autocite
代替\parencite
。\autocite
可以配置为提供括号引用或脚注引用。这样可以更轻松地切换样式。 - 该选项
babel
10年前csquotes
被重新命名为。autostyle