提问于:
浏览数:
2778
## 编译环境
操作系统
* [ ] Windows 7/8/10
* [x ] macOS
* [ ] Linux
`若需勾选,请把[ ]改成[x]`
Tex发行版
* [ ] TexLive `年份`
* [ ] MikTeX `版本号`
* [ ] CTeX
`若需勾选,请把[ ]改成[x]`
## 我的问题
### 内容
我想用tex写制作一个表格。这个表格不是所有边框都对齐,显然看上去这个表分成三个部分。每个部分边框是对齐的。这样的表怎么制作?
### 动机
经常要填写这类表格,而且是大量的重复信息,什么学号、姓名。有时候还会填错。太烦了。如果可以用tex,那么就可以用程序自动生成了。
![](https://wenda.latexstudio.net/data/attach/200617/tdXcR9VI.jpg)
3 回答
0
这样的表格真的不适合拿 latex 做,如果非要做最好学习 tikz
0
这里给你提供一个简短的示例,剩下的你照着自己填充就行,不过我还是建议你用excel,word啥的吧,应该有模板功能的。不同的列宽你把它分成两个表格就行了。
```tex
\documentclass{ctexart}
\usepackage{tabularx}
\usepackage{xcolor}
\usepackage{xparse}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\newcolumntype{s}{m{.15\linewidth}}
\makeatletter
\def\t@c{\centering\arraybackslash}
% 表格
\def\maketable{
\centering
\ifx\t@caption\@empty\else{\bfseries\t@caption} \vskip 1em\fi
\noindent\begin{tabularx}{\linewidth}{|s|Y|s|Y|}
\hline
\t@c 学\hspace{2\ccwd}号 & \t@id & \t@c 专业班级 & \t@class \\
\hline
\t@c 题\hspace{2\ccwd}目 & \t@title \\
\hline
\end{tabularx}
\vskip -1.4pt
\noindent\begin{tabularx}{\linewidth}{|m{.3\linewidth}|Y|}
\t@testa & \t@testb \\
\hline
\end{tabularx}
}
% 样式
\def\t@style{\ifx\t@color\@empty\else\leavevmode\color{\t@color}\fi\t@font}
% 颜色
\def\tcolor#1{\def\t@color{#1}}
\let\t@color\@empty
% 字体
\def\tfont#1{\def\t@font{#1}}
\let\t@font\@empty
% 标题
\def\tcaption#1{\def\t@caption{#1}}
\def\t@caption{XX学院毕业设计(论文)总评表}
% 定义新的单个单元格
\NewDocumentCommand {\newtcell} {O{1} m O{\@empty} } {
\expandafter\newcommand\csname t#2\endcsname[2][c]{%
\@namedef{t@#2}{
\ifnum#1=1
\t@align{##1}\t@style##2
\else\ifnum#1>1
\multicolumn{#1}{##1|}{\t@style##2}
\else\fi\fi
}
}
\@nameuse{t#2}{#3}
}
% 对齐处理
\def\t@align#1{
\ifx#1c\centering\else
\ifx#1l\raggedright\else
\ifx#1r\raggedleft\else
\fi\fi\fi\arraybackslash
}
\makeatother
\newtcell{id}
\newtcell{class}
\newtcell[3]{title}
\newtcell{testa}
\newtcell{testb}[测试2:默认值]
\tcolor{red}
\tfont{\itshape}
\tid{12345}
\tclass{二班}
\ttitle[l]{这是一个题目}
\ttesta[r]{测试1}
\begin{document}
\maketable
\end{document}
```
![](https://wenda.latexstudio.net/data/attach/200617/tPiyB6WK.png)
0
用 `tcolorbox` 可以分别做出各部分表格,而且能拼接得严丝合缝。
你的回答
请登录后回答
你的回答将会帮助更多人,请务必认真回答问题。