今天是个好日子
我目前在定位范围内分组的节点堆栈时遇到了一些麻烦。我肯定进展不顺利,但这是我的代码:
\documentclass{standalone}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lmodern}
\usetikzlibrary{positioning}
\newcommand{\nom}[1]{\textsc{#1}}
\def\nodehdist{2cm}
\begin{document}
\begin{tikzpicture}
\begin{scope}[local bounding box=seniors]
\node(n_anna) at (0,0){\nom{untel}};
\node[align=center,below=0 of n_anna](anna) at (n_anna.south){
\scriptsize Gestionnaire Paie\\
\scriptsize Collaboratrice};
\node(n_remi) [right=\nodehdist of n_anna]{\nom{untel}};
\node[align=center,below=0 of n_remi] at (n_remi.south){
\scriptsize Responsable portefeuille};
\node(n_guilhem) [right=\nodehdist of n_remi]{\nom{untel}};
\node[align=center,below=0 of n_guilhem] at (n_guilhem.south){
\scriptsize Responsable paie\\
\scriptsize Collaborateur};
\end{scope}
\begin{scope}[shift={(0,2cm)}]
\node(n_axel) at (0,0){\nom{mister}};
\node[align=center,below=0 of n_axel]{
\scriptsize Expert-Comptable};
\node(n_sarah)[right=5*\nodehdist of n_axel]{\nom{miss}};
\node[align=center,below=0 of n_sarah]{
\scriptsize Expert-Comptable | Commissaire aux Comptes};
\end{scope}
\end{tikzpicture}
\end{document}
因此,我希望将“mister”和“miss”节点作为一个整体节点置于下面三个节点形成的整体的中心。正如您在我的例子中所看到的,“mister”和“miss”节点以某种我不明白的奇怪方式居中。我想知道这是否可以通过任何相对定位解决方案来解决?
编辑:我也尝试过这个作为更清晰的例子(或者我希望如此):
\documentclass{standalone}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lmodern}
\usetikzlibrary{positioning}
\newcommand{\nom}[1]{\textsc{#1}}
\def\nodehdist{2cm}
\begin{document}
\begin{tikzpicture}
\node[fill=red!25](Node) at(0,0){%
\begin{tikzpicture}
\node(node1) at (0,0){node 1};
\node[right=of node1](node2){node 2};
\node[right=of node2]{node 3};
\end{tikzpicture}
};
\node[fill=blue!25,above=of Node]{
\begin{tikzpicture}
\node(node4) at (0,0){node 4};
\node[right=of node4](node5){node 5};
\end{tikzpicture}
};
\draw (node1)--(node4);
\end{tikzpicture}
\end{document}
我试图将一些节点簇(这里是红色和蓝色)彼此相对定位,而其中的节点本身也是彼此相对设置的(node 1
,node 2
和node 3
在一侧;node 4
和node 5
在另一侧)。在此示例中,该目的已达到,但如果我尝试链接node 1
到node 4
,结果会很奇怪。
谢谢你的帮助
答案1
我知道您想要绘制一些节点(您的示例中是三个,但可能更多),并将两个节点放置在它们上方,并尊重下方节点的整个宽度(范围)。
以下代码展示了一种可能的解决方案。放置任意数量的节点,不考虑范围。放置后,声明一个fit
节点,该节点包含您想要的所有内容(此拟合节点在代码中绘制,但只是为了显示它)。之后,将两个上部节点放入matrix
根据拟合节点固定的位置。
如果您需要在下部组中插入更多节点并且它们使下部更宽,请将它们添加到fit
列表中,并且上部矩阵将始终居中。
\documentclass[border=2mm]{standalone}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lmodern}
\usetikzlibrary{positioning,fit,matrix}
\newcommand{\nom}[1]{\textsc{\normalsize #1}}
\def\nodehdist{2cm}
\begin{document}
\begin{tikzpicture}[mynode/.style={draw, align=center, font=\scriptsize}]
%\begin{scope}[local bounding box=seniors]
\node[mynode] (n_anna) {\nom{untel}\\Gestionnaire Paie\\
Collaboratrice};
\node[mynode, right=\nodehdist of n_anna] (n_remi) {\nom{untel} \\ Responsable portefeuille};
\node[mynode, right=\nodehdist of n_remi] (n_guilhem) {\nom{untel}\\ Responsable paie\\
Collaborateur};
\node[mynode, below left= of n_remi] (newnode1) {\nom{untel}\\ xxxxxx xxxxx};
\node[mynode, below right= 1cm and 8mm of n_guilhem] (newnode2) {\nom{untel}\\ yyyyy yyyyy\\ yyyy yyyy};
\node[draw, fit=(n_anna) (n_guilhem) (newnode1) (newnode2)] (seniors) {};
%\end{scope}
\node[draw, matrix, column sep=1cm, above=1cm of seniors] (over-seniors) {\node[mynode]
{\nom{mister}\\ Expert-Comptable}; & \node[mynode]{\nom{miss}\\Expert-Comptable | Commissaire aux Comptes};\\};
\end{tikzpicture}
\end{document}
答案2
这可能有用。我在 中添加了上面的两个节点matrix
,并将其相对于scope
已定义的 进行定位。当然,您也可以对下面的三个节点使用矩阵。
\documentclass{standalone}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{lmodern}
\usetikzlibrary{positioning}
\newcommand{\nom}[1]{\textsc{#1}}
\def\nodehdist{2cm}
\begin{document}
\begin{tikzpicture}
\begin{scope}[local bounding box=seniors]
\node(n_anna) at (0,0){\nom{untel}};
\node[align=center,below=0 of n_anna](anna) at (n_anna.south){
\scriptsize Gestionnaire Paie\\
\scriptsize Collaboratrice};
\node(n_remi) [right=\nodehdist of n_anna]{\nom{untel}};
\node[align=center,below=0 of n_remi] at (n_remi.south){
\scriptsize Responsable portefeuille};
\node(n_guilhem) [right=\nodehdist of n_remi]{\nom{untel}};
\node[align=center,below=0 of n_guilhem] at (n_guilhem.south){
\scriptsize Responsable paie\\
\scriptsize Collaborateur};
\end{scope}
\matrix (m) [above=of seniors,column sep={5*\nodehdist,between origins}] {
\node[align=center](n_axel) {\nom{mister}\\ \scriptsize Expert-Comptable}; &
\node[align=center](n_sarah){\nom{miss}\\\scriptsize Expert-Comptable | Commissaire aux Comptes}; \\
};
\end{tikzpicture}
\end{document}
答案3
另一种可能性是使用multi part
节点并逃避使用范围:
\documentclass[border=5mm,
tikz]{standalone}
%\usepackage[french]{babel}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usetikzlibrary{calc,positioning,shapes.multipart}
\newcommand{\nom}[1]{\textsc{#1}}
\begin{document}
\begin{tikzpicture}[
node distance = 5 mm and 7mm,
every node/.style = {
shape=rectangle split, rectangle split parts=2,
% draw, % <-- in case that you like to see node's borders
align=center, text width=34mm, outer sep=0mm}
]
\linespread{0.8}
\node (mister) {\nodepart{one} \nom{mister}
\nodepart{two}\scriptsize Expert-Comptable};
\node[text width=62mm, right=of mister]
(miss) {\nodepart{one} \nom{miss}
\nodepart{two}\scriptsize Expert-Comptable | Commissaire aux Comptes};
\node[below=of $(mister.south west)!0.5!(miss.south east)$] (middle)
{\nodepart{one} \nom{untel}
\nodepart{two}\scriptsize Responsable portefeuille};
\node[left=of middle]
{\nodepart{one} \nom{untel}
\nodepart{two}\scriptsize Gestionnaire Paie Collaboratrice};
\node[right=of middle]
{\nodepart{one} \nom{untel}
\nodepart{two}\scriptsize Responsable paie Collaborateur};
\end{tikzpicture}
\end{document}
结果: