\@ 命令的奇怪行为

\@ 命令的奇怪行为

考虑以下 MWE:

\documentclass{article}

\usepackage{xpunctuate}
\DeclareRobustCommand\eg{e.g\xperiod}

%% Standard Conditions symbol
\providecommand\barcirc{\mathpalette\@barred\circ}%
\def\@barred#1#2{\ooalign{\hfil$#1-$\hfil\cr\hfil$#1#2$\hfil\cr}}%
\newcommand\stst{^{\protect\barcirc}}%

\begin{document}

Maybe a list, \eg, a, b, c, and d.

\end{document}

编译失败并显示错误消息

! \@ 的使用与其定义不符。
\xprd@Out ->\xprd@Obj .\@\xspace

为什么会发生这种情况?似乎应该只创建符号的代码重新定义了\@命令,但是如何呢?

答案1

有可能您必须将包含 的定义括在\makeatletter和之间。\makeatother@

\documentclass{article}

\usepackage{xpunctuate}
\DeclareRobustCommand\eg{e.g\xperiod}

%% Standard Conditions symbol
\makeatletter
\providecommand\barcirc{\mathpalette\@barred\circ}%
\def\@barred#1#2{\ooalign{\hfil$#1-$\hfil\cr\hfil$#1#2$\hfil\cr}}%
\newcommand\stst{^{\protect\barcirc}}%
\makeatother

\begin{document}

Maybe a list, \eg, a, b, c, and d.

\end{document}

欲了解更多信息,您必须阅读做什么\makeatletter\makeatother做什么?

相关内容