biblatex 自定义样式的向后兼容性

biblatex 自定义样式的向后兼容性

在当前涉及多个其他人使用同一 latex 基础的项目中,我正在使用基于标准样式的自定义 biblatex 书目样式。在其中,我希望拥有

\ExecuteBibliographyOptions[article]{eprint=false}

例如,在 MiKTex 21.1 或 texlive2020 上,它可以正常工作。不幸的是,它不适用于 texlive2017,它安装在其他几个人使用的计算机上(目前我无法在那里更新版本)。我想我可以通过添加这些旧版本来获得相同的行为

\DeclareTypeOption[boolean]{eprint}[true]{\settoggle{bbx:eprint}{#1}}

不幸的是,这与新版本不符,因为该选项eprint已经被定义。

我可以内置一个开关来检查 (type) 选项或 biblatex 版本是否存在吗?如果可以,怎么做?我更愿意继续使用标准样式,而不必从那里开始修改所有内容。我目前需要提供这种向后兼容性。

答案1

biblatex类型选项是通过keyval集合名称生成的blx@opt@typ。所以我们只需要测试一下,看看名称keyval为该名称的选项是否eprint在该集合中定义。

我们在这里使用的测试\blx@kv@ifkeyundef是在较新版本中定义的biblatex(见https://github.com/plk/biblatex/pull/991),但在旧版本中可能不可用,因此我们明确复制其定义。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\makeatletter
\providecommand*{\blx@kv@ifkeyundef}[2]{%
  \ifcsundef{KV@#1@#2}}

% {<scope>}{<option name>}
\newcommand*{\IfBiblatexOptionUndef}[2]{%
  \blx@kv@ifkeyundef{blx@opt@#1}{#2}}

\IfBiblatexOptionUndef{typ}{eprint}
  {\DeclareTypeOption[boolean]{eprint}[true]{\settoggle{bbx:eprint}{#1}}}
  {}
\makeatother

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson}

\printbibliography
\end{document}

集合名称如下

选项范围 范围名称
加载时间 ldt
全球的 pre
类型 typ
入口 ent
名单 namelist
姓名 name
姓名部分 namepart

相关内容