我正在尝试制作一种矩阵,其单元格中有文本,对角线上有箭头。如何在 LaTeX 中制作像这样的矩形表?
我到目前为止已经做到了:
\documentclass{standalone}
\usepackage{multirow}
\usepackage{graphicx}
\begin{document}
\begin{table}[]
\centering
\resizebox{\textwidth}{!}{%
\begin{tabular}{llcc}
& & \multicolumn{2}{c}{\textbf{Job Demands}} \\
& & \multicolumn{1}{l}{Low} & \multicolumn{1}{l}{High} \\ \cline{3-4}
\multirow{2}{*}{\textbf{Job Decision Latitude}} &
\multicolumn{1}{l|}{Low} &
\multicolumn{1}{c|}{\begin{tabular}[c]{@{}c@{}}Passive \\ Job\end{tabular}} &
\multicolumn{1}{c|}{High Strain Job} \\ \cline{3-4}
&
\multicolumn{1}{l|}{High} &
\multicolumn{1}{c|}{\begin{tabular}[c]{@{}c@{}}Low Strain \\ Job\end{tabular}} &
\multicolumn{1}{c|}{\begin{tabular}[c]{@{}c@{}}Active \\ Job\end{tabular}} \\ \cline{3-4}
\end{tabular}%
}
\end{table}
\end{document}
但我不知道如何制作对角箭头
答案1
考虑使用tikz
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\tikzset{
plainnode/.style={
outer sep=0pt,
inner sep=0pt
},
fwtextnode/.style={
fill=white,
minimum width=2.5cm,
text width=2.5cm,
execute at begin node={\scriptsize\centering},
execute at end node={\par}
},
textnode/.style={
execute at begin node={\scriptsize}
}
}
\newcommand*{\textloc}{0.4}
% node a
% node b
% coef
% text
% option
\newcommand{\interpnode}[5]{
\node[textnode,#5] at ($(#1)+#3*(#2)-#3*(#1)$) {#4};
}
\begin{tikzpicture}
\coordinate (a) at (-4, 2);
\coordinate (b) at (4, 2);
\coordinate (c) at (4, -2);
\coordinate (d) at (-4, -2);
\coordinate (e) at (0, 0);
\coordinate (b1) at (5, 2.5);
\coordinate (c1) at (5, -2.5);
\coordinate (f) at ($0.5*(a)+0.5*(b)+(0cm,1cm)$);
\draw[thick] (a)--(b)--(c)--(d)--(a);
\draw[thick] ($0.5*(a)+0.5*(d)$)--($0.5*(b)+0.5*(c)$);
\draw[thick] ($0.5*(a)+0.5*(b)$)--($0.5*(d)+0.5*(c)$);
\draw[thick] (a)--(e);
\draw[thick] (b)--(e);
\draw[thick] (c)--(e);
\draw[thick] (d)--(e);
\draw[thick,-latex] (b)--(b1);
\draw[thick,-latex] (c)--(c1);
\node at (f) {\textbf{Job Demands}};
\node[fwtextnode] at ($\textloc*(a)$) {\uppercase{``passive''\\ job}};
\node[fwtextnode] at ($\textloc*(b)$) {\uppercase{``high strain''\\ job}};
\node[fwtextnode] at ($\textloc*(c)$) {\uppercase{``active''\\ job}};
\node[fwtextnode] at ($\textloc*(d)$) {\uppercase{``low strain''\\ job}};
\node[fwtextnode,text width=1.5cm, minimum width=1.5cm, xshift=1.0cm] at (b1) {Unresolved\\ Strain};
\node[fwtextnode,text width=1.5cm, minimum width=1.5cm, xshift=1.0cm] at (c1) {Activity\\ Level};
\interpnode{a}{d}{0.25}{Low}{anchor=east}
\interpnode{a}{d}{0.75}{High}{anchor=east}
\interpnode{a}{d}{0.5}{Job Decision Latitude}{anchor=east,xshift=-3mm}
\interpnode{b}{c}{0.25}{A}{anchor=west,xshift=3mm}
\interpnode{b}{c}{0.75}{B}{anchor=west,xshift=3mm}
\interpnode{a}{b}{0.25}{Low}{anchor=south}
\interpnode{a}{b}{0.75}{High}{anchor=south}
\end{tikzpicture}
\end{document}
答案2
相对较短的代码如下pstricks
:
\documentclass[border=6pt]{standalone}
\usepackage{pst-eucl}%
\usepackage[usestackEOL]{stackengine}
\begin{document}
\begin{pspicture}(-7.58,-3)(7,3)\sffamily\small
\psset{ PointName=none, arrowinset=0.12, linejoin=1}%unit =1.5cm,
\pstGeonode[PointSymbol=none](0,0){c}(0,-2){b}(-4,-2){A}(-4,0){l}(-4,2){B}(0,2){t}(4,2){C}(4,0){r}(4,-2){D}
\psframe(A)(C)\ncline{t}{b}\ncline{l}{r}
% border labels
\psset{linestyle =none}
\ncline{l}{B}\naput{Low}\ncline{B}{t}\naput{Low}
\ncline{C}{r}\naput{\qquad A}\ncline{r}{D}\naput{\qquad B}
\ncline{A}{l}\naput{High}\ncline{t}{C}\naput{Hi\smash{g}h}%
\uput[l](l){Job Decision Latitude \quad}
%%% Diagonals & labels
\psset{nodesepB=-1, linestyle=solid}
\ncline{A}{c}\ncput*{\Centerstack{"LOW STRAIN"\\ JOB}}
\ncline{B}{c}\ncput*{\Centerstack{"PASSIVE"\\ JOB}}
\psset{arrows =->, nodesepB =-1.3,npos=0.3}
\pstLineAB{c}{C}\ncput*{\Centerstack{"HIGH STRAIN"\\ JOB}}
\uput[r](5.2, 2.6){\Centerstack{Unresolved\\ Strain}}
\pstLineAB{c}{D}\ncput*{\Centerstack{"ACTIVE"\\ JOB}}
\uput[r](5.2, -2.6){\Centerstack{Activity\\ Level}}
\end{pspicture}
\end{document}