我想用 LaTeX/BibTeX 生成以下内容:
正文如下:
...我们请读者参阅 Van Noort (2010) 的作品。
在参考书目中:
托马斯·范诺特。一份重要的论文。 2010 年。
我尝试了很多技巧,但似乎无法满足所有要求:
- “Thomas van Noort” 必须按名称“Noort”排序出现在参考书目中。
- 在运行文本中,“Van”需要大写“V”
- 在参考书目中,“van”需要有小写的“v”
- 我正在使用 hyperref,并且希望整个“Van Noort (2010)”文本链接到参考文献。
使用 plain\citet
将生成:
...我们请读者参阅 van Noort (2010) 的作品。
请注意小写的“v”;根据荷兰名称的标准处理,这是不可接受的。将 BibTeX 名称设置为Van Noort, Thomas
使运行文本引用看起来没问题,但在参考书目中我得到了
托马斯·范诺特。一份重要的论文。 2010 年。
请注意大写的“V”;这也是不可接受的,因为它前面没有名字时才应该是大写的。
(1) 很简单:我将 BibTeXauthor
字段设置为{\noopsort{Noort}}{van Noort}, Thomas
。 (2) 和 (3) 我可以通过说类似的话来伪装we refer the reader to the work of Van Noort \citeyear{...}
,但这并不好,并且不能满足 (4)。
有人有什么建议吗?我印象中 LaTeX 和 BibTeX 在设计时就考虑到了这些事情,所以也许我遗漏了一些东西...
答案1
一个可行的方案似乎是
\documentclass{article}
\usepackage[authoryear]{natbib}
\usepackage{hyperref}
% #1: sorting key, #2: prefix for citation, #3: prefix for bibliography
\DeclareRobustCommand{\VAN}[3]{#2} % set up for citation
\begin{document}
\citet{vannoort}
\citet{other}
\bibliographystyle{plainnat}
% here we change the meaning of \VAN to use the prefix for the bibliography
\DeclareRobustCommand{\VAN}[3]{#3}
\bibliography{vannoort}
\end{document}
文件中的条目.bib
是
@article{vannoort,
author={{\VAN{Noort}{Van}{van}} Noort, Thomas},
title={An important paper},
year=2010,
}
在第一个参数中,\VAN
您可以放置任何您需要的内容以确保正确排序。
正如 Florian Rubach 所问,我问您几句话。
对于 BibTeX 来说,类似的东西{\command{something}}
就像一个“重音符号”;通常人们会这样做{\"{u}}
来将 ü 排序为“u”(这在德语中可能不正确,但在英语中是正确的)。但是,可以使用此功能强制进行我们想要的排序。
在\DeclareRobustCommand{\VAN}[3]{#2}
序言中,我们说当 LaTeX\VAN{Noort}{Van}{van}
在文档中找到内容时,它应该忽略第一个和第三个参数,因此打印“Van”。这将来自读取文件时存储的内容aux
。但是,在参考书目之前,我们更改了命令,以便它忽略第一个和第二个参数,因此打印“van”,这是参考书目中所需要的。
第一个参数是绝不LaTeX 使用,但它是由 BibTeX 使用的;第一个参数中的字符串可以是任何确保正确排序的内容:它位于姓氏的其余部分之前,因此它将是排序的最重要信息。
我应该提到,我不会改变一个名字在两个地方的出现方式。
答案2
我理解,忽略作者姓名中的“von”部分用于分类目的是荷兰印刷术中的常见做法——很可能是因为大约一半的荷兰人的名字中都有“de”或“van”。(好吧,“大约一半”可能有点夸张。)顺便说一句,“荷兰”排序方式并非荷兰独有;例如,我知道瑞士德语区也在某种程度上采用这种排序方式。例如,住在苏黎世的名叫“Peter von Matt”的人在电话簿中会被归类为“M”(如“Matt, Peter von”)而不是“V”。
实际上,修改大多数书目样式以实现“荷兰”排序样式相当容易。修改书目样式文件可以免去您手动编辑.bib
文件中的作者字段(可能很多)以覆盖相关名称的默认排序方法的任务。为了具体起见,我将在以下示例中假设您采用plainnat
书目样式。对于许多其他书目样式,调整应该不会太难。
在你的 TeX 发行版中找到该文件
plainnat.bst
。复制此文件并将副本命名为 。plaindutch.bst
(不要直接编辑/修改 TeX 发行版的原始文件。)plaindutch.bst
在您最喜欢的文本编辑器中打开。找到函数
sort.format.names
。在该函数中,找到以下行:s nameptr "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
将此行更改为:
s nameptr "{ll{ }}{ ff{ }}{ jj{ }}" format.name$ 't :=
即使您完全不熟悉 BibTeX 的语法,我相信您也能够知道发生了什么:经过这样的改变,按作者姓名排序将忽略任何“von”组件。
将文件保存
plaindutch.bst
在与主文件相同的目录中.tex
,或保存在 TeX 发行版搜索的目录中。如果使用后一种方法,请务必更新 TeX 发行版的文件名数据库。\bibliographystyle{plaindutch}
通过在文件中发布指令开始使用新的书目样式.tex
。
祝您 BibTeX 愉快!
评论:这个答案最初是为了解决这个问题而发布的Latex 引用 Bibtex。错误的大写字母和字母顺序。但是,这个问题被关闭了,因为它是此帖子的重复。我迁移了我的答案,希望其他人可以看到它。
答案3
Natbib\Citet
为通常使用小写字母但不在句首的语言提供了命令。此命令将使货车,冯,迪等等大写。没有什么可以阻止你在\Citet
任何地方使用。这可以与你的\noopsort
解决方案相结合:
\documentclass{article}
\usepackage[authoryear]{natbib}
\usepackage{hyperref}
\newcommand{\noopsort}[2]{#2}
\begin{document}
\citet{vannoort}
\Citet{vannoort}
\Citet{other}
\bibliographystyle{plainnat}
\bibliography{vannoort}
\end{document}
vannoort.bib:
@article{vannoort,
author={\noopsort{Noort}{van Noort}, Thomas},
title={An important paper},
year=2010
}
@article{other,
author={Other, Some},
title={Not so important paper},
year=2011
}
输出:
答案4
在您开始破解或使用 LaTeX 代码来解决这个问题之前:也许 bibtex 可以本地做到这一点?
Bibtex 可以识别 4 个姓名部分,但只有您以一种可以区分每个部分的格式输入作者姓名时,它才能做到:
- 名
- 姓
- “jr”(jr、sr 等名称)
- “von” 部分(例如 von、van、van de、di 等名称)
看http://maverick.inria.fr/~Xavier.Decoret/resources/xdkbibtex/bibtex_summary.html#names了解更多信息。
简短版本:使用
author = {von Last, jr, First}
时“von”部分不用大写字母,姓氏和名字均大写。jr 可以大写,也可以不大写。
我不确定这是否能解决您的问题,但如果不能,那么您可能确实需要修补 \citet 以正确处理大写字母。