可以换一个思路,用 csvsimple 结合 tabularray 来完成这个任务。本来你这种长表格就不会自己手动敲入内容,更多是从文件读取,不妨在 csv 文件里加一列指定相应颜色。代码示例如下:
\documentclass{ctexart}
\begin{filecontents*}{temp.csv}
cellcolor,city,country,property
azure9,华盛顿,美国,首都
azure9,洛杉矶,美国,大城市
white,东京,日本,首都
azure9,莫斯科,俄罗斯,首都
\end{filecontents*}
\usepackage{tabularray}
\usepackage{csvsimple-l3}
\usepackage{xcolor}
\begin{document}
\begin{table}
\caption{测试表}\label{tab:temp}
\csvreader[
head to column names,
tabularray={
colspec = {X[1,l,h] X[1,l,h] X[3,l,h]},
hline{1,Z}=1.2pt,
hline{2}=0.8pt,
cell{2}{2}={r=2}{m,l}
},
table head={\textbf{城市} & \textbf{国家} & \textbf{性质}\\}
]{temp.csv}{}{
\SetRow{\cellcolor}
\city & \country & \property
}
\end{table}
\end{document}效果:
如果颜色那一列你想操作得简单一点,那么就用个简单字符,然后用 csvsimple 做判断,具体要看csvsimple 的手册。
我细看了你的例子,就这个例子而言,还需要用些权宜之计,主要问题在于:
csvsimple没有给longtblr的[<option>]参数的接口,表格标题要自己处理。- 单元格中含
,字符,标准的csv是将单元格字符串用""包裹,但csvsimple不支持,可能会导致列错误,因此要用其他不包含的字符作为分隔符,比如|,但这样的csv在 Microsoft Excel 中修改处理就比较麻烦了。 tipa的音标字符通过csvsimple处理会出错,这里用了\newsavebox\sbox和\usebox处理(没去深究,权宜之计)。
这一段的代码如下:
\documentclass{ctexart}
\usepackage{tabularray}
\usepackage{csvsimple-l3}
\usepackage{xcolor}
\usepackage{tipa}
%%% 因为你这里用到了 comma 作为标点符号,如果是严格的 csv 将用 "" 包裹含 comma 的字符串
%%% 但 csvsimple 并不支持这样的用法,所以这里文件用 | 作为分隔符
%%% 不过这样 Microsoft Excel 就不支持了。这些细节上的困难要自己去克服。
\begin{filecontents*}{PfN.csv}
ccolor|Meaning|Prefixes|Example
azure9|{a half \\ $\frac{1}{2}$} |semi- |{semilunar valve 半月瓣\\ (lun/o: moon; -ar: pertaining to)}
azure9| |hemi- |{hemisphere \\ hemiplegia 半瘫\\ (-plegia/\usebox{\plegia}/: paralysis)}
white |{one,single \\ 1} |mono- |{monocyte 单核细胞}
white | |uni- |{unicellular 单细胞的}
azure9|{two \\ 2} |bi- |{bicuspid 二尖瓣的 \\ (cusp/i: point)}
azure9| |di- |{dioxide 二氧化物 \\ diplegia 双侧瘫痪}
white |double |dipl/o|{diploid n.【生】二倍体;(结晶)偏方24面体 adj.二倍体的(含有两套染色体)}
azure9|{three \\ 3} |tri- |{triplet \\ triceps 三头肌 \\ (-ceps: head)}
white |{four \\ 4} |quadr-|quadrant
white | |tetra-|tetracycline/\usebox{\tetracycline}/ 四环素
azure9|many |multi-|{multipara /\usebox{\multipara}/ 经产妇 \\ (-para: to bring forth to, bear)}
azure9| |poly- |polycystic kidney 多囊肾
\end{filecontents*}
%%% 有几个 tipa 字符好像没法通过 csvsimple 中处理,这里用了权宜之计
\newsavebox\plegia
\sbox\plegia{\textipa{"pli:\textdyoghlig I@}}
\newsavebox\multipara
\sbox\multipara{\textipa{m2l"tIp@r@}}
\newsavebox\tetracycline
\sbox\tetracycline{\textipa{""tetr@"saIklm}}
\begin{document}
%%% 由于 csvsimple 没有给 longtblr 的 option 参数的接口
%%% 长表格的标题要用这种黑科技处理一下,用完好像要恢复成 normal
\DefTblrTemplate{caption-text}{empty}{Prefixes for Numbers}
\SetTblrTemplate{caption-text}{empty}
%%% 下面使用 csvsimple
\csvreader[
head to column names,
separator=pipe,
long tabularray={
colspec = {X[1,l,h] X[1,l,h] X[3,l,h]},
rowhead = 1, rowfoot = 0,
column{2}={font=\bfseries},
hline{1,Z}=1.2pt,
hline{2}=0.8pt,
cell{2,4,6,10,12}{1,1,1,1,1}={r=2}{m,l}
},
table head={\textbf{Meaning} & \textbf{Prefixes} & \textbf{Example}\\}
]{PfN.csv}{}{
\SetRow{\ccolor}
{\Meaning} & \Prefixes & {\Example}
}
%%% 恢复
\SetTblrTemplate{caption-text}{normal}
\end{document}效果:








问 使用tabularray宏包时,如何以合并单元格为基准设定填充色