如何固定相同的行高、列宽并使每个单元格垂直居中?

如何固定相同的行高、列宽并使每个单元格垂直居中?

我有下表:

\newcolumntype{P}[1]{>{\centering\arraybackslash}p{#1}}
\renewcommand{\arraystretch}{2.2}

\begin{table}[H]
\centering
\caption{Tipos de funções de ativação}
\label{activacao}
\begin{tabular}{p{35mm}P{35mm}P{35mm}}
\toprule
\textbf{Nome}        & \textbf{Função $f$}                                                  & \textbf{Contradomínio}       \\ \midrule
Limiar               & \(\begin{cases} 1, & u_i \geq 0 \\ 0, & u_i < 0 \end{cases}\)                    & ${0,1}$             \\ \midrule
Linear               & $u_i$                                                                & $]-\infty,-\infty[$ \\ \midrule
Por troços           & \(\begin{cases} 1, & u_i \geq 0.5 \\ ku_i, & -0.5 < u_i < 0.5 \\ 0, & u_i \leq -0.5 \end{cases}\)                  & $[0,1]$             \\ \midrule
Logística            & $\frac{1}{1+e^{-ku_i}}$                                              & $[0,1]$             \\ \midrule
Tangente hiperbólica & $tanh(ku_i)$                                                         & $[-1,1]$            \\ \midrule
Sin                  & $sin(u_i \: mod \: 2\pi)$                                            & $[-1,1]$            \\ \midrule
Cos                  & $cos(u_i \: mod \: 2\pi)$                                            & $[-1,1]$            \\ \midrule
Gaussiana            & $e^{\frac{-u^2}{2k^2}}$                                              & $[-1,1]$            \\ \midrule
Quadrada             & $-sign(u_i)u_{}^{2}$                                                 & $]-\infty,-\infty[$ \\ \bottomrule
\end{tabular}
\end{table}

\renewcommand{\arraystretch}{1}~

并使用:

\usepackage{multicol}
\usepackage{tabularx}
\usepackage{array}
\usepackage{booktabs}

我得到了这个:

表格1

我希望所有行的行高相同(即使我使用了 \arraystretch 命令),列宽相同,并且所有 3 列必须垂直居中对齐。至于水平对齐,第一列应在左侧,其他两列应在中间。如上图所示,单元格\cases垂直居中,但我不知道为什么。我尝试了和p标题m,但没有成功。

答案1

看看这是否是让您满意的解决方案:

\usepackage[utf8]{inputenc}
\DeclareMathOperator{\sign}{sign}
\newcolumntype{P}[1]{>{\centering\arraybackslash}m{#1}} % vertical center cell contents

\begin{table}[hbt]
    \centering
\caption{Tipos de funções de ativação}
\label{activacao}
\begin{tabular}{@{\rule[-8mm]{0mm}{18mm}\hspace{\tabcolsep}}% determine cells heights
                       P{35mm}
 *{2}{>{$\displaystyle}P{35mm}<{$}}}
    \toprule
\textbf{Nome}        &  \textbf{Função $f$}     &   \textbf{Contradomínio}       \\ 
    \midrule
Limiar               &  \begin{cases} 1,    & 
                                      u_i \geq 0 \\ 
                                      0,    & u_i < 0 
                        \end{cases}
                                                & {0,1}                         \\
    \midrule
Linear               & u_i                      & ]-\infty,-\infty[             \\ 
    \midrule
Por troços           &  \begin{cases} 1,    & u_i \geq 0.5      \\ 
                                      ku_i, & -0.5 < u_i < 0.5  \\ 
                                      0,    & u_i \leq -0.5 
                        \end{cases}             & [0,1]                         \\ 
    \midrule
Logística            & \frac{1}{1+e^{-ku_i}}    &   [0,1]                       \\ 
    \midrule
Tangente hiperbólica & \tanh(ku_i)               & [-1,1]                       \\ 
    \midrule
Sinus                & \sin(u_i \: mod \: 2\pi)  & [-1,1]                       \\ 
    \midrule
Cosinus              & \cos(u_i \: mod \: 2\pi)  & [-1,1]                       \\ 
    \midrule
Gaussiana            & \mathrm{e}^{\frac{-u^2}{2k^2}}   &   [-1,1]              \\ 
    \midrule
Quadrada             & -\sign(u_i)u_{}^{2}        &  \infty,-\infty[             \\ 
    \bottomrule
\end{tabular}
\end{table}

在此处输入图片描述

编辑:解决方案现在被视为 Bernard 的评论。

答案2

我不认为相同的行高会提高表格的质量,反而会产生大量不必要的垂直空间。改进建议:

  • 删除普通行之间的线。如果使用标准的三条线(\toprule\midrule\bottomrule),则表格结构会更加清晰(表格区域、标题、正文)。

  • 除了规则之外,额外的空格还能更清晰地分隔公式。下面的示例使用了\addlinespacebooktabs,还展示了如何.5em更改表格的默认值 ()。

  • 第三列可以以逗号为中心。下面的示例通过使用逗号作为列分隔符来实现这一点。棘手的部分是冗长的列标题。多余的宽度会进入右列,标题将不再居中。因此,该示例测量标题宽度并计算两列的宽度部分。

  • 数学运算符名称(tanhsincossign)通常以直立字体排版。软件包amsmath为其中大部分提供了宏。可以通过 声明新的运算符\DeclareMathOperator

  • 行内的单元格在基线垂直对齐,这不应改变。

  • 该示例使用标准列宽,如l和 ,c而不是固定宽度。如果整个表格的宽度太大,单元格内容应该跨行显示,则固定列宽是有意义的。但这里没有必要这样做。

示例(由于我的编辑器和屏幕受到宽度限制,因此重新格式化了行):

\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{booktabs}
\usepackage{caption}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[portuges]{babel}

\DeclareMathOperator{\sign}{sign}

\begin{document}
\begin{table}
\centering
\caption{Tipos de funções de ativação}
\label{activacao}
\setlength{\defaultaddspace}{.75em}
\begin{tabular}{lcr@{$,{}$}l}
\toprule
\textbf{Nome}
  & \textbf{Função $f$}
  & \multicolumn{1}{r@{$\hphantom{,{}}$}}{%
      \sbox0{\textbf{Contradomínio}}\sbox2{$,{}$}%
      \xdef\ContradominioColWidth{\the\dimexpr(\wd0-\wd2)/2}%
      \hbox to\ContradominioColWidth{\usebox0\hss}%
    }
  & \kern\ContradominioColWidth \\
\midrule
Limiar
  & \(\begin{cases} 1, & u_i \geq 0 \\ 0, & u_i < 0 \end{cases}\)
  & $0$ & $1$ \\
\addlinespace
Linear
  & $u_i$
  & $]-\infty$ & $-\infty[$ \\
\addlinespace
Por troços
  & $\begin{cases}
      1, & u_i \geq 0.5 \\
      ku_i, & -0.5 < u_i < 0.5 \\
      0, & u_i \leq -0.5
    \end{cases}$
  & $[0$ & $1]$ \\
\addlinespace
Logística
  & $\frac{1}{1+e^{-ku_i}}$
  & $[0$ & $1]$ \\
\addlinespace
Tangente hiperbólica
  & $\tanh(ku_i)$
  & $[-1$ & $1]$ \\
\addlinespace
Sin
  & $\sin(u_i \mod 2\pi)$
  & $[-1$ & $1]$ \\
\addlinespace
Cos
  & $\cos(u_i \mod 2\pi)$
  & $[-1$ & $1]$ \\
\addlinespace
Gaussiana
  & $e^{\frac{-u^2}{2k^2}}$
  & $[-1$ & $1]$ \\
\addlinespace
Quadrada
  & $-\sign(u_i)u_{}^{2}$
  & $]-\infty$ & $-\infty[$ \\
\bottomrule
\end{tabular}
\end{table}
\end{document}

结果

相关内容