You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Sphinx为多列长表格生成LaTeXPDF横向页面?

当然可以!这是用Sphinx生成LaTeX PDF时处理宽表格/图表的常见需求,我给你分享几种实用的实现方式:

方法1:直接嵌入LaTeX原生代码

如果你不介意rst源文件里混一点LaTeX代码,这是最直接可控的方式。利用Sphinx支持的raw指令,把表格/图表包裹在LaTeX的landscape环境里:

.. raw:: latex

    \begin{landscape}
    \begin{table}[htbp]
    \centering
    % 这里用tabular或者longtable定义你的宽表格,比如多列的情况
    \begin{tabular}{|p{1.8cm}|p{1.8cm}|p{1.8cm}|p{1.8cm}|p{1.8cm}|p{1.8cm}|p{1.8cm}|p{1.8cm}|}
    \hline
    列标题1 & 列标题2 & 列标题3 & 列标题4 & 列标题5 & 列标题6 & 列标题7 & 列标题8 \\
    \hline
    内容行1 & 内容行1 & 内容行1 & 内容行1 & 内容行1 & 内容行1 & 内容行1 & 内容行1 \\
    \hline
    内容行2 & 内容行2 & 内容行2 & 内容行2 & 内容行2 & 内容行2 & 内容行2 & 内容行2 \\
    \hline
    \end{tabular}
    \caption{多列宽表格示例}
    \end{table}
    \end{landscape}

优点:完全掌控LaTeX排版细节,适合复杂的跨页表格(可以替换成longtable环境);缺点:rst源文件里的LaTeX代码会影响其他输出格式(比如HTML),如果需要多格式输出,得做条件判断。

方法2:保持rst纯净,通过配置实现

如果你想让rst源文件保持干净,兼容HTML、PDF等多格式输出,可以给表格加自定义类,然后在Sphinx的配置文件conf.py里添加LaTeX预处理代码,自动识别宽表格并应用横向页面:

首先在rst里给表格标记类:

.. table:: 多列宽表格示例
    :class: wide-table

    +--------+--------+--------+--------+--------+--------+--------+--------+
    | 列1    | 列2    | 列3    | 列4    | 列5    | 列6    | 列7    | 列8    |
    +========+========+========+========+========+========+========+========+
    | 内容1  | 内容2  | 内容3  | 内容4  | 内容5  | 内容6  | 内容7  | 内容8  |
    +--------+--------+--------+--------+--------+--------+--------+--------+

然后在conf.py里的latex_preamble中添加以下代码(需要确保你的LaTeX环境安装了pdflscape和etoolbox包,大部分TeX发行版默认自带):

latex_preamble = r'''
\usepackage{pdflscape}
\usepackage{etoolbox}
\usepackage{ifthen}

\makeatletter
% 定义一个布尔变量标记宽表格
\newbool{@is_wide_table}
% 重定义table环境,识别wide-table类
\renewcommand{\table}[1][]{%
  \boolfalse{@is_wide_table}%
  \ifthenelse{\equal{#1}{wide-table}}{%
    \booltrue{@is_wide_table}%
  }{}%
  \originaltable[#1]%
}
% 在tabular环境开始前检查是否是宽表格,是的话启用横向
\BeforeBeginEnvironment{tabular}{%
  \ifbool{@is_wide_table}{%
    \begin{landscape}%
  }{}%
}
% 在tabular环境结束后关闭横向
\AfterEndEnvironment{tabular}{%
  \ifbool{@is_wide_table}{%
    \end{landscape}%
    \clearpage % 可选,避免后续内容排版混乱
  }{}%
}
\makeatother
'''

优点:rst源文件干净,多格式输出友好;缺点:配置稍复杂,需要对LaTeX有一点基础了解。

方法3:处理宽图表的情况

如果是宽图表(比如Matplotlib生成的可视化图),同样可以用raw指令把图表包裹在landscape环境里,或者在生成图表时调整宽高比,配合横向页面:

.. raw:: latex

    \begin{landscape}
    \begin{figure}[htbp]
    \centering
    \includegraphics[width=\linewidth]{path/to/your/wide-figure.pdf}
    \caption{宽图表示例}
    \end{figure}
    \end{landscape}

一些额外提示

  • 确保LaTeX环境安装了pdflscape包,没有的话可以用TeX Live或MikTeX的包管理器安装;
  • 如果横向页面后的内容出现排版错乱,可以在\end{landscape}后加\clearpage强制分页;
  • 对于跨页的宽表格,把tabular换成longtable环境,就能实现横向跨页的长表格了。

内容的提问来源于stack exchange,提问作者Yan Zhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:42:11