我想将图表的第一个元素定位在 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
放置):chx
eff
\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}