我正在为我的论文设计一个大表格的布局。如果表格不是空白的,那就太好了,它应该包含所有带有虚拟值的空单元格,就像x
这样只需输入即可&x&x&x&x&x
,但每次我更改列数时,我都必须手动填充每一行的确切数量,而x&x&x&x
行数超过 60 行时,可能会非常模糊。
我可以在表格开头说一些简单的步骤吗,就像tikz matrix
我可以在哪里定义一样empty cells = Valuexyz
,以便所有单元格都填充虚拟值?
只应替换空单元格。不应替换所有包含内容的单元格。
梅威瑟:
\documentclass[a4paper]{article}
\usepackage{booktabs}
\begin{document}
\begin{tabular}{llllcccccccccccccccccccccccccccccccccccccccccccccccccccccccc}
\toprule
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\\
\bottomrule
\end{tabular}
\end{document}
我的表格如下:
答案1
以下方法使用cellcoll
包来收集单元格内容,然后\IfEq
使用包xstring
来测试单元格是否为空(然后打印-
)(然后按原样打印单元格内容#1
)。
\documentclass{article}
\usepackage{xstring}
\usepackage{array,collcell}
\newcolumntype{C}{>{\collectcell\checkempty}c<{\endcollectcell}}
\def\checkempty#1{%
\IfEq{#1}{}{-}{#1}%
}
\begin{document}
\begin{tabular}{CCC}
&&X\\
&&\\
&X&\\
O&X&\\
X&&T\\
\end{tabular}
\end{document}
答案2
如果您需要一种轻松更改表格列数的方法,此方法应该会有所帮助。它的工作原理是使用循环输入&x
您拥有的每一列。
要更改表中的列数,只需调整参数\numcols
。
\documentclass[a4paper]{article}
\usepackage{booktabs}
\newcounter{countA}%
\newcommand{\numcols}{20}
\newcommand{\repeatentry}[2]{%
\def\myline{#1}%
\setcounter{countA}{1}%
\loop\ifnum\thecountA<#2%
\stepcounter{countA}%
\edef\myline{\myline & #1}%
\repeat%
\myline{}%
}
\begin{document}
\begin{tabular}{|*{\numcols}{c|}}
\toprule
\repeatentry{x}{\numcols}\\
\repeatentry{x}{\numcols}\\
\repeatentry{x}{\numcols}\\
\bottomrule
\end{tabular}
\end{document}
编辑:
为了允许格式化输入\repeatentry
命令,必须进行以下更改。这样做是为了在\edef
添加另一列时保护格式化的扩展。这比使用 更可取\noexpand
,因为 的嵌套\edef
需要 的类似嵌套\noexpand
。
\makeatletter
\newcommand{\repeatentry}[2]{%
\def\myline{#1}%
\setcounter{countA}{1}%
\loop\ifnum\thecountA<#2%
\stepcounter{countA}%
\protected@edef\myline{\myline & #1}%
\repeat%
\myline{}%
}
\makeatother