tikz 和 beamer:手册中的形状矩形分割示例

tikz 和 beamer:手册中的形状矩形分割示例

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]到框架中。

相关内容