背景

背景

有没有办法用 bibulous 定制引用的方式,类似于定制参考书目。

例如对于书籍来说应该是:Said,2000,S.56。
电子版则为:Büttner,Tages-Anzeiger Online,2013 年 12 月 14 日“Der Bundesrat spielt Katz und Maus”

或者与参考书目中的引用风格相同。

我添加了我的 tex 文件另一篇与 biblical 相关的论坛帖子

\documentclass[11pt, a4papter] {scrartcl}
\usepackage{natbib}

\usepackage{filecontents}
\begin{filecontents*}{svenz.bst}
TEMPLATES:
book =  [<au>.] [\textit{\enquote{<title>}}.] [<address> <year>.]
electronic = [<au>.] [\textit{<institution>.}] [<date>.] [\enquote{<title>}.] [<url>.] [<dateofchange>.] [<urldate>.]
oral = [<au>.] [<interviewer>,] [<date>,] [<address>.]
inbook = [<au>.] [\enquote{<title>}.] [In: <booktitle>,] hg. v. [<publisher>.] [<address>] [<place>.] [<pages>.]
article = [<au>.] [\enquote{<title>}.] [\textit{<journal>,] [<year>,] [<number>,}] [<pages>.]

SPECIAL-TEMPLATES:
citelabel = <authorlist.0.last>, <year>
sortkey = <authorlist.0.last><year>

