我有以下代码,可以打印两个相邻的图形,第一个图形左侧显示 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
这是一个使用floatrow
和subfig
包;这种方法的优点在于,您不必手动标记图形,并且可以轻松控制标签的垂直位置;此外,您可以交叉引用子图:
\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}%
}
得出