![如何使用 BibLaTeX 与 Biber 后端和 APA 样式创建作者索引](https://linux22.com/image/414848/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20BibLaTeX%20%E4%B8%8E%20Biber%20%E5%90%8E%E7%AB%AF%E5%92%8C%20APA%20%E6%A0%B7%E5%BC%8F%E5%88%9B%E5%BB%BA%E4%BD%9C%E8%80%85%E7%B4%A2%E5%BC%95.png)
我正在制作一篇论文的模板,尽管我对 LaTeX 还不太熟悉,但我几乎能够将其完全做到我想要的程度。我使用的是 Overleaf,我从干净的论文样式开始,然后我成功地对其进行了几次更改和添加。
关于参考书目,我想按章节列出它们,并最终列出完整的参考文献列表。我可以使用以下结构来做到这一点:
\begin{filecontents*}{local_ref.bib}
@BOOK{reference1,
title = {{Some title}},
publisher = {Publisher},
year = {2001},
author = {{Institutional Author}},
shortauthor = {IA},
address = {Netherlands},
edition = {1},
isbn = {0 7506 5080 X}
}
@PHDTHESIS{reference2,
author = {John Doe},
title = {Another title},
school = {{The University of Here}},
year = {2020},
type = {PhD {T}hesis}
}
@PHDTHESIS{reference3,
author = {Name Surname},
title = {A third title},
school = {{Some University}},
year = {2019},
type = {PhD {T}hesis}
}
\end{filecontents*}
\documentclass{scrreprt}
\usepackage[style=apa,
backend=biber,
natbib=true,
backref=false,
maxnames=3,
minnames=1,
maxbibnames=5,
minbibnames=3,
maxcitenames=2,
mincitenames=1,
defernumbers=true,
refsegment = chapter,
sorting=ynt
]{biblatex}
\addbibresource{local_ref.bib}
\begin{document}
\tableofcontents
\chapter{First chapter}
\section{Section Name}
Some text \cite{reference1}.
\printbibliography[segment = \therefsegment, heading = subbibintoc]
\chapter{Second chapter}
\section{Another Section}
Some text \cite{reference2}.
\printbibliography[segment = \therefsegment, heading = subbibintoc]
\printbibliography
\end{document}
如您所见,最好在第一章中包含一个参考文献,在第二章中包含另一个参考文献,然后将它们都放在参考文献列表中,同时忽略书目中未引用的参考文献。
但现在我遇到一个似乎无法找到解决方案的问题:我想要一个最终的作者索引,格式如下:
作者索引
安德森 1, 3, 5
阿伯斯曼 2, 3, 4
巴克 3
卡彭特 2, 3
张 4, 5
美国宇航局 3, 4
正如您所看到的,我想要:
- 仅包含作者姓氏的列表;
- 机构的简称(NASA,而不是 National Agency...);
- 它们在整个论文中出现的页码引用;
- 按字母顺序对姓名进行分组;
- 页码作为原始页面的链接。
AuthorIndex 包可以做到这一点,而且我已经看到了一些其他替代方案,它们使用 BibTeX 或 BibLaTeX(后端使用 BibTeX)。问题是,由于我的论文中存在所有依赖项,而且我是从现成的模板开始的,如果我甚至从 biber 更改后端,它都会崩溃整个系统(例如,因为我需要使用 APA 样式)。
我发现的另一个问题是我需要禁用 backref,因为我不希望章节引用包含“(引用第 X 页)。这样,我不知道作者索引中的页面引用是否能够链接回引用。(顺便说一下,我正在使用 hyperref)。
非常感谢您给予我的任何帮助。
安德烈·布拉西尔
答案1
biblatex
附带一些用于引用/参考书目索引的示例文件:20-indexing-single.tex
对于简单指数和21-indexing-multiple.tex
,22-indexing-subentry.tex
适用于更复杂的设置。
如果您只想要单个索引(即作者索引),那么以下内容20-indexing-single.tex
应该有效。
- 加载索引包(这里是标准 LaTeX
makeidx
)。 - 激活索引(此处用
\makeindex
)。 - 告诉
biblatex
开始用 索引引用indexing=cite,
。 - 重新定义执行索引命令的 bibmacro
citeindex
以仅索引名称(我们指示它通过告诉它索引名称来索引所有名称,1-999
并通过定义新的索引名称格式来仅索引家族名称)。 - 在您想要建立索引的位置添加索引打印命令(此处带有
\printindex
)。
在此设置中,索引会自动按字母类别分组,并与hyperref
页码链接。biblatex
索引引用中使用的简称作者姓名(“IA”而不是“机构作者”)。
\documentclass{scrreprt}
\usepackage[style=apa,
backend=biber,
natbib=true,
backref=false,
maxbibnames=5,
minbibnames=3,
maxcitenames=2,
mincitenames=1,
defernumbers=true,
refsegment = chapter,
indexing=cite,
]{biblatex}
\usepackage{makeidx}
\usepackage{hyperref}
\makeindex
\renewbibmacro*{citeindex}{%
\ifciteindex
{\indexnames[family][1-999]{labelname}}
{}}
\DeclareIndexNameFormat{family}{%
\let\namepartgiven\empty
\usebibmacro{index:name}
{\index}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}
\begin{filecontents*}{\jobname.bib}
@BOOK{reference1,
title = {{Some title}},
publisher = {Publisher},
year = {2001},
author = {{Institutional Author}},
shortauthor = {IA},
address = {Netherlands},
edition = {1},
isbn = {0 7506 5080 X},
}
@PHDTHESIS{reference2,
author = {John Doe},
title = {Another title},
school = {{The University of Here}},
year = {2020},
type = {PhD Thesis},
}
@PHDTHESIS{reference3,
author = {Name Surname},
title = {A third title},
school = {{Some University}},
year = {2019},
type = {PhD Thesis},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\tableofcontents
\chapter{First chapter}
\section{Section Name}
Some text \autocite{reference1}.
\printbibliography[segment = \therefsegment, heading = subbibintoc]
\chapter{Second chapter}
\section{Another Section}
Some text \autocite{reference2}.
\printbibliography[segment = \therefsegment, heading = subbibintoc]
\printbibliography
\printindex
\end{document}