Problem in Converting Jupyter notebook to pdf

2k views Asked by At

When I want to save Jupyter notebook as a pdf file, I receive the following error:

nbconvert failed: PDF creating failed, captured latex output:
This is XeTeX, Version 3.14159265-2.6-0.99999 (TeX Live 2018/W32TeX) (preloaded format=xelatex)
 restricted \write18 enabled.
entering extended mode
! Undefined control sequence.
<*> .\notebook
              .tex
? 
! Emergency stop.
<*> .\notebook
              .tex
No pages of output.
Transcript written on ?.
2

There are 2 answers

0
ForEverNewbie On

As an emergency solution, you can save the notebook as markdown (.md) and open it in RStudio, where you can Knit it and save it as pdf.

0
Alexander On

This is due to an unfortunate incompatibility between Windows and Unix-like systems. Jupyter creates a temporary notebook.tex document in the current directory and then calls XeTeX to compile this document.

XeTeX tries to parse the command line with roughly the following algorithm after being called:

  1. XeTeX <arg1> <arg2> ...
  2. Check if <arg1> is a .tex file,

    a) if it is a file compile it

    b) if it not a file assume this is the start of an actual document given on the command line

On Unix-like systems ./notebook.tex is parsed by XeTeX into current_directory/notebook.tex which exists and is then compiled. On Windows systems the command line because of the different directory separator is .\notebook.tex which XeTeX does not recognize as a file and therefore tries and fails to parse as a LaTeX document.

A temporary remedy (could break other things) is to change the build directory in pdf.py from nbconvert (line 66) from

writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': '.'})

to

writer = Instance("nbconvert.writers.FilesWriter", args=(), kw={'build_directory': ''})