我正在撰写硕士论文,遇到以下问题:两本书的作者相同,年份相同。
@Book{Eschenauer1993a,
title = {Elastizitätstheorie},
publisher = {BI Wissenschaftsverlag},
year = {1993},
author = {Eschenauer, Hans and Schnell, Walter},
isbn = {3411162635},
subtitle = {Grundlagen, Flächentragwerke, Strukturoptimierung},
}
@Book{Eschenauer1993b,
title = {Elastizitätstheorie},
publisher = {BI Wissenschaftsverlag},
year = {1993},
author = {Eschenauer, Hans and Schnell, Walter},
isbn = {3411167718},
subtitle = {Formel- und Aufgabensammlung},
}
现在引用第一个时,引文看起来像 [Eschenauer, 1993a]。我喜欢这样,但我的教授希望第一个条目看起来像 [Eschenauer-1, 1993],第二个条目看起来像 [Eschenauer-2, 1993]。有什么方法可以快速轻松地做到这一点?我正在使用 biblatex 并以 biber 为后端。提前谢谢您!
\documentclass[10pt,a4paper]{article}
\usepackage[hyperfootnotes=false,colorlinks=false,linkcolor=black,pdfborder=000,pdfencoding=auto]{hyperref}
\usepackage{blindtext}
\usepackage[
backend = biber, %% Hilfsprogramm "biber" (statt "biblatex" oder "bibtex")
%style = authoryear, %% Zitierstil (siehe Dokumentation)
style = alphabetic, %% Alphabetische Reihenfolge der Liste im Literaturverzeichnis
%style = iso-authoryear,
autolang = other, %% to support multiple languages in bibliography
maxalphanames = 4,
maxcitenames = 1, %% Maximale Anzahl an genannten Autoren im Zitat-Verweis
mincitenames = 1,
natbib = true, %% Bereitstellen von natbib-kompatiblen Zitierkommandos
hyperref = true, %% hyperref-Paket verwenden, um Links zu erstellen
%uniquelist = false,
isbn = false, %% source: http://tex.stackexchange.com/a/23118/9075
bibencoding = UTF8, %% this is necessary only if bibliography file is in different encoding than main document
]{biblatex}
\bibliography{Literaturverzeichnis}{}
\addbibresource{Literaturverzeichnis.bib}
%Eckige Klammern um Zitat-Verweis
\makeatletter
\newrobustcmd*{\parentexttrack}[1]{%
\begingroup
\blx@blxinit
\blx@setsfcodes
\blx@bibopenparen#1\blx@bibcloseparen
\endgroup}
\AtEveryCite{%
\let\parentext=\parentexttrack%
\let\bibopenparen=\bibopenbracket%
\let\bibcloseparen=\bibclosebracket}
\makeatother
\renewcommand*{\labelalphaothers}{}
\DefineBibliographyStrings{ngerman}{andothers={et\ al\adddot}} % aus u.a. zu et al. machen
\DeclareFieldFormat[phdthesis]{title}{#1} % keine Anführungszeichen um Titel bei allen Abschlussarbeiten
\renewcommand{\labelnamepunct}{\addcolon\space} % Doppelpunkt nach letztem Autor
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
% \field[strwidth=0,strside=left,ifnames=3-, namessep={\space}]{labelname}
% \field[strwidth=0,strside=left,ifnames=2, namessep={\space und\space}]{labelname}
\field[strwidth=20,strside=left,names=1]{labelname}
}
\labelelement{\literal{,\nobreakspace}}
\labelelement{
\field[strwidth=4,strside=right]{year}
}
}
% Eckige Klammer um Abrufdatum URL/DOI ohne Text (\bibstring{urlseen}\space)
\DeclareFieldFormat{urldate}{\mkbibbrackets{#1}}
% Zitierung ohne eckige Klammern: Autor (Jahr) im Text:
\DeclareCiteCommand{\citeauthor}
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexnames{labelname}}
{}%
\printtext[bibhyperref]{\printnames{labelname}}}
{\multicitedelim}
{\usebibmacro{postnote}}
\def\citeplain#1{\citeauthor{#1} (\citeyear{#1})}
\bibliography{Literaturverzeichnis}{}
\addbibresource{Literaturverzeichnis.bib}
\begin{document}
\blindtext \cite{Eschenauer1993a}
\nocite{*}
\printbibliography[title=Literaturverzeichnis]
\end{document}
答案1
这似乎是一种非常奇怪的消歧义方式,特别是因为消歧义数字通常从属于整个标签,即“作者,年份”,将其放在中间看起来很奇怪。
消歧义字母位于字段中extraalpha
,通常附加在 Biber 生成的标签末尾。格式可以轻松更改\DeclareFieldFormat{extraalpha}
。但将值注入标签中间有点困难,因为 Biberbiblatex
通常将标签和extraalpha
分开考虑。
我们必须保护某些事情不被执行,这就是为什么我们\string
需要
\documentclass[10pt,a4paper]{article}
\usepackage[
backend = biber,
style = alphabetic,
]{biblatex}
\renewcommand*{\labelalphaothers}{}
\DeclareFieldFormat{extraalpha}{-#1}
\DeclareLabelalphaTemplate{
\labelelement{
\field[final]{shorthand}
\field{label}
\field[strwidth=20,strside=left,names=1]{labelname}
}
\labelelement{
\literal{%
\string\printfield{extraalpha}%
\string\global\string\clearfield{extraalpha}%
,\nobreakspace}
}
\labelelement{
\field[strwidth=4,strside=right]{year}
}
}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{knuth:ct:b}
\cite{knuth:ct:c}
\cite{sigfridsson}
\printbibliography
\end{document}
我想说的是,我完全反对使用该alphabetic
风格来重新创建authoryear
引用(尽管我承认你的风格有一两个特点很难实现,即对姓名 20 个字母的限制和对“et al.”的抑制)。
使用您当前的样式(alphabetic
),不再需要获取引用周围方括号的代码。
我建议不要定义\def\citeplain#1{\citeauthor{#1} (\citeyear{#1})}
。首先(这是个小问题),应该尽可能使用\newcommand*
而不是\def
。其次,此命令无法处理前注或后注,甚至无法处理多个引用。大多数 cite 命令biblatex
应该用 来定义\DeclareCiteCommand
。