'Missing $ inserted' 使用 nbconvert 将 jupyter notebook 转换为 pdf 时出现错误消息
'Missing $ inserted' error message when converting jupyter notebook to pdf with nbconvert
尝试使用以下命令将 jupyter notebook 转换为 pdf 时:
jupyter nbconvert --to pdf "Search and Other Content Finding Features.ipynb"
我收到一条错误消息:
! Missing $ inserted.
<inserted text>
$
l.380 ... Other Content Finding Features_10_0.png}
?
! Emergency stop.
<inserted text>
$
l.380 ... Other Content Finding Features_10_0.png}
我发现了一些关于那是什么的讨论 here。
但是,我在我的代码中找不到这些字符。会不会是其他原因?
这种情况下的问题似乎是由我笔记本的文件名引起的。我不完全理解导致问题的原因,但上面的错误消息包含对某些文本的引用:
... Other Content Finding Features_10_0.png}
。
该文本包含可能导致此错误的 _
。我认为发生的情况是,在转换脚本的某处,如果文件名中有空格,则会生成一个带有下划线的文件,如图所示,然后触发错误。 (这对我来说有点像一个错误,或者至少是一个弱点)。
对我有用的修复方法只是更改 jupyter notebook 的文件名,使其不包含任何空格。然后转换运行顺利
对我来说,这是另一个相关问题:下划线。我假设原因是标记为原始文本的单元格中的文本将直接传递给 LaTeX,在那里它可以被解释为 LaTeX 代码本身。也许你的人物名字中的下划线?
- 在某些时候,我有一个带有三个下划线
___
的原始单元格,然后导致转换中断。临时解决方案是将单元格转换为降价,而不是原始(而不是 运行 它)出现在 pdf 中。
为了找出错误,我使用了以下转换 (:
jupyter nbconvert thenotebook.ipynb --to latex
- 另一个相关错误是由 link 包含下划线引起的:
[text](https://en.wikipedia.org/wiki/Python_(programming_language))
这也是在原始文本单元格中,我将其转换为 markdown 以生成 pdf。不过,格式(颜色,links)不同。
- 最后说明:我的文件名也包含空格,但这根本不是问题!
对我来说,这是由 LaTeX 和 MathJax 之间的显着差异引起的。例如 cases
环境可以使用 MathJax 在数学模式之外呈现,这是 jupyter notebook 的默认选择。但是,它会导致在 LaTeX 中显示 "missing $
insert" 的错误。更正 Markdown 单元格中的语法后错误消息消失。
一个非常常见的陷阱可能如下:
nbconvert 使用的 pandoc 扩展 tex_math_dollars 中不允许前导或尾随空格。
这意味着,这行不通:
$ \epsilon \gt 0 $
我们看到错误信息:
! Missing $ inserted.
<inserted text>
$
l.364 $ \epsilon
\gt 0 $
?
! Emergency stop.
<inserted text>
$
l.364 $ \epsilon
\gt 0 $
No pages of output.
Transcript written on notebook.log.
没有空格的正确公式工作正常:
$\epsilon \gt 0$
这似乎是 bug in Jupyter nbconvert。
pandoc 文档表明,对于 pandoc,这是设计允许使用没有转义序列的美元符号:
Anything between two $ characters will be treated as TeX math. The
opening $ must have a non-space character immediately to its right,
while the closing $ must have a non-space character immediately to its
left, and must not be followed immediately by a digit. Thus, ,000
and ,000 won’t parse as math. If for some reason you need to
enclose text in literal $ characters, backslash-escape them and they
won’t be treated as math delimiters.
尝试使用以下命令将 jupyter notebook 转换为 pdf 时:
jupyter nbconvert --to pdf "Search and Other Content Finding Features.ipynb"
我收到一条错误消息:
! Missing $ inserted.
<inserted text>
$
l.380 ... Other Content Finding Features_10_0.png}
?
! Emergency stop.
<inserted text>
$
l.380 ... Other Content Finding Features_10_0.png}
我发现了一些关于那是什么的讨论 here。
但是,我在我的代码中找不到这些字符。会不会是其他原因?
这种情况下的问题似乎是由我笔记本的文件名引起的。我不完全理解导致问题的原因,但上面的错误消息包含对某些文本的引用:
... Other Content Finding Features_10_0.png}
。
该文本包含可能导致此错误的 _
。我认为发生的情况是,在转换脚本的某处,如果文件名中有空格,则会生成一个带有下划线的文件,如图所示,然后触发错误。 (这对我来说有点像一个错误,或者至少是一个弱点)。
对我有用的修复方法只是更改 jupyter notebook 的文件名,使其不包含任何空格。然后转换运行顺利
对我来说,这是另一个相关问题:下划线。我假设原因是标记为原始文本的单元格中的文本将直接传递给 LaTeX,在那里它可以被解释为 LaTeX 代码本身。也许你的人物名字中的下划线?
- 在某些时候,我有一个带有三个下划线
___
的原始单元格,然后导致转换中断。临时解决方案是将单元格转换为降价,而不是原始(而不是 运行 它)出现在 pdf 中。
为了找出错误,我使用了以下转换 (
jupyter nbconvert thenotebook.ipynb --to latex
- 另一个相关错误是由 link 包含下划线引起的:
[text](https://en.wikipedia.org/wiki/Python_(programming_language))
这也是在原始文本单元格中,我将其转换为 markdown 以生成 pdf。不过,格式(颜色,links)不同。
- 最后说明:我的文件名也包含空格,但这根本不是问题!
对我来说,这是由 LaTeX 和 MathJax 之间的显着差异引起的。例如 cases
环境可以使用 MathJax 在数学模式之外呈现,这是 jupyter notebook 的默认选择。但是,它会导致在 LaTeX 中显示 "missing $
insert" 的错误。更正 Markdown 单元格中的语法后错误消息消失。
一个非常常见的陷阱可能如下:
nbconvert 使用的 pandoc 扩展 tex_math_dollars 中不允许前导或尾随空格。
这意味着,这行不通:
$ \epsilon \gt 0 $
我们看到错误信息:
! Missing $ inserted.
<inserted text>
$
l.364 $ \epsilon
\gt 0 $
?
! Emergency stop.
<inserted text>
$
l.364 $ \epsilon
\gt 0 $
No pages of output.
Transcript written on notebook.log.
没有空格的正确公式工作正常:
$\epsilon \gt 0$
这似乎是 bug in Jupyter nbconvert。
pandoc 文档表明,对于 pandoc,这是设计允许使用没有转义序列的美元符号:
Anything between two $ characters will be treated as TeX math. The opening $ must have a non-space character immediately to its right, while the closing $ must have a non-space character immediately to its left, and must not be followed immediately by a digit. Thus, ,000 and ,000 won’t parse as math. If for some reason you need to enclose text in literal $ characters, backslash-escape them and they won’t be treated as math delimiters.