我在撰写项目论文时遇到了问题。我多次引用联合国,因此我不得不使用作者的简称。因此我的论文应该是这样的:
Vgl. UN-Sicherheitsrat: S/RES/660 (1990), 02.09.1990. <http://www.un.org/Depts/german/sr/sr_90/sr660-90.pdf> (abgerufen 27.09.2014).
Vgl. UN-SR: S/RES/661 (1990), 06.09.1990. <http://www.un.org/Depts/german/sr/sr_90/sr661-90.pdf> (abgerufen 27.09.2014).
样品:
参考书目:
@MISC{UN:660,
AUTHOR = "UN-Sicherheitsrat",
TITLE = "S/RES/660 (1990), 02.09.1990",
NOTE = "\textless\url{http://www.un.org/Depts/german/sr/sr_90/sr660-90.pdf}\textgreater \addspace (abgerufen 27.09.2014"
}
@MISC{UN:661,
AUTHOR = "UN-Sicherheitsrat",
TITLE = "S/RES/661 (1990), 06.09.1990",
NOTE = "\textless\url{http://www.un.org/Depts/german/sr/sr\_90/sr661-90.pdf}\textgreater\addspace (abgerufen 27.09.2014)"
}
主要 Tex 文件:
\documentclass[a4paper,12pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{geometry}
\usepackage[style=verbose-ibid,backend=bibtex]{biblatex}
\usepackage{hyperref}
\usepackage[autostyle=true,german=quotes]{csquotes}
\usepackage[onehalfspacing]{setspace}
\bibliography{literature}
\begin{document}
Text-sample1\autocite[Vgl.][]{UN:660}
Text-sample2\autocite[Vgl.][]{UN:661}
\end{document}
我可以为组织创建自己的简称吗?
截止日期是下周二,我找不到解决方案,所以我现在有点绝望。
希望得到帮助
答案1
这是第二种解决方案,它不依赖于 bibtex 记录中的数据的动态操作,并且不需要知道哪个是给定名称的第一个引用。
解决方案利用了字段shortauthor
,如果原始 bibtex 记录中不存在该字段,则可以按如下方式动态添加:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=author, match={UN-Sicherheitsrat}, fieldset=shortauthor, fieldvalue={UN-SR}]
}
}
}
这个想法是创建一个文档中使用的作者姓名列表。为此,可以使用该fullhash
字段。根据biblatex
手册(texdoc biblatex
)
fullhash
唯一标识列表的哈希字符串labelname
。此字段与 有name hash
两点不同:1)生成哈希时会忽略shortauthor
和列表。2) 哈希始终引用完整列表,忽略和。另请参阅和。short editor
maxnames
minnames
hash
namehash
我们必须创建一个包含此类哈希值的列表。
\def\citednames{}
以及一个布尔值,用于确定名称哈希是否已在引用中使用
\newbool{namecited}
下一步是确定名称是否已被使用,即它是否在列表中。我们可以使用\AtEveryCitekey
在调用 cite 命令的主循环之前执行的钩子来做到这一点(并且 bibtex 字段的值可用)
\AtEveryCitekey{%
\xifinlist{\thefield{fullhash}}{\citednames}
{\booltrue{namecited}}
{\listxadd{\citednames}{\thefield{fullhash}}\boolfalse{namecited}}%
}
这里,我们检查该fullhash
值是否在已引用名称的列表中,如果是,我们将布尔值设置namecited
为 true。否则,我们将插入fullhash
列表中并设置namecited
为 false。
namecited
最后一步是根据真假给出使用什么名称(即全名或简称)的指示。
为了完成这个任务,我们利用了该xpatch
包(即\usepackage{xpatch}
在前言中加载)并修补了author
bibmacro。
\xpatchbibmacro{author}
{\printnames{author}}
{\ifbool{namecited}{\printnames{labelname}}{\printnames{author}}}
{}
{}
该解决方案,给出
\begin{document}
\listadd{\citednames}{text}
Text-sample1\autocite[Vgl.][]{UN:660}
Text-sample2\autocite[Vgl.][]{UN:661}
Text-sample3\autocite[Vgl.][]{UN:660}
\end{document}
生产
答案2
这是一个需要一些手动干预和biblatex
(通过biber
后端)动态操作 bibtex 输入字段的能力的解决方案。
该解决方案需要知道哪一个是特定名称的第一个条目。
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=entrykey, match={UN:660}, fieldset=shortauthor, fieldvalue={UN-SR}]
}
\map[overwrite]{
\step[fieldsource=author, match={UN-Sicherheitsrat}, replace={UN-SR}]
\step[fieldsource=entrykey, match={UN:660}, fieldset=author, fieldvalue={UN-Sicherheitsrat}]
}
}
}
第一步是引入shortauthor
第一个条目的值(此处为带有键的条目UN:660
)。这样,MWE 中使用的样式将使用第一个引用的全名和shortauthor
后续引用的值。
第二步是将所有出现的author
(对于 author 值与所选条目相同的所有条目,在本例中为 entrykay 的条目UN:660
)替换为 的值。最后一步是将第一次出现shortauthor
的 恢复为原始值。author
为了
\begin{document}
Text-sample1\autocite[Vgl.][]{UN:660}
Text-sample2\autocite[Vgl.][]{UN:661}
Text-sample3\autocite[Vgl.][]{UN:660}
\end{document}
上面的解决方案产生