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

使用nbsphinx将ipynb转LaTeX时输出单元格无法换行被截断求助

解决nbsphinx转换Jupyter笔记本到PDF时输出单元格内容截断的问题

我之前也碰到过一模一样的问题!用nbsphinx把.ipynb文件转成LaTeX再生成PDF时,输出单元格里的长内容经常会超出页面宽度被截断,完全没法完整展示内容。给你几个亲测有效的解决办法:

方法1:全局配置自动换行的输出单元格环境

找到你的Sphinx项目中的conf.py配置文件,添加以下内容:

首先,在LaTeX的预导言里加载adjustbox包(用来调整内容宽度):

latex_elements = {
    'preamble': r'\usepackage{adjustbox}',
}

然后修改nbsphinx的输出单元格渲染模板,让它把内容放在自适应宽度的环境里:

nbsphinx_latex_output_cell = '\\begin{adjustbox}{width=\\linewidth}\\begin{verbatim}\n{content}\\end{verbatim}\\end{adjustbox}'

这样所有输出单元格的内容都会被强制调整到页面宽度,自动换行不会截断。

方法2:针对代码类输出用listings环境处理

如果你的输出主要是代码内容,用listings包来处理换行效果会更好。同样在conf.py里修改:

latex_elements = {
    'preamble': r'''
        \usepackage{listings}
        \lstset{
            breaklines=true,        % 允许换行
            breakatwhitespace=true, % 在空格处换行,避免拆分单词
            basicstyle=\ttfamily    % 保持代码字体一致
        }
    ''',
}

nbsphinx_latex_output_cell = '\\begin{lstlisting}\n{content}\\end{lstlisting}'

listings会智能识别代码行的断点,保证换行后的代码可读性。

方法3:仅针对特定单元格调整

如果只有个别单元格的内容超长,不想全局修改配置,可以给这些单元格加标签,然后针对性处理:

  1. 在Jupyter笔记本中,选中需要调整的输出单元格,打开“单元格元数据”(一般在右侧边栏),添加"tags": ["wide-output"]。
  2. 回到conf.py,添加以下自定义回调函数:
def nbsphinx_latex_output_cell_custom(cell, **kwargs):
    # 检查单元格是否有指定标签
    if 'wide-output' in cell.get('metadata', {}).get('tags', []):
        # 用adjustbox包裹内容实现自适应宽度
        return r'\begin{adjustbox}{width=\linewidth}\begin{verbatim}' + cell['outputs'][0]['text'] + r'\end{verbatim}\end{adjustbox}'
    # 其他单元格用默认处理方式
    from nbsphinx import latex_output_cell as default_output_cell
    return default_output_cell(cell, **kwargs)

nbsphinx_latex_output_cell = nbsphinx_latex_output_cell_custom

这样只有标记了wide-output的单元格会被特殊处理,其他单元格保持原样。

这些方法我都实际用过,基本能解决大部分输出截断的问题,你可以根据自己的需求选一个试试~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:03:42