提问于:
浏览数:
2585
写excel到latex的脚本转换工具时,为了在latex中实现几乎和excel一致的样式,我把目前常用的绘制表格的包浏览了一遍,但是碰到了一些问题。下面说一下我的成功的一些做法和尚未解决的问题,对于已解决的问题如果大家有更好的替换方案,也可以分享一下我去尝试。
### 任意线宽,任意颜色的cline
#### 设置cline线宽
- `boldline`中的`\clineB{1-2}[2]`
- `booktabs`中的`\cmidrule[1pt]{1-2}`
- `\arrayrulewidth`得在表格外设置,尝试在表格内设置,无效,故放弃
- `\hrule`和`\rule`不知道怎么在表格中绘制cline,但想想应该是很麻烦的事情,就没有考虑
#### 设置颜色
`colortbl`中的`\arrayrulecolor`命令,我定义了一个宏来使用它
```tex
\newcommand\colorwrap[2]{
\arrayrulecolor{#1}#2
\arrayrulecolor{black}
}
```
`boldline`与`colortbl`并不兼容,`arrayrulecolor`命令对其无效,故放弃使用这个包。
现在只剩下了`booktabs`包,我对excel中扫描到的所有属性一致的cline统一使用`\cmidrule`来绘制横线,这时出现了顶端横线与两旁的竖线有空隙的问题,如下图
![](https://pics.latexstudio.net/data/images/202004/6696d0d1b0ae852.png)
查阅资料后我做出了如下设置
```tex
\setlength\abovetopsep{0pt}
\setlength\belowbottomsep{0pt}
\setlength\aboverulesep{0pt}
\setlength\belowrulesep{0pt}
```
但是还是有微小的间隙
![](https://pics.latexstudio.net/data/images/202004/5de7da70f945bd9.png)
我猜测是`\cmidrule`本身的宽度造成了这些间隙,减去五条线的宽度后,距离正常了,但是注意到**底下这跟红线的位置不对**,就好像空白的地方本来就有了一条线一样,这个问题不知道怎么解决
完整的由脚本生成的代码如下
```tex
\documentclass{article}
\usepackage{xeCJK}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{multirow, makecell}
\usepackage{boldline}
\usepackage{booktabs}
\usepackage{arydshln}
\begin{document}
\definecolor{FFFF00}{HTML}{FFFF00}
\definecolor{FF0000}{HTML}{FF0000}
{
\setlength\abovetopsep{0pt}
\setlength\belowbottomsep{0pt}
\setlength\aboverulesep{0pt}
\setlength\belowrulesep{0pt}
\newcommand\colorwrap[2]{
\arrayrulecolor{#1}#2
\arrayrulecolor{black}
}
\begin{tabular}{*{6}{|c}|}
% row 1
\cmidrule[0.4pt]{1-6}
\vspace{-2pt}
& 2
& \textcolor{FFFF00}{sd}
& 4
& & \\
\cmidrule[0.4pt]{1-4}
% row 2
& 3
& \multirowcell{2}{\textbf{abc}}
& & & \\
\cmidrule[0.4pt]{1-4}
% row 3
\multicolumn{2}{|c|}{\textit{123}}
& & & & \\
\cmidrule[0.4pt]{1-4}
% row 4
& & & & & \\
\cmidrule[0.4pt]{1-4}
\colorwrap{FF0000}{\cmidrule[0.4pt]{5-6}}
\end{tabular}
}
\end{document}
```
其实还有问题,当我在下面添加更多空单元格时,第一行的间距就变小了,解决办法是第一行代码改写一下,第7行把减去的间距补上
```tex
% row 1
\cmidrule[0.4pt]{1-6}
\vspace{-2pt}
& 2
& \textcolor{FFFF00}{sd}
& 4
& & \\[2pt]
\cmidrule[0.4pt]{1-4}
```
目前问题就只剩下和`\arrayrulecolor`一起使用时的命令,为了更清晰的展现这个问题,我使用另外一个MWE
```tex
\documentclass{article}
\usepackage{xeCJK}
\usepackage{xcolor}
\usepackage{colortbl}
\usepackage{multirow, makecell}
\usepackage{boldline}
\usepackage{booktabs}
\usepackage{arydshln}
\begin{document}
\definecolor{FFFF00}{HTML}{FFFF00}
\definecolor{FF0000}{HTML}{FF0000}
{
\setlength\abovetopsep{0pt}
\setlength\belowbottomsep{0pt}
\setlength\aboverulesep{0pt}
\setlength\belowrulesep{0pt}
\newcommand\colorwrap[2]{
\arrayrulecolor{#1}#2
\arrayrulecolor{black}
}
\begin{tabular}{*{2}{|c}|}
% row 1
\vspace{-1.6pt} 1
& 2 \\[1.6pt]
\cmidrule[0.4pt]{1-1}
\colorwrap{FF0000}{\cmidrule[0.8pt]{2-2}}
% row 2
3
& 4 \\
\cmidrule[0.4pt]{1-1}
\colorwrap{FF0000}{\cmidrule[0.8pt]{2-2}}
\end{tabular}
}
```
![](https://pics.latexstudio.net/data/images/202004/1541660b1f0b19c.png)
### 可设置线宽的虚线问题
[https://wenda.latexstudio.net/q-2057.html](https://wenda.latexstudio.net/q-2057.html)
### 绘制任意宽度任意颜色的竖线(已解决)
单个单元格例子
```tex
\muticolumn{1}{c!{\color{red} \vrule width 1pt}}
```
### 单元格颜色(已解决)
使用`colortbl`中的`\cellcolor`命令