这是我目前所做的:
\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix@C=1cm{
% First row
\txt{FASE I\\Planejamento da Revisão} &
\txt{FASE II\\Realização da Revisão} &
\txt{FASE III\\Documentação da Revisão} &
\\
% Second row
*++[F-,]\txt{1. Especificar questões da\\ pesquisa} \ar[d] &
*++[F-,]\txt{3. Identificar e selecionar\\ pesquisas} \ar[d] &
*++[F-,]\txt{7. Analisar resultados} \ar[d]
\\
% Third row
*++[F-,]\txt{2. Desenvolver protocolo da\\ revisão questões da pesquisa} \ar[ur] &
*++[F-,]\txt{4. Avaliar a qualidade dos\\ estudos} \ar[d] &
*++[F-,]\txt{8. Elaborar relatório}
\\
% Fourth row
& *++[F-,]\txt{5. Extrair dados} \ar[d] &
\\
% Fifth row
& *++[F-,]\txt{6. Sintetizar dados} \ar[uuur] &
\\
}
\end{document}
如何使用 xymatrix 包重现步骤 2 和 3 之间以及步骤 6 和 7 之间的箭头,以便它转动并且不会经过其他步骤?
另外,我怎样才能将框架中的每一列“分组”,就像在原始图表中一样?
答案1
我知道您说过您只想要 xymatrix 解决方案,但我是 tikz 的支持者,而且我只是在做完这个之后才注意到您这么说。
\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{calc}
\usetikzlibrary{fit}
\begin{document}
\begin{tikzpicture}
\matrix (m) [
matrix of nodes,
row sep=0.4cm,
column sep=1cm,
% Set the size of the text boxes to be 4cm x 15pt
every node/.style={text width=4cm, text depth=15pt},
every node/.append code={
% Check whether we're on the top row
\ifnum\pgfmatrixcurrentrow=1\relax
% Top row: align center and don't draw rectangles
\pgfkeysalso{align=center}
\else
% other rows: align left and "draw" the rectangles
\pgfkeysalso{align=left,draw}
\fi
}
]{
% First row
% Need braces in order to use \\ as an explicit linebreak
{FASE I \\ Planejamento da Revisão} &
{FASE II\\ Realização da Revisão} &
{FASE III\\ Documentação da Revisão} \\
% Second row
1. Especificar questões da pesquisa &
3. Identificar e selecionar pesquisas &
7. Analisar resultados\\
% Third row
2. Desenvolver protocolo da revisãoa&
4. Avaliar a qualidade dos estudos&
8. Elaborar relatório\\
% Fourth row
& {5. Extrair dados} &
\\
% Fifth row
% I need to force tikz to create empty nodes for fitting later
% But we don't want it to make empty rectangles, hence |[draw=none]|
|[draw=none]|& {6. Sintetizar dados} & |[draw=none]|
\\};
\draw[->] (m-2-1) -- (m-3-1);
% Make the first zigzag path
\draw[->] (m-3-1.south) -- ++(0,-0.5)
-| ($(m-2-2.west) - (0.5,0)$)
-- (m-2-2.west);
\draw[->] (m-2-2) -- (m-3-2);
\draw[->] (m-3-2) -- (m-4-2);
\draw[->] (m-4-2) -- (m-5-2);
% Make the second zigzag path
\draw[->] (m-5-2.east) -- ++(0.5,0)
|- (m-2-3.west);
\draw[->] (m-2-3) -- (m-3-3);
% Draw the three "fit" rectangles
\node[rectangle,draw,fit=(m-1-1)(m-5-1)]{};
\node[rectangle,draw,fit=(m-1-2)(m-5-2)]{};
\node[rectangle,draw,fit=(m-1-3)(m-5-3)]{};
\end{tikzpicture}
\end{document}
答案2
我能用反引号得到的最好的结果是
\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix{
% First row
\txt{FASE I\\Planejamento da Revisão}
\ar[d]
& &
\txt{FASE II\\Realização da Revisão} & &
\txt{FASE III\\Documentação da Revisão} & &
\\
% Second row
*++[F-,]\txt{1. Especificar questões da\\ pesquisa} \ar[d] & &
*++[F-,]\txt{3. Identificar e selecionar\\ pesquisas} \ar[d] & &
*++[F-,]\txt{7. Analisar resultados} \ar[d]
\\
% Third row
*++[F-,]\txt{2. Desenvolver protocolo da\\ revisão questões da pesquisa}
\ar`d[dr]`[ur]`[urr][urr] % \ar[ur]
& &
*++[F-,]\txt{4. Avaliar a qualidade dos\\ estudos} \ar[d] & &
*++[F-,]\txt{8. Elaborar relatório}
\\
% Fourth row
& & *++[F-,]\txt{5. Extrair dados} \ar[d] & &
\\
% Fifth row
& & *++[F-,]\txt{6. Sintetizar dados}
\ar`r[ruuu]`[rruuu][rruuu] % \ar[uuur]
& &
}
\end{document}
我尝试通过添加无头箭头 ( ) 来获得框架,这些箭头\ar@{-}
与相应的矩阵条目偏移,但我无法弄清楚偏移语法。我想您可以使用“引入额外列”技巧将框架角置于矩阵条目处,但现在您要向矩阵添加两行和六列,这开始显得有点多余。