Syntax highlighting in LaTeX export in org-mode: specifying outputdir option for minted package

When you do LaTeX export in org-mode, you can get syntax highlighting in pdf output using minted package, which uses pygments. You can add the following in your init file:

(require 'ox-latex)
(add-to-list 'org-latex-packages-alist '("" "minted"))
(setq org-latex-listings 'minted)

(setq org-latex-pdf-process
      '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
        "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
        "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))

The problem with this is that if you want to export the document to a output directory, (e.g., using :EXPORT_FILE_NAME: ./Output/File_Name property), then you will get the following error:

! Package minted Error: Missing Pygments output; \inputminted was
probably given a file that does not exist--otherwise, you may need
the outputdir package option, or may be using an incompatible build tool.

because minted does not know where to find the intermediate file.

My solution is first commenting out the minted package part:

(require 'ox-latex)
;(add-to-list 'org-latex-packages-alist '("" "minted"))
(setq org-latex-listings 'minted)

(setq org-latex-pdf-process
      '("pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
        "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"
        "pdflatex -shell-escape -interaction nonstopmode -output-directory %o %f"))

and then manually load minted package with specifying outputdir option in the org file:

* Test
:PROPERTIES:
:EXPORT_FILE_NAME: Output/File_Name
:EXPORT_LATEX_HEADER+: \usepackage[outputdir=Output]{minted}
:END:

and it should work.

Last, if you want to highlight ipython block, you can add the following to your init file:

(add-to-list 'org-latex-minted-langs '(ipython "python"))

Comments

Comments powered by Disqus