同一作者的简称

同一作者的简称

我在撰写项目论文时遇到了问题。我多次引用联合国,因此我不得不使用作者的简称。因此我的论文应该是这样的:

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 editormaxnamesminnameshashnamehash

我们必须创建一个包含此类哈希值的列表。

\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}在前言中加载)并修补了authorbibmacro。

\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}

上面的解决方案产生

在此处输入图片描述

相关内容