Seite 1 von 2
Zeilen in Tabelle durchstreichen
Verfasst: Mi 30. Okt 2013, 15:19
von icweasel
Hallo, ich habe eine Frage bzgl. der Formatierung von Tabellen. Ich muss für ein Mathe-Übungsblatt in der Uni Wahrheitstafeln erstellen, die bestimmte logische Aussagen über nat. Zahlen beweisen sollen. Dabei sollen die Zeilen, für die die Aussage nicht anwendbar ist, durchgestrichen werden.
Nun verzweifle ich langsam, denn ich finde einfach keinen Weg, wie man eine komplette Zeile einer Tabelle in Latex durchstreichen kann. Gibt es da einen einfachen Weg?
Hier ein Beispiel. Die erste Zeile soll durchgestrichen werden:
\documentclass[a4paper,headsepline,12pt,DIV11]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[fleqn]{amsmath}
\begin{document}
\section*{A 3: Aussagenlogik}
\subsection*{i) $A1 \vee A2$}
\begin{tabular}{c|c||c}
$A1$ & $A2$ & $A1 \vee A2 $ \\
\hline
0 & 0 & 0\\
0 & 1 & 1\\
1 & 0 & 1\\
1 & 1 & 1\\
\end{tabular}
\end{document}
Verfasst: Mi 30. Okt 2013, 16:35
von esdd
Wenn die Tabelle wie in deinem Beispiel nicht gleitet, kannst du tikz mit der Bibliothek tikzmark nutzen. Der Vorschlag braucht immer zwei Durchläufe bis die Striche an der richtigen Stelle sind:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\newcommand\zeilestreichen[3][]{%
\tikz[remember picture,overlay]\draw[thick,#1]([yshift=0.8ex]pic cs:#2)--([yshift=0.8ex]pic cs:#3);}
\begin{document}
\section*{A 3: Aussagenlogik}
\subsection*{i) $A1 \vee A2$}
\begin{tabular}{@{}cc|c||cc@{}}
&$A1$ & $A2$ & $A1 \vee A2 $ \\
\hline
\tikzmark{z1l}&0 & 0 & 0&\tikzmark{z1r}\\
&0 & 1 & 1\\
&1 & 0 & 1\\
&1 & 1 & 1\\
\end{tabular}
\zeilestreichen[red]{z1l}{z1r}
\end{document}
Alternativ kann man die Tabellen auch gleich als Matrix mit tikz erstellen. Das braucht dann nur einen Durchlauf:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{matrix}
% Syntax \tabellenlinien[<name der matrix>]{<anzahl der „variablen“ = anzahl der senkrechten linien>}
\newcommand\tabellenlinien[2][m]{%
\draw[double] (#1.north-|#1-1-#2.east)--(#1.south-|#1-1-#2.east);
\draw (#1.west|-#1-1-1.south)--(#1-1-1.south-|#1.east);
\foreach [evaluate=\i as \spalte using int(\i-1)] \i in {2,...,#2}{
\draw (#1.north-|#1-1-\spalte.east)--(#1-1-\spalte.east|-#1.south);}
}
% Syntax \zeilenstreichen[<name der matrix>][<kommaseparierte liste der zu streichenden zeilen]
% Die Kopfzeile ist die 0.Zeile
\newcommand\zeilenstreichen[2][m]{%
\foreach [evaluate=\i as \zeile using int(\i+1)] \i in {#2}{
\draw[streichen](#1-\zeile-1-|#1.west)--(#1-\zeile-1-|#1.east);}}
% Einstellungen für die Streichung, z.B. thick, red
\tikzset{streichen/.style={red}}
\begin{document}
\begin{tikzpicture}
\matrix(m)[matrix of math nodes]{
A1&A2 &A1 \wedge A2\\
0 & 0 & 0\\
0 & 1 & 0\\
1 & 0 & 0\\
1 & 1 & 1\\};
\tabellenlinien{2}
\zeilenstreichen{1,2,3}
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\matrix(m)[matrix of math nodes]{
A1&A2& A1 \vee A2\\
0 & 0 & 0\\
0 & 1 & 1\\
1 & 0 & 1\\
1 & 1 & 1\\};
\tabellenlinien{2}
\zeilenstreichen{1}
\end{tikzpicture}
\end{document}
Gruß
Elke
Verfasst: So 3. Nov 2013, 11:43
von iceweasel
Super, das ist genau das, was ich wollte! Funktioniert perfekt, vielen Dank!
Verfasst: Sa 9. Nov 2013, 15:12
von Totto89
Ich stehe vor einem ähnlichen Problem. Wie kann ich in meiner Matrix Einträge bzw. Zeile sowie Spalten streichen
$B =$
$
\bordermatrix{
& Aachen & Berlin & Hamburg & Paderborn & Dortmund & Frankfurt \cr
Aachen & X & 12 & 4 & 10 & 10 & 19 \cr
Berlin & 12 & X & 14 & 8 & 22 & 14 \cr
Hamburg & 4 & 14 & X & 6 & 8 & 15 \cr
Paderborn & 10 & 8 & 6 & X & 14 & 9 \cr
Dortmund & 10 & 22 & 8 & 14 & X & 20 \cr
Frankfurt & 19 & 14 & 15 & 9 & 20 &X \cr
}
\\
$
$B_r=$
$
\bordermatrix{
& Aachen & Berlin & Hamburg & Paderborn & Dortmund & Frankfurt \cr
Aachen & X & 6 & 0 & 6 & 2 & 12 \cr
Berlin & 4 & X & 6 & 0 & 10 & 3 \cr
Hamburg & 0 & 8 & X & 2 & 0 & 8 \cr
Paderborn & 4 & 0 & 0 & X & 4 & 0 \cr
Dortmund & 2 & 12 & 0 & 6 & X & 9 \cr
Frankfurt & 10 & 3 & 6 & 0 & 7 &X \cr
}
\\
$
$B_r=$
$
\hline
\bordermatrix{
& Aachen & Berlin & Hamburg & Paderborn & Dortmund & Frankfurt \cr
Aachen & X & 6 & 0^2 & 6 & 2 & 12 \cr
\tikzmark{z1l} Berlin & 4 & X & 6 & 0^3 & 10 & 3 \cr\tikzmark{z1r}\\
Hamburg & 0^2 & 8 & X & 2 & 0^2 & 8 \cr
Paderborn & 4 & 0^3 & 0^0 & X & 4 & 0^3 \cr
Dortmund & 2 & 12 & 0^2 & 6 & X & 9 \cr
Frankfurt & 10 & 3 & 6 & 0^3 & 7 &X \cr
}
$
Verfasst: So 10. Nov 2013, 12:05
von esdd
Hier ist ein Vorschlag mit tikz:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{matrix}
\newcommand\zeilenstreichen[2][m]{%
\foreach \zeile in {#2}{
\draw[streichen](#1-\zeile-1-|#1.west)--(#1-\zeile-1-|#1.east);}
}
\newcommand\spaltenstreichen[2][m]{%
\foreach \spalte in {#2}{
%% komplette Spalte:
% \draw[streichen](#1-1-\spalte|-#1.north)--(#1-1-\spalte|-#1.south);}
%% oder Spalte ab 2.Zeile:
\draw[streichen](#1-2-\spalte.north)--(#1-1-\spalte|-#1.south);}
}
\newcommand\zellenstreichen[2][m]{%
\foreach \zelle in {#2}{\draw[streichen](#1-\zelle.west)--(#1-\zelle.east);}
}
\tikzset{streichen/.style={red,very thick}}
\begin{document}
$B=$
\begin{tikzpicture}[baseline]
\matrix(m)[matrix of nodes, left delimiter=(,right delimiter=),column 1/.style={anchor=base west}]{%
&Aachen&Berlin&Hamburg&Paderborn&Dortmund&Frankfurt\\
Aachen&X&12&4&10&10&19\\
Berlin&12&X&14&8&22&14\\
Hamburg&4&14&X&6&8&15\\
Paderborn&10&8&6&X&14&9\\
Dortmund&10&22&8&14&X&20\\
Frankfurt&19&14&15&9&20&X\\};
\zeilenstreichen{2,4}
\spaltenstreichen{2,4}
\zellenstreichen{1-2,1-4}
\end{tikzpicture}
\end{document}
Gruß
Elke
Verfasst: So 10. Nov 2013, 15:55
von Totto89
Vielen Dank,
aber wie kann ich meine "0" wieder mit Hochzahlen ergänzen? Immer wenn ich 0^2 setze verschwindet diese aus der Matrix.
Hast mir sehr geholfen
Verfasst: So 10. Nov 2013, 16:26
von esdd
In der Matrix habe ich auf den Mathemodus verzichtet, da die ganzen Städtenamen ja keine Variablen sind.
Nimm die Option matrix of math nodes und verwende für die Städtenamen den \text{} Befehl aus amsmath:
...
\usepackage{amsmath}
...
$B=$
\begin{tikzpicture}[baseline]
\matrix(m)[matrix of math nodes, left delimiter=(,right delimiter=),column 1/.style={anchor=base west}]{%
&\text{Aachen}& \text{Berlin}& \text{Hamburg}& \text{Paderborn}&\text{Dortmund}&\text{Frankfurt}\\
\text{Aachen} & X & 6 & 0^2 & 6 & 2 & 12 \\
\text{Berlin} & 4 & X & 6 & 0^3 & 10 & 3 \\
\text{Hamburg} & 0^2 & 8 & X & 2 & 0^2 & 8 \\
\text{Paderborn} & 4 & 0^3 & 0^0 & X & 4 & 0^3 \\
\text{Dortmund} & 2 & 12 & 0^2 & 6 & X & 9 \\
\text{Frankfurt} & 10 & 3 & 6 & 0^3 & 7 &X \\ };
\zeilenstreichen{2,4}
\spaltenstreichen{2,4}
\zellenstreichen{1-2,1-4}
\end{tikzpicture}
Gruß
Elke
Verfasst: So 10. Nov 2013, 18:21
von Totto89
Danke das klappt schon einmal.
Eine letzte Frage habe ich noch. Wie kann ich die Städte außerhalb der Matrix bekommen, so dass innerhalb der Matrix nur noch meine Zahlen stehen.
Vielen Dank
Gruß
Totto
Verfasst: So 10. Nov 2013, 21:46
von esdd
Wenn die Spaltenbeschriftung gedreht sein kann, könnte man das so lösen:
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{matrix}
\tikzset{streichen/.style={red,very thick}}
\newcommand\zeilenstreichen[2][m]{%
\foreach \zeile in {#2}{
\draw[streichen](#1-\zeile-1-|#1.west)--(#1-\zeile-1-|#1.east);}
}
\newcommand\spaltenstreichen[2][m]{%
\foreach \spalte in {#2}{
\draw[streichen](#1-1-\spalte|-#1.north)--(#1-1-\spalte|-#1.south);}
}
\newcommand\zellenstreichen[2][m]{%
\foreach \zelle in {#2}{\draw[streichen]([yshift=0.8ex]#1-\zelle.base west)--([yshift=0.8ex]#1-\zelle.base east);}
}
\newcommand\beschriftung[3][m]{%
\foreach[count=\n] \stadt in {#2}{
\node[anchor=base east,text width=\widthof{#3},align=left,xshift=-2mm] at (#1-\n-1.base-|#1.west){\stadt};
\node[align=left,anchor=west,rotate=90] at (#1-1-\n.north|-#1.north){\stadt};}
}
\begin{document}
$B=$
\begin{tikzpicture}[baseline]
\matrix(m)[matrix of math nodes, left delimiter=(,right delimiter=)]{%
\text{X} & 6 & 0^2 & 6 & 2 & 12 \\
4 & \text{X} & 6 & 0^3 & 10 & 3 \\
0^2 & 8 & \text{X} & 2 & 0^2 & 8 \\
4 & 0^3 & 0^0 & \text{X} & 4 & 0^3 \\
2 & 12 & 0^2 & 6 & \text{X} & 9 \\
10 & 3 & 6 & 0^3 & 7 & \text{X} \\ };
\zeilenstreichen{2,4}
\spaltenstreichen{2,4}
\zellenstreichen{1-3,1-5}
\beschriftung{Aachen,Berlin,Hamburg,Paderborn,Dortmund,Frankfurt}{Paderborn}
\end{tikzpicture}
\end{document}
Gruß
Elke
Verfasst: Mo 11. Nov 2013, 09:08
von Totto89
Leider hätte ich es am liebsten wie eine Bordermatrix.
Aber das ist nicht so schlimm.
Vielen Dank für deine schnelle Hilfe
Gruß
Totto