我得到了一个解决方案https://tex.stackexchange.com/a/42186/128718他给出了使用 LaTeX 创建出勤表的解决方案。他的解决方案很好。
但是,他把列宽和标题放在了单独的一行。当我有很多列,需要一次又一次地更改列宽以调整到预期的外观时,我必须搜索p{width}
那个列,这很无聊且耗时。
因此,如果有一种方法可以将宽度放在列标题旁边,则可以轻松更改任何列的宽度。(例如column{|Name}{width=2cm}
)
您可以提供任何解决方案来创建具有预期功能的考勤表/其他表格。
答案1
这用于\makebox
在一个步骤中合并宽度和标题。它不会检查标题是否适合请求的空间。也可以使用\parbox
。
我开始尝试使用循环来添加线条,发现它比我想象的要难,然后决定不值得付出努力。
\documentclass{article}
\begin{document}
\def\arraystretch{2.5}% vertical spacing in multiples of \strut
\def\aline{&&&&\\\hline}% number of & = number of columns-1
\noindent\begin{tabular}{|l|l|l|l|l|}
\hline
\makebox[2cm][l]{Name}&
\makebox[2cm][l]{Item}&
\makebox[2cm][l]{Pickup}&
\makebox[2cm][l]{Return}&
\makebox[2cm][l]{Signature}\\\hline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\aline
\end{tabular}
\end{document}
答案2
@{}
一种可能性是使用列定义来消除左右单元格边距:
\begin{tabular}{|@{}l@{}|@{}l@{}|@{}l@{}|@{}l@{}|@{}l@{}|}
然后,对于标题行,您可以将标题名称(使用\rlap
)与所需宽度的水平空间重叠:
\rlap{ Name}\hspace{2cm} & \rlap{ Item}\hspace{3cm} & \rlap{ Pickup}\hspace{2cm} & \rlap{ Return}\hspace{2cm} & \rlap{ Signature}\hspace{3cm}
另一种可能性是将注释插入到列定义中。您可以定义一个宏:
\newcommand{\xx}[1]{}
什么都不做。所以\xx{stuff}
基本上只会变成stuff
注释。您的代码将如下所示:
\begin{tabular}{|p{2cm}\xx{name}|p{3cm}\xx{item}|p{2cm}\xx{pickup}|p{2cm}\xx{return}|p{3cm}\xx{sign}|}