在最近的一些软件包更新中(不确定是哪一个),polyglossia 似乎定义\val
为包含赋予密钥的值variant
。
在我的一个文档中,我定义了\val
,我不想重命名,因为我在文档中多次使用了它。但是 polyglossia 覆盖了我的 定义\val
。我尝试了 ,\AtBeginDocument
但不起作用。
\documentclass{article}
\usepackage{polyglossia}
\setmainlanguage[variant=british]{english}
\show\val
\AtBeginDocument{
\DeclareDocumentCommand{\val}{}{some new definition} % Does not work
}
\begin{document}
\val % prints british
\end{document}
答案1
你们处境艰难,这是历史造成的。
文档中xkeyval
为\define@choicekey
所有人提供的几个示例[\val\nr]
已经灌输了这样的想法:这些是此案例的强制性标记。
不是。允许使用任何两个控制序列,它们用作临时宏。包编写者应该使用自己的控制序列;因此文档中的示例
\define@choicekey*{fam}{align}[\val\nr]{left,center,right}{%
\ifcase\nr\relax
\raggedright
\or
\centering
\or
\raggedleft
\fi
}
适应包装foo
应该更好
\define@choicekey*{fam}{align}[\foo@val\foo@nr]{left,center,right}{%
\ifcase\foo@nr\relax
\raggedright
\or
\centering
\or
\raggedleft
\fi
}
定义文件中的代码polyglossia
应该是
\define@choicekey*+{welsh}{date}[\xpg@val\xpg@nr]{long,short}[short]{%
\ifcase\xpg@nr\relax
% long:
\welsh@formaldatetrue
\or
% accented:
\welsh@formaldatefalse
\fi
\xpg@info{Option: Welsh, date=\xpg@val}%
}{\xpg@warning{Unknown date value `#1'}}
xkeyval
不幸的是,大多数使用和选择键的包或类都采用了\var\nr
。这些临时控制序列不是设置在一个组内,因此任何时候使用它们执行选择键时,它们都会被重新定义,并且它们的最终值是不可预测的。
你能做什么?避免将其\val
作为个人宏的名称。
我提交了一份问题报告polyglossia
,我会尽力通知其他软件包的作者。但情况要好转还需要很长时间。