TikZ 和数学节点中的子图

TikZ 和数学节点中的子图

我有一个带有数学节点矩阵的 tikzpicture。它本身可以很好地编译。如果我将它放在图形环境中,它仍然可以很好地编译。但是,如果我将它放在子图环境中,它会返回缺少一个$。有什么想法吗?

编辑(@Werner):以下是重现该问题的内容:

\documentclass{article}
\usepackage{subfig}% http://ctan.org/pkg/subfig
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{matrix}
\begin{document}
\begin{figure}
\subfloat[something]{% <---- \subfloat begin
  \begin{tikzpicture}[every node/.style={anchor=west}]
    \matrix (m) [matrix of math nodes, nodes in empty cells]{
      \quad & 1.\quad (x)(Q\supset Fx) & \\
      & 2.\quad Q\supset Fx & \textrm{I,\textbf{UI}} & \\
      & 3.\quad Q \\
      & 4.\quad Fx & 2, 3, \textrm{ M.P.}\\
      & 5.\quad (x)Fx & 4, \textrm{ \textbf{UG}} \\
      & 6.\quad Q\supset(x)Fx & 3-5, \textrm{ C.P.} \\
      & 7.\quad \parbox[t]{2.9cm}{%
        $(x)(Q\supset(x)Fx)\supset$\\
        $[Q\supset(x)Fx]$} & 1-6, \textrm{ C.P.}\\};
    \draw[-stealth] (m-7-2.north east)
                 -| (m-1-1.west) |- (m-1-2);
    \draw[-stealth] (m-6-2.north east)
                 -| (m-3-1.east) |- (m-3-2);
  \end{tikzpicture}%
}% <---- \subfloat end
\caption{This is a caption}
\end{figure}
\end{document}

答案1

如果你在序言中添加以下内容

\newcommand{\Supset}{\ensuremath{\supset}}%

并使用,此错误更改Supsetsupset

包 pgfbasematrix 错误:单个 & 符号与错误的 catcode 一起使用。

定义 TikZ 矩阵的快捷方式的问题有关此问题的更多信息。

因此,为了解决这个问题,您可以改用\pgfmatrixnextcell&ampersand replacement=\&选择\matrix(然后使用\&而不是&),从而得到所需的结果:

在此处输入图片描述

\documentclass{article}
\usepackage{subfig}% http://ctan.org/pkg/subfig
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{matrix}

\begin{document}
\newcommand{\Supset}{\ensuremath{\supset}}%
\begin{figure}
\subfloat[something]{% <---- \subfloat begin
  \begin{tikzpicture}[every node/.style={anchor=west}]
    \matrix (m) [matrix of math nodes, nodes in empty cells,ampersand replacement=\&]{
      \quad 
      \& 1.\quad (x)(Q\Supset Fx) \& \\
      \& 2.\quad Q\Supset Fx \& \textrm{I,\textbf{UI}} \& \\
      \& 3.\quad Q \\
      \& 4.\quad Fx \& 2, 3, \textrm{ M.P.}\\
      \& 5.\quad (x)Fx \& 4, \textrm{ \textbf{UG}} \\
      \& 6.\quad Q\Supset(x)Fx \& 3-5, \textrm{ C.P.} \\
      \& 7.\quad \mbox{\parbox[t]{2.9cm}{%
        $(x)(Q\Supset(x)Fx)\Supset$\\
        $[Q\Supset(x)Fx]$}} \& 1-6, \textrm{ C.P.}\\
};
    \draw[-stealth] (m-7-2.north east)
                 -| (m-1-1.west) |- (m-1-2);
    \draw[-stealth] (m-6-2.north east)
                 -| (m-3-1.east) |- (m-3-2);
  \end{tikzpicture}%
}% <---- \subfloat end
\caption{This is a caption}
\end{figure}
\end{document}

答案2

另一个选择是考虑subcaption套餐。这篇文章有一些很好的比较:subcaption 与 subfig:引用子图的最佳包

下面是使用该包的实现,我根本subcaption不需要更改你的代码:)TikZ

\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{matrix}
\usepackage{subcaption}

\begin{document}
\begin{figure}
 \centering
 \begin{subfigure}{0.5\textwidth}
  \begin{tikzpicture}[every node/.style={anchor=west}]
    \matrix (m) [matrix of math nodes, nodes in empty cells]{
      \quad & 1.\quad (x)(Q\supset Fx) & \\
      & 2.\quad Q\supset Fx & \textrm{I,\textbf{UI}} & \\
      & 3.\quad Q \\
      & 4.\quad Fx & 2, 3, \textrm{ M.P.}\\
      & 5.\quad (x)Fx & 4, \textrm{ \textbf{UG}} \\
      & 6.\quad Q\supset(x)Fx & 3-5, \textrm{ C.P.} \\
      & 7.\quad \parbox[t]{2.9cm}{%
        $(x)(Q\supset(x)Fx)\supset$\\
        $[Q\supset(x)Fx]$} & 1-6, \textrm{ C.P.}\\};
    \draw[-stealth] (m-7-2.north east)
                 -| (m-1-1.west) |- (m-1-2);
    \draw[-stealth] (m-6-2.north east)
                 -| (m-3-1.east) |- (m-3-2);
  \end{tikzpicture}%
  \caption{Subcaption goes here}
 \end{subfigure}
\caption{This is a caption}
\end{figure}
\end{document}

在此处输入图片描述

相关内容