У меня возникла глупая проблема. Я не могу соединить последние два ящика. И еще я хочу иметь |.| в одном из ящиков, но не знаю, как это сделать. Может ли кто-нибудь мне помочь с этим?
\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\resizebox{16cm}{2cm}{%
\begin{tikzpicture}[auto,
node distance = 12mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
outer sep=0pt, on chain},
block/.default = 18mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=14mm] {a}; % block name is A-1
\node [block=12mm] {b};
\node [block=22mm] {c};
\node [block=15mm] {d};
\node [block=22mm] {e}; % block name is A-4
\node [block=22mm] {f}; % block name is A-6
\node [block=12mm] {g};
\node [block=24mm] {h}; % block name is A-8
\node [block=24mm] {i}; % block name is A-8
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
(A-1) edge (A-2) % text on arrow is between " and "
(A-2) edge (A-3)
(A-3) edge (A-4)
(A-4) edge (A-5)
(A-5) edge (A-6)
(A-6) edge (A-7);
(A-7) edge (A-8);
(A-8) edge (A-8);
\end{tikzpicture}
}
\end{document}
решение1
Последний блок, помеченный i, имеет имя A-9
, и если вы поставите точки с запятой, вам нужно будет добавить новую команду рисования. Надеюсь, я правильно понял ваш запрос modulo bar.
\documentclass{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.12}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\resizebox{16cm}{2cm}{%
\begin{tikzpicture}[auto,
node distance = 12mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
outer sep=0pt, on chain},
block/.default = 18mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=14mm] {a}; % block name is A-1
\node [block=12mm] {b};
\node [block=22mm] {c};
\node [block=15mm] {d};
\node [block=22mm] {e~$|.|$}; % block name is A-4
\node [block=22mm] {f}; % block name is A-6
\node [block=12mm] {g};
\node [block=24mm] {h}; % block name is A-8
\node [block=24mm] {i}; % block name is A-9
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\draw [-Stealth]
(A-1) edge (A-2) % text on arrow is between " and "
(A-2) edge (A-3)
(A-3) edge (A-4)
(A-4) edge (A-5)
(A-5) edge (A-6)
(A-6) edge (A-7)
(A-7) edge (A-8)
(A-8) edge (A-9);
\end{tikzpicture}
}
\end{document}
решение2
- МВЕ, о котором идет речь, мне очень знакомо :-)
- вам следует проанализировать код, который вы используете в вашем mwe... тогда вы увидите, что имя последнего узла
A-9
(а не такоеA-8
, как вы отметили в вашем mwe) - для наиболее распространенного размера следует выбрать размер по умолчанию, например,
block/.default=22mm
и только для остальных напишите желаемую ширину текста (вам действительно нужен такой разный размер узла? Я бы использовал только18mm
nad9mm
, см. mwe ниже) - математическое выражение можно записать в узле как в тексте, например $|\cdot|$
*не используйте
\resizebox{16cm}{...
. Это изменяет размер всего изображения и делает его некрасивым. Вместо этого пересчитайте ширину узлов и расстояния между узлами так, чтобы их сумма составила 16 см:14мм + 12мм + 22мм + 15мм + 22мм + 22мм +12мм +24мм +24мм + 9x2x(внутренний промежуток) +8*(расстояние между узлами)=
318 mm
что почти в два раза длиннее. Я предлагаю уменьшить вдвое длину всех элементов изображения (см. пример ниже) и использовать меньший размер шрифта, например
footnotesize
:
из mwe не следует, что вы добавите текст на стрелки между узлами. если это так, то вы можете нарисовать их макросом join
из chains
библиотеки
принимая во внимание вышеизложенные комментарии и предложения, ваш вариант станет:
\documentclass[margin=3mm]{standalone}
\usepackage{amsmath,amscd,amssymb,latexsym,upref} %stmaryrd
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{arrows.meta,
backgrounds,
chains,
fit,
quotes}
\begin{document}
\begin{tikzpicture}[
node distance = 7mm,
start chain = A going right,
block/.style = {draw, fill=white,
text width=#1, minimum height=10mm, align=center,
font=\footnotesize, inner sep=1mm, outer sep=0pt,
on chain, join=by -Stealth},
block/.default = 12mm,
container/.style = {draw, fill=gray!50,
inner xsep=2mm, inner ysep=7mm},
]
\node [block=6mm] {a}; % block name is A-1
\node [block=6mm] {b};
\node [block] {$|\cdot|$};
\node [block=6mm] {d};
\node [block] {e}; % block name is A-4
\node [block] {f}; % block name is A-6
\node [block=6mm] {g};
\node [block] {h};
\node [block] {i}; % block name is A-9
%
\scoped[on background layer]
\node [container, label={[anchor=north]joined},
fit= (A-5) (A-6)] (container) {};
\end{tikzpicture}
\end{document}
примечание: если вы хотите пометить стрелки между узлами, то вам следует удалить join
опцию из определения стиля блока и добавить к изображению:
\draw [-Stealth]
(A-1) edge ["$\alpha$"] (A-2)
(A-2) edge ["$\beta$"] (A-3)
(A-3) edge ["$\gamma$"] (A-4)
(A-4) edge ["$\epsilon$"] (A-5)
(A-5) edge ["$\zeta$"] (A-6)
(A-6) edge ["$\theta$"] (A-7)
(A-7) edge ["$\iota$"] (A-8)
(A-8) edge ["$\kappa$"] (A-9);
и к параметрам изображения добавьте:
every edge quote/.append style = {font=\footnotesize}
Рисование изображений требует много терпения, точности и времени...