问题
我想用不同的介词来介绍会议演示文稿。例如,在英语中,最好使用“At: Conference Name”而不是“In: Conference Name”。之所以出现后者,是因为我一直将会议记录为文章,将会议名称记录为期刊——也许有更好的方法?
平均能量损失
以下是正常行为的 MWE:
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
author = {Sam Public},
year = {2000},
journal = {Journal of Amazing Ideas},
title = {Some Hargle Bargle},
pubtype = {peerreviewied}
}
@article{public2001,
author = {Sam Public},
year = {2001},
journal = {Conference of Amazing Ideas},
title = {Some Hargle Bargle},
pubtype = {presentation}
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\cite{public2000}, \cite{public2001}
\printbibliography
\end{document}
尝试解决方案
为了获得所需的行为,我添加了一个pubtype
字段(参见 MWE),并尝试根据以下值将输出硬编码为“At:” pubtype
:
\renewbibmacro{in:}{%
\ifentrytype{article}{
\iffieldequalstr{pubtype}{presentation}{%
\printtext{At:\intitlepunct}%
}{%
\printtext{\bibstring{in}\intitlepunct}%
}%
}{\printtext{\bibstring{in}\intitlepunct}}
}
但是,它似乎没有考虑pubtype
有效字段 — 或者至少,它似乎无法测试其值。(输出保持不变,但如果将其从 if 块中取出,它会打印“At:”。)
我尝试pubtype
根据看似相关的答案以几种不同的方式将其定义为一个领域,但似乎没有任何改变。
答案1
David Purton 已经回答了当前的紧急问题,但请允许我收集我的评论和其他想法来形成一个答案。
- 您可以使用 bibstrings 而不是硬编码的“At:”,这样就可以更轻松地将其翻译成其他语言。
- 所有条目类型都支持该
entrysubtype
字段,有些类型还支持附加type
字段(@unpublished
、@report
、@thesis
、@misc
、@manual
、@booklet
...)。该字段的内容type
通常打印在参考书目中,entrysubtype
不打印。因此,您可以使用entrysubtype
自定义字段,而不是使用文件来让 Biberpubtype
知道。biblatex
.dbx
- 我不会将其用于
@article
谈话/演示。@article
它实际上仅适用于期刊上发表的论文。- 我不太介意使用
@inproceedings
,但这还是有点牵强。@inproceedings
旨在用于会议论文集中已发表的论文,因此它更接近我们这里的内容,但还不够。但它的优点是支持有用的字段eventtitle
、eventdate
和venue
。 - 自
biblatex
3.11 起,@unpublished
还支持eventtitle
、eventdate
和venue
(应大众要求)所以@unpublished
如果你不太担心向后兼容性的话,这是一个非常好的主意。
- 我不太介意使用
所以我可能会尝试类似
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
author = {Sam Public},
year = {2000},
journal = {Journal of Amazing Ideas},
title = {Some Hargle Bargle},
}
@unpublished{public2001,
author = {Sam Public},
date = {2001-04-06},
eventtitle = {Conference of Amazing Ideas},
venue = {Duckburg},
eventdate = {2001-04-05/2001-04-07},
title = {Some Hargle Bargle},
type = {presentation},
}
\end{filecontents}
\usepackage[backend=biber,style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}
\NewBibliographyString{at}
\NewBibliographyString{presentation}
\DefineBibliographyStrings{english}{
at = {at},
presentation = {presentation},
}
\DeclareFieldFormat[unpublished]{eventtitle}{%
\iffieldequalstr{type}{presentation}
{\bibstring{at}\addcolon\space}
{}%
#1}
\begin{document}
\cite{public2000,public2001}
\printbibliography
\end{document}
如果您不想在参考书目中看到“介绍”,请使用entrysubtype
而不是type
(在字段格式的测试中也是如此eventtitle
)。
\DeclareFieldFormat[unpublished]{eventtitle}{%
\iffieldequalstr{entrysubtype}{presentation}
{\bibstring{at}\addcolon\space}
{}%
#1}
答案2
需要先定义自定义字段,然后才能使用它。
您可以将定义放在biblatex-dm.cfg
与文件相同的目录中tex
。
平均能量损失
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{public2000,
author = {Sam Public},
year = {2000},
journal = {Journal of Amazing Ideas},
title = {Some Hargle Bargle},
pubtype = {peerreviewied}
}
@article{public2001,
author = {Sam Public},
year = {2001},
journal = {Conference of Amazing Ideas},
title = {Some Hargle Bargle},
pubtype = {presentation}
}
\end{filecontents}
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field, datatype=literal]{pubtype}
\end{filecontents}
\usepackage[style=authoryear-comp]{biblatex}
\addbibresource{\jobname.bib}
\renewbibmacro{in:}{%
\ifentrytype{article}
{\iffieldequalstr{pubtype}{presentation}
{\printtext{At}}
{\bibstring{in}}}
{\printtext{\bibstring{in}}}%
\printunit{\intitlepunct}}
\begin{document}
\cite{public2000}, \cite{public2001}
\printbibliography
\end{document}