有没有办法打印两个并排标有 a 和 b 的 tikzpicture?

有没有办法打印两个并排标有 a 和 b 的 tikzpicture?

我有以下代码,可以打印两个相邻的图形,第一个图形左侧显示 a,第二个图形左侧显示 ab。下面的代码可以做到这一点,但所有内容都与底线对齐。有没有选项可以强制图片向下?或者也许有完全不同的方法来实现我的目标?谢谢!

\documentclass{scrbook}

\usepackage{tikz-qtree}

\begin{document}

\begin{figure}[htbp]
\centering
\begin{tabular}[t]{@{}ll@{\hspace{2cm}}ll@{}}
a. & \begin{tikzpicture}
\Tree[.N 
          [.PV pazirāi ]
          [.N 
            [.V kon- ] ande ] ]
\end{tikzpicture} &
b. &
\begin{tikzpicture}
\Tree[.N 
          [.V 
            [.PV pazirāi ]
            [.V kon- ] ] ande ] 
\end{tikzpicture}
\end{tabular}
\end{figure}


\end{document}

答案1

这是一个使用floatrowsubfig包;这种方法的优点在于,您不必手动标记图形,并且可以轻松控制标签的垂直位置;此外,您可以交叉引用子图:

\documentclass{scrbook}
\usepackage{tikz-qtree}
\usepackage{floatrow}
\usepackage{subfig}

\floatsetup[figure]{style=plain,subcapbesideposition=center}

\begin{document}

\begin{figure}
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.PV pazirāi ]
          [.N 
            [.V kon- ] ande ] ]
\end{tikzpicture} 
}\qquad%
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.V 
            [.PV pazirāi ]
            [.V kon- ] ] ande ] 
\end{tikzpicture}
}
\end{figure}

\end{document}

在此处输入图片描述

只需加载上述解决方案中的 bidi 包(并使用 XeLaTeX 处理),如以下文档所示:

\documentclass{scrbook}
\usepackage{tikz-qtree}
\usepackage{floatrow}
\usepackage{subfig}
\usepackage{bidi}

\floatsetup[figure]{style=plain,subcapbesideposition=center}

\begin{document}

\begin{figure}
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.PV pazirāi ]
          [.N 
            [.V kon- ] ande ] ]
\end{tikzpicture} 
}\qquad%
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.V 
            [.PV pazirāi ]
            [.V kon- ] ] ande ] 
\end{tikzpicture}
}
\end{figure}

\end{document}

产生错误

! LaTeX Error: \floatc@plain undefined.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.16 \renewcommand\floatc@plain
                               [2]{\setbox\@tempboxa\hbox{{\@fs@cfont #1:} #2}%

? 

解决方法是定义\floatc@plain 加载bidi包;可以在文件中找到定义float.sty;以下代码可以无错误地处理并产生所需的结果:

\documentclass{scrbook}
\usepackage{tikz-qtree}
\usepackage{floatrow}
\usepackage{subfig}
\makeatletter
\newcommand\floatc@plain[2]{\setbox\@tempboxa\hbox{{\@fs@cfont #1:} #2}%
  \ifdim\wd\@tempboxa>\hsize {\@fs@cfont #1:} #2\par
    \else\hbox to\hsize{\hfil\box\@tempboxa\hfil}\fi}
\makeatother
\usepackage{bidi}

\floatsetup[figure]{style=plain,subcapbesideposition=center}

\begin{document}

\begin{figure}
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.PV pazirāi ]
          [.N 
            [.V kon- ] ande ] ]
\end{tikzpicture} 
}\qquad%
\sidesubfloat[]{%
\begin{tikzpicture}
\Tree[.N 
          [.V 
            [.PV pazirāi ]
            [.V kon- ] ] ande ] 
\end{tikzpicture}
}
\end{figure}

\end{document}

在此处输入图片描述

答案2

以下示例展示了两种移动tikz图片的方法。第一种方法是使用 ,\raisebox{-.5\height}{...}这种方法也适用于图像。第二种方法是使用选项baseline

\documentclass{scrbook}

\usepackage{tikz-qtree}

\begin{document}

\begin{figure}[htbp]
\centering
\begin{tabular}[t]{@{}ll@{\hspace{2cm}}ll@{}}
a. & \raisebox{-.5\height}{\begin{tikzpicture}
\Tree[.N
          [.PV pazirai ]
          [.N
            [.V kon- ] ande ] ]
\end{tikzpicture}} &
b. &
\begin{tikzpicture}[baseline=(current bounding box.center)]
\Tree[.N
          [.V
            [.PV pazirai ]
            [.V kon- ] ] ande ]
\end{tikzpicture}
\end{tabular}
\end{figure}

\end{document}

结果

答案3

您也可以使用一张 TikZ 图片和local bounding box选项,但我建议使用subcaption包来正确处理你的子图。以下是一个例子:

\documentclass{scrbook}

\usepackage{tikz-qtree}
\usetikzlibrary{positioning}

\begin{document}

\begin{figure}[htbp]
\centering
\begin{tikzpicture}

\begin{scope}[local bounding box=aa]
\Tree[.N 
          [.PV pazirāi ]
          [.N 
            [.V kon- ] ande ] ]

\end{scope}

\begin{scope}[shift={(6,0)},local bounding box=bb]
\Tree[.N 
          [.V 
            [.PV pazirāi ]
            [.V kon- ] ] ande ] 

\end{scope}

\node[right = -1cm of aa.west] {a.)};
\node[right = -1cm of bb.west] {b.)};

\end{tikzpicture}
\end{figure}


\end{document}

如果范围高度不同,则可能需要额外的转变。

在此处输入图片描述

答案4

手动标记的另一种方法是将图形放入小页面中。我使用这种技术来对齐所有类型的图形,尤其是当图形的基线无法控制时(尽管 TikZ 图形可以做到这一点)。

\documentclass{article}
\usepackage{tikz-qtree}
\makeatletter
\newsavebox{\my@figbox}
\newcommand{\myfigbox}[2][\empty]{
  \if#1\empty\else\textbf{#1}\fi%
  \savebox{\my@figbox}{#2}%
  \begin{minipage}[c]{\wd\my@figbox}
    \centering\vspace{0pt}
    \usebox{\my@figbox}%
  \end{minipage}%
}
\makeatother
\begin{document}

\myfigbox[a.]{%
\begin{tikzpicture}
  \Tree[.N 
          [.PV pazirai ]
          [.N 
            [.V kon- ] ande ] ]
\end{tikzpicture}
}%
\myfigbox[b.]{%
\begin{tikzpicture}
\Tree[.N 
          [.V 
            [.PV pazirai ]
            [.V kon- ] ] ande ] 
\end{tikzpicture}
}

\end{document}

在此处输入图片描述

通常可以通过将标签放在图形上来节省空间。为此,可以\myfigbox按如下方式修改宏:

\newcommand{\myfigbox}[2][\empty]{
  \if#1\empty\else\makebox[0pt][l]{\textbf{#1}}\fi%
  \savebox{\my@figbox}{#2}%
  \begin{minipage}[t]{\wd\my@figbox}
    \centering\vspace{0pt}
    \usebox{\my@figbox}%
  \end{minipage}%
}

得出

在此处输入图片描述

相关内容