我有一个带有数学节点矩阵的 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}}%
并使用,此错误更改Supset
为supset
包 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}