将 tikz 的第一个元素放在轴上方,形成一个“L”形箭头

将 tikz 的第一个元素放在轴上方,形成一个“L”形箭头

我想将图表的第一个元素定位在 x 轴上方,使第一条线呈“L”形。以下是我现在所得到的:

\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning, fit, arrows}
\begin{document}
    \begin{tikzpicture}[>=stealth,
        mymatrix/.style={
            matrix of nodes,
            nodes={typetag},
            row sep=1em,
            align=center
            },
        mycontainer/.style={draw=gray, inner sep=1ex},
        typetag/.style={draw=gray, inner sep=1ex, anchor=base,fill=green!50},
        title/.style={draw=none, color=gray, inner sep=0pt,fill=blue!10}
        ]

        \matrix[mymatrix,fill=blue!10] (ext) at (0,0) {
            |[title]|Externalisation? \\[.7em]
        };

        \matrix[mymatrix,fill=blue!10,right=45pt of ext] (source) {
            |[title]|Donnée source \\
            Chercher \\
            Transférer \\
            Stocker \\
        };
        \draw[->] (ext.south) |- node [above] {choix} node [below] {effectué} ++(1.5,0) |- (source.west) ;
        \matrix[mymatrix,fill=blue!10,right=75pt of source, nodes in empty cells,
    row 3/.style = {nodes={draw=none,fill=blue!10}}] (trans) {
            |[title]|Transformation \\
            Spécification \\
            \\
            Développement \\
        };
        \path[<->]
            (trans-2-1) edge node [midway,align=center] {enrichissement \\ mutuel} (trans-4-1);

        \draw[->] (source.east) -- node [above] {donnée source} node [below] {récupérée} ++(2.5,0) -- (trans.west);
        \matrix[mymatrix,fill=blue!10,right=75pt of trans] (int) {
            |[title]|Intégration \\
            Tests \\
            Bascule \\
        };

        \draw[double,<->] (trans.east) -- node [above] {enrichissement} node [below] {mutuel} ++(2.5,0) -- (int.west);
    \end{tikzpicture}
\end{document}

还有图片: 图表

您会看到第一个箭头很丑...提前致谢:)

答案1

欢迎来到 TeX.sx!

为了获得正确的重音和排版(例如,在 之前有一个空格?),请使用:

\usepackage[utf8]{inputenc}
\usepackage[french]{babel}

请注意,您在 之前有几处地方留下了空格\\。LaTeX 看到这个空格,并在节点内添加了一个额外的空格(这就是文本没有完全居中的原因,Externalisation ?<space>例如,您可以在节点中看到它。我删除了下面代码中看到的多余空格。

要将第二个矩阵放置在第二个矩阵的右下方,请使用

        \matrix[mymatrix,fill=blue!10,below right=45pt of ext] (source) {

您可以独立更改 x 和 y 距离,如下所示(此处的尺寸为 y 轴上 5pt,x 轴上 45pt):

        \matrix[mymatrix,fill=blue!10,below right=5pt and 45pt of ext] (source) {

请注意,距离是从边到边测量的(或者在这个形状中是从角到角测量的)。如果你想测量第一个矩阵相对于箭头到达第二个矩阵的位置的 y 位置,请使用,anchor=west这样第二个矩阵就悬挂在其西节点的所需位置(我习惯1.5\baselineskip使用 1.5 倍的中间线,而不是pt通过反复试验来弄乱):

        \matrix[mymatrix,fill=blue!10,below right=1.5\baselineskip and 45pt of ext, anchor=west] (source) {

我使用了一种肮脏的技巧来正确放置文本。 位于chx右上方角落,我将一个水平放置eff在错误位置的节点(但将其设为幻像,以便它不会出现在结果中)。然后,我使用 的(chx |- eff)x 轴(中心)chx和 的 y 轴eff(由于eff和 实际effectué节点具有相同的高度,因此它们按预期对齐,但请注意,默认情况下它将使用.west上的锚点eff.center上的锚点effectué)。

        \draw[->] (ext.south) |- node (chx) [above right] {choix} node (eff) [below right] {\phantom{effectué}} (source.west) ;
        \node at (chx |- eff) {effectué};

我发现这很不错(choix在角落里,而effectué稍微悬挂在下面),但如果您希望 的左边缘effectué刚好在角落下方,您可以交换phantom和 两侧的节点|-,如下所示(那么chx是幻影,而 实部相对于'sy 和'sychoix放置):chxeff

        \draw[->] (ext.south) |- node (chx) [above right] {\phantom{choix}} node (eff) [below right] {effectué} (source.west) ;
        \node at (eff |- chx) {choix};

完整来源:

\documentclass{minimal}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{matrix, positioning, fit, arrows}
\begin{document}
    \begin{tikzpicture}[>=stealth,
        mymatrix/.style={
            matrix of nodes,
            nodes={typetag},
            row sep=1em,
            align=center
            },
        mycontainer/.style={draw=gray, inner sep=1ex},
        typetag/.style={draw=gray, inner sep=1ex, anchor=base,fill=green!50},
        title/.style={draw=none, color=gray, inner sep=0pt,fill=blue!10}
        ]

        \matrix[mymatrix,fill=blue!10] (ext) at (0,0) {
            |[title]|Externalisation?\\[.7em]
        };

        \matrix[mymatrix,fill=blue!10,below right=1.5\baselineskip and 45pt of ext, anchor=west] (source) {
            |[title]|Donnée source\\
            Chercher\\
            Transférer\\
            Stocker\\
        };
        \draw[->] (ext.south) |- node (chx) [above right] {choix} node (eff) [below right] {\phantom{effectué}} (source.west) ;
        \node at (chx |- eff) {effectué};
        \matrix[mymatrix,fill=blue!10,right=75pt of source, nodes in empty cells,
    row 3/.style = {nodes={draw=none,fill=blue!10}}] (trans) {
            |[title]|Transformation\\
            Spécification\\
            \\
            Développement\\
        };
        \path[<->]
            (trans-2-1) edge node [midway,align=center] {enrichissement \\ mutuel} (trans-4-1);

        \draw[->] (source.east) -- node [above] {donnée source} node [below] {récupérée} ++(2.5,0) -- (trans.west);
        \matrix[mymatrix,fill=blue!10,right=75pt of trans] (int) {
            |[title]|Intégration\\
            Tests\\
            Bascule\\
        };

        \draw[double,<->] (trans.east) -- node [above] {enrichissement} node [below] {mutuel} ++(2.5,0) -- (int.west);
    \end{tikzpicture}
\end{document}

相关内容