投影机中的 tikz 图像存在问题。

投影机中的 tikz 图像存在问题。

我真的希望你们能帮我。我有一张 tikz 图片,使用以下包/库在标准文章模式下运行良好:

\usepackage{tikz}
\usetikzlibrary{matrix,chains,positioning,decorations.pathreplacing,arrows}

但是当我尝试将这些文件传输到投影仪文档时,由于未知原因我无法进行编译。

这是无法使用上述包/库在 beamer 中运行的图像之一的代码。

\begin{tikzpicture}[
plain/.style={
  draw=none,
  fill=none,
  },
dot/.style={draw,shape=circle,minimum size=3pt,inner sep=0,fill=black
  },
net/.style={
  matrix of nodes,
  nodes={
    draw,
    circle,
    inner sep=8.5pt
    },
 nodes in empty cells,
  column sep=0.6cm,
  row sep=-11pt
  },
>=latex
]
\matrix[net] (mat)
{
|[plain]| \parbox{1cm}{\centering Input\\layer}
          & |[plain]| \parbox{1cm}{\centering Hidden\\layer}
                       & |[plain]| \parbox{1cm}{\centering Output\\layer} \\
       & |[plain]|                \\
|[plain]| &            & |[plain]|   \\
|[plain]| & |[plain]|  & |[plain]|   \\
|[plain]| & |[dot]|                  \\
|[plain]| & |[plain]|  & |[plain]|   \\
          & |[dot]|    &           \\
|[plain]| & |[plain]|  & |[plain]|   \\
|[plain]| & |[dot]|    & |[plain]|   \\
|[plain]| & |[plain]|  & |[plain]|   \\
|[plain]| &            & |[plain]|    \\
          & |[plain]|                 \\
};




\draw[<-o] (mat-2-1) -- node[above] {Open price $x_1$} +(-3cm,0);
\draw[<-o] (mat-7-1) -- node[above] {High price $x_2$} +(-3cm,0);
\draw[<-o] (mat-12-1) -- node[above] {Low price $x_3$} +(-3cm,0);

\foreach \i in {2,7,12}
    {  \draw[->] (mat-\i-1) -- (mat-3-2);
    \draw[->] (mat-\i-1) -- (mat-11-2);
      }
\foreach \ai in {3,11}
  {  \draw[->] (mat-\ai-2) -- (mat-7-3);
      }

      \draw[->] (mat-7-3) -- node[above] {Closing price $y_t$} +(3cm,0) ;

\end{tikzpicture}

我最初的猜测是存在以下问题:

\usetikzlibrary{decorations.pathreplacing} 

对我来说奇怪的是它在投影机之外工作。

提前谢谢您!如能尽快回复,我们将不胜感激!

答案1

原因是&在 TikZ 中重新定义了。分别matrix考虑和 TikZ 手册中的这些引述:beamer

对于包含任何“脆弱”文本的框架,您还必须使用该[fragile]选项,这些文本是“未按照 TEX 通常解释文本的方式进行解释”的任何文本。例如,如果您使用(本地)重新定义字符 含义的包&,则必须使用此选项。

beamer手册,第 12.9 节逐字和脆弱的文本

尽管 TikZ 似乎使用 & 来分隔单元格,但pgf实际上使用不同的命令来分隔单元格,即命令\pgfmatrixnextcell,使用普通&字符通常会失败。 发生的情况是,TikZ 会创建&一个活动字符,然后将该字符定义为等于\pgfmatrixnextcell。 在大多数情况下,这会很好地工作,但有时&无法激活;[...]

pgfmanual.pdf,第 20.5 节关于活跃角色的注意事项

换句话说,为了使现有的代码正常运行,您必须向环境fragile中添加选项frame,即\begin{frame}[fragile]

另一个选项是matrix使用ampersand replacement键定义分隔单元格的不同方法。添加例如

 ampersand replacement=\&,

风格net,并使用\&代替&

在下面的代码中,我还将箭头语法从旧的和已弃用的arrows库转换为新库提供的语法arrows.meta。(参见第 40 章箭头库pgfmanual)您可以通过为第一行设置特定样式来减少代码量(参见代码)。最后,与其将样式添加到plain几乎所有单元格,为什么不将其作为默认样式,而只|[draw]|在需要的几个单元格中添加样式呢?

\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix,arrows.meta}
\begin{document}
\begin{frame}
\begin{tikzpicture}[
dot/.style={draw,shape=circle,minimum size=3pt,inner sep=0,fill=black
  },
net/.style={
  matrix of nodes,
 ampersand replacement=\&,
  nodes={
    circle,
    inner sep=8.5pt,
    },
 nodes in empty cells,
  column sep=0.6cm,
  row sep=-11pt,
  row 1/.style={nodes={text width=1cm,align=center}}
  },
>=Latex
]
\matrix[net] (mat)
{
   {Input\\ layer} \& {Hidden\\layer} \& {Output\\layer} \\ % braces are needed around content to not start new row in matrix
|[draw]| \&                               \\
         \& |[draw]|  \&                  \\
         \&           \&                  \\
         \& |[dot]|                       \\
         \&           \&                  \\
|[draw]| \& |[dot]|   \& |[draw]|         \\
         \&           \&                  \\
         \& |[dot]|   \&                  \\
         \&           \&                  \\
         \& |[draw]|  \&                  \\
|[draw]| \&                               \\
};


\draw[<-{Circle[open]}] (mat-2-1) -- node[above] {Open price $x_1$} +(-3cm,0);
\draw[<-{Circle[open]}] (mat-7-1) -- node[above] {High price $x_2$} +(-3cm,0);
\draw[<-{Circle[open]}] (mat-12-1) -- node[above] {Low price $x_3$} +(-3cm,0);

\foreach \i in {2,7,12}
 {
  \draw[->] (mat-\i-1) -- (mat-3-2);
  \draw[->] (mat-\i-1) -- (mat-11-2);
 }
\foreach \ai in {3,11}
   \draw[->] (mat-\ai-2) -- (mat-7-3);


\draw[->] (mat-7-3) -- node[above] {Closing price $y_t$} +(3cm,0) ;

\end{tikzpicture}
\end{frame}

\end{document}

在此处输入图片描述

相关内容