由于某种原因,biblatex
似乎没有读取全局选项。以下 tex 文件生成单个引用,但样式不正确authoryear
。如果我取消注释该PassOptionsToPackage
行,它会正常工作,但我想直接在类定义中传递选项。为什么选项style
没有被读取biblatex
?biblatex
似乎正在处理该backend=biber
选项,因为它不会产生指示未指定后端的警告,当删除该选项时它会这样做。
\RequirePackage{filecontents}
\begin{filecontents}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2016/10/18 1.0 current]
\LoadClass{article}
\RequirePackage{biblatex}
\end{filecontents}
\begin{filecontents}{references.bib}
@article{hello,
title={Hello World},
author={Bar, Foo},
journal={Baz},
year=2016,
}
\end{filecontents}
%\PassOptionsToPackage{style=authoryear}{biblatex}
\documentclass[backend=biber,style=authoryear]{myclass}
\bibliography{references}
\begin{document}
\textcite{hello}
\printbibliography
\end{document}
答案1
全局选项存储在 中\@classoptionslist
。\ProcessOptions
包中的命令检查此列表并将每个条目与 列表进行比较已声明包的选项。如果选项已知,则执行该选项。
但style=authoryear
不是一个已声明, 的已知选项biblatex
。该包不包含一长串的\DeclareOption{style=authoryear}{...}
, \DeclareOption{style=authortitle}{...}
设置。这既不实用,也不够灵活:毕竟外部包可以定义自己的样式。
因此 biblatex 使用了一个巧妙的技巧:它会随着\DeclareOption*
处理未知选项。默认情况下,LaTeX 会\@unknownoptionerror
针对未知选项发出问题,但 biblatex 会将所有选项传递给 keyval 处理程序。
这意味着默认情况下全局选项会被忽略。你可以将它们传递给 biblatex,但如果选项列表包含 biblatex 不知道的选项,则会出现错误。因此,你要么“声明”biblatex 的所有潜在选项,要么更改 biblatex 的密钥处理程序。例如像这样
\documentclass[style=authoryear,german]{book}
\usepackage{kvoptions}
\makeatletter
\let\setkeys\kvsetkeys
\kv@set@family@handler {blx@opt@pre} {\PackageWarning{biblatex}{Unused option #1}}
\PassOptionsToPackage{\@classoptionslist}{biblatex}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{doody}
\end{document}