emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: File generation from LaTeX src fails due to temporary PDF in wrong d


From: chris
Subject: Re: File generation from LaTeX src fails due to temporary PDF in wrong directory
Date: Thu, 30 Mar 2023 07:16:35 +0200

On Wednesday, 29 March 2023 23:15:03 CEST Christian Moe wrote:
> 
> Hi,
> 
> Pardon the noise: It turned out to be a pretty obvious problem with my
> setup that has now been resolved.
> 
> I had modified org-latex-pdf-process to use xelatex, and for some reason
> my setup lacked the =-output-directory %o= switch. I should probably
> have thought of that first, but the omission has had no ill effects on
> ordinary PDF export, so I didn't run into any problem before trying to
> use Babel with LaTeX.
> 
> Ihor and Pedro, thanks for checking.
> 
> Chris, I don't know why your attempts fail, but I'll be trying similar
> things over the next days, so maybe I'll come back to you.
> 

For one thing I don't understand 90% of the options, that can explain a lot.
Another point, the gibberish output I was speaking about are "similar" those 
of
[[https://emacs.stackexchange.com/questions/68823/minimal-working-example-of-tikz-to-svg-in-orgmode]]
Actually the svg image they get is an image containing the `tikz` instructions 
transformed as image. What I get is the svg instructions that should generate 
the image: an image showing a `svg` listing.
Anyway
You start from that:

 #+begin_src emacs-lisp
  (setq org-latex-compiler "lualatex")
#+end_src

#+name: circle
#+header: :results file drawer
#+header: :file circle.svg
#+header: :dvisvgm yes
#+header: :headers '("\\usepackage{tikz}")
#+begin_src latex
  \begin{tikzpicture}
      \fill[yellow] (0,0) circle (3cm);
    \end{tikzpicture}
#+end_src

You do C-c C-c on both blocks.
Looking at *Messages* you see there is a file

```
cat /tmp/babel-DQ59bY/latex-2whyWA.tex
\documentclass[preview]{standalone} 
\def\pgfsysdriver{pgfsys-tex4ht.def} 
\usepackage{tikz}\begin{document}\begin{tikzpicture} 
   \fill[yellow] (0,0) circle (3cm); 
 \end{tikzpicture}\end{document}
```

Among `latex`, `pdflatex`, `lualatex`, `htlatex`, the latex file can only be 
successfully processed by `htlatex`, which will produces several outputs:

```
ls *2whyWA* 
latex-2whyWA-1.svg  latex-2whyWA.4tc  latex-2whyWA.css  latex-2whyWA.html  
latex-2whyWA.lg   latex-2whyWA.tmp 
latex-2whyWA.4ct    latex-2whyWA.aux  latex-2whyWA.dvi  latex-2whyWA.idv   
latex-2whyWA.log  latex-2whyWA.xref
```
One of them is `svg` file and is correct.

I've tried replacing `(setq org-latex-compiler "lualatex")` by every possible 
latex compiler listed above.
I've also tried replacing `#+header: :dvisvgm yes` by `htlatex` and 
`inkscape`.

In every case I get the gibberish output, specifically an image of the listing 
of the svg output, or in any case something resembling to `XML`.

Something else I can do "by hand":

```
lualatex -jobname=foo <(sed '/pgfsysdriver/d' /tmp/babel-DQ59bY/
latex-2whyWA.tex); dvisvgm --pdf --output=foo.svg foo.pdf
```

then:

```
$ cat foo.svg 
<?xml version='1.0' encoding='UTF-8'?> 
<!-- This file was generated by dvisvgm 3.0.3 --> 
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://
www.w3.org/1999/xlink' width='170.079pt' height='170.079
pt' viewBox='0 -170.079 170.079 170.079'> 
<g id='page1'> 
<g transform='matrix(1 0 0 -1 0 0)'> 
<path d='M170.0781 85.039061C170.0781 132.0078 132.0078 170.0781 85.039061 
170.0781C38.0703 170.0781 0 132.0078 0 85.039061C0 38.0
703 38.0703 0 85.039061 0C132.0078 0 170.0781 38.0703 170.0781 85.039061Z' 
fill='#ff0'/> 
</g> 
</g> 
</svg> 

$ cat latex-2whyWA-1.svg  
<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>  
<?xml-stylesheet href="latex-2whyWA.css" type="text/css"?>  
<svg xmlns="http://www.w3.org/2000/svg"; xmlns:xlink="http://www.w3.org/1999/
xlink" width="170.71652pt" height="170.71652pt" viewBo
x="-85.35826 -85.35826 170.71652 170.71652 ">  
<g transform="translate(0, 85.35826 ) scale(1,-1) translate(0,85.35826 )">  
                             <g stroke="#000" fill="#000"> 
<g stroke-width="0.4"> 
<g stroke="#ff0" fill="#ff0"> 
<path d=" M 0.0 0.0 M 85.35826 0.0 C 85.35826 47.14267 47.14267 85.35826 0.0 
85.35826 C -47.14267 85.35826 -85.35826 47.14267 -85
.35826 0.0 C -85.35826 -47.14267 -47.14267 -85.35826 0.0 -85.35826 C 47.14267 
-85.35826 85.35826 -47.14267 85.35826 0.0 Z M 0.0 0.
0  " stroke="none"/> 
</g> 
</g> 
</g> 
 
                                                  </g>  
</svg> 
```

I got that last trick from [[https://en.wikipedia.org/wiki/
Wikipedia:Graphics_Lab/Resources/PDF_conversion_to_SVG]]

We can see both files have the exact same size, `foo.svg` is 548 bytes, 
`latex-2whyWA-1.svg` is 855 bytes.

`foo.svg` is superior in that it uses `utf-8` encoding, which is superior.

bitmaps outputs for `tikz` are not nice.

So two ways to do it by hand, and it would be nice to have it doing it 
automatically.

Wikipedia says `inkscape` method can yield heavy results, and indeed I had to 
install `potrace`.

They say in the stackexchange page that `pdflatex+inkscape` is the default 
method, so even it didn't work at all, I followed the instruction it gave me 
to first install `inkscape` and then install `potrace`.

What I like best is:

```
lualatex -jobname=foo <(sed '/pgfsysdriver/d' /tmp/babel-DQ59bY/
latex-2whyWA.tex); dvisvgm --pdf --output=foo.svg foo.pdf
```

It would be easier if second line `\def\pgfsysdriver{pgfsys-tex4ht.def}` was 
not inserted in the first place.

I think the way plain `org-latex-preview`, which work for me, are generated is 
through `latex + dvisvgm` and I think that in this case the above 
`\def\pgfsysdriver{pgfsys-tex4ht.def}` isn't used neither.

Using "old" `latex` can be troublesome in some cases though, namely everytime 
somebody is trying to use some `utf-8`.

Best,
Chris



> Yours,
> Christian
> 
> 
> chris writes:
> 
> > On Wednesday, 29 March 2023 10:00:35 CEST Pedro Andres Aranda Gutierrez 
wrote:
> >> On Tue, 28 Mar 2023 10:04:24 +0200, Christian Moe <mail@christianmoe.com> 
wrote
> >> Hi,
> >>
> >> > I'm trying and failing to export images from TikZ code, apparently
> >> > because the temporary PDF is misplaced. Here is a minimal example just
> >> > exporting the PDF:
> >>
> >> > #+LATEX_HEADER: \usepackage{tikz}
> >> >
> >> > #+header: :fit yes
> >> > #+begin_src latex :exports results :file ./test-tikz-triangle.png
> >> > \begin{tikzpicture}             %
> >> > \draw[draw=black, fill=blue!10] (0,4) -- (3,0) -- (-3,0) -- cycle;
> >> > \end{tikzpicture}
> >> > #+end_src
> >>
> >> > Execution fails with an error message like this:
> >> >
> >> > org-compile-file: File "/tmp/babel-Tay2kl/latex-IJVI84.pdf" wasn’t
> >> > produced.  See "*Org PDF LaTeX Output*" for details
> >>
> >> Hi Christian,
> >> trying to reproduce this on a master (emacs30.0.50) on Ubuntu. To make it 
really
> >> lightweight, I'm starting with
> >> emacs -Q
> >> but unfortunately, I'm not able to reproduce it here :(
> >
> > Hi, I've been trying to have a similar example working for hours, 
specifically I was trying to follow https://orgmode.org/worg/org-contrib/babel/
languages/ob-doc-LaTeX.html[1]
> >
> > Could you provide more context because if I run emacs -Q here, with the 
example provided by OP, and type C-c C-c, I just get "no org-babel execute 
function for latex!".
> > So I guess it might have required a little more work than what I've just 
described.
> >
> > Here is the setting I've used:
> >
> > This in my dot-emacs.org file:
> > #+begin_src emacs-lisp
> >   (with-eval-after-load 'org
> >       (add-to-list 'org-latex-packages-alist '("" "stmaryrd" t))
> >       (add-to-list 'org-latex-packages-alist '("" "tikz-cd" t))
> >       (add-to-list 'org-latex-packages-alist '("" "amscd" t))
> >       (add-to-list 'org-latex-packages-alist '("" "mathtools" t))
> >       (add-to-list 'org-latex-packages-alist '("" "unicode-math" t))
> >       ;; (add-to-list 'org-latex-packages-alist '("" "breqn" t))
> >       (add-to-list 'org-latex-packages-alist '("" "thisisastupidtestfile" 
t))
> >       (setq org-latex-create-formula-image-program 'dvisvgm) ;; probably 
only this line is relevant with the matter at hand
> >       (setq org-format-latex-options
> >             (plist-put org-format-latex-options :scale 0.80)))
> > #+end_src
> >
> > With this, when I put the following in some org file and type C-c C-x C-l I 
immediately get a org-latex-preview of the tikz snippet:
> > \begin{tikzpicture}             %
> >   \draw[->] (-3,0) -- (-2,0) arc[radius=0.5cm,start angle=-180,end 
angle=0]
> >   (-1,0) -- (1,0) arc[radius=0.5cm,start angle=180,end angle=0] (2,0) -- 
(3,0);
> >   \filldraw (-1.5,0) circle[radius=1mm];
> >   \filldraw (1.5,0) circle[radius=1mm];
> > \end{tikzpicture}
> >
> > Now If I use the following and type C-c C-c, I never get anything in 
multiple ways:
> > Note that I've also tried with imagemagick...
> > #+name: test_plot_png
> > #+header: :exports results :file test.svg
> > #+header: :dvisvgm yes
> > #+header: :fit yes :noweb yes :headers '("\\usepackage{tikz}")
> > #+begin_src latex :file test.svg
> >   \begin{tikzpicture}             %
> >     \draw[->] (-3,0) -- (-2,0) arc[radius=0.5cm,start angle=-180,end 
angle=0]
> >     (-1,0) -- (1,0) arc[radius=0.5cm,start angle=180,end angle=0] (2,0) -- 
(3,0);
> >     \filldraw (-1.5,0) circle[radius=1mm];
> >     \filldraw (1.5,0) circle[radius=1mm];
> >   \end{tikzpicture}
> > #+end_src
> >
> > Many times a pdf is generated in the /tmp/ directory but that pdf is 
gibberish. When I go from the latex file to the pdf using pdflatex, only 
gibberish pdf is generated, no relation with the image that should be 
generated.
> > If instead I use lualatex, the pdf is correctly generated.
> > Anyway, I've been experimenting for hours, and I have no idea how to have 
the thing working.
> >
> > I also used that code someone gave me:
> > #+begin_src emacs-lisp
> >   (set-variable 'org-preview-latex-process-alist
> >                     '((dvipng :programs ; Was here originally.
> >                               ("latex" "dvipng")
> >                               :description "dvi > png" :message "you need 
to install the programs: latex and dvipng." :image-input-type "dvi" :image-
output-type "png" :image-size-adjust
> >                               (1.0 . 1.0)
> >                               :latex-compiler
> >                               ("latex -interaction nonstopmode -output-
directory %o %f")
> >                               :image-converter
> >                               ("dvipng -D %D -T tight -o %O %f"))
> >                       (dvisvgm :programs ; Was here originally.
> >                                ("latex" "dvisvgm")
> >                                :description "dvi > svg" :message "you need 
to install the programs: latex and dvisvgm." :image-input-type "dvi" :image-
output-type "svg" :image-size-adjust
> >                                (1.7 . 1.5)
> >                                :latex-compiler
> >                                ("latex -interaction nonstopmode -output-
directory %o %f")
> >                                :image-converter
> >                                ("dvisvgm %f -n -b min -c %S -o %O"))
> >                       (imagemagick :programs ; The recommended "new" way.
> >                                    ("latex" "convert")
> >                                    :description "pdf > png" :message "you 
need to install the programs: latex and imagemagick." :image-input-type "pdf" 
:image-output-type "png" :image-size-adjust
> >                                    (1.0 . 1.0)
> >                                    :latex-compiler
> >                                    ("lualatex -interaction nonstopmode -
output-directory %o %f")
> >                                    :image-converter
> >                                    ("convert -density %D -trim -antialias 
%f -quality 100 %O"))))
> > #+end_src
> >
> > No luck at all there neither.
> >
> > BTW, when I do C-c C-c on the OP example, after having evaluated
> > #+begin_src emacs-lisp
> >   (org-babel-do-load-languages
> >    'org-babel-load-languages
> >    '((latex . t)))
> > #+end_src
> >
> > No pdf, no output, only an empty latex file generated in /tmp
> >
> >
> > Bottom line, I'd really like to know how this hole thing is supposed to 
work.
> > org-preview latex working perfectly fine though.
> >
> > Note: The reason I want to have this working is that I want to export to 
html. Plain latex formula are displayed very very well using mathjax. But TiKz 
things are not working.
> > So even though I've got a near wysiwyg in emacs, I can't have that 
exported to html.
> > What I'd like to have is plain latex formulas exported to mathjax and tikz 
diagrams exported using the SVG image.
> > Initially my setting wasn't even using imagemagick, only dvisvgm.
> >
> > Also it seems we have three ways to do the exact same thing:
> > org-latex-preview which works perfectly with minimal effort on my box,
> > the C-c C-c thing,
> > and the org-html-export-to-html thing.
> > Each using independent workflow. Though probably not completely independent 
though.
> >
> > My emacs is master from a month ago.
> >
> > Cheers,
> > Chris
> >
> >
> >
> >>
> >> My emacs:
> >>
> >> GNU Emacs 30.0.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.33,
> >>  cairo version 1.16.0) of 2023-03-26
> >>
> >> Would you please try again, calling with emacs -Q and giving a couple
> >> clues more of your process to confirm... It may be that I'm too modern
> >> ;-)
> >>
> >> Thx, /Pedro A.
> >>
> >>
> >
> >
> >
> > --------
> > [1] https://orgmode.org/worg/org-contrib/babel/languages/ob-doc-LaTeX.html
> 







reply via email to

[Prev in Thread] Current Thread [Next in Thread]