Durchstreichen von Zellen mit mehreren Zeilen/Spalten

Durchstreichen von Zellen mit mehreren Zeilen/Spalten

Beliebige Tabellenzellen mit diagonaler Linie durchstreichenzeigt eine Möglichkeit, einzelne Zellen durchzustreichen. Ist es möglich, eine Zelle durchzustreichen, die sich über mehrere Zeilen und/oder mehrere Spalten erstreckt?

Bearbeiten: Dies ist kein Duplikat, da ich es nur mit genau einer Linie durchstreichen muss, während bei dieser Frage die Zelle mit einem tatsächlichen Kreuz durchgestrichen werden muss. Ich weiß, dass dies für manche wirklich einfach sein könnte, aber für mich ist es fast völlig undurchsichtig (wie man es ändert).

Antwort1

Das Folgende ist nur eine schnelle Anpassung vondie Lösung hier.

\documentclass{article}
\pagestyle{empty}% for cropping
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage{zref-savepos}
\usepackage{multirow}

\newcounter{NoTableEntry}
\renewcommand*{\theNoTableEntry}{NTE-\the\value{NoTableEntry}}

\newcommand*{\smulticolumn}[3]{%
  \multicolumn{#1}{#2}{%
    \scell{#3}
  }%
}

\newcommand*{\smultirow}[3]{%
    \multirow{#1}{#2}{%
        \scell{#3}
    }%
}

\newcommand*{\scell}[1]{
    \stepcounter{NoTableEntry}%
    \vadjust pre{\zsavepos{\theNoTableEntry t}}% top
    \vadjust{\zsavepos{\theNoTableEntry b}}% bottom
    \zsavepos{\theNoTableEntry l}% left
    \hspace{0pt plus 1filll}%
    #1% content
    \hspace{0pt plus 1filll}%
    \zsavepos{\theNoTableEntry r}% right
    \tikz[overlay]{%
        \draw
        let
        \n{llx}={\zposx{\theNoTableEntry l}sp-\zposx{\theNoTableEntry r}sp-\tabcolsep},
        \n{urx}={\tabcolsep},
        \n{lly}={\zposy{\theNoTableEntry b}sp-\zposy{\theNoTableEntry r}sp},
        \n{ury}={\zposy{\theNoTableEntry t}sp-\zposy{\theNoTableEntry r}sp}
        in
        (\n{llx}, \n{lly}) -- (\n{urx}, \n{ury})
        ;
    }%      
}

\begin{document}

\begin{tabular}{|c|c|c|}
    \hline
  foo & bar & baz \\\hline 
  \smulticolumn{2}{|c|}{double} & B \\\hline
  C & D & \smultirow{2}{*}{$\delta$} \\
  E & F & \\\hline
\end{tabular}
\end{document}

Leider funktioniert es bei mehreren Zeilen nicht besonders gut, aber es scheint zumindest ein vernünftiger Ausgangspunkt zu sein.

Bildbeschreibung hier eingeben

Antwort2

Du könntest benutzen \tikzmark.

Ich glaube, es gibt eine Möglichkeit, die genaue Positionierung automatisch zu berechnen, aber das übersteigt mein Wissen.

Wenn Sie nur wenige Zellen durchstreichen müssen, können Sie es ohne große Probleme manuell durch Ausprobieren berechnen (wie ich es getan habe).

\documentclass{book}
\usepackage{tikz}
\usetikzlibrary{tikzmark, calc}
\usepackage{array}
\usepackage{multirow}
\setlength{\extrarowheight}{2pt}

\begin{document}
    \begin{tabular}{|c|c|c|}
        \hline
        foo & bar & baz \\
        \hline 
        \multicolumn{2}{|c|}{\tikzmark{smc}\hfill double\hfill\tikzmark{emc}} & B \\
        \hline
        C & D & \tikzmark{smr}\multirow{2}{*}{$\delta$}\tikzmark{smr} \\
        E & F & \\
        \hline
    \end{tabular}
    \begin{tikzpicture}[overlay,remember picture]
        \draw ($(pic cs:smc)-(\tabcolsep,3.6pt)$) -- ($(pic cs:emc)+(\tabcolsep,10.4pt)$);
        \draw ($(pic cs:smr)-(16pt,17.6pt)$) -- ($(pic cs:emr)+(-3.7pt,2.2pt)$);
    \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Beachten Sie, dass das \tikzmarkinnerhalb des eingefügt werden muss \multicolumn, sieheHier.

verwandte Informationen