由于多种原因,我需要在 biblatex 的帮助下在 LaTeX 文档中声明一个具有新字段的新驱动程序。
例如,可以给出以下 BibTeX 条目:
\begin{filecontents}{\jobname.bib}
@aloa{chris,
fu = {Hawaii},
fubo = {Hawaiiboooo},
year = {2015}}
\end{filecontents}
然后我想在 LaTeX 文档中定义类似以下内容:
\DeclareBibliographyDriver{aloa}{%
\newunit\newblock
\printfield{fu}%
\newunit\newblock
\printfield{fubo}%
\newunit\newblock
\printfield{year}%
\finentry}
然后我想以这样的方式引用该条目,以便在参考列表中得到输出:
夏威夷 Hawaiiboooo 2015
一个简单的例子如下:
\documentclass{article}
\begin{filecontents}{\jobname.bib}
@aloa{chris,
fu = {Hawaii},
fubo = {Hawaiiboooo},
year = {2015}}
\end{filecontents}
\usepackage[backend=bibtex8]{biblatex}
\DeclareBibliographyDriver{aloa}{%
\newunit\newblock
\printfield{fu}%
\newunit\newblock
\printfield{fubo}%
\newunit\newblock
\printfield{year}%
\finentry}
\bibliography{\jobname.bib}
\begin{document}
\nocite{chris}
\printbibliography
\end{document}
是否可以仅在 LaTeX 文件中执行此操作(使用 bibtex 而不是 biber)?
答案1
biblatex
即使没有,也可以创建新的驱动程序和新的输入字段biber
。
当后端不是 时biber
,biblatex
会使用特殊.bst
文件biblatex.bst
来生成.bbl
文件,因此必须修改biblatex.bst
。 以下是流程:
1)找到biblatex.bst
并复制它并重命名该副本(即mybiblatex.bst
),然后将重命名的副本放在bibtex
可以找到它的地方(一个简单的解决方案是将其放在与 latex 文件相同的文件夹/目录中)。
2)在本地副本中找到ENTRY
并添加您想要添加的字段:
ENTRY {
entryset
...
fu
fubo
}
这表明bibtex
和fu
是fubo
字段bibtex
。
3)定位到本地副本FUNCTION {output.fields.3}
并创建一个新函数
FUNCTION {output.myfields} {
"fu" fu output:write:field
"fubo" fubo output:write:field
}
此函数指示如何处理新字段。对于每一行,bibtex
前两个参数是新字段的名称;对于第三个参数,可以使用output:write:<type>
,其中<type>
是name
、、或之一,具体取决于条目的数据类型。field
verb
list
year
4) 在本地复制函数中找到FUNCTION {output:entry}
。添加到此函数output.myfields
,因此它应该看起来像
FUNCTION {output:entry}{
...
output.fields.3
output.myfields
output.compat.1
...
}
5)为每个新驱动程序<driver>
添加以下行
FUNCTION {<driver>} { type$ output:entry }
在示例中,这应该是
FUNCTION {aloa} {type$ output:entry}
6) 将以下内容添加到您的乳胶源中:
\makeatletter
\def\blx@auxinit@bibtex#1{%
\blx@auxwrite\blx@auxout@bibtex
{\def\do##1{,\blx@stripbib{##1}}}
{\ifx\blx@auxout@bibtex\@mainaux
\else
\blx@msg@aux
\fi
\string\bibstyle{mybiblatex}\blx@nl
\string\bibdata{%
\blx@ctrlfile@bibtex\blxauxsuffix
\ifx#1\@empty
\else
\dolistloop#1%
\fi}\blx@nl
\string\citation{biblatex-control}}}
\makeatother
这是为了告诉bibtex
使用mybiblatex.bst
而不是默认的biblatex.bst
。
这是 MWE 上的输出