yax 与 biblatex 不兼容:未定义的控制序列

yax 与 biblatex 不兼容:未定义的控制序列

尝试使用yax在我的论文中,我发现它biblatex这个问题。我尝试应用答案这个问题,它适用于article文档类,但不适用于硕士/博士论文模板我在用着。

这是最小的示例(如果我将文档类更改为,它就会编译article):

\documentclass[english]{MastersDoctoralThesis}
%\documentclass{article}

\usepackage{yax}

\let\navletcs\letcs
\let\letcs\relax
\usepackage{biblatex}

\begin{document}
    It is sometimes really hard to get TeX to work.
\end{document}

第一个错误:

! Undefined control sequence.
<argument> \letcs \blx@backrefsetstyle 
                                       {blx@opt@backrefsetstyle@setonly}
l.13363 ...conds=false,julian=false,labeltime=24h}

答案1

实际上并不是biblatex与不兼容yax,而是etoolbox。(biblatex加载并etoolbox使用许多事物。实际上它不是yax,而是texapi,由 加载yax。)

MastersDoctoralThesis也会加载etoolbox,所以当你说

\documentclass[english]{MastersDoctoralThesis}

\usepackage{yax}

\let\navletcs\letcs
\let\letcs\relax

etoolbox已被加载MastersDoctoralThesisyax已覆盖其\letcs

下列

\usepackage{biblatex}

将要不是再次加载etoolbox,因为 LaTeX 仅加载一次包。因此etoolbox不会覆盖 中的定义yax

确保yax在 之前确实已加载即可避免此错误etoolbox。我们还保存 的定义,\letcs以便以后能够在它们之间切换。

\RequirePackage{yax}
\let\texapiletcs\letcs
\let\letcs\relax
\RequirePackage{etoolbox}
\let\etoolboxletcs\letcs
\documentclass[english]{MastersDoctoralThesis}

\usepackage{biblatex}

\begin{document}
    It is sometimes really hard to get TeX to work.
\end{document}

请注意,除非您切换到 的定义,否则由 定义的命令的使用yax可能会在文档中中断,并且如果您没有足够快地切换回来,由/定义的命令可能会中断。texapi\letcsbiblatexetoolbox

避免群体(可能会产生不良的副作用),大致可以按如下方式进行

\let\letcs\texapiletcs % switch to texapi definition
... do stuff with yax ...
\let\letcs\etoolboxletcs % go back to etoolbox definition

如果可能的话,我建议您寻找替代方案yax。我也不太喜欢MastersDoctoralThesis(在我看来,它通常会给人们带来不必要的麻烦),因此如果您仍然有机会切换到更标准的文档类,那么您可能需要认真考虑这一点。

相关内容