
Я пытаюсь воспроизвести диаграмму ниже, используя пакет xymatrix:
Вот что я уже сделал:
\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@{-}
) со смещением от соответствующих записей матрицы, но не смог разобраться в синтаксисе смещения. Полагаю, можно использовать трюк «ввести дополнительные столбцы», чтобы углы рамок совпадали с записями матрицы, но теперь вы добавляете в матрицу две строки и шесть столбцов, что начинает казаться чрезмерным.