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

Python调用latex2pdf出现NameError: name 'unicode' is not defined报错如何解决

问题根因
  • 报错的直接原因是你使用的tex库为Python2专属的老旧版本,Python2中的unicode类型在Python3中已被废弃移除,Python3的默认str类型本身就是Unicode编码,因此库源码中assert isinstance(tex_source, unicode)逻辑会触发NameError。
  • 你的调用代码也存在语法错误:latex2pdf入参额外包裹了一层字符串格式的str()调用,实际传入的是包含str(前缀的非法LaTeX文本,即使库版本兼容也无法正常完成转换。
解决方案

推荐直接更换适配Python3的转换方案,无需适配老旧Python2库:

方案1:调用本地LaTeX发行版编译(稳定性最高)

前提:本地已安装TeX Live、MiKTeX等LaTeX发行版,且pdflatex命令已加入系统环境变量。

import subprocess
import os

# 编写合法LaTeX内容,用前缀r避免转义字符异常
latex_content = r'''
\documentclass{article}
\begin{document}
Hello Palo Alto!
\end{document}
'''

# 写入临时tex文件
with open("temp.tex", "w", encoding="utf-8") as f:
    f.write(latex_content)

# 调用pdflatex编译,非交互模式避免出错卡住
subprocess.run(
    ["pdflatex", "-interaction=nonstopmode", "temp.tex"],
    check=True,
    capture_output=True
)

# 可选:清理编译产生的辅助文件
for suffix in [".aux", ".log", ".tex"]:
    if os.path.exists(f"temp{suffix}"):
        os.remove(f"temp{suffix}")

编译完成后即可得到输出文件temp.pdf。

方案2:使用Python3适配的latex2pdf库

先安装对应库:
pip install latex2pdf
调用代码:

from latex2pdf import latex2pdf

latex_content = r'''
\documentclass{article}
\begin{document}
Hello Palo Alto!
\end{document}
'''

# 直接传入LaTeX字符串即可,无需额外嵌套str或多余引号
pdf_content = latex2pdf(latex_content)

# 保存为本地PDF文件
with open("output.pdf", "wb") as f:
    f.write(pdf_content)

内容的提问来源于stack exchange,提问作者Владимир Кузовкин

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 22:42:02