我开始使用 BibLaTeX,遇到了一点问题。目前,一篇文章的引用如下所示:
我想删除文章标题前面的“Übers。”。我的 MWE 如下所示:
@article{asher_indirect_2001,
title = {Indirect speech acts},
volume = {128},
url = {http://www.springerlink.com/index/K4V421247052432T.pdf},
pages = {183--228},
number = {1},
journaltitle = {Synthese},
author = {Asher, Nicholas and Lascarides, Alex},
urldate = {2017-09-05},
date = {2001},
file = {Asher & Lascarides (2006)_ Indirect speech acts.pdf:files/131/Asher & Lascarides (2006)_ Indirect speech acts.pdf:application/pdf}
}
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[english, german]{babel}
\usepackage[T1]{fontenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage[
backend=biber,
bibencoding=latin1,
isbn = false,
doi = false,
url = false,
style = authoryear,
]
{biblatex}
\renewcommand{\postnotedelim}{\addcolon\addspace} % Doppeltpunkt in der Kurzzitierweise nach Jahr
\DeclareFieldFormat{postnote}{#1} % kein S. in der Kurzzitierweise vor der Seitenzahl
\renewcommand{\labelnamepunct}{\addcolon\addspace} %Doppelpunkt statt Punkt hinter der Jahresangabe im Literaturverzeichnis
\AtEveryBibitem{\clearfield{pagetotal}}
\DeclareFieldFormat[article]{citetitle}{#1\midsentence}
\DeclareFieldFormat[article]{title}{#1\midsentence} %Titel bei Artikeln nicht in ""
\DeclareFieldFormat[incollection]{citetitle}{#1\midsentence}
\DeclareFieldFormat[incollection]{title}{#1\midsentence} %Titel bei Sammelbänden nicht in ""
\DeclareFieldFormat[thesis]{citetitle}{#1\midsentence}
\DeclareFieldFormat[thesis]{title}{#1\midsentence} %Titel bei Diss. nicht in ""
\DeclareFieldFormat[unpublished]{citetitle}{#1\midsentence}
\DeclareFieldFormat[unpublished]{title}{#1\midsentence}
%Titel bei unpublished nicht in ""
\DeclareFieldFormat{pages}{#1} % das S. bei Artikeln im Literaturverzeichnis löschen
\renewcommand{\multinamedelim}{\space \& \space}
\renewcommand{\finalnamedelim}{\space \& \space} %Schrägstriche zwischen den Autoren
\DefineBibliographyStrings{german}{%
andothers = {et\ al\adddot}, %et al. statt u.a.
editors = {\mkbibparens{Hgg\adddot}}, %Hgg. plural
}
% kein Komma zwischen Namen und (Hrsg.)
\makeatletter
\renewbibmacro*{bbx:editor}[1]{%
\ifthenelse{\ifuseeditor\AND\NOT\ifnameundef{editor}}
{\ifthenelse{\iffieldequals{fullhash}{\bbx@lasthash}\AND
\NOT\iffirstonpage\AND
\(\NOT\boolean{bbx@inset}\OR
\iffieldequalstr{entrysetcount}{1}\)}
{\bibnamedash}
{\printnames{editor}%
\setunit{\addspace}
\usebibmacro{bbx:savehash}}%
\usebibmacro{#1}%
\clearname{editor}%
\setunit{\addspace}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\addspace}}%
\usebibmacro{date+extrayear}}
%Schriftenreihen in (=)
\renewbibmacro*{series+number}{%
\iffieldundef{series}
{}
{\printtext[parens]{%
\printtext{=\addspace}%
\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}%
\printtext{\addperiod}}
\nopunct}}
%Schriftenreihen an das Ende der Literaturangabe packen
% Herausgeber vor Titel des Sammelbandes
\renewbibmacro*{in:}{%
\printtext{\bibstring{in}\intitlepunct}%
\ifnameundef{bookauthor}
{\ifnameundef{editor}
{\printnames[byeditor]{editor}%
\setunit{\addcomma\space}%
\usebibmacro{translator+othersstrg}%
\clearname{translator}}
{\printnames{editor}%
\setunit{\addcomma\space}%
\usebibmacro{editor+othersstrg}%
\clearname{editor}}}
{\ifnamesequal{author}{bookauthor}
{}
{\printnames{bookauthor}%
\clearname{bookauthor}}}%
\newunit\newblock}
%(Hrsg.) anstelle von hrsg. von bei Schriftenreihen
\renewbibmacro*{byeditor+others}{%
\ifnameundef{editor}
{}
{\printnames[byeditor]{editor}%
\setunit{\addspace}%
\usebibmacro{byeditor+othersstrg}%
\clearname{editor}%
\newunit}%
\usebibmacro{byeditorx}%
\usebibmacro{bytranslator+others}}
%bei Journals die Heftnummer in () nach der Jahreszahlnummer
\renewbibmacro*{journal+issuetitle}{%
\usebibmacro{journal}%
\setunit*{\addspace}%
\iffieldundef{series}
{}
{\newunit
\printfield{series}%
\setunit{\addspace}}%
\printfield{volume}%
\iffieldundef{number}
{}
{\mkbibparens{\printfield{number}}}%
\setunit{\addcomma\space}%
\printfield{eid}%
\setunit{\addspace}%
\usebibmacro{issue+date}%
\setunit{\addcolon\space}%
\usebibmacro{issue}%
\newunit}
\addbibresource{Linguistik.bib}
\begin{document}
\nocite{asher_indirect_2001}
\printbibliography
\end{document}
答案1
有问题的是您对 的重新定义\renewbibmacro*{in:}
。
使用您当前的代码,它会尝试在所有条目类型的“in”后打印编辑器或翻译器。代码测试是否存在editor
,如果存在,则打印编辑器。如果没有,editor
它会打印translator
,如果确实有翻译器,则不进行测试。editor
代码在translator
“Trans./Übers.”后打印“(editor)”/“(Hrsg.)”。在示例的特定情况下,没有editor
,因此代码尝试打印translator
,字段为空,因此不显示任何内容,然后它打印“Übers。”。
对所有条目类型都这样做是没有意义的,@article
因为根本没有编辑器,也很少有翻译器(而且在那个地方也不会出现翻译器),你可能只希望对 这样做@incollection
。但即便如此,在继续之前也应该检查 是否translator
已定义。
我也修改了你的其他代码
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[english, german]{babel}
\usepackage[T1]{fontenc}
\usepackage[
backend=biber,
isbn = false,
doi = false,
url = false,
style = authoryear,
]
{biblatex}
\renewcommand{\postnotedelim}{\addcolon\addspace}
\DeclareFieldFormat{postnote}{#1}
\renewcommand{\labelnamepunct}{\addcolon\addspace}
\AtEveryBibitem{\clearfield{pagetotal}}
\DeclareFieldFormat[article,inbook,incollection,inproceedings,patent,thesis,unpublished]{citetitle}{#1\isdot}
\DeclareFieldFormat[article,inbook,incollection,inproceedings,patent,thesis,unpublished]{title}{#1\isdot}
\DeclareFieldFormat{pages}{#1}
\renewcommand{\multinamedelim}{\addspace\&\space}
\renewcommand{\finalnamedelim}{\multinamedelim}
\DefineBibliographyStrings{german}{%
andothers = {et\addabbrvspace al\adddot},
editors = {Hgg\adddot},
}
% kein Komma zwischen Namen und (Hrsg.)
\DeclareFieldFormat{editortype}{\mkbibparens{#1}}
\DeclareDelimFormat{editortypedelim}{\addspace}
\makeatletter
\renewbibmacro*{bbx:editor}[1]{%
\ifboolexpr{
test \ifuseeditor
and
not test {\ifnameundef{editor}}
}
{\usebibmacro{bbx:dashcheck}
{\bibnamedash}
{\printnames{editor}%
\setunit{\printdelim{editortypedelim}}%
\usebibmacro{bbx:savehash}}%
\usebibmacro{#1}%
\clearname{editor}%
\setunit{\printdelim{nameyeardelim}}}%
{\global\undef\bbx@lasthash
\usebibmacro{labeltitle}%
\setunit*{\printdelim{nonameyeardelim}}}%
\usebibmacro{date+extrayear}}
\makeatother
%Schriftenreihen in (=)
\renewbibmacro*{series+number}{%
\iffieldundef{series}
{}
{\printtext[parens]{%
\printtext{=\addspace}%
\printfield{series}%
\setunit*{\addcomma\space}%
\printfield{number}%
\printtext{\addperiod}}
\nopunct}}
%Schriftenreihen an das Ende der Literaturangabe packen
% Herausgeber vor Titel des Sammelbandes
\renewbibmacro*{in:}{%
\printtext{\bibstring{in}}%
\printunit{\intitlepunct}%
\ifentrytype{incollection}{%
\ifnameundef{bookauthor}
{\ifnameundef{editor}
{\ifnameundef{translator}
{}
{\printnames{translator}%
\setunit{\addspace}%
\usebibmacro{translator+othersstrg}%
\clearname{translator}}}
{\printnames{editor}%
\setunit{\addspace}%
\usebibmacro{editor+othersstrg}%
\clearname{editor}}}
{\ifnamesequal{author}{bookauthor}
{}
{\printnames{bookauthor}%
\clearname{bookauthor}}}}%
{}%
\newunit\newblock}
%bei Journals die Heftnummer in () nach der Jahreszahlnummer
\DeclareFieldFormat[article,periodical]{number}{\mkbibparens{#1}}
\renewbibmacro*{volume+number+eid}{%
\printfield{volume}%
\printfield{number}%
\setunit{\addcomma\space}%
\printfield{eid}}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{asher_indirect_2001,
title = {Indirect speech acts},
volume = {128},
url = {http://www.springerlink.com/index/K4V421247052432T.pdf},
pages = {183--228},
number = {1},
journaltitle = {Synthese},
author = {Asher, Nicholas and Lascarides, Alex},
urldate = {2017-09-05},
date = {2001},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\nocite{asher_indirect_2001,sigfridsson,worman,geer,brandt,westfahl:space,westfahl:frontier}
\printbibliography
\end{document}
它使用了biblatex
只在较新的版本(比如 >= 3.5)中可用的新功能biblatex
,它已使用 3.7 进行了测试。