我正在寻找如何同时拥有:
- 比例数组定义(例如,“这一列占数组宽度的 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}