固定内容的新命令不起作用

固定内容的新命令不起作用

我尝试为固定内容生成宏,但它不起作用,我不知道为什么。这是我的代码:

\documentclass{article}

\begin{document}

% this is working and puts A at the bottom of the page
\makeatletter
\def\@oddhead{%
\setlength\unitlength{1mm}%
\begin{picture}(0,0)%
\put(120,-250){\fbox{A}}%
\end{picture}\hfill}
\makeatother

% needed that page is not empty
test

% define a macro
\newcommand{\generateFixBox}{
\makeatletter
\def\@oddhead{%
\setlength\unitlength{1mm}%
\begin{picture}(0,0)%
\put(120,-250){\fbox{B}}%
\end{picture}\hfill}
 \makeatother
}

% apply macro, but not working?
\generateFixBox

\end{document}

Latex 错误日志令人困惑。我发现了生成固定元素的说明这里

答案1

问题在于以下 catcode @

\newcommand{\generateFixBox}{
  \makeatletter
  \def\@oddhead{%
    \setlength\unitlength{1mm}%
    \begin{picture}(0,0)%
      \put(120,-250){\fbox{B}}%
    \end{picture}\hfill}
   \makeatother
}

在定义时,\makeatletter不是执行,但定义文本已被标记。因此输入文本\@oddhead变为\@oddhead

\makeatletter并且\makeatother应该移到定义之外:

\makeatletter
\newcommand{\generateFixBox}{%
  \def\@oddhead{...}%
}
\makeatother

答案2

您的代码存在几个问题。

首先,您需要在外层使用\makeatletter和,以便在命令名称中正确识别。然后,在的定义内部不需要这些。\makeatother@\generateFixBox

第二, 在 的定义中\generateFixBox,缺少一个右括号来完善{\fbox{B}

结果给出了一个被正确识别的替代定义。

在下面的代码中,我改变了它的垂直位置\fbox (它从页面底部消失了,所以我把它稍微提高了一点)。

\documentclass{article}

\begin{document}

% this is working and puts A at the bottom of the page
\makeatletter
\def\@oddhead{%
\setlength\unitlength{1mm}%
\begin{picture}(0,0)%
%\put(120,-250){\fbox{A}}%
\put(120,-200){\fbox{A}}%
\end{picture}\hfill}
\makeatother

% needed that page is not empty
test

% define a macro
\makeatletter
\newcommand{\generateFixBox}{
%\makeatletter
\def\@oddhead{%
\setlength\unitlength{1mm}%
\begin{picture}(0,0)%
%\put(120,-250){\fbox{B}%
\put(120,-200){\fbox{B}}%
\end{picture}\hfill}
% \makeatother
}
\makeatother

% apply macro, but not working?
\generateFixBox

\end{document}

相关内容