我正在尝试弄清楚如何创建一个单元格大小相同的表格(无论内容如何,每个单元格的宽度和高度都相同)。表格应该只有一个外边框,单元格之间应该没有任何内容。
这是我的代码:
{\fontsize{22}{22} \selectfont
\begin{tabular}{|ccccccccccccccc|}
\hline
X & H & C & M & O & N & O & Y & J & F & O & C & D & L & D \\
T & Z & L & O & B & O & T & O & Q & L & O & T & H & Y & F \\
O & M & W & M & C & L & F & V & S & R & V & L & R & G & I \\
V & Y & C & Y & P & O & D & Y & R & D & X & M & I & E & Z \\
E & K & O & D & V & J & D & E & C & A & B & R & A & E & O \\
J & B & N & X & L & V & P & R & I & L & V & A & C & A & A \\
A & A & E & V & V & G & J & C & I & R & A & Q & U & Y & D \\
W & L & J & S & P & B & B & G & L & L & Y & B & A & N & I \\
G & L & O & F & C & P & Z & V & S & K & O & G & E & L & F \\
A & E & C & L & E & A & T & O & V & P & U & D & J & J & K \\
T & N & H & M & R & T & B & R & R & T & I & C & Z & A & A \\
O & A & G & V & A & F & W & A & R & R & O & F & R & P & B \\
R & I & J & S & N & B & F & O & L & E & O & Z & G & E & J \\
T & Q & R & W & A & U & T & E & O & L & N & I & D & R & W \\
G & B & J & L & E & Y & C & G & E & C & O & P & M & X & J \\
\hline
\end{tabular}
}
但输出是错误的:
该表格是 15x15,因此最终输出应该是一个完美的正方形……单元格大小相同,单元格(列和行)之间的边距相同。
我究竟做错了什么?
答案1
使用tikz
matrix
:
\documentclass{article}
\usepackage[margin=0.5cm]{geometry}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
{
\fontsize{22}{22} \selectfont
\begin{tikzpicture}
\matrix(table)[
matrix of nodes,
row sep =-\pgflinewidth,
column sep = -\pgflinewidth,
nodes={anchor=center,
minimum width=1.25cm,
minimum height=1.25cm,
},
]
{X & H & C & M & O & N & O & Y & J & F & O & C & D & L & D \\
T & Z & L & O & B & O & T & O & Q & L & O & T & H & Y & F \\
O & M & W & M & C & L & F & V & S & R & V & L & R & G & I \\
V & Y & C & Y & P & O & D & Y & R & D & X & M & I & E & Z \\
E & K & O & D & V & J & D & E & C & A & B & R & A & E & O \\
J & B & N & X & L & V & P & R & I & L & V & A & C & A & A \\
A & A & E & V & V & G & J & C & I & R & A & Q & U & Y & D \\
W & L & J & S & P & B & B & G & L & L & Y & B & A & N & I \\
G & L & O & F & C & P & Z & V & S & K & O & G & E & L & F \\
A & E & C & L & E & A & T & O & V & P & U & D & J & J & K \\
T & N & H & M & R & T & B & R & R & T & I & C & Z & A & A \\
O & A & G & V & A & F & W & A & R & R & O & F & R & P & B \\
R & I & J & S & N & B & F & O & L & E & O & Z & G & E & J \\
T & Q & R & W & A & U & T & E & O & L & N & I & D & R & W \\
G & B & J & L & E & Y & C & G & E & C & O & P & M & X & J \\
};
\draw [black] (table-1-1.north west) -- (table-1-15.north east) -- (table-15-15.south east) -- (table-15-1.south west) -- cycle ;
\end{tikzpicture}
}
\end{document}
答案2
这是一个非 TikZ 解决方案。它允许您生成宽度(和高度)的方形表格\tablewidth
。以下屏幕截图中的第一个表格使用宽度\textwidth
和字体大小22.74pt
(22pt
默认情况下不可用,除非您添加一些额外的包);第二个表格使用宽度0.5\textwidth
和字体大小9pt
。
\documentclass{article}
\usepackage[margin=1cm]{geometry} % set suitable page parameters
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\newlength\tablewidth
\newlength\celldim
\newcommand{\ProduceTable}{%
\setlength\tabcolsep{0pt}
\setlength\celldim{\dimexpr(\tablewidth-2\arrayrulewidth)/15\relax}
\setlength\extrarowheight{\dimexpr\celldim-\baselineskip\relax}
\centering
\begin{tabularx}{\tablewidth}{|*{15}{C}|}
\hline
X&H&C&M&O&N&O&Y&J&F&O&C&D&L&D \\
T&Z&L&O&B&O&T&O&Q&L&O&T&H&Y&F \\
O&M&W&M&C&L&F&V&S&R&V&L&R&G&I \\
V&Y&C&Y&P&O&D&Y&R&D&X&M&I&E&Z \\
E&K&O&D&V&J&D&E&C&A&B&R&A&E&O \\
J&B&N&X&L&V&P&R&I&L&V&A&C&A&A \\
A&A&E&V&V&G&J&C&I&R&A&Q&U&Y&D \\
W&L&J&S&P&B&B&G&L&L&Y&B&A&N&I \\
G&L&O&F&C&P&Z&V&S&K&O&G&E&L&F \\
A&E&C&L&E&A&T&O&V&P&U&D&J&J&K \\
T&N&H&M&R&T&B&R&R&T&I&C&Z&A&A \\
O&A&G&V&A&F&W&A&R&R&O&F&R&P&B \\
R&I&J&S&N&B&F&O&L&E&O&Z&G&E&J \\
T&Q&R&W&A&U&T&E&O&L&N&I&D&R&W \\
G&B&J&L&E&Y&C&G&E&C&O&P&M&X&J \\[1ex]
\hline
\end{tabularx}}
\begin{document}
\begin{table}
\fontsize{20.74}{20.74}\selectfont % '22pt' not available in default font family
\setlength{\tablewidth}{1\textwidth}
\ProduceTable
\end{table}
\begin{table}
\ttfamily
\fontsize{9}{9}\selectfont
\setlength{\tablewidth}{0.5\textwidth}
\ProduceTable
\end{table}
\end{document}
答案3
这是另一种变体,使用普通的表格、固定宽度的m
-columns 和 1 厘米高、0 宽度的规则重定向 ( >{}
) 到 0 宽度的列 (F)。- m
columns 将单元格内容垂直居中。我定义了两个新列 (M 和 F) 来稍微清理一下代码。
您唯一需要的附加包是大批。 我用几何学只是为了有更合理的利润。
如果您更喜欢自适应边距的表格,可以使用以下公式计算列宽\dimexpr
:从总文本宽度(左右边距之间的距离)中减去两条规则(垂直线)的宽度array
,然后将结果除以 15。使用相同的计算方法找到行高,即:
\newcolumntype{M}{>{\centering\arraybackslash}m{\dimexpr((\textwidth-2\arrayrulewidth)/15)\relax}}
% The column width
\newcolumntype{F}{>{\rule{0pt}{\dimexpr((\textwidth-2\arrayrulewidth)/15)\relax}}m{0pt}}
% The row height
当然,我可以定义一个新命令,而不是重复计算,但由于只有两个地方,我可以辩解不这样做。我
\documentclass{article}
\usepackage[margin=2cm]{geometry} % set suitable margins
\usepackage{array}
\newcolumntype{M}{>{\centering\arraybackslash}m{1cm}} % Horizontal and vertically
% centred cells
\newcolumntype{F}{>{\rule{0pt}{1cm}}m{0pt}} % Minimum 1 cm heigh rows
\begin{document}
\setlength\tabcolsep{0pt} % Remove space between columns
\renewcommand{\arraystretch}{0} % Remove space between rows
\centering
\fontsize{22}{22}\selectfont % Gives 22.74pt
% unless you load a scalable font
\begin{tabular}{|*{15}{M}|F}
\hline
X & H & C & M & O & N & O & Y & J & F & O & C & D & L & D & \\
T & Z & L & O & B & O & T & O & Q & L & O & T & H & Y & F & \\
O & M & W & M & C & L & F & V & S & R & V & L & R & G & I & \\
V & Y & C & Y & P & O & D & Y & R & D & X & M & I & E & Z & \\
E & K & O & D & V & J & D & E & C & A & B & R & A & E & O & \\
J & B & N & X & L & V & P & R & I & L & V & A & C & A & A & \\
A & A & E & V & V & G & J & C & I & R & A & Q & U & Y & D & \\
W & L & J & S & P & B & B & G & L & L & Y & B & A & N & I & \\
G & L & O & F & C & P & Z & V & S & K & O & G & E & L & F & \\
A & E & C & L & E & A & T & O & V & P & U & D & J & J & K & \\
T & N & H & M & R & T & B & R & R & T & I & C & Z & A & A & \\
O & A & G & V & A & F & W & A & R & R & O & F & R & P & B & \\
R & I & J & S & N & B & F & O & L & E & O & Z & G & E & J & \\
T & Q & R & W & A & U & T & E & O & L & N & I & D & R & W & \\
G & B & J & L & E & Y & C & G & E & C & O & P & M & X & J & \\
\hline
\end{tabular}
\end{document}
答案4
与。{NiceTabular}
nicematrix
\documentclass{article}
\usepackage{nicematrix,tikz}
\begin{document}
\setlength{\tabcolsep}{0pt}
\setlength{\arrayrulewidth}{0pt}
\begin{NiceTabular}{>{\rule[-4pt]{0pt}{14pt}}c*{14}{c}}[columns-width=14pt]
X & H & C & M & O & N & O & Y & J & F & O & C & D & L & D \\
T & Z & L & O & B & O & T & O & Q & L & O & T & H & Y & F \\
O & M & W & M & C & L & F & V & S & R & V & L & R & G & I \\
V & Y & C & Y & P & O & D & Y & R & D & X & M & I & E & Z \\
E & K & O & D & V & J & D & E & C & A & B & R & A & E & O \\
J & B & N & X & L & V & P & R & I & L & V & A & C & A & A \\
A & A & E & V & V & G & J & C & I & R & A & Q & U & Y & D \\
W & L & J & S & P & B & B & G & L & L & Y & B & A & N & I \\
G & L & O & F & C & P & Z & V & S & K & O & G & E & L & F \\
A & E & C & L & E & A & T & O & V & P & U & D & J & J & K \\
T & N & H & M & R & T & B & R & R & T & I & C & Z & A & A \\
O & A & G & V & A & F & W & A & R & R & O & F & R & P & B \\
R & I & J & S & N & B & F & O & L & E & O & Z & G & E & J \\
T & Q & R & W & A & U & T & E & O & L & N & I & D & R & W \\
G & B & J & L & E & Y & C & G & E & C & O & P & M & X & J \\
\CodeAfter
\tikz \draw (1-|1) rectangle (last-|last) ;
\end{NiceTabular}
\end{document}