我正在用 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-ext
的introcite=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
已同时设置,并且样式已设置。bibstyle
citestyle
authoryear
sorting=nyt