我正在使用 sphinx
生成我们公司的手册。在我们的传统手册中,我们有某种表格样式,我们希望保留这种样式。
表格样式由具有深绿色背景的表头组成,然后是几行浅绿色背景行,然后是几行白色背景。Sphinx
生成我的 LaTeX 输入文件,然后使用 PdfLatex 将其制作为 PDF。有可能在 LaTeX 表以 :raw-role:
开头之前包含 LaTeX 特定注释。 .
输入 RST 文件:
.. role:: raw-role(raw)
:format: latex
:raw-role:`\firstRow`
=== === ===
A B C
=== === ===
1A 1B 1C
2A 2B 2C
3A 3B 3C
4A 4B 4C
=== === ===
将转化为:
\firstRow
\noindent\begin{tabulary}{\linewidth}{|L|L|L|}
\hline
\sphinxstylethead{\relax
A
\unskip}\relax &\sphinxstylethead{\relax
B
\unskip}\relax &\sphinxstylethead{\relax
C
\unskip}\relax \\
\hline
1A
&
1B
&
1C
\\
\hline
2A
&
2B
&
2C
\\
\hline
3A
&
3B
&
3C
\\
\hline
4A
&
4B
&
4C
\\
\hline\end{tabulary}
我现在需要一个名为
\firstRow
的命令修改 \tabulary
的行为环境,以便标题具有深绿色背景,下面的第一行具有浅绿色背景,其余行具有白色背景。如果其他一切都失败了,仍然有可能使用像
pandoc
这样的工具自动替换 RST 文件中单元格的内容。 .例如,可以替换
1A
来自 :raw-role:'\background{green}' 1A
在 RST 文件中,然后使用 sphinx
对其进行转换.我发现有趣的是,在狮身人面像的情况下
HTML
通过使用调整后的 style.css
可以很容易地解决目标问题。包含类 firstRow
以及类似 .. rst-class:: firstRow
的命令,其中 firstRow
代表一种带有浅绿色背景的表格样式。不幸的是,LaTeX 目标遗漏了类似于
style.css
的内容。 .
最佳答案
一般来说,LaTeX 不像 HTML+CSS 那样可定制。
可能有一些包提供了方便的界面来为表格的前两行着色,不幸的是,我不知道有一个可以与像 \firstRow
这样的宏一起使用的包。 table 前。 xcolor
包提供(如果加载了选项表)一个 \rowcolors
命令,但似乎还不够。通过手动标记 LaTeX 源代码很容易获得所需的目标,但仅使用 \firstRow
实现这一目标要复杂得多。宏。
我最终采用了一种复杂的方法,我在 Sphinx 1.5.3 上对其进行了测试。
在 conf.py
:
latex_elements = {
'preamble': r"""
\usepackage{colortbl}
\protected\def\sphinxstylethead {\cellcolor{green}\textsf}
"""
}
编辑:从 Sphinx 1.6 开始,
\sphinxstylethead
已弃用和 \sphinxstyletheadfamily
should be used instead .这意味着上面的内容现在应该是:latex_elements = {
'preamble': r"""
\usepackage{colortbl}
\protected\def\sphinxstyletheadfamily {\cellcolor{green}\sffamily}
"""
}
前一个版本适用于 Sphinx 1.6,但会在
\sphinxstylethead
时使用 1.7 失败。 Sphinx 将停止使用。在其余资源中,类似这样:
====== === ===
A B C
====== === ===
|x| 1A 1B 1C
2A 2B 2C
3A 3B 3C
4A 4B 4C
====== === ===
.. |x| raw:: latex
\rowcolor{blue}
当然可以根据自己的喜好改变颜色。您可能需要传递一个选项,如
dvipsnames
至 xcolor
包,然后你可以使用诸如 \rowcolor[named]{ForestGreen}
之类的东西.Sphinx 1.6 将有表格模板,允许一些更容易的自定义,但这仍然是一个 looooong 的方式,可以在 HTML+CSS 中完成。
为了完整起见,这里是如何通过
dvipsnames
选项 xcolor
:latex_elements = {
'passoptionstopackages': '\\PassOptionsToPackage{dvipsnames}{xcolor}',
'preamble': r"""
\usepackage{colortbl}
% for Sphinx 1.5.x (1.6 ok, but 1.7 not):
\protected\def\sphinxstylethead {\cellcolor{Aquamarine}\textsf}
% better to use rather this with Sphinx 1.6 and mandatory if Sphinx 1.7:
% \protected\def\sphinxstyletheadfamily {\cellcolor{Aquamarine}\sffamily}
""",
}
另外,
[named]
我上面提到的( \rowcolor[named]{ForestGreen}
)不需要 xcolor
而我在 'preamble'
中没有使用过它在这里配置。只有
color
时才需要使用包,但 Sphinx 使用 xcolor
如果可供使用的话。加载中
colortbl
如果也通过选项 table
则不需要至 xcolor
,如果需要使用 xcolor
,也许是更好的方法的 \rowcolors
出现在后期。网格表中的合并单元格会导致一些棘手的问题,Sphinx 1.6 在这方面将比当前好得多,但是在当前的开发状态下,合并单元格(多行、多列或两者)被设置为简单地忽略表格颜色命令。
关于latex - 使用 Sphinx 更改 Latex 表格样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42949129/