如何修改Sphinx的latex_preamble实现LaTeX表格所有行等高?
如何修改Sphinx的latex_preamble实现LaTeX表格所有行等高?
嘿,我来帮你搞定这个表格行高不一致的麻烦!你说在Sphinx生成的LaTeX表格里,像Table 2那样首尾行明显比其他行多了额外空白,之前试的配置只能统一加高行高,却没法让所有行严格等高对吧?
其实问题大概率出在LaTeX表格默认的行间距参数,还有可能你用了booktabs这类宏包带来的额外间距。下面给你两个亲测有效的方法,直接加到Sphinx的latex_preamble里就行:
方法一:全局调整表格环境参数
直接在conf.py的latex_elements里修改preamble,通过etoolbox钩子tabular环境,重置所有影响行高的参数:
latex_elements = { "preamble": r""" \usepackage{etoolbox} \usepackage{booktabs} % 如果你的表格用了booktabs宏包的话 \AtBeginEnvironment{tabular}{ % 统一行高缩放比例,1.2是比较适中的数值,可按需调整 \renewcommand{\arraystretch}{1.2} % 消除单元格上下的额外空白 \setlength{\extrarowheight}{0pt} % 如果用了booktabs,去掉表格线上下的多余间距 \setlength{\belowrulesep}{0pt} \setlength{\aboverulesep}{0pt} } """ }
这个方法能从全局层面让tabular环境的所有行基于统一的基准高度渲染,从根源上解决首尾行或部分行额外留白的问题。
方法二:自定义固定高度的单元格
如果方法一还达不到你要的绝对等高,可以自定义一个固定高度的单元格命令,让每个单元格都被包裹在统一高度的“容器”里:
latex_elements = { "preamble": r""" \usepackage{array} \usepackage{etoolbox} % 定义一个固定高度的单元格,2em是行高,可自行修改数值 \newcommand{\equalCell}[1]{\parbox[c][2em][c]{\linewidth}{#1}} % 全局给tabular的列自动应用这个命令,这里以左对齐列l为例,c/r列同理 \AtBeginEnvironment{tabular}{ \renewcommand{\arraystretch}{1} % 这里把缩放设为1,因为已经靠parbox固定高度了 \setlength{\extrarowheight}{0pt} % 重定义左对齐列,自动套用等高单元格命令 \let\oldl\l \renewcommand{\l}{>{\equalCell\bgroup}\oldl<{\egroup}} } """ }
这个方法能确保不管单元格内容多少(只要不超出容器高度),行高都会完全一致,适合对行高一致性要求极高的场景。
对了,要是你之前用etoolbox没生效,多半是钩子的环境名写错了,一定要写\AtBeginEnvironment{tabular},别加多余字符;如果你的表格用的是longtable这类长表格环境,把钩子的环境名改成longtable就行。
备注:内容来源于stack exchange,提问作者Simon1
相关产品推荐
相关产品推荐

