Biblatex style=numeric: 类似于 \textcite) 样式“作者等,年份 [#bibliography]”

Biblatex style=numeric: 类似于 \textcite) 样式“作者等,年份 [#bibliography]”

我目前有以下选择biblatex

\usepackage[
backend = biber,
%   style = authoryear, (default style is numeric)
    sorting = nyt,
    sortcites = true,
    defernumbers=true,
    date = edtf,
    urldate = edtf,
    seconds=true,
    maxcitenames = 1,
    maxbibnames = 100,
    backref = true
] {biblatex}

当我输入时\textcite{key},我得到了如下的引用样式:

First_Author_Name 等人 [#]

有没有一种简单的方法 - 无需改变风格authoryear- 即可获得以下风格:

第一作者姓名等,(年份)[#]

抱歉,这个问题之前有人问过。我查看了之前的问题,没有找到类似的东西。

答案1

我不会推荐它。正如评论中所讨论的那样,这种风格是多余的,而且非常不寻常——如果你的目标是这种风格,那么这是可以接受的,但在其他情况下可能并不那么可取。我可以看到在引文标签中提到作者和年份的吸引力,因为它可以让读者判断某些事物的历史。但数字只是增加了权重,没有任何额外的用途,因为作者年份引文——如果做得正确——足以唯一地识别来源。

代码并不像它应该的那样简单,因为它textcite有一个棘手的实现,并且有一些-comp后续内容,但是你可以继续看下去。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=numeric, labeldateparts, backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\makeatletter
\renewbibmacro*{textcite:init}{%
  \ifnumless{\value{multicitecount}}{2}
    {\global\boolfalse{cbx:parens}}
    {}%
  \global\undef\cbx@lasthash
  \global\undef\cbx@lastyear}

\renewbibmacro*{textcite}{%
   \ifboolexpr{test {\iffieldequals{namehash}{\cbx@lasthash}}
               and test {\iffieldequals{labelyear}{\cbx@lastyear}}}
    {\setunit{\multicitedelim}}
    {\ifnameundef{labelname}
       {\printfield[citetitle]{labeltitle}}
       {\printnames{labelname}}%
     \setunit*{\printdelim{nameyeardelim}}%
     \printlabeldate
     \setunit{\printdelim{namelabeldelim}}%
     \printtext{\bibopenbracket}\global\booltrue{cbx:parens}%
     \stepcounter{textcitecount}}%
  \savefield{namehash}{\cbx@lasthash}%
  \savefield{labelyear}{\cbx@lastyear}%
  \ifnumequal{\value{citecount}}{1}
    {\usebibmacro{prenote}}
    {}%
  \usebibmacro{cite}%
  \setunit{%
    \ifbool{cbx:parens}
      {\bibclosebracket\global\boolfalse{cbx:parens}}
      {}%
    \textcitedelim}}

\DeclareCiteCommand{\textcite}[\cbx@textcite@init\cbx@textcite]
  {\gdef\cbx@savedkeys{}%
   \citetrackerfalse%
   \pagetrackerfalse%
   \DeferNextCitekeyHook%
   \usebibmacro{textcite:init}}
  {\ifthenelse{\iffirstcitekey\AND\value{multicitetotal}>0}
     {\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
      \global\clearfield{multipostnote}}
     {}%
   \xappto\cbx@savedkeys{\thefield{entrykey},}%
   \ifboolexpr{test {\iffieldequals{namehash}{\cbx@lasthash}}
               and test {\iffieldequals{labelyear}{\cbx@lastyear}}}
     {}
     {\stepcounter{textcitetotal}}%
   \savefield{namehash}{\cbx@lasthash}%
   \savefield{labelyear}{\cbx@lastyear}}
  {}
  {\protected@xappto\cbx@savedcites{%
     [\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}}}
\makeatother

\begin{document}
\textcite{sigfridsson}

\textcite{knuth:ct:a,knuth:ct:b}

\textcite{knuth:ct:b,knuth:ct:c}

\printbibliography
\end{document}

在此处输入图片描述

numeric.cbx本质上,这是定义的副本tetxcite。但是,原始版本仅测试名称,而我们测试名称和年份。当然,我们还会打印年份,而原始版本只会打印名称。

相关内容