OPTIONS:
namelist_format = last_name_first
use_firstname_initials = False
\end{filecontents*}
\begin{filecontents}{\jobname.bib}
@Electronic{gehalt,
  author      = {Rütti, Nicole},
  institution = {NZZ Online},
  year        = {2017},
  date        = {2017-07-27},
  title       = {Sind Frauen wirklich selber schuld am tieferen Gehalt?},
  url         = {https://www.nzz.ch/wirtschaft/frauen-und-lohnverhandlungen-auf-stoeckelschuhen-rueckwaerts-ueber-ein-minenfeld-laufen-ld.1307984},
  urldate     = {2018-10-14},
}


@Electronic{ackeret,
  author      = {Ackeret, Markus},
  institution = {NZZ Online},
  year        = {2017},
  date        = {2017-05-25},
  title       = {Im Übereifer des politischen Gefechts},
  url         = {https://www.nzz.ch/international/debatte-um-die-bundeswehr-im-uebereifer-des-politischen-gefechts-ld.1296154},
  urldate     = {2018-10-14},
}

@Electronic{Lenz1,
  author      = {Lenz, Christoph},
  institution = {Tages-Anzeiger Online},
  year        = {2017},
  date        = {2017-07-04},
  title       = {Rechenspiele der Armee haben politische Folgen},
  url         = {https://www.tagesanzeiger.ch/schweiz/standard/rechenspiele-der-armee-haben-politische-folgen/story/19945957},
  urldate     = {2018-10-16},
}
\end{filecontents}

\begin{document}
Lorem ipsum dolor sit amet, \citet{gehalt} consetetur sadipscing elitr, 
\cite{Lenz1}. Lorem ipsum dolor sit amet. \cite{ackeret}

\bibliographystyle{svenz}
\bibliography{\jobname}
\end{document}

我读了 nzhagen 的指南,但没有找到这个问题的答案。如果我读得太多了,我很乐意再读一遍 :)

答案1

背景

Bibulous 是 BibTeX 的替代品,因此继承了 BibTeX 的参考书目和引文排版方法以及概念上的局限性。BibTeX 的面向用户的工作原理在使用问号或粗体引用关键字代替引用编号. 为了您单独格式化引文,了解 BibTeX/Bibulous 实际生成的内容非常重要。

标准 BibTeX 书目

当你运行 BibTeX 或 Bibulous 时,该程序会创建一个.bbl文件。然后,该文件会被 LaTeX 读取,并在文档中你写入的位置进行排版\bibliography{...}。该.bbl文件包含类似

\begin{thebibliography}{2}
\bibitem{elk} Anne Elk: \emph{A Theory on Brontosauruses}. 1972.
\bibitem{appleby} Humphrey Appleby: \emph{On the Importance of the Civil Service}. 1980.
\end{thebibliography}

thebibliography本质上是一个美化的列表 ( enumerate) 环境,它对其项目进行编号,并为每个条目键创建一个标签,以便以后引用\cite。该机制的工作原理类似于\label- \ref:TeX 将与每个键相对应的标签(编号)写入文件.aux,因此它可以在下一次运行中从一开始就使用,请参阅了解引用和标签的工作原理.\bibitem支持一个可选参数,用自定义标签覆盖引用数,因此可以使用它\bibitem[Elk72]{elk}来获取引用中的标签“Elk72”而不是“1”。

在这种情况下,LaTeX 无法以任何有用的方式了解输入数据。LaTeX 只会在数据上出现一次,但只是在某个时刻排版的文本。当您输入\cite某个项目时,唯一真正“已知”且可用的是其对应的标签。

请注意,可以.bib通过不同的方式从文件中提取更多条目数据以供更复杂的使用,例如usebib包,它本质上将.bib文件读取为键值列表。usebib特别是受到名称列表未被解析这一事实的限制,并且所有其他解决方案都必须克服这一不容忽视的障碍。

natbib

对于大多数数字“[1]”和字母“[Elk72]”引用样式,这种方法绰绰有余。但对于带有作者年份标签“(Appleby 1980)”的引用样式,让 LaTeX 分别“知道”条目的作者(Appleby)和年份(1980)可能比固定标签(Appleby 1980)更有用。这样可以更轻松地在“Appleby 1980”、“Appleby (1980)”、“(Appleby, 1980)”等引用格式之间切换。因此,当您使用natbib(以及其他一些具有类似策略的软件包,我甚至不知道它是否natbib是第一个实现这种行为的软件包,但它可能是最受欢迎的)时,您的.bbl文件可能包含

\begin{thebibliography}{2}
\bibitem[Elk(1972)]{elk} Anne Elk: \emph{A Theory on Brontosauruses}. 1972.
\bibitem[Appleby(1980)]{appleby} Humphrey Appleby: \emph{On the Importance of the Civil Service}. 1980.
\end{thebibliography}

其中可选参数用于告诉 LaTeX 的作者appleby是“Appleby”,年份标签是“1980”。有了这些信息,natbib现在可以对引文输出进行更细粒度的控制。

natbib可以理解几种略有不同的格式来传递条目数据,但所有这些格式都只提供作者列表(可能是长格式和短格式)和年份。不应传递其他条目数据。

jurabib

该包jurabib更进一步,在可选参数中提供了更多的输入数据以供文档使用

\begin{thebibliography}{}

\backrefparscanfalse
\bibitem[{Appleby\jbdy {1980}}%
         {}%
         {{0}{}{book}{1980}{}{}{}{}%
          {1980}}%
         {{On the Importance of the Civil Service}%
          {}{}{2}{}{}{}{}{}}%
        ]{appleby}
 \jbbibargs {\bibnf {Appleby} {Humphrey} {H.} {} {}} {Humphrey Appleby} {au}
  {sexless} {\bibtfont {On the Importance of the Civil Service}\bibatsep {}
  \apyformat {1980}} {\bibhowcited} \jbdoitem {{Appleby}{Humphrey}{H.}{}{}} {}
  {} \bibAnnoteFile {appleby}

\end{thebibliography}

同样,该数据通过文件传递.aux,并在下一次运行中从文档开头开始可用。这意味着 的jurabib引用命令可以在输出中提供很大的自由度和多样性,它们甚至可以动态更改其格式。

biblatex

我认为,完全不同的biblatex参考书目处理方法受到了 的启发jurabib。但是,它不是通过文件.bbl并通过 标签.aux,而是biblatex直接将所有条目数据.bbl以可访问的格式保存在文件中。它不是.bbl只在文档中要排版参考书目的地方读取 ,而是在文档的开头biblatex读取.bbl。这意味着所有条目的所有条目数据都可以从一开始就访问。上面显示的条目的条目数据看起来像

\refsection{0}
  \datalist[entry]{nyt/global//global/global}
    \entry{appleby}{book}{}
      \name{author}{1}{}{%
        {{uniquename=0,uniquepart=base,hash=dd90e644e3018ab2c6a7ffa2a58522d0}{%
           family={Appleby},
           familyi={A\bibinitperiod},
           given={Humphrey},
           giveni={H\bibinitperiod},
           givenun=0}}%
      }
      \strng{namehash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \strng{fullhash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \strng{bibnamehash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \strng{authorbibnamehash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \strng{authornamehash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \strng{authorfullhash}{dd90e644e3018ab2c6a7ffa2a58522d0}
      \field{sortinit}{A}
      \field{sortinithash}{d77c7cdd82ff690d4c3ef13216f92f0b}
      \field{extradatescope}{labelyear}
      \field{labeldatesource}{}
      \field{labelnamesource}{author}
      \field{labeltitlesource}{title}
      \field{title}{On the Importance of the Civil Service}
      \field{year}{1980}
      \field{dateera}{ce}
    \endentry
  \enddatalist
\endrefsection

biblatex可以在您和条目时使用所有条目数据\cite,这使得可以创建非常灵活和复杂的引用样式,而这对于 来说非常棘手natbib


使用 Bibulous 定制引文

如果您的自定义引文是静态的,原则上您可以使用可选参数来\bibitem提供固定的引文输出。这将不再与natbib任何其他参数一起使用,因为natbib需要特定格式并且仅摘要作者和年份信息。

在 Bibulous 中,可选参数\bibitem可以通过 定义SPECIAL-TEMPLATE citelabel,因此您必须根据条目类型填充该变量。据我所知,目前没有简单的方法可以用类型特定的值填充s,但使用s 和用 s 编写的简短函数SPECIAL-TEMPLATE应该可以实现。我相信VARIABLEDEFINITIONhttps://github.com/nzhagen/bibulous/issues/15目前正在阻止这一行动,所以我认为目前无法在 Bibulous 中获得特定类型的引用格式。

但即使我们能够\bibitem用引文标签填充可选参数,我仍然觉得这样做很廉价,因为您只将包含所有数据的字符串传递给 LaTeX,而不是以有用格式传递实际数据。您必须复制所做的操作,jurabib并以宏格式将所有输入数据传递给 LaTeX。

Bibulous 错误跟踪器上的相关请求具有类似的答案,网址为https://github.com/nzhagen/bibulous/issues/13


定制引文biblatex

可以biblatex为不同类型生成不同的引用输出。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\addbibresource{biblatex-examples.bib}

\letbibmacro{cite:default}{cite}

\renewbibmacro{cite}{%
  \ifbibmacroundef{cite:\strfield{entrytype}}
    {\usebibmacro{cite:default}}
    {\usebibmacro*{cite:\strfield{entrytype}}}}

\newbibmacro*{cite:article}{%
  \iffieldundef{shorthand}
    {\printnames{labelname}%
     \setunit{\addcomma\space}%
     \printfield{journaltitle}%
     \setunit{\addcomma\space}%
     \usebibmacro{cite:labeldate+extradate}}
    {\usebibmacro{cite:shorthand}}}

\begin{document}
\cite{sigfridsson}

\cite{nussbaum}

\printbibliography
\end{document}

Sigfridsson 和 Ryde,《计算化学杂志》,1998 年//Nussbaum 1978 年

相关内容