latex - 使用 Sphinx 更改 Latex 表格样式

标签 latex python-sphinx pandoc pdflatex

我正在使用 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}

当然可以根据自己的喜好改变颜色。您可能需要传递一个选项,如 dvipsnamesxcolor包,然后你可以使用诸如 \rowcolor[named]{ForestGreen} 之类的东西.

enter image description here

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/

相关文章:

php - 如何从文本区域在 div 中显示 latex 代码?

latex - PStricks 和 TikZ 如何比较易于学习和 API 设计的质量?

alignment - 如何正确对齐文本并对齐? [ latex ]

graph - TikZ:包围图形的阴影区域

html - 我可以在 GitLab 上渲染 HTML 吗?

python - 如何将 python sphinx-doc 移植到 github 页面?

python - 狮身人面像添加背景图像

Docker Alpine Latext texmf-dist 样式未找到

r - 如何使用Rstudio在Rmd中的引用后插入附录?

markdown - 从 Markdown 转换为 pandoc 时的\newcommand 环境