关注此问题BibLaTeX/BibTeX 自定义字段显示文件链接和使用 Biber 和 biblatex 对参考书目条目进行注释我让它工作了(好吧,或多或少)。在下面的代码中,我定义了一个字段file
和mynote
。它对 有效file
,但对 无效mynote
。我不明白为什么!
\documentclass[%
a4paper,
english,
11pt,
]{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{Padial:2010,
title={The integrative future of taxonomy},
author={José M.~Padial and Aurélien Miralles and Ignacio De la Riva and Miguel Vences},
journal={Frontiers in Zoology},
year=2010,
month=may,
volume=7,
number=16,
pages={1--14},
doi={10.1186/1742-9994-7-16},
issn={1742-9994},
mynote={Very good book!},
file={./article/2010_Wang.pdf},
keywords={biology, taxonomy},
}
\end{filecontents*}
\usepackage{fixltx2e}
\usepackage{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{type1ec}
%\usepackage{lmodern}
\usepackage{microtype}
\usepackage[%
left=5cm,
right=2cm,
%showframe,
]{geometry}
\usepackage[color,notref,notcite]{showkeys}
\usepackage[strict,autostyle]{csquotes}
\usepackage[%
backend=biber,
style=ieee,
]{biblatex}
\DeclareRangeChars{~,;-+/{}} % add '{}' as page range delimiter
\addbibresource{\jobname.bib}
\DeclareFieldFormat{mynote}{\textbf{#1}}
\DeclareFieldFormat{file}{\href{file:#1}{\textbf{Open file}}}
\AtEveryBibitem{%
\csappto{blx@bbx@\thefield{entrytype}}{% put at end of entry
\iffieldundef{file}{\space \textbf{No file!}}{%
\space \printfield{file}}
\iffieldundef{mynote}{\space \textbf{No annotation!}}{\space\printfield{mynote}}
}
}
\usepackage[%
colorlinks,
unicode,
breaklinks,
]{hyperref}
\begin{document}
\nocite{*} % list all entries
\printbibliography
%\printbibliography[keyword=taxonomy]
\end{document}
答案1
这是因为file
已经是 biblatex 的一个字段,尽管标准样式未使用该字段,但mynote
不是。您必须先 (通过DeclareSourcemap
)将mynote
字段重新映射为 字段之一,user[a-f]
然后才能使用它们。
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{Padial:2010,
title={The integrative future of taxonomy},
author={José M.~Padial and Aurélien Miralles and Ignacio De la Riva and Miguel Vences},
journal={Frontiers in Zoology},
year=2010,
month=may,
volume=7,
number=16,
pages={1--14},
doi={10.1186/1742-9994-7-16},
issn={1742-9994},
mynote={Very good book!},
file={./article/2010_Wang.pdf},
keywords={biology, taxonomy},
}
\end{filecontents*}
\usepackage[utf8]{inputenc}
\usepackage[color,notref,notcite]{showkeys}
\usepackage[%
backend=biber,
style=ieee,
]{biblatex}
\DeclareRangeChars{~,;-+/{}} % add '{}' as page range delimiter
\addbibresource{\jobname.bib}
\DeclareFieldFormat{file}{\href{file:#1}{\textbf{Open file}}}
\AtEveryBibitem{%
\csappto{blx@bbx@\thefield{entrytype}}{% put at end of entry
\iffieldundef{file}{\space \textbf{No file!}}{%
\space \printfield{file}
}
}
}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=mynote]
\step[fieldset=usera,origfieldval]
}
}
}
\DeclareFieldFormat{usera}{\textbf{#1}}
\AtEveryBibitem{%
\csappto{blx@bbx@\thefield{entrytype}}{% put at end of entry
\iffieldundef{usera}{%
\space \textbf{No annotation!}}{%
\space\printfield{usera}
}
}
}
\usepackage[%
colorlinks,
unicode,
breaklinks,
]{hyperref}
\begin{document}
\nocite{*} % list all entries
\printbibliography
\end{document}
答案2
Biblatex 为该file
字段提供内置支持(即使它不是标准字段)。用户可以通过创建新字段来扩展数据模型,但必须在配置文件中声明它们。根据手册(第 175 页),它们的顺序如下:
blx-dm.def→
‘datamodel option’.dbx →
‘style option’.dbx →
‘citestyle option’.dbx and ‘bibstyle option’.dbx →
biblatex-dm.cfg
因此,您可以biblatex-dm.cfg
在工作目录中创建一个文件并使用
\DeclareDatamodelFields[type=field, datatype=literal, skipout=false]{mynote}
filecontents
可以使用包和在文件中创建文件
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field, datatype=literal, skipout=false]{mynote}
\end{filecontents}
答案3
我注意到的一件事,可能很明显,但我忽略了它,那就是数据模型定义必须在 biblatex 加载之前。正常工作的顺序是:
- 使用包文件内容:
\usepackage{filecontents}
- 详细说明'biblatex-dm.cfg'所需的内容
\begin{filecontents}{biblatex-dm.cfg}
\DeclareDatamodelFields[type=field, datatype=literal, skipout=false]{mynote}
DeclareDatamodelEntryfields{mynote}
\end{filecontents}
- 使用以下选项加载 biblatex:
\usepackage[backend=biber,style=ieee,sorting=none]{biblatex}
非常感谢大家的提问和回答!biblatex 的强大功能让我非常惊讶。