Riscando células de múltiplas linhas/multicolunas

Riscando células de múltiplas linhas/multicolunas

Risque células arbitrárias da tabela com uma linha diagonalmostra uma maneira de riscar células individuais. É possível riscar uma célula que abrange várias linhas e/ou colunas?

Editar: isso não é duplicado porque preciso apenas riscar exatamente com uma linha, enquanto essa pergunta precisa riscar a célula com uma cruz real. Eu sei que isso pode ser muito simples para alguns, mas é quase completamente opaco para mim (como mudar isso).

Responder1

O que se segue é apenas uma rápida adaptação dea solução aqui.

\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}

Infelizmente, não funciona muito bem para várias linhas, mas pelo menos parece um ponto de partida razoável.

insira a descrição da imagem aqui

Responder2

Você poderia usar \tikzmark.

Acho que existe uma forma de calcular o posicionamento exato automaticamente, mas está acima do meu nível de conhecimento.

Se você tiver poucas células para riscar, poderá calculá-lo manualmente por tentativa e erro (como eu fiz) sem grandes problemas.

\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}

insira a descrição da imagem aqui

Observe que o \tikzmarkdeve ser colocado dentro do \multicolumn, vejaaqui.

informação relacionada