我尝试为固定内容生成宏,但它不起作用,我不知道为什么。这是我的代码:
\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
变为\@
,o
,d
,d
,h
,e
,a
。d
\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}