tikz 中的定位范围

tikz 中的定位范围

今天是个好日子

我目前在定位范围内分组的节点堆栈时遇到了一些麻烦。我肯定进展不顺利,但这是我的代码:

 \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 1node 2node 3在一侧;node 4node 5在另一侧)。在此示例中,该目的已达到,但如果我尝试链接node 1node 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}

结果:

在此处输入图片描述

相关内容