获得具有比例列宽以及单元格内容垂直和水平居中的表格的简单方法?

获得具有比例列宽以及单元格内容垂直和水平居中的表格的简单方法?

我正在寻找如何同时拥有:

  • 比例数组定义(例如,“这一列占数组宽度的 20%,下一列占 30%”等等);
  • 内容垂直和水平居中。

我搜索了 StackExchange 并找到了以下代码:

\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathpazo}
\usepackage{tabularx}
\usepackage{geometry}
\usepackage[french]{babel}
\usepackage{tikz}

\geometry{top=1.5cm, bottom=1.5cm, left=1cm, right=1cm,
          headheight=1cm, headsep=0.5cm,
          footskip=1cm}

\begin{document}

Compléter le tableau suivant:

\renewcommand{\arraystretch}{3}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{C}[1]{>{\hsize=#1\hsize\centering\arraybackslash}X}

\begin{tabularx}{\linewidth}{|C{.6}|C{1.4}|C{1.4}|C{.6}|}
%\begin{tabularx}{\linewidth}{|C{.15}|C{.35}|C{.35}|C{.15}|}
    \hline
    Inégalité & Phrase & Représentation graphique & Intervalle\\
    \hline
    $x<2$ & Bla & \fbox{\begin{tikzpicture}[scale=0.5, >=stealth]
                % Repère
                \def\xm{-4.9}
                \def\xM{-\xm}
                \draw[thick,->] (\xm,0) -- (\xM,0) ; 
                \foreach \x in {-4,...,4} {\node at (\x,0) {\tiny $|$} ; }
                \node[below] at (0,0) {\footnotesize $0$} ;
                \node[below] at (1,0) {\footnotesize $1$} ;
                % Intervalle
                \draw[line width=2.5pt] (-2,0) node {$]$} --(4,0) node {$]$} ;
    \end{tikzpicture}} & $x\in\ldots$ \\
    \hline
\end{tabularx}
\end{document}

问题(见下图):

  • 数组宽度太大,我不知道为什么;
  • 通过重新定义 \arraystretch,内容不再垂直居中;
  • TikZ 方案不是垂直居中的。如果我将其嵌入到新的 \parbox[c] 中,我需要重复水平居中指令,我觉得这很冗余且不雅致。

在此处输入图片描述

此外,tabularx 声明\begin{tabularx}{\linewidth}{|C{.15}|C{.35}|C{.35}|C{.15}|}给出了相同的结果,而它不应该(如果我理解正确的话这个答案, 例如)。

提前感谢任何提示或帮助。

答案1

使用该tabularray包后,表格代码很简单:

\documentclass[12pt, a4paper]{book}
\usepackage[hmargin=1cm, vmargin=1.5cm,
            headheight=1cm, headsep=0.5cm,
            footskip=1cm,
            showframe
            ]{geometry}

\usepackage[T1]{fontenc}
\usepackage{mathpazo}
\usepackage[french]{babel}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\tikzset{TAB/.style = {
           > = Straight Barb,
    BRR/.style = {{Bracket[reversed,length=0.5mm]}-{Bracket[reversed,length=0.5mm]}, 
                  shorten <=-.5mm,shorten >=-0.5mm},
    lbl/.style = {below, font=\scriptsize},
                    }
        }
\usepackage{tabularray}


\begin{document}
                    
Compléter le tableau suivant:

\noindent%
\begin{tblr}{hlines, vlines,
             colspec={X[0.6,c] X[c] X[c] X[0.6,c]},
             rowsep=7pt,
             row{1} = {font=\bfseries},
             }
Inégalité & Phrase & Représentation graphique & Intervalle\\
$x<2$ & Bla & \fbox{\begin{tikzpicture}[TAB,baseline=(Base.base)]
                \draw[->] (-2.4,0) -- (2.4,0) ;
                \foreach \x in {-4,...,4}
                    \draw (0.5*\x,1mm) -- ++ (0,-2mm);
                \node (Base) [lbl] at (0.0,0) {0};
                \node        [lbl] at (0.5,0) {1};
                \draw[very thick, BRR]
                    (-1,0) -- (2,0);
                    \end{tikzpicture}
                    }
                & $x\in\ldots$      \\
\end{tblr}
\end{document}

在此处输入图片描述

答案2

您的表格不是太大,它是缩进的。使用\noindent,一切都很好。要在单元格的顶部和底部留出一些填充,而不是玩弄 的值\arraystretch,我建议加载cellspace包,它使您能够定义单元格顶部与上一行之间的最小距离,以及单元格底部与下一行之间的最小距离,在带有以字母为前缀的说明符的列中S(或如果您加载 ,则声明的任何字母siunitx,它定义S列类型)。

\documentclass[12pt, a4paper]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{mathpazo}
\usepackage{tabularx}
\usepackage[showframe]{geometry}
\usepackage[french]{babel}
\usepackage{tikz}
\usepackage{cellspace}
\setlength{\cellspacetoplimit}{10pt}
\setlength{\cellspacebottomlimit}{10pt}
\addparagraphcolumntypes{X}

\geometry{vmargin=1.5cm, hmargin=1cm, headheight=1cm, headsep=0.5cm, footskip=1cm}

\begin{document}

Compléter le tableau suivant:

%\renewcommand{\arraystretch}{3}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{C}[1]{>{\hsize=#1\hsize\centering\arraybackslash}S{X}}

\noindent
\begin{tabularx}{\linewidth}{|C{.6}|C{1.4}|C{1.4}|C{.6}|}
    \hline
    Inégalité & Phrase & Représentation graphique & Intervalle \\
    \hline
    $x<2$ & Bla & \fbox{\begin{tikzpicture}[scale=0.5, >=stealth]
                % Repère
                \def\xm{-4.9}
                \def\xM{-\xm}
                \draw[thick,->] (\xm,0) -- (\xM,0) ;
                \foreach \x in {-4,...,4} {\node at (\x,0) {\tiny $|$} ; }
                \node[below] at (0,0) {\footnotesize $0$} ;
                \node[below] at (1,0) {\footnotesize $1$} ;
                % Intervalle
                \draw[line width=2.5pt] (-2,0) node {$]$} --(4,0) node {$]$} ;
    \end{tikzpicture}} & $x\in\ldots$ \\
    \hline
\end{tabularx}

\end{document} 

在此处输入图片描述

相关内容