我有以下(最小)文档类:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{minimal-article}[2013/01/11 Test class, extends article]
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
% Load parent class with preset options
\LoadClass[a4paper,titlepage]{article}
\RequirePackage{tikz}
\renewcommand\maketitle{%
\begin{titlepage}%
\begin{tikzpicture}[remember picture, overlay]%
\typeout{Drawing a rectangle?} %
\fill [fill=red] at (current page.south west) rectangle (current page.south east);%
\typeout{Background rectangle built.}%
\end{tikzpicture}%
\end{titlepage}%
}
\AtBeginDocument{
\maketitle
}
\endinput
从最小文档文件中使用它时:
\documentclass[11pt]{minimal-article}
\begin{document}
\tableofcontents
\section{Foo!}
\end{document}
我收到一个奇怪的错误信息:
Drawing a rectangle?
! Use of \@next doesn't match its definition.
\maketitle ...ng a rectangle?} \fill [fill=red] at
(current page.south west)...
l.3 \begin{document}
据我猜测,这一定是一些本地环境问题,因为昨天同一类的非最小版本运行良好,而现在一切都失败了,并出现了那条神秘的消息。
有什么想法会造成这种情况吗?
答案1
Jake 已经展示了导致问题的 Tikz 语法错误,但要回答有关错误消息含义的问题(而不是如何避免出现该错误消息:-) 这是使用“分隔参数”时导致的原始 TeX 错误。考虑
\documentclass{article}
\def\aaa * #1 *{\typeout{argument is #1}}
\aaa * hello *
\aaa !* goodbye *
\stop
该宏\aaa
不是按照通常的方式接受参数\aaa 1
,而是\aaa{123}
接受由两个标记序列分隔的参数 *_
(并_*
(用作_
可见空格)注意在参数标记#1
, #2
, ...之间可以使用任何标记序列。
因此在第一种情况下
argument is hello
回显到终端,但在第二种情况下\aaa
需要*
以下令牌并且它不存在,因此您会在主题行中收到错误消息:
! Use of \aaa doesn't match its definition.
l.8 \aaa !
* goodbye *
? x
No pages of output.
虽然\def
LaTeX 的顶层不支持形式和分隔参数,但在内部使用它们执行各种解析任务是很常见的,显然是 TikZ,但标准 latex 可选参数和图片模式参数也在[ ]
内部( )
使用这种定义。
答案2
at
你的 TikZ 代码中有一个错误。at
仅用于放置节点,而不是路径命令。如果你使用
\fill [fill=red] (current page.north east) rectangle (current page.south west);%
相反(注意我也改变了坐标),一切正常。