无法从 polyglossia 重新定义 \val

无法从 polyglossia 重新定义 \val

在最近的一些软件包更新中(不确定是哪一个),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,我会尽力通知其他软件包的作者。但情况要好转还需要很长时间。

相关内容