尝试使用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
已被加载MastersDoctoralThesis
且yax
已覆盖其\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
\letcs
biblatex
etoolbox
避免群体(可能会产生不良的副作用),大致可以按如下方式进行
\let\letcs\texapiletcs % switch to texapi definition
... do stuff with yax ...
\let\letcs\etoolboxletcs % go back to etoolbox definition
如果可能的话,我建议您寻找替代方案yax
。我也不太喜欢MastersDoctoralThesis
(在我看来,它通常会给人们带来不必要的麻烦),因此如果您仍然有机会切换到更标准的文档类,那么您可能需要认真考虑这一点。