如何用箭头和 parbox 布局表格

如何用箭头和 parbox 布局表格

我想在乳胶中创建一个像这样的表格:

使用 inkscape 制作的示例

在 Inkscape 中导出为 pdf + tex 无法提供适当的结果。为了在 Latex 中实现类似的效果,我开始绘制如下的 MWE,但这不会在正确的位置渲染(除了细微的差异)垂直箭头。想知道这是否是我想要实现的正确框架。

\documentclass{article}
\usepackage{tikz} % Vector Graphis, Arrows
\usetikzlibrary{arrows.meta,shapes.arrows}
\newcommand*{\tknode}[1]{\tikz[remember picture]\node (#1) {};}
\usepackage{rotating}

\begin{document}

\tikzset{tipA/.tip={Triangle[open,angle=45:4pt]},}

\begin{table}[!t]
\renewcommand{\arraystretch}{1.1}
\centering
\begin{tabular*}{\columnwidth}{ @{\extracolsep{\fill}} l l p{0.12\columnwidth} r}

\begin{turn}{-270}objective -- observed action\tknode{1}\end{turn} & \multicolumn{3}{c}{\textbf{Motion}}  \\
& \emph{automatic}\tknode{5}    & \tknode{6} [1] \tknode{7}   & \tknode{8}\emph{autonomic}      \\

& \parbox[t]{0.40\columnwidth}{\textbf{simple}\\ structured, repetitive, rigid, rotary or translatory [36]}
& \parbox[b]{0.10\columnwidth}{[23]}
& \parbox[t]{0.40\columnwidth}{\textbf{complex}\\ spontaneous, relative to others, streaky[35]}   \\

& \parbox[t]{0.40\columnwidth}{\textbf{simple2}\\ structured, repetitive, rigid, rotary or translatory [36]}
& \parbox[b]{0.10\columnwidth}{[23]}
& \parbox[t]{0.40\columnwidth}{\textbf{complex2}\\ spontaneous, relative to others, streaky[35]}    \\
& \multicolumn{3}{c}{\hspace{-1em}\textbf{Agency}}  \\
& \emph{mechancial}\tknode{9}   & \tknode{10} [34] \tknode{11}    & \tknode{12}\emph{intentional} \\

& \parbox[t]{0.40\columnwidth}{\textbf{causality}\\ whatever text comes here and more [36]}
& \parbox[b]{0.10\columnwidth}{[13]}
& \parbox[t]{0.40\columnwidth}{\textbf{animacy}\\ more text here in with references[35]}\\

& \parbox[t]{0.40\columnwidth}{\textbf{causality2}\\ whatever text comes here and more [36]}
& \parbox[b]{0.10\columnwidth}{[13] }
& \parbox[t]{0.40\columnwidth}{\textbf{animacy2}\\ more text here in with references[35]}\\

\begin{turn}{-270}subjective -- interpreted action\tknode{2}\end{turn}  \\
\end{tabular*}

\tikz[remember picture,overlay, <=stealth',bend angle=45]
{ \draw[thick, black, tipA-] (1.east) -- (2.west); %\draw[thick,black, -tipA] (3.east) -- (4.west);
  \draw[thin,black] (5.east) -- (6.west); \draw[thin,black] (7.east) -- (8.west);
  \draw[thin,black] (9.east) -- (10.west); \draw[thin,black] (11.east) -- (12.west);
}
\end{table}
\end{document}

由于一些概念上的变化,我不得不修改表格的布局使其看起来像这样: 新的表格布局

这是通过调整下面@cfr 提供的示例来实现的,以获得所需的结果。然而,这感觉很像黑客行为,让我怀疑是否有更优雅的方式来做到这一点。

\documentclass{article}
\usepackage{tikz,geometry,array,tabularx,rotating}
\usetikzlibrary{arrows.meta,tikzmark}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}

\begin{document}
\tikzset{
  tipA/.tip={Triangle[open,angle=45:4pt]},
  across arrow/.style={tipA-tipA, thick, shorten >=2.5pt, shorten <=2.5pt, every node/.style={midway, above, font=\Large}},
  vertical bar/.style={Bar-Bar, thick, draw=gray},
  vertical labels/.style={text=gray},
  vertical headers/.style={vertical labels, font=\Large},
}
\begin{table}[!t]
  \renewcommand{\arraystretch}{1.1}%
  \sffamily
  \noindent
  \tikzmark{c}%
  \hspace*{.1\linewidth}%
  \begin{tabularx}{.8\linewidth}{L P{.25\linewidth} R}
    \tikzmark{a}\Large automatic\tikzmark{5} && \tikzmark{8}\Large autonomic \tikzmark{d} \\


    \textbf{simple} && \textbf{complex} \\
    structured, repetitive, rigid, rotary or translatory [36]
    && spontaneous, relative to others, streaky [35] \\

    \textbf{simple2} && \textbf{complex2} \\
    structured, repetitive, rigid, rotary or translatory [36]
    && spontaneous, relative to others, streaky [35] \\[1.5\bigskipamount]

    \Large mechancial\tikzmark{9} &&  \tikzmark{12}\Large intentional \\

    \textbf{causality} && \textbf{animacy} \\
    whatever text comes here and more [36]
    && more text here in with references [35] \\

    \textbf{causality2} && \textbf{animacy2} \\
    whatever text comes here and more [36]\tikzmark{b}
    &&  more text here in with references [35] \\
  \end{tabularx}
  \hspace*{.1\linewidth}%

  \tikz[remember picture, overlay, >=tipA, bend angle=45]
  {%
    \foreach \i in {5,8,9,12} \coordinate [yshift=1ex] (\i) at ({pic cs:\i});
    \foreach \i in {a,b,c,d} \coordinate (\i) at ({pic cs:\i});
    \draw[across arrow] (5) -- (8) node (m) {Motion};
    \draw[across arrow] (9) -- (12) node (a) {Agency};

    \path[vertical bar] ([xshift=4.5ex]c |- m.north) edge node[vertical headers, xshift=-2.2ex, rotate=90] (ina) {inanimate} ([xshift=4.5ex]c |- b);
    \node [vertical labels, align=center, xshift=3.6ex, rotate=90] at (ina) {non-living};

    \path[vertical bar] ([xshift=3.5ex]d |- m.north) edge node[vertical headers, xshift=1.8ex, rotate=90] (an) {animate} ([xshift=3.5ex]d |- b);
    \node [vertical labels, align=center, xshift=-3.4ex, rotate=90] at (an) {living};
  }
\end{table}
\end{document}

答案1

在此处发布的内容不应被理解为对该图表实质性内容的认可,我确信我会拒绝。

您可以尝试类似这样的方法。由于您的示例不完整,我不得不进行一些替换才能编译它。特别是,我使用的是标准tikzmark库。

这给出了一个未满框警告。现在,我一片空白,不知道为什么,但如果我发布代码,也许其他人可以告诉我。

\documentclass{article}
\usepackage{tikz,geometry,array,tabularx,rotating}
\usetikzlibrary{arrows.meta,tikzmark}
\newcolumntype{R}{>{\raggedleft\arraybackslash}X}
\newcolumntype{L}{>{\raggedright\arraybackslash}X}
\begin{document}
\tikzset{
  tipA/.tip={Triangle[open,angle=45:4pt]},
  across arrow/.style={tipA-tipA, thick, shorten >=2.5pt, shorten <=2.5pt, every node/.style={midway, above, font=\Large}},
  vertical arrow/.style={tipA-tipA, thick, draw=gray, shorten >=2.5pt, shorten <=2.5pt},
  vertical labels/.style={text=gray},
  vertical headers/.style={vertical labels, font=\Large},
}
\begin{table}[!t]
  \renewcommand{\arraystretch}{1.1}%
  \sffamily
  \noindent
  \tikzmark{c}%
  \hspace*{.1\linewidth}%
  \begin{tabularx}{.9\linewidth}{L p{.25\linewidth} R}
    \tikzmark{a}\Large automatic\tikzmark{5}      && \tikzmark{8}\Large autonomic      \\

    \textbf{simple} && \textbf{complex}\\
    structured, repetitive, rigid, rotary or translatory [36]
    && spontaneous, relative to others, streaky [35]   \\

    \textbf{simple2} && \textbf{complex2}\\
    structured, repetitive, rigid, rotary or translatory [36]
    && spontaneous, relative to others, streaky [35]    \\[1.5\bigskipamount]

    \Large mechancial\tikzmark{9} &&  \tikzmark{12}\Large intentional \\

    \textbf{causality} && \textbf{animacy}\\
    whatever text comes here and more [36]
    && more text here in with references [35]\\

    \textbf{causality2} && \textbf{animacy2} \\
    whatever text comes here and more [36]\tikzmark{b}
    &&  more text here in with references [35]\\
  \end{tabularx}
  \tikz[remember picture, overlay, >=tipA, bend angle=45]
  {%
    \foreach \i in {5,8,9,12} \coordinate [yshift=1ex] (\i) at ({pic cs:\i});
    \foreach \i in {a,b,c} \coordinate (\i) at ({pic cs:\i});
    \draw[across arrow] (5) -- (8) node (m) {Motion};
    \draw[across arrow] (9) -- (12) node (a) {Agency};
    \node (s) [vertical headers, align=right, anchor=north east, rotate=90] at (c |- m.north) {subjective};
    \node (o) [vertical headers, align=left, anchor=north west, rotate=90] at ([yshift=-1.5ex]c |- b) {\Large objective};
    \draw[vertical arrow] (o.east) -- (s.west);
    \node [vertical labels, align=right, anchor=north east, rotate=90] at (s.south east) {interpreted action};
    \node [vertical labels, align=left, anchor=north west, rotate=90] at (o.south west) {observed action};
  }
\end{table}
\end{document}

运动-代理图

相关内容