
Ich habe ein Raster/eine Tabelle/eine Matrix mit separatenEtikettenfür die Zeilen und Spalten. Ich möchte diese Beschriftungen jedoch auch selbst beschriften (indem ich den „Typ“ der Beschriftungen angebe, z. B. SI-Einheiten usw.).
Hier ist ein MWE mit drei Varianten (sehen Sie sich den Eintrag abc/def
oben links an, der die Zeilenbeschriftungen abc
und Spaltenbeschriftungen beschreibt def
):
\documentclass{article}
\begin{document}
\begin{table}
\caption{Forward slash.}
\[\begin{array}{c|ccccc}
abc/def & 1 & 2 & 3 & 4 & 5\\
\hline
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\end{array}\]
\end{table}
\begin{table}
\caption{Vertical bar.}
\[\begin{array}{c|ccccc}
abc|def & 1 & 2 & 3 & 4 & 5\\
\hline
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\end{array}\]
\end{table}
\begin{table}
\caption{Backslash.}
\[\begin{array}{c|ccccc}
abc\backslash def & 1 & 2 & 3 & 4 & 5\\
\hline
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\end{array}\]
\end{table}
\end{document}
Dieses MWE weist jedoch (mindestens) die folgenden zwei Probleme auf: Die erste Spalte (Beschriftung der Zeilen) ist zu breit und die zentrierten Beschriftungen sind weit vom Kern des Arrays selbst entfernt (rechtsbündige Ausrichtung könnte helfen, aber ... das führt zu anderen Problemen). Zweitens sieht der Abstand um abc/def falsch aus.
Die Frage ist im Grunde, wie ich dieses Array schön setzen soll. Was soll ich in die obere linke Position anstelle von setzen abc/def
? Ich möchte abc
und nicht def
in zwei unterschiedliche (Mehrfach-)Spalten setzen. Vielleicht ist das Stapeln abc
darüber (oder darunter?) def
ein Anfang, aber dann bräuchte ich noch eine Art visuellen Trenner (der die Rolle der \|/
Symbole übernimmt) innerhalb dieser Zelle. Ich sollte wahrscheinlich auch klarstellen, dass sowohl Beschriftungen abc
als auch def
in der Praxissehr kurzex/y
, normalerweise würde ich oder n/m
oder schreiben n/k
, also einstellige mathematische Variablen und keine langen Texte.
Verwandt:So erstellen Sie eine Tabelle mit Beschriftungen (erste Zeile und erste Spalte)
Antwort1
Ich schlage „keine der drei Möglichkeiten“ vor. Erwägen Sie stattdessen die Verwendung eines klassischen „Tableau“-Aufbaus mit einer klaren hierarchischen Struktur in der Kopfzeile. Ein solcher Aufbau hilft, den „beengten“ Eindruck zu vermeiden, der bei jeder der drei von Ihnen vorgeschlagenen Möglichkeiten fast unvermeidlich ist.
\documentclass{article}
\usepackage{booktabs}% for \toprule, \midrule, \bottomrule, and \cmidrule macros
\usepackage{amsmath} % for \text macro
\begin{document}
\begin{table}
\caption{Still another approach}
\[
\begin{array}{@{}l*{5}{c}@{}}
\toprule
\text{abc} & \multicolumn{5}{c@{}}{\text{def}}\\
\cmidrule(l){2-6}
& 1 & 2 & 3 & 4 & 5\\
\midrule
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\bottomrule
\end{array}
\]
\end{table}
\end{document}
Antwort2
Es ist auch möglich, Ti zu verwendenkZ direkt in der Tabelle, es wird überhaupt keine Savebox benötigt, um die Längen zu erhalten:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{table}
\caption{Diagonal Split}
\[\begin{array}{c|ccccc}
\tikz{\node[below left, inner sep=1pt] (def) {def};%
\node[above right,inner sep=1pt] (abc) {abc};%
\draw (def.north west|-abc.north west) -- (def.south east-|abc.south east);}
& 1 & 2 & 3 & 4 & 5\\
\hline
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\end{array}\]
\end{table}
\end{document}
Dann \tikz
haben Sie innerhalb des Befehls das TikZ-Power, um alles zu tun ... Hier ist eine Version mit neu positionierten Knoten, einer very thin
shorten
ed-Trennlinie und Schriftarten in \footnotesize
.
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{table}
\caption{Diagonal Split}
\[\begin{array}{c|ccccc}
\tikz[diag text/.style={inner sep=0pt, font=\footnotesize},
shorten/.style={shorten <=#1,shorten >=#1}]{%
\node[below left, diag text] (def) {def};
\node[above right=2pt and -2pt, diag text] (abc) {abc};
\draw[shorten=4pt, very thin] (def.north west|-abc.north west) -- (def.south east-|abc.south east);}
& 1 & 2 & 3 & 4 & 5\\
\hline
1 & a & b & c & d & e\\
2 & f & g & h & i & j\\
3 & k & l & m & n & o\\
\end{array}\]
\end{table}
\end{document}
Antwort3
Hier sind zwei Möglichkeiten:
\documentclass{article}
\usepackage{mathtools,eqparbox}
\newcommand{\indices}[2]{{% \indices{<rows>}{<columns>}
\begin{array}{@{}r@{}}
\scriptstyle #2~\smash{\eqmakebox[ind]{$\scriptstyle\rightarrow$}} \\[-\jot]
\scriptstyle #1~\smash{\eqmakebox[ind]{$\scriptstyle\downarrow$}}
\end{array}}}
\begin{document}
\[
\begin{array}{c|ccccc}
\indices{\text{abc}}{\text{def}}
& 1 & 2 & 3 & 4 & 5 \\
\hline
1 & a & b & c & d & e \\
2 & f & g & h & i & j \\
3 & k & l & m & n & o
\end{array}
\]
\[
\begin{array}{cc|ccccc}
&\multicolumn{1}{c}{} & \multicolumn{5}{c}{\text{def}} \\
&& 1 & 2 & 3 & 4 & 5 \\
\cline{2-7}
& 1 & a & b & c & d & e \\
\smash{\rotatebox[origin=c]{90}{\text{abc}}} & 2 & f & g & h & i & j \\
& 3 & k & l & m & n & o
\end{array}
\]
\end{document}
Wenn Sie an einem matrixähnlichen Befehl interessiert sind, finden Sie einige Beispiele unterWo ist der \matrix
Befehl?Dazu gehört die Verwendung von \bordermatrix
,kbordermatrix
Undblkarray
, bei denen Sie Indizes zur Identifizierung der Zeilen/Spalten platzieren können.
Antwort4
Manchmal verwende ich diagonale Linien oder schwarze Kästen:
\documentclass{article}
\usepackage{fp}
\usepackage{graphicx}
\newbox\MytempboxA
\newbox\MytempboxB
\newcommand\myTempA{}
\newcommand\myTempB{}
\newcommand\myTempC{}
\newcommand\myTempD{}
\begin{document}
\begin{table}%
\caption{Diagonal line approach}%
\[%
\setbox\MytempboxA\hbox{\mbox{abc}}%
\setbox\MytempboxB\hbox{\mbox{def}}%
\begin{array}{@{}|r|*{5}{c}|}
\hline
\multicolumn{1}{|l}{%
\edef\myTempA{%
\number\numexpr\dimexpr\wd\MytempboxA+2\arraycolsep\relax\relax
}%
\edef\myTempB{%
\number
\numexpr
\dimexpr\dp\csname @arstrutbox\endcsname+%
\ht\csname @arstrutbox\endcsname+%
\arrayrulewidth
\relax
\relax
}%
\FPpow\myTempC\myTempA{2}%
\FPpow\myTempD\myTempB{2}%
\FPadd\myTempC\myTempC\myTempD
\FProot\myTempC\myTempC{2}% length of diagonal line in sp
\FPdiv\myTempD\myTempB\myTempA
\FParctan\myTempD\myTempD% angle of diagonal line in rad
\smash{%
\kern-\arraycolsep
\rlap{%
\lower
\dimexpr
\dp\csname @arstrutbox\endcsname+\arrayrulewidth
\relax
\hbox{%
\rotatebox[units=-6.283185,origin=br]{\myTempD}{%
\rule{\myTempC sp}{\arrayrulewidth}%
}%
}%
}%
}%
}&\multicolumn{5}{c|}{\copy\MytempboxB}\\%
\cline{2-6}%
\copy\MytempboxA& 1 & 2 & 3 & 4 & 5\\%
\hline
1 & a & b & c & d & e\\%
2 & f & g & h & i & j\\%
3 & k & l & m & n & o\\%
\hline
\end{array}%
\]%
\end{table}
\begin{table}
\caption{Black box approach}%
\setbox\MytempboxA\hbox{\mbox{abc}}%
\setbox\MytempboxB\hbox{\mbox{def}}%
\[%
\begin{array}{@{}|r|*{5}{c}|}%
\hline
\multicolumn{1}{|l|}{%
\smash{%
\kern-\arraycolsep
\rlap{%
\rule[{-\dp\csname @arstrutbox\endcsname}]%
{\dimexpr\wd\MytempboxA+2\arraycolsep\relax}%
{%
\dimexpr
\dp\csname @arstrutbox\endcsname+%
\ht\csname @arstrutbox\endcsname
\relax
}%
}%
}%
}&\multicolumn{5}{c|}{\copy\MytempboxB}\\
\hline
\copy\MytempboxA& 1 & 2 & 3 & 4 & 5\\%
\hline
1 & a & b & c & d & e\\%
2 & f & g & h & i & j\\%
3 & k & l & m & n & o\\%
\hline
\end{array}%
\]%
\end{table}
\begin{table}%
\caption{Tangram puzzle approach}%
\[%
\setbox\MytempboxA\hbox{\mbox{abc}}%
\setbox\MytempboxB\hbox{\mbox{def}}%
\begin{array}{@{}|r|*{5}{c}|}
\hline
\multicolumn{1}{|l}{%
\edef\myTempA{%
\number\numexpr\dimexpr\wd\MytempboxA+2\arraycolsep\relax\relax
}%
\edef\myTempB{%
\number
\numexpr
\dimexpr\dp\csname @arstrutbox\endcsname+%
\ht\csname @arstrutbox\endcsname+%
\arrayrulewidth
\relax
\relax
}%
\FPpow\myTempC\myTempA{2}%
\FPpow\myTempD\myTempB{2}%
\FPadd\myTempC\myTempC\myTempD
\FProot\myTempC\myTempC{2}% length of diagonal line in sp
\FPdiv\myTempD\myTempB\myTempA
\FParctan\myTempD\myTempD% angle of diagonal line in rad
\smash{%
\kern-\arraycolsep
\rlap{%
\lower
\dimexpr
\dp\csname @arstrutbox\endcsname+\arrayrulewidth
\relax
\hbox{%
\rotatebox[units=-6.283185,origin=br]{\myTempD}{%
\rule{\myTempC sp}{\arrayrulewidth}%
}%
}%
}%
}%
}&\multicolumn{5}{c|}{\copy\MytempboxB}\\%
\copy\MytempboxA& 1 & 2 & 3 & 4 & 5\\%
\cline{2-6}%
1 & a & b & c & d & e\\%
2 & f & g & h & i & j\\%
3 & k & l & m & n & o\\%
\hline
\end{array}%
\]%
\end{table}
\begin{table}
\caption{squares approach}%
\setbox\MytempboxA\hbox{\mbox{abc}}%
\setbox\MytempboxB\hbox{\mbox{def}}%
\[%
\begin{array}{@{}|r|*{5}{c}|}%
\hline
\multicolumn{1}{|l|}{}&\multicolumn{5}{c|}{\copy\MytempboxB}\\
\copy\MytempboxA& 1 & 2 & 3 & 4 & 5\\%
\cline{2-6}%
1 & a & b & c & d & e\\%
2 & f & g & h & i & j\\%
3 & k & l & m & n & o\\%
\hline
\end{array}%
\]%
\end{table}
\end{document}
Und manchmal verwende ich so etwas wie Winkelpfeile:
\documentclass{article}
\usepackage{tikz}
\newbox\MytempboxA
\newbox\MytempboxB
\newbox\MytempboxC
\newcommand\Upbox[1]{%
\lower\dimexpr-\ht\MytempboxA+\ht\MytempboxB\relax\hbox{#1}%
%#1%
}%
\newcommand\leftbox[1]{%
\hbox to\wd\MytempboxC{\hss#1\hss}\hbox to\wd\MytempboxB{\hfill}%
}%
\begin{document}
\begin{table}%
\caption{Angle arrow.}%
\setbox\MytempboxB=\hbox{\mbox{def}}%
\setbox\MytempboxC=\hbox{\mbox{abc}}%
\setbox\MytempboxA=\hbox{\lower\dp\MytempboxC\vbox{%
\hbox{%
\begin{tikzpicture}[x=.25cm, y=.25cm, inner sep=0pt]
\draw[->,thin] (0,0) -- (1,0) node[right]{\copy\MytempboxB};
\draw[->,thin] (0,0) -- (0,-1) node[below]{\copy\MytempboxC};
\end{tikzpicture}%
}%
}}%
\[%
\begin{array}{c|ccccc}%
\copy\MytempboxA&\Upbox{1}&\Upbox{2}&\Upbox{3}&\Upbox{4}&\Upbox{5}\\%
\hline
\leftbox{1}& a & b & c & d & e\\%
\leftbox{2} & f & g & h & i & j\\%
\leftbox{3} & k & l & m & n & o\\%
\end{array}%
\]
\end{table}
\begin{table}
\caption{Another angle arrow.}%
\setbox\MytempboxB=\hbox{\mbox{def}}%
\setbox\MytempboxC=\hbox{\mbox{abc}}%
\[%
\begin{array}{c@{}c|ccccc}%
\smash{%
\hbox{%
\kern.5\wd\MytempboxC
\lower.75\ht\MytempboxB
\hbox{%
\begin{tikzpicture}[x=.25cm, y=.25cm, inner sep=0pt]
\draw[->,thin] (0,0) -- (1,0) node[right]{};
\draw[->,thin] (0,0) -- (0,-1) node[below]{};
\end{tikzpicture}%
}%
}%
}&\copy\MytempboxB&1&2&3&4&5\\%
\copy\MytempboxC&&\\%
\hline
1&& a & b & c & d & e\\%
2&& f & g & h & i & j\\%
3&& k & l & m & n & o\\%
\end{array}%
\]%
\end{table}
\end{document}
Sie können das Erscheinungsbild von Koordinatensystemachsen auch mit horizontalen und vertikalen Linien eines Arrays erstellen:
\documentclass{article}
\usepackage{tikz}
\newbox\MytempboxA
\newbox\MytempboxB
\newbox\MytempboxC
\begin{document}
\begin{table}%
\caption{Coordinate axes approach.}%
\setbox\MytempboxC=\hbox{\mbox{abc}}%
\setbox\MytempboxB=\hbox{\mbox{def}}%
\setbox\MytempboxA\hbox{%
\lower\arrayrulewidth\hbox{%
\begin{tikzpicture}[x=.25cm, y=.05cm, inner sep=0pt]%
\draw[->,line width=\arrayrulewidth] (0,1) -- (1,1) node[right]{};
\end{tikzpicture}%
}%
}%
\[%
\begin{array}{c|cccccl}%
&1&2&3&4&5&\\%
\cline{1-6}%
1& a & b & c & d & e&%
\kern\dimexpr-\arraycolsep-.5\arrayrulewidth\relax\null
\smash{%
\lower\dimexpr-\ht\csname @arstrutbox\endcsname+.75\arrayrulewidth+0pt\relax\copy\MytempboxA
\lower\dimexpr-\ht\csname @arstrutbox\endcsname+0.5ex+.75\arrayrulewidth\relax\copy\MytempboxB
}%
\\%
2 & f & g & h & i & j&\\%
3 & k & l & m & n & o&\\%
\multicolumn{1}{r}{}&%
\multicolumn{6}{l}{%
\kern\dimexpr-.5\wd\MytempboxC-\arraycolsep\relax\null
\vbox{%
\kern\dimexpr-.5\arrayrulewidth\relax\hbox{%
\begin{tikzpicture}[x=.25cm, y=.075cm, inner sep=0pt]%
\draw[->,line width=\arrayrulewidth] (0,1) -- (0,-1) node[below]{\copy\MytempboxC};
\end{tikzpicture}%
}%
}%
}%
\\%
\end{array}%
\]
\end{table}
\end{document}