
Я хочу нарисовать две картинки, вторая картинка должна быть ниже первой. Вот что у меня сейчас есть:
Как вторая картинка может получить ту же координату x, что и первая?
Код:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\begin{document}
\tikzset{
pics/vhsplit/.style n args = {3}{
code = {
\node (A) at (0,0) {#1};
\node[anchor=south west] (B) at (A.east) {#2};
\node[anchor=north west] (C) at (A.east) {#3};
\node[inner sep=0pt, outer sep=0pt, draw, rounded corners, fit=(A)(B)(C)] (-box) {};
\draw (B.north west) -- (C.south west)
(B.south west) -- (C.north east);
}
}
}
\begin{tikzpicture}
\pic (a) {vhsplit={a}{2.0}{6.0}};
\pic[below=10mm of a-box.south] (b) {vhsplit={b}{-3.0}{-4.0}};
\end{tikzpicture}
\end{document}
решение1
Картинки не такие умные, как узлы. Всегда в указанное место помещается источник картинки.
Если это все, что вам нужно, может быть проще использовать обычный узел с tabular
внутренним узлом. Вот три подхода:
- Обычный текст и таблица с двумя строками и одним столбцом
→vhsplit
- Одна таблица с двумя строками и двумя столбцами, где
#1
помещается\multirow
→vhsplit'
- А
rectangle split
формаизshapes.multipart
библиотеки, снова с табличным форматом, как в 1.
→vhsplit''
Поскольку строки таблицы должны касаться границы узла, я установлю s inner sep
(по умолчанию .3333em) на ноль и снова вставлю этот пробел в соответствующие места.
Вертикальное размещение левой части немного варьируется, выберите то, которое лучше всего подходит для ваших вариантов использования (решения окрашены в красный/зеленый/синий цвет в указанном порядке и наложены друг на друга с помощью opacity=.3333
):
Код
\documentclass[tikz,border=2mm]{standalone}
\usepackage{hhline}
\usepackage{multirow}
\usetikzlibrary{positioning}
\tikzset{
vhsplit/.style n args={3}{% text and a tabular
shape=rectangle, draw, rounded corners, inner sep=+0pt,
node contents={%
\setlength{\tabcolsep}{.3333em}%
\hspxsep#1\hspxsep
\begin{tabular}{|l@{\hspxsep}}
\vstysep$#2$\\\hhline{|-}
\vstysep$#3$%
\end{tabular}}},
vhsplit'/.style n args={3}{
shape=rectangle, draw, rounded corners, inner sep=+0pt,
node contents={% multirow in a tabular
\setlength{\tabcolsep}{.3333em}%
\begin{tabular}{l|l@{\hspxsep}}
\multirow{2}{*}{#1} &
\vstysep$#2$\\\hhline{~|-}
& \vstysep$#3$%
\end{tabular}}}}
\usetikzlibrary{shapes.multipart}
\tikzset{
vhsplit''/.style n args={3}{
shape=rectangle split, rectangle split horizontal, rectangle split parts=2,
draw, rounded corners, inner sep=+0pt,
node contents={% two nodeparts and a tabular
\hspxsep#1\hspxsep\null
\nodepart{two}\setlength{\tabcolsep}{.3333em}%
\begin{tabular}{l}
\vstysep$#2$\\\hline
\vstysep$#3$
\end{tabular}}}}
\newcommand*\hspxsep{\hspace{.3333em}}
\newcommand*\vstysep{\rule{0pt}{1.0333em}}
\begin{document}
\begin{tikzpicture}
\node (a) [vhsplit={a}{ 2.0} {6.0}];
\node[below=of a] (b) [vhsplit={b}{-3.0}{-4.0}];
\tikzset{xshift=2cm}
\node (a) (a) [vhsplit'={a} {2.0} {6.0}];
\node[below=of a] (b) [vhsplit'={b}{-3.0}{-4.0}];
\tikzset{xshift=2cm}
\node (a) [vhsplit''={a} {2.0} {6.0}];
\node[below=of a] (b) [vhsplit''={b}{-3.0}{-4.0}];
\end{tikzpicture}
\end{document}
Выход
решение2
Попробуй это:
\documentclass[tikz,border=2mm]{standalone}
\usetikzlibrary{positioning}
\usetikzlibrary{fit}
\begin{document}
\tikzset{
pics/vhsplit/.style n args = {3}{
code = {
\node (A) at (0,0) {#1};
\node[anchor=south west] (B) at (A.east) {#2};
\node[anchor=north west] (C) at (A.east) {#3};
\node[inner sep=0pt, outer sep=0pt, draw, rounded corners, fit=(A)(B)(C)] (-box) {};
\draw (B.north west) -- (C.south west)
(B.south west) -- (C.north east);
}
}
}
\begin{tikzpicture}{scale=3} % <-- changed
\pic (a) {vhsplit={a}{2.0}{6.0}};
\pic[xshift=0cm,yshift=-1cm] (b) {vhsplit={b}{-3.0}{-4.0}};
\end{tikzpicture}
\end{document}
ВЫХОД: