我怎样才能获得 [作者年份] 格式的参考文献列表?

我怎样才能获得 [作者年份] 格式的参考文献列表?

我正在用 Latex 撰写论文文档,目前我正在使用 Overleaf 程序。

我正在想办法如何以以下方式列出参考文献列表,并按字母顺序排列作者。我尝试了本论坛和其他论坛上找到的所有可能选项,但无法达到我的目标。

需要参考列表样式

我使用作者年份引用样式,如下所示(由于软件包数量太多,我没有放上所有的序言,如果需要任何其他类型的软件包来理解或解决我的问题请告诉我):

\documentclass[a4paper,twoside,11pt]{book}
\usepackage[citestyle=authoryear,style=authoryear,sorting=nyt]{biblatex}
\bibliography{ref_Generacion.bib}
\printbibliography[heading=bibintoc,title={BIBLIOGRAPHY}] 

我尝试使用所提出的代码来编辑 style=author year :使用 biblatex 和 biber 创建具有固定缩进和作者年份标签的参考书目

我复制/粘贴我使用的代码:

\makeatletter
\setlength{\bibitemsep}{0.5\baselineskip plus 0.5\baselineskip}

\newsavebox\ay@labelbox
\newlength{\labwidthsameline}
\setlength{\labwidthsameline}{6em}

\newbibmacro{labelwidthbib}{%
  \begingroup
  \delimcontext{cite}%
  \DeclareFieldFormat{bibhyperref}{##1}%
  \csuse{blx@hook@cite}%
  \csuse{blx@hook@citekey}%
  \citetrackerfalse\pagetrackerfalse\backtrackerfalse
  \defcounter{maxnames}{\blx@maxcitenames}%
  \usebibmacro{cite}%
  \endgroup
} 
%-----------------------
\newbibmacro{kicklabel}{% 
  \sbox\ay@labelbox{\usebibmacro{labelwidthbib}}%
  \global\togglefalse{blx@insert}%
  \ifdim\wd\ay@labelbox>\labwidthsameline
    \leavevmode\newline
  \fi
}

\defbibenvironment{bibliography}%
  {\list
    {\usebibmacro{labelwidthbib}}%
    {\setlength{\labelwidth}{\labwidthsameline}%
     \setlength{\leftmargin}{\labelwidth}%
     \setlength{\labelsep}{\biblabelsep}%
     \addtolength{\leftmargin}{\labelsep}%
     \setlength{\itemsep}{\bibitemsep}%
     \setlength{\parsep}{\bibparsep}%
     \renewcommand*{\makelabel}[1]{##1\hss}}}%
  {\endlist}%
  {\item\usebibmacro{kicklabel}}
\makeatother

这样,我得到的参考书目就更接近我想要的了,但我仍然需要做一些改变: 我在书目中得到了什么

然而,我对改变预定义样式还很陌生,我无法理解所有这些代码并对其进行更改。

  • 如何在作者年份标签中添加括号,如第一张图所示?
  • 我如何在页面中编辑空间作者年份标签?我可以根据标签使此距离可变吗?
  • 我怎样才能使同一作者的文章不分组在一起并显示虚线?我希望每个作者的年份标签都分开。

提前感谢您花时间阅读并回答这个长问题。

答案1

这个答案专门针对问题中的情况而写,其中OP使用当前在Overleaf上运行的过时的LaTeX安装。

请参阅printbibliography 输出“[author year] entrydata”(使用biblatex-ext及其introcite选项)如果您正在使用较新的 TeX 安装。

正如评论中提到的那样printbibliography 输出“[author year] entrydata”,通过最新的 LaTeX 安装,您只需使用biblatex-extintrocite=label

由于 Overleaf 目前运行的系统已经过时,我们必须自己编写代码。这里我只是从 中复制了重要的部分biblatex-ext。自定义部分设置方括号并允许您更改长度(标签的宽度和标签与条目之间的最小距离;所有这些都使用与 中相同的名称biblatex-ext,因此您可以查看introcite中的记录部分文档biblatex-ext,第 15-19 页,请注意introcite=label此处仅实现了)。

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[british]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber, dashed=false]{biblatex}
\addbibresource{biblatex-examples.bib}

% implementation copied from biblatex-ext
\makeatletter
\newbibmacro*{bbx:introcite}{\usebibmacro{cite}}

\DeclareFieldFormat{bbx@introcite}{#1}
\newcommand*{\introcitepunct}{\addcolon\space}
\newcommand*{\introcitebreak}{\leavevmode\newline}

\newlength{\extbl@this@introcitewidth}
\newlength{\introcitewidth}
\setlength{\introcitewidth}{8\biblabelsep}
\newlength{\introcitesep}
\setlength{\introcitesep}{\biblabelsep}

\newbibmacro{introcite:typeset}{%
  \begingroup
    \iftoggle{blx@citation}
      {}
      {\togglefalse{blx@bibliography}%
       \toggletrue{blx@citation}}%
    \delimcontext{bbx@introcite}%
    \csuse{blx@hook@cite}%
    \csuse{blx@hook@citekey}%
    \DeclareFieldFormat{bibhyperref}{##1}%
    \undef\cbx@lasthash
    \undef\cbx@lastyear
    \citetrackerfalse\pagetrackerfalse\backtrackerfalse
    \defcounter{maxnames}{\blx@maxcitenames}%
    \defcounter{minnames}{\blx@mincitenames}%
    \printtext[bbx@introcite]{\usebibmacro{bbx:introcite}}%
  \endgroup
}

% This macro is used in \defbibenvironment
\newbibmacro*{introcite:break}{%
  \settowidth{\extbl@this@introcitewidth}
    {\usebibmacro{introcite:typeset}}%
  \ifdimgreater{\extbl@this@introcitewidth}{\introcitewidth}
    {\introcitebreak}
    {}}


\defbibenvironment{bibliography}
  {\list
     {\usebibmacro{introcite:typeset}}
     {\setlength{\labelwidth}{\introcitewidth}%
      \setlength{\leftmargin}{\labelwidth}%
      \setlength{\labelsep}{\introcitesep}%
      \addtolength{\leftmargin}{\labelsep}%
      \renewcommand*{\makelabel}[1]{##1\hss}%
      \setlength{\itemsep}{\bibitemsep}%
      \setlength{\parsep}{\bibparsep}}}
  {\endlist}
  {\item
   \usebibmacro{introcite:break}}
\makeatother


% customisation starts here
\DeclareFieldFormat{bbx@introcite}{\mkbibbrackets{#1}}
\setlength{\introcitewidth}{8\biblabelsep}
\setlength{\introcitesep}{\biblabelsep}

\begin{document}
\cite{sigfridsson,worman,geer,knuth:ct:a,knuth:ct:b}
\printbibliography
\end{document}

参考书目,作者年份标签用方括号括起来

通用解决方案也适用于其他authoryear风格authortitle,但对于更复杂的风格,一些细节必须改变-icomp

请注意选项dashed=false,因为默认选项dashed=true看起来很奇怪(至少我是这样认为的)并且会在 namedash 后留下过多的空间(可能需要修复)。

还要注意,这citestyle=authoryear,style=authoryear,sorting=nyt,相当于

style=authoryear,

由于和style已同时设置,并且样式已设置。bibstylecitestyleauthoryearsorting=nyt

相关内容