테이블에 왼쪽 오른쪽 화살표를 그리는 방법을 모르겠습니다. 이 화살표는 여기와 같아야 합니다.
여기에 테이블의 코드가 있습니다.
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{tabular}{llllll}
& & Text here & & & \\
\multicolumn{4}{l}{\textless{}--------------------------------------------------------------------------------------------------\textgreater{}} & & \\
& Some other text here & & \multicolumn{2}{c}{Some other text here} & \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& & \multicolumn{3}{l}{\textless{}---------------------------------------------------------------------------------------------\textgreater{}} & \\
& & & \multicolumn{2}{c}{Some other text here} & \\
& \multicolumn{5}{l}{\textless{}------------------------------------------------------------------------------------------------------------------------------------------\textgreater{}} \\
& & & Some other text here & &
\end{tabular}
\end{table}
답변1
의 .{NiceTabular}
nicematrix
\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
& & Text here \\
\\
& Some other text here & & \Block{1-2}{Some other text here} \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
\\
& & & \Block{1-2}{Some other text here} \\
\\
& & & Some other text here
\CodeAfter
\begin{tikzpicture} [-LaTeX]
\draw [<->] (2.5-|1) -- (2.5-|5) ;
\draw [<->] (6.5-|3) -- (6.5-|6) ;
\draw [<->] (8.5-|2) -- (8.5-|7) ;
\end{tikzpicture}
\end{NiceTabular}
\end{table}
\end{document}
여러 가지 편집이 필요합니다.
규칙을 시각화하려면 키 hvlines
(에서 제공 nicematrix
)만 사용하면 됩니다.
\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}[hvlines,rules/width=0.1pt]
& & Text here \\
\\
& Some other text here & & \Block{1-2}{Some other text here} \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
\\
& & & \Block{1-2}{Some other text here} \\
\\
& & & Some other text here
\CodeAfter
\begin{tikzpicture} [-LaTeX]
\draw [<->] (2.5-|1) -- (2.5-|5) ;
\draw [<->] (6.5-|3) -- (6.5-|6) ;
\draw [<->] (8.5-|2) -- (8.5-|7) ;
\end{tikzpicture}
\end{NiceTabular}
\end{table}
행과 열의 수를 세고 싶지 않다면 블록(command
\Block
)을 사용하고 해당 블록에 이름을 지정하여 계산할 수도 있습니다.
\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
& & Text here \\
\Block[name=first-arrow]{1-4}{} \\
& Some other text here & & \Block{1-2}{Some other text here} \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& & \Block[name=second-arrow]{1-3}{} \\
& & & \Block{1-2}{Some other text here} \\
& \Block[name=third-arrow]{1-5}{} \\
& & & Some other text here
\CodeAfter
\begin{tikzpicture} [-LaTeX]
\draw [<->] (first-arrow.west) -- (first-arrow.east) ;
\draw [<->] (second-arrow.west) -- (second-arrow.east) ;
\draw [<->] (third-arrow.west) -- (third-arrow.east) ;
\end{tikzpicture}
\end{NiceTabular}
\end{table}
\end{document}
출력은 동일합니다.
\LeftRightArrow
기본 테이블 형식에 넣고 모든 작업을 수행하는 명령을 생성하는 것도 가능합니다 ( 에 지침을 넣을 필요가 없습니다 \CodeAfter
).
\documentclass{article}
\usepackage{geometry}
\usepackage{caption}
\usepackage{nicematrix,tikz}
\usetikzlibrary{arrows.meta}
\makeatletter
\ExplSyntaxOn
\NewDocumentCommand { \LeftRightArrow } { m }
{
\tl_gput_right:Nx \g_nicematrix_code_after_tl
{ \niru__LeftRightArrow:nnn { \arabic { iRow } } { \arabic { jCol } } { #1 } }
}
\cs_new_protected:Nn \niru__LeftRightArrow:nnn
{ \tikz \draw [-LaTeX,<->] (#1.5-|#2) -- (#1.5-|\int_eval:n{#2+#3}) ; }
\ExplSyntaxOff
\makeatother
\begin{document}
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{NiceTabular}{llllll}
& & Text here \\
\LeftRightArrow{4} \\
& Some other text here & & \Block{1-2}{Some other text here} \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& & \LeftRightArrow{3} \\
& & & \Block{1-2}{Some other text here} \\
& \LeftRightArrow{5} \\
& & & Some other text here
\end{NiceTabular}
\end{table}
\end{document}
출력은 동일합니다.
답변2
TikZ 매트릭스를 사용하면 다음과 같습니다.
\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix, fit}
\usetikzlibrary{arrows.meta}
\tikzset{
mynode/.style={text height=3ex, text depth=1ex,inner ysep=0pt},
mymulti/.style={mynode, inner xsep=0pt},
}
\usepackage{caption}
\begin{document}
\begin{table}\centering
\caption{My table}\label{tab:arrow}
\begin{tikzpicture}
\matrix[
matrix of nodes, nodes in empty cells, nodes={mynode},
column 1/.style={text width=.3cm},
column 2/.style={text width=width("Some other text here")},% put the longest text of the column here
column 3/.style={text width=width("Text here")},% put the longest text of the column here
column 4/.style={text width=width("Some other text here")},% put the longest text of the column here
column 5/.style={text width=width("Some other text here")},% put the longest text of the column here
column 6/.style={text width=.3cm},
] (mymatr) {
& & Text here & & & \\
& & & & & \\
& Some other text here & & & & \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& & & & & \\
& & & & & \\
& & & & & \\
& & & Some other text here & & \\
};
% Multicolumn texts
\node[fit=(mymatr-3-4)(mymatr-3-5), mymulti] {Some other text here};
\node[fit=(mymatr-7-4)(mymatr-7-5), mymulti] {Some other text here};
% Arrows
\draw[{Latex}-{Latex}] (mymatr-2-1.west) -- (mymatr-2-4.east);
\draw[{Latex}-{Latex}] (mymatr-6-3.west) -- (mymatr-6-5.east);
\draw[{Latex}-{Latex}] (mymatr-8-2.west) -- (mymatr-8-6.east);
\end{tikzpicture}
\end{table}
\end{document}
경계선과 회색 배경이 필요한 경우:
\documentclass{article}
\usepackage{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix, fit}
\usetikzlibrary{arrows.meta}
\tikzset{
mynode/.style={text height=3ex, text depth=1ex,inner ysep=0pt, fill=gray!5},
mymulti/.style={mynode, inner xsep=0pt},
myarrow/.style={{Latex}-{Latex},shorten <=1pt,shorten >=1pt},
}
\usepackage{caption}
\begin{document}
\begin{table}\centering
\caption{My table}\label{tab:arrow}
\begin{tikzpicture}
\matrix[
matrix of nodes, nodes in empty cells, nodes={mynode},
column 1/.style={text width=.3cm},
column 2/.style={text width=width("Some other text here")},% put the longest text of the column here
column 3/.style={text width=width("Text here")},% put the longest text of the column here
column 4/.style={text width=width("Some other text here")},% put the longest text of the column here
column 5/.style={text width=width("Some other text here")},% put the longest text of the column here
column 6/.style={text width=.3cm},
] (mymatr) {
& & Text here & & & \\
& & & & & \\
& Some other text here & & & & \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& & & & & \\
& & & & & \\
& & & & & \\
& & & Some other text here & & \\
};
% Multicolumn texts
\node[fit=(mymatr-3-4)(mymatr-3-5), mymulti] {Some other text here};
\node[fit=(mymatr-7-4)(mymatr-7-5), mymulti] {Some other text here};
% Border lines
\foreach \myrow in {1,2,...,9}
{\draw[gray!40] (mymatr-\myrow-1.north west) -- (mymatr-\myrow-6.north east);}
\draw[gray!40] (mymatr-9-1.south west) -- (mymatr-9-6.south east);
\draw[gray!40] (mymatr-1-1.north west) -- (mymatr-9-1.south west);
\foreach \mycol in {2,3,4}
{\draw[gray!40] (mymatr-1-\mycol.north west) -- (mymatr-1-\mycol.south west);}
\draw[gray!40] (mymatr-3-2.north west) -- (mymatr-9-2.south west);
\draw[gray!40] (mymatr-3-3.north west) -- (mymatr-7-3.south west);
\foreach \mycol in {3,4,5,6}
{\draw[gray!40] (mymatr-9-\mycol.north west) -- (mymatr-9-\mycol.south west);}
\draw[gray!40] (mymatr-3-4.north west) -- (mymatr-5-4.south west);
\draw[gray!40] (mymatr-7-4.north west) -- (mymatr-7-4.south west);
\draw[gray!40] (mymatr-1-5.north west) -- (mymatr-2-5.south west);
\draw[gray!40] (mymatr-4-5.north west) -- (mymatr-5-5.south west);
\draw[gray!40] (mymatr-1-6.north west) -- (mymatr-7-6.south west);
\draw[gray!40] (mymatr-1-6.north east) -- (mymatr-9-6.south east);
% Arrows
\draw[myarrow] (mymatr-2-1.west) -- (mymatr-2-4.east);
\draw[myarrow] (mymatr-6-3.west) -- (mymatr-6-5.east);
\draw[myarrow] (mymatr-8-2.west) -- (mymatr-8-6.east);
\end{tikzpicture}
\end{table}
\end{document}
답변3
아래는 MWE
괜찮은 내용이지만, 다른 전문가들이 내 것보다 더 나은 제안을 제공할 것으로 기대합니다. :-)
\documentclass{book}
\makeatletter
\def\leftrightarrowfill{$\m@th\mathord\leftarrow-\mkern-21mu
\cleaders\hbox{$\!\mathord-\!$}\hfill
\mkern-25mu\mathord-\rightarrow$}
\makeatother
\begin{document}
\begin{table}[]
\caption{}
\label{tab:arrow}
\begin{tabular}{llllll}
& & Text here & & & \\
\multicolumn{4}{l}{\hbox to 250pt{\leftrightarrowfill}} & & \\
& Some other text here & & \multicolumn{2}{c}{Some other text here} & \\
& Some other text here & & Some other text here & Some other text here & \\
& Some other text here & & Some other text here & Some other text here & \\
& &
\multicolumn{3}{l}{\hbox to 150pt{\leftrightarrowfill}} & \\
& & & \multicolumn{2}{c}{Some other text here} & \\
\multicolumn{6}{l}{\hbox to 350pt{\leftrightarrowfill}} \\
& & & Some other text here & &
\end{tabular}
\end{table}
\end{document}