我现在正在制作新工具,以便在我的研究领域(即古典语言学)中使用 biblatex。
其中一些工具需要新的数据类型或新字段。例如,我正在制作两个工具:
- 一个使用 biblatex 管理手稿描述:需要新的数据类型 (@manuscript) 和新字段 (support, dating, scribe, shelfmark 等) (参见https://github.com/maieul/biblatex-manuscripts-philology)
- 一个是添加一个新字段,即文本的真实作者。我解释一下:作者字段将包含编辑后的作者姓名,但“真实作者”字段将包含学者认为是该作品真实作者的作者姓名(假名和虚假归属问题,在我的专业领域中很常见)
这两个工具是独立的。我希望这两个工具足够通用,可以作为贡献进行分发。但我的问题在于此。如果我仔细阅读 biblatex 手册中的“4.5.3 数据模型规范”一节,我看不出如何独立分发我的两个贡献并允许人们在同一个项目中使用它们。
- 我无法将它们作为样式分发:加载 biblatex 时只能精确指定一种样式。
- 我无法将它们作为数据模型分发:加载 biblatex 时只能精确一个数据模型。
- biblatex-dm.cfg 和 biblatex.cfg 必须由用户创建
- 无法在.sty 文件中定义数据模型。
答案1
这有点黑客行为,但可能会为正确的解决方案提供灵感。
.bbx
Biblatex 会在处理 biblatex 样式文件(或)中定义的任何选项之前很早就加载数据模型.cbx
。这就是为什么您无法从样式内部控制数据模型加载的原因。您需要在调用 biblatex 之前进行调整。下面我将描述如何使用包来完成此操作。我假设您的工具是某些基本 biblatex 样式的补充,您的用户可以自由选择。假设调用了您的样式和包,dmtools
并且您想要两个选项manu
(加载在中定义的手稿数据模型dmtools-manu.dbx
)和fields
(加载在中定义的其他字段dmtools-fields.dbx
)。您还有dmtools.bbx
和dmtools.cbx
一些宏定义。
这些样式和包的使用方法如下:
\documentclass{article}
\usepackage[
basestyle=apa,
manu,
fields,
]{dmtools}
\usepackage[style=dmtools, ...]{biblatex}
\addbibresource{...}
\begin{document}
...
\end{document}
basestyle
是您的工具将作为补充的基本 biblatex 样式。如果您不需要它,也就是说,如果您的工具只为一种 bib 样式提供补充,您可以将 biblatex 调用移到文件内部.sty
。
你的包文件看起来如下:
dmtools.sty
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{dmtools}
\RequirePackage{kvoptions}
% options declarations
%
\DeclareBoolOption{manu}
\DeclareBoolOption{fields}
\DeclareStringOption[numeric]{basestyle}
\ProcessKeyvalOptions*
\ifdmtools@manu
\def\dmtmanu{dmtools-manu} % the name of .dbx file for the 'manu' tool
\fi
\ifdmtools@fields
\def\dmtfields{dmtools-fields} % the name of .dbx file for the 'fields' tool
\fi
\ifx\dmtools@basestyle\@empty
\else
\def\dmtbasestyle{\dmtools@basestyle} % the name of bibstyle to load later
\fi
\endinput
这声明了选项并设置了一些\if
稍后要使用的命令和。basestyle
选项是可选的,如果不存在,则numeric
使用样式。
数据库工具
% DM Tools data models
% load datamodel for the 'manu' tool
\ifdmtools@manu
\blx@inputonce{\dmtmanu.dbx}{DM Tools data model}{}{}{}{}
\fi
% load datamodel for the 'fields' tool
\ifdmtools@fields
\blx@inputonce{\dmtfields.dbx}{DM Tools data model}{}{}{}{}
\fi
% load datamodel for the style specified in the 'basestyle' option
\ifx\dmtools@basestyle\@empty
\else
\blx@inputonce{\dmtbasestyle.dbx}{biblatex style data model}{}{}{}{}
\fi
\endinput
此文件加载您的数据模型以及 的数据模型basestyle
。您可能需要调整它以处理bibstyle
和citestyle
选项。
最后,参考书目和引用样式文件:
dmtools.bbx
\ProvidesFile{dmtools.bbx}
\RequireBibliographyStyle{\dmtbasestyle}
\ifdmtools@manu
%
% macro (re)definitions
%
\fi
\ifdmtools@fields
%
% macro (re)definitions
%
\fi
\endinput
dmtools.cbx
\ProvidesFile{dmtools.cbx}
\RequireCitationStyle{\dmtbasestyle}
\ifdmtools@manu
%
% mscro (re)definitions
%
\fi
\ifdmtools@fields
%
% mscro (re)definitions
%
\fi
\endinput
这些文件加载basestyle
bib 和 cite 样式,然后(重新)定义您的工具所需的宏/命令。