Biblatex:每个作者有多个年份 - 数字索引而非字母索引

Biblatex:每个作者有多个年份 - 数字索引而非字母索引

我正在撰写硕士论文,遇到以下问题:两本书的作者相同,年份相同。

@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}

Knuth-1,1986 年 Knuth-2,1986 年 Sigfridsson,1998 年

我想说的是,我完全反对使用该alphabetic风格来重新创建authoryear引用(尽管我承认你的风格有一两个特点很难实现,即对姓名 20 个字母的限制和对“et al.”的抑制)。

使用您当前的样式(alphabetic),不再需要获取引用周围方括号的代码。

我建议不要定义\def\citeplain#1{\citeauthor{#1} (\citeyear{#1})}。首先(这是个小问题),应该尽可能使用\newcommand*而不是\def。其次,此命令无法处理前注或后注,甚至无法处理多个引用。大多数 cite 命令biblatex应该用 来定义\DeclareCiteCommand

相关内容