我尝试创建一个由两个子图组成的图形,每个子图都是一张 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}