使用 TikZ 图片作为子图的问题

使用 TikZ 图片作为子图的问题

我尝试创建一个由两个子图组成的图形,每个子图都是一张 TikZ 图片。

\documentclass[a4paper,10pt]{article}
\usepackage{amsmath,amssymb,amsfonts,amsthm,tikz,caption,subcaption}

\begin{document}

\begin{figure}
\begin{center}

\begin{subfigure}
\begin{tikzpicture}[scale=1]

  \path (0,0) coordinate (P0) node[right=0.1cm] {P0};
  \fill (P0) circle (2pt);

\end{tikzpicture}
\caption{Hello P1} \label{fig:M1}
\end{subfigure}

\begin{subfigure}
\begin{tikzpicture}[scale=1]

  \path (0,0) coordinate (P0) node[right=0.1cm] {P0};
  \fill (P0) circle (2pt);

\end{tikzpicture}
\caption{Hello P2} \label{fig:M2}
\end{subfigure}


\end{center}
\end{figure}

\end{document}

但编译此文件时出现错误

! Missing \endcsname inserted.
<to be read again> 
                   \relax 
l.10 \begin
           {tikzpicture}[scale=1]

这是为什么?

答案1

环境subfigure有一个指定宽度的强制参数:

\documentclass[a4paper,10pt]{article}
\usepackage{amsmath,amssymb,amsfonts,amsthm,tikz,caption,subcaption}

\begin{document}

\begin{figure}
\begin{subfigure}{.5\linewidth}
\centering
\begin{tikzpicture}[scale=1]

  \path (0,0) coordinate (P0) node[right=0.1cm] {P0};
  \fill (P0) circle (2pt);

\end{tikzpicture}
\caption{Hello P1} \label{fig:M1}
\end{subfigure}%
\begin{subfigure}{.5\linewidth}
\centering
\begin{tikzpicture}[scale=1]

  \path (0,0) coordinate (P0) node[right=0.1cm] {P0};
  \fill (P0) circle (2pt);

\end{tikzpicture}
\caption{Hello P2} \label{fig:M2}
\end{subfigure}
\end{figure}

\end{document}

在此处输入图片描述

.5\linewidth为每个子图使用了 ,这样每个子图将占据一半的可用水平空间,并且两个子图将并排显示;当然,您可以根据需要调整这些设置。我还习惯将\centering对象居中,因为center环境会在浮动内添加(通常是不必要的)垂直间距。

答案2

问题不在于使用 TiKz 来制作图形,而在于您如何处理子图形。

我写了很多论文,其中我希望在图形中使用一系列并排(或更复杂)的子浮点数。此外,我希望图形垂直居中。我最终放弃了,从 subfloat 或 subfig 切换到使用 floatrow 包。

这是一个使用 floatrow 将两个子图并排放置的最小示例。

\documentclass[]{article}       
\usepackage{graphicx, subfig}   
\usepackage{floatrow}   
\floatsetup[figure]{floatrowsep=qquad,   valign=c}      
\floatsetup[subfigure]{subfloatrowsep=qquad, heightadjust=object, valign=c, framefit = yes}

\usepackage{tikz}

\begin{document}

\begin{figure}[htbp]
\begin{center}
\ffigbox{
\begin{subfloatrow}[2] %change to 3 to have 3 side-by-side subfigs
\ffigbox[.4\textwidth]{\caption{A caption!}}{
\begin{tikzpicture}
\draw (0,0) rectangle (1,4);
\end{tikzpicture}
}
\ffigbox[.4\textwidth]{\caption{Another nice rectangle}}{
\begin{tikzpicture}
\draw (0,0) rectangle (6,2);
\end{tikzpicture}}
\end{subfloatrow}
}{
\caption{Here is a figure with two subfigures.}
\label{F:FirstEx}
}
\end{center}
\end{figure}
\end{document}  

相关内容