我复制了《金融杂志》的参考标准,当我的文章标题带有问号时,参考文献后面也会出现逗号。但是,如果有问号,我会尝试删除逗号。
这里我创建了一个简单的示例:
@article{examplesource,
title={Title of article with question mark?},
author={LastName1, FirstName1 and LastName2, FirstName2 and LastName3, FirstName3},
journal={Journal of Finance},
volume={40},
number={1},
pages={3--73},
year={2005}}
\documentclass{article}
\usepackage[style=ext-authoryear, backend=biber, giveninits=true, uniquelist = false, uniquename=init, isbn=false, maxcitenames=3, dashed=false, maxbibnames=999, doi=false, url=false,giveninits=false]{biblatex}
%Bibliography file with sources
\addbibresource{biblatex-examples.bib}
%Indent of following references rows
\setlength{\bibhang}{15pt}
\renewcommand*{\labelnamepunct}{\addspace}
\DeclareFieldFormat
[article,inbook,incollection,inproceedings,patent,thesis,unpublished]
{title}{#1}
\DeclareFieldFormat{titlecase}{\MakeSentenceCase*{#1}}
%Article definition
\renewbibmacro*{in:}{%
\ifentrytype{article}
{\setunit{\addcomma\space}}
{\printtext{\bibstring{in}\intitlepunct}}}
%Title of Journal
\DeclareFieldFormat{journaltitlecase}{#1}
\renewbibmacro*{journal}{%
\ifboolexpr{
test {\iffieldundef{journaltitle}}and
test {\iffieldundef{journalsubtitle}}}{}
{\printtext[journaltitle]{%
\printfield[journaltitlecase]{journaltitle}%
\setunit{\subtitlepunct}%
\printfield[journaltitlecase]{journalsubtitle}}}}
%Article number, volume & page
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\setunit{\addcomma\space}%
\printfield{eid}}
\DeclareFieldFormat[article,periodical]{volume}{{#1}}
\DeclareFieldFormat{pages}{#1}
%Parentheses instead of commas in text
\UndeclareInnerCiteDelims{parencite}
\DeclareInnerCiteDelims{parencite}{(}{)}
%Commas instead of parentheses for years in references
\DeclareFieldFormat{biblabeldate}{#1}
\DeclareDelimFormat[bib]{nameyeardelim}{\addcomma\space}
\ExecuteBibliographyOptions{innamebeforetitle=true} \DeclareDelimFormat[bib]{nametitledelim}{\addcomma\space}
\begin{document}
\textcite{examplesource} lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.\\
\printbibliography
\end{document}
问号后面有一个逗号,但我只想在标题包含问号的情况下删除逗号。
非常感谢您的建议!
答案1
总结
您需要(1)\addcomma
在宏中使用in:
- 正如您已经在做的那样 - 并且(2)教导\addcomma
不要在后面打印逗号?
,这可以通过来完成\DeclarePunctuationPairs{comma}{*!}
。
这里有两种方法,一种是全局方法,一种是局部方法。两者都基于特征\DeclarePunctuationPairs
(§4.7.5文档)。这通常biblatex
用于定制\addcomma
和 - 命令的行为。\add
\addcomma
用于打印逗号,除非它跟随肯定标点符号。有例外, 尽管:
缩写点、感叹号和问号后允许使用逗号。
为 - 命令指定此类例外列表的方式\add
是通过,其中\DeclarePunctuationPairs
的默认设置为:\addcomma
biblatex.def
\DeclarePunctuationPairs{comma}{*!?}
其中*
代表缩写点。(在美国本地化中,这是列表中唯一的符号,表示问号或感叹号后没有逗号。)
全球方法
如果我们从列表中删除问号,我们实际上就是biblatex
禁止曾经在问号后添加逗号。这是更加广泛比您要求的更多,因为它会影响所有条目类型(您正在寻找article
)并且可能影响所有字段分隔符(不仅仅是在title
和之间journal
)。
\AtBeginBibliography{\DeclarePunctuationPairs{comma}{*!}}
请注意,我选择在参考书目开头激活此设置,以免影响主文档。(Fi,The essay \citetitle{my-article}, however, appeared...
无论问号如何,“however”周围的两个逗号都很重要。“The essay “Was ist Aufklärung?” however, appeared” 之类的内容是不正确的。)
优点:明确的实施。
缺点:这比你要求的要广泛——尽管它可能符合你想要实现的精神,这就是我选择展示它的原因。
本地方法
我们可以编辑 bibmacroin:
来重新定义局部行为\addcomma
,在单个条目的范围内,以便只影响期刊文章的标题。
\renewbibmacro*{in:}{%
\ifentrytype{article}
{\DeclarePunctuationPairs{comma}{*!} % if article, no comma after "?"
\setunit{\addcomma\space}}
{\printtext{\bibstring{in}\intitlepunct}}}
这满足了您的特定要求,它只影响相关的条目类型和字段,不会影响主文档。而且,您始终可以将该方法扩展到其他条目类型(“incollection”?)和标点符号(感叹号?)。
优点:回答您的具体问题。
缺点:有点粗制滥造,不够优雅。我看不出这个解决方案中存在任何技术问题,但更专业的用户可能会发现它存在缺陷。
结果:
这是一个简单的 MWE:
\documentclass{article}
\begin{filecontents}{questionable-articles.bib}
@article{kant-kopf,
title={Versuch über die Krankheiten des Kopfes},
author={Kant, Immanuel},
journal={Königsbergsche Gelehrte und Politische Zeitungen},
pages={13-27},
year={1764}}
@article{kant-aufklaerung,
title={Beantwortung der Frage: Was ist Aufklärung?},
author={Kant, Immanuel},
journal={Berlinische Monatsschrift},
pages={481-494},
year={1784}}
\end{filecontents}
\usepackage{biblatex}
\addbibresource{questionable-articles.bib}
\renewbibmacro*{in:}{%
\ifentrytype{article}
{\DeclarePunctuationPairs{comma}{*!} % if article, no comma after "?"
\setunit{\addcomma\space}}
{\printtext{\bibstring{in}\intitlepunct}}}
\begin{document}
\nocite{*}
\printbibliography
\end{document}