考虑以下 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
做什么?