有没有办法用 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
应该可以实现。我相信VARIABLE
DEFINITION
https://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}