pgf 手册中有一个例子,使用第 450 页上的形状,rectangle split
但该形状不适用于该类beamer
:
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\begin{document}
\begin{frame}{Testing}
\begin{tikzpicture}[my shape/.style={ rectangle split, rectangle split parts=#1, draw, anchor=center}]
\node [my shape=5] at (0,1) {
a\nodepart{two}b\nodepart{three}c\nodepart{four}d\nodepart{five}e};
\node [my shape=5, rectangle split horizontal] at (2,2) {
1\nodepart{two}2\nodepart{three}3\nodepart{four}4\nodepart{five}5};
\node [my shape=3] at (3,0.5) {
A\nodepart{two}B\nodepart{three}C};
\node [my shape=4, rectangle split horizontal] at (1.5,0.5) {
1\nodepart{two}2\nodepart{three}3\nodepart{four}4};
\end{tikzpicture}
\end{frame}
\end{document}
当使用 pdflatex 编译此文档时,出现以下错误消息:
! Illegal parameter number in definition of \test.
<to be read again>
1
l.19 \end{tikzpicture}
这是一个已知的错误?
使用该类时,article
在环境中未发现任何错误tikzpicture
。
答案1
这#1
似乎会造成问题。但是,可以使用fragile
框架选项来修复此问题,该选项在 beamer 手册中有描述,会导致框架内容的处理方式不同。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.multipart}
\begin{document}
\begin{frame}[fragile]{Testing}
\begin{tikzpicture}[my shape/.style={ rectangle split,
rectangle split parts=#1, draw, anchor=center}]
\node [my shape=5] at (0,1) {
a\nodepart{two}b\nodepart{three}c\nodepart{four}d\nodepart{five}e};
\node [my shape=5, rectangle split horizontal] at (2,2) {
1\nodepart{two}2\nodepart{three}3\nodepart{four}4\nodepart{five}5};
\node [my shape=3] at (3,0.5) {
A\nodepart{two}B\nodepart{three}C};
\node [my shape=4, rectangle split horizontal] at (1.5,0.5) {
1\nodepart{two}2\nodepart{three}3\nodepart{four}4};
\end{tikzpicture}
\end{frame}
\end{document}
答案2
如果您尝试#1
在没有参数的命令定义中使用参数编号(例如),则会出现此错误:
\documentclass{article}
\begin{document}
\def\test{\def\abc#1{#1}}
\end{document}
解决方法是将参数加倍,如下所示:
\documentclass{article}
\begin{document}
\def\test{\def\abc##1{blub##1}}
\test \abc{cde}
\end{document}
对于beamer
(或beamerposter
包),加倍是不够的,因为框架的内容被存储了两次:加倍之后,您会得到相同的错误,但现在是针对命令\beamer@doifinframe
而不是 \test。
所以解决方法是加倍参数符号:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\begin{frame}
\begin{tikzpicture}[
Node/.style = {rectangle, text width=####1}
]\tiny
\node[Node=5ex] {FFT};
\end{tikzpicture}
\end{frame}
\end{document}
我推荐这个解决方案,因为在beamerposter
包中不可能使用传统的方式添加[fragile]
到框架中。