在当前涉及多个其他人使用同一 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 |