Escala de colchetes de ambientes de casos em tabela

Nov 25 2020

Desejo formatar um ambiente de casos dentro de uma tabela de modo que as chaves tenham algum deslocamento das linhas horizontais. Por padrão, essa distância é zero e, se a altura da linha for ajustada usando \extrarowheightas chaves, basta dimensionar proporcionalmente. Não consegui obter melhores resultados com o \array.

Alguém tem alguma ideia de como escrever isso corretamente?

\documentclass[12pt]{article}

\usepackage[a4paper, top = 0.1cm, left = 0.1cm, right = 0.1cm, bottom = 0.1cm, bindingoffset=0cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{multirow}

\newcommand{\ROC}{\text{ROC}}

\begin{document}

\begin{tabular}{@{}c|c|c@{}}
    $F(z)$ & $\ROC(f)$ & $f[.]$\\\hline
    \multirow{2}{*}{$\dfrac{z}{z-p}$} & $|z| > |p|$ & $f[k] = \begin{cases}\hphantom{-}0, \quad &k<0\\\hphantom{-}p^k, \quad &k\ge 0\end{cases}$\\\cline{2-3}
    & $0 < |z| < |p|$ & $f[k] = \begin{cases}-p^k, \quad &k<0\\\hphantom{-}0, \quad &k\ge 0\end{cases}$\\\hline 
    \multirow{2}{*}{\shortstack{$\dfrac{Az}{z-p} + \dfrac{\overline{A}z}{z-p}$\\$=2z\dfrac{z\text{Re}(A)-\text{Re}(A\overline{p})}{z^2 - 2z\text{Re}(p)+|p|^2}$}} & $|z| > |p|$ & $f[k] = \begin{cases}\hphantom{-}0, & k<0\\\hphantom{-}2|A||p|^k\cos(\Omega k+\varphi), &k\ge 0 \end{cases}$\\\cline{2-3}
    & $0<|z|<|p|$ & $f[k] = \begin{cases}-2|A||p|^k\cos(\Omega k+\varphi), & k<0\\\hphantom{-} 0, &k\ge 0 \end{cases}$
\end{tabular}

\end{document}

Respostas

10 Zarko Nov 25 2020 at 07:07

Com uso de makegapedcellsdefinido no makecellpacote:

\documentclass[12pt]{article}
\usepackage[a4paper, margin= .1cm, 
            bindingoffset=0cm]{geometry}
\usepackage{mathtools}
\usepackage{makecell, multirow}

\newcommand{\ROC}{\text{ROC}}

\begin{document}
    \[
\setcellgapes{3pt}
\makegapedcells
\begin{array}{@{}c|c|c@{}}
F(z)    &   \ROC(f)         &   f[.]    \\  
    \hline
\multirow{4.4}{*}{$\dfrac{z}{z-p}$} 
        &   |z| > |p|       &   f[k] = \begin{cases}
                            \hphantom{-}0, \quad    &  k<0   \\
                            \hphantom{-}p^k, \quad  &   k\ge 0
                                    \end{cases} \\
    \cline{2-3}
        &   0 < |z| < |p|   &   f[k] = \begin{cases}
                            -p^k, \quad         &   k<0 \\\
                            \hphantom{-}0, \quad &   k\ge 0
                                        \end{cases} \\
    \hline
\multirow{4.4}{*}{$\begin{aligned} & \dfrac{Az}{z-p} + \dfrac{\overline{A}z}{z-p} \\ & = 2z\dfrac{z\text{Re}(A)-\text{Re}(A\overline{p})} {z^2 - 2z\text{Re}(p)+|p|^2} \end{aligned}$} 
        &   |z| > |p|       &   f[k] = \begin{cases}
                                \hphantom{-}0, & k<0    \\
                                \hphantom{-}2|A||p|^k\cos(\Omega k+\varphi), &  k\ge 0
                                        \end{cases}     \\
    \cline{2-3}
    &   0<|z|<|p|           &   f[k] = \begin{cases}
                            -2|A||p|^k\cos(\Omega k+\varphi),   & k<0\\
                            \hphantom{-} 0,                     &k\ge 0   
                                \end{cases}
\end{array}
    \]
\end{document}

Nota: com o uso de arraydentro do ambiente matemático em vez de tabular, você pode omitir tudo $na tabela, exceto nas \multirowcélulas.

7 LuisTurcio Nov 25 2020 at 07:01

Uma possibilidade é usar o booktabspacote e substituir todos \hlinepor \midrulee \cline{2-3}com \cmidrule{2-3}o seguinte:

\documentclass[12pt]{article}

\usepackage[a4paper, top = 0.1cm, left = 0.1cm, right = 0.1cm, bottom = 0.1cm, bindingoffset=0cm]{geometry}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{multirow}
\usepackage{booktabs}

\newcommand{\ROC}{\text{ROC}}

\begin{document}

\begin{tabular}{@{}c|c|c@{}}
    $F(z)$ & $\ROC(f)$ & $f[.]$\\\midrule
    \multirow{2}{*}{$\dfrac{z}{z-p}$} & $|z| > |p|$ & $f[k] = \begin{cases}\hphantom{-}0, \quad &k<0\\\hphantom{-}p^k, \quad &k\ge 0\end{cases}$\\\cmidrule{2-3}
    & $0 < |z| < |p|$ & $f[k] = \begin{cases}-p^k, \quad &k<0\\\hphantom{-}0, \quad &k\ge 0\end{cases}$\\\midrule 
    \multirow{2}{*}{\shortstack{$\dfrac{Az}{z-p} + \dfrac{\overline{A}z}{z-p}$\\$=2z\dfrac{z\text{Re}(A)-\text{Re}(A\overline{p})}{z^2 - 2z\text{Re}(p)+|p|^2}$}} & $|z| > |p|$ & $f[k] = \begin{cases}\hphantom{-}0, & k<0\\\hphantom{-}2|A||p|^k\cos(\Omega k+\varphi), &k\ge 0 \end{cases}$\\\cmidrule{2-3}
    & $0<|z|<|p|$ & $f[k] = \begin{cases}-2|A||p|^k\cos(\Omega k+\varphi), & k<0\\\hphantom{-} 0, &k\ge 0 \end{cases}$
\end{tabular}

Isso dá a seguinte saída:

6 Mico Nov 25 2020 at 13:34

Gostaria de me livrar de todas as regras verticais e quase todas horizontais, alinhar à esquerda o conteúdo da célula, usar em arrayvez de tabular, dobrar o valor de \arraycolsepe usar a \addlinespacemacro para criar o tipo de espaço em branco ("espaço negativo") entre as linhas. Eu também limparia e simplificaria o código LaTeX; por exemplo, substituir \overlinepor \bar, usar um alignedambiente em vez de uma \shortstackdiretiva e configurar \ROCe \Recomo operadores matemáticos. (Muito obrigado a @egreg por sugerir as últimas alterações.)

\documentclass[12pt]{article}

\usepackage[a4paper, margin=5mm, bindingoffset=0cm]{geometry}
% \usepackage[utf8]{inputenc} % is the default
\usepackage[T1]{fontenc}
\usepackage{mathtools} % for '\DeclarePairedDelimiter' macro
\DeclarePairedDelimiter\abs\lvert\rvert
\usepackage{booktabs}

\DeclareMathOperator{\ROC}{ROC}
\renewcommand\Re{\operatorname{Re}}

\begin{document}

\[
\setlength\arraycolsep{10pt} % default: 5pt
\begin{array}{@{} lll @{}}
    F(z) & \ROC(f) & f[k] \\
    \midrule %\hline
    \dfrac{z}{z-p}
    & \abs{z} > \abs{p} 
    & \begin{cases}
             \hphantom{-}0   &\text{if $k<0$}\\
             \hphantom{-}p^k &\text{if $k\ge0$}
             \end{cases} \\
    \addlinespace %\cline{2-3}
    & 0 < \abs{z} < \abs{p} 
    & \begin{cases}
          -p^k          &\text{if $k<0$}\\
          \hphantom{-}0 &\text{if $k\ge0$}
      \end{cases} \\
    \addlinespace[2\defaultaddspace] % \hline 
     \smash[b]{%
         \begin{aligned}[t] &\frac{Az}{z-p} + \frac{\bar{A}z}{z-p} \\ &=2z\frac{z\Re(A)-\Re(A\bar{p})}{z^2 - 2z\Re(p)+\abs{p}^2} \end{aligned}}
    & \abs{z} > \abs{p} 
    & \begin{cases}
             \hphantom{-}0  & \text{if $k<0$}\\
             \hphantom{-}2\abs{A}\abs{p}^k\cos(\Omega k+\varphi) &\text{if $k\ge0$}   
      \end{cases} \\
    \addlinespace % \cline{2-3}
    & 0<\abs{z}<\abs{p} 
    & \begin{cases}
             -2\abs{A}\abs{p}^k\cos(\Omega k+\varphi) & \text{if $k<0$}\\
             \hphantom{-} 0 &\text{if $k\ge0$}   
      \end{cases}
\end{array}
\]

\end{document}
3 F.Pantigny Nov 25 2020 at 18:24

Aqui está uma versão {NiceArray}de nicematrix.

Este pacote fornece duas chaves cell-space-top-limite cell-space-bottom-limit(semelhantes aos comandos \cellspacetoplimite \cellspacebottomlimitde cellspace).

\documentclass[12pt]{article}

\usepackage[a4paper, top = 0.1cm, left = 0.1cm, right = 0.1cm, bottom = 0.1cm, bindingoffset=0cm]{geometry}
\usepackage{mathtools}
\usepackage{nicematrix}

\newcommand{\ROC}{\text{ROC}}

\begin{document}

\NiceMatrixOptions{cell-space-top-limit=3pt,cell-space-bottom-limit=3pt}

$\begin{NiceArray}{@{}c|c|c@{}} F(z) & \ROC(f) & f[.]\\ \Hline \Block{2-1}{\dfrac{z}{z-p}} & |z| > |p| & f[k] = \begin{cases}\hphantom{-}0, \quad &k<0\\\hphantom{-}p^k, \quad &k\ge 0\end{cases}\\ \Hline & 0 < |z| < |p| & f[k] = \begin{cases}-p^k, \quad &k<0\\\hphantom{-}0, \quad &k\ge 0\end{cases}\\ \Hline \Block{2-1}{\dfrac{Az}{z-p} + \dfrac{\overline{A}z}{z-p}\\[4mm] =2z\dfrac{z\text{Re}(A)-\text{Re}(A\overline{p})}{z^2 - 2z\text{Re}(p)+|p|^2}} & |z| > |p| & f[k] = \begin{cases}\hphantom{-}0, & k<0\\\hphantom{-}2|A||p|^k\cos(\Omega k+\varphi), &k\ge 0 \end{cases}\\ \Hline & 0<|z|<|p| & f[k] = \begin{cases}-2|A||p|^k\cos(\Omega k+\varphi), & k<0\\\hphantom{-} 0, &k\ge 0 \end{cases} \end{NiceArray}$

\end{document}

No seu caso, há duas vantagens no uso nicematrix.

  • O comando \Blockcentralizará o conteúdo no centro matemático das células mescladas (não há necessidade de ajuste manual como com \multirow).

  • Um comando \Hlinetraçará a regra com exceção dos blocos (criados por \Block): é mais fácil de usar do que \cline.

Você precisa de várias compilações (porque nicematrixusa nós PGF / Tikz).