由於多種原因,我需要藉助 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
能夠找到它的地方(一個簡單的解決方案是放在乳膠文件的同一資料夾/目錄中)。
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
如何處理新欄位。對於每一行,前兩個參數是新欄位的名稱;對於第三個參數,您可以使用 use ,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 上的輸出