* Understanding Publish (ox-publish.el)
@ 2024-10-13 19:25 jman
2024-10-14 8:37 ` Christian Moe
2024-10-14 10:02 ` Dr. Arne Babenhauserheide
0 siblings, 2 replies; 12+ messages in thread
From: jman @ 2024-10-13 19:25 UTC (permalink / raw)
To: Emacs orgmode
Hello,
I'm trying to learn more about the publish export option or Org mode. Specifically I am using the
function `org-latex-publish-to-pdf` to export Orgmode files into PDF.
Since this export backend is transparently using Latex, there is stuff going on behind my back that
makes it a bit difficult debugging or customizing the formatting.
My header in the Orgmode file started as simple as:
#+TITLE: Title of the document
#+OPTIONS: toc:nil date:nil author:nil
#+latex_header: \usepackage[a4paper,top=4cm,bottom=4cm]{geometry}
The Orgmode file is nothing but a long ordered list of items:
* Title
** Subtitle
(Lots of text)
** Subtlte II
* Title II
(Lots of text)
... more ...
and so on. After compiling to PDF, I learn that the default "template" (how is it called in Latex
lingo? `\documentclass`?) used by `org-latex-publish-to-pdf` does not handle content exceeding the
page length so I have to manually add some page breaks, clearly a hack:
* Title
** Subtitle
(Lots of text)
#+latex: \clearpage
** Subtlte II
#+latex: \clearpage
* Title II
(Lots of text)
... more ...
Why isn't this handled automatically for me? Is there a setting I should add in the org file? What's
the default template used by `org-latex-publish-to-pdf`?
Second issue: I want hyperlinks to other documents to not have a border. On Latex the solution seems
to use the hyperref package:
+latex_header: \usepackage[hidelinks]{hyperref}
again, compiling triggers this error:
! LaTeX Error: Option clash for package hyperref.
This error hints at some defaults I cannot see, making the document customization difficult. Where
are these defaults?
How can I get a feeling of what's happening when using this PDF publish option? I think I need a bit
of a high-level overview, hope the author David O’Toole is around for some support :-)
Ideally I'm looking into a simple way to export from Orgmode to PDF, without needing to learn Latex.
Thank you for suggestions, ideas, etc.
Best,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-13 19:25 Understanding Publish (ox-publish.el) jman
@ 2024-10-14 8:37 ` Christian Moe
2024-10-14 15:40 ` jman
2024-10-14 10:02 ` Dr. Arne Babenhauserheide
1 sibling, 1 reply; 12+ messages in thread
From: Christian Moe @ 2024-10-14 8:37 UTC (permalink / raw)
To: jman; +Cc: emacs-orgmode
Hi,
The default document class is article.
1. First issue:
Not quite sure what you mean by saying that it "does not handle content
exceeding the page length". If the problem is with placing images,
tables etc., latex does its best, and manually adding \clearpage or
\newpage as needed tends to be the way it's done.
If what you want is automatic page breaks before every section and
subsection, you can try this trick at the beginning of the document:
#+latex: \AddToHook{cmd/section/before}{\clearpage}
#+latex: \AddToHook{cmd/subsection/before}{\clearpage}
(This only kicks in after the table of contents; if you want a page break
before the ToC as well, replace #+latex with #+latex_header.)
If you have an old latex installation, the above may not work. Try this instead:
#+latex: \let\oldsection\section\renewcommand\section{\clearpage\oldsection}
#+latex: \let\oldsubsection\subsection\renewcommand\subsection{\clearpage\oldsubsection}
2. Second issue: Getting rid of link borders.
To use hidelinks without options clashing, try this:
#+latex_class_options: [hidelinks]
However, if you just want the ugly borders gone but would prefer the
links to stand out, you can instead customize the variable
org-latex-hyperref-template by adding `colorlinks=true'. You can play with
the color options as well; to get you started:
(setq org-latex-hyperref-template
"\\hypersetup{\n pdfauthor={%a},\n pdftitle={%t},\n
pdfkeywords={%k},\n pdfsubject={%d},\n pdfcreator={%c},\n
pdflang={%L},\n colorlinks=true,\n urlcolor=blue,\n linkcolor=blue\n,
citecolor=green}")
Yours,
Christian
jman <emacs-orgmode@city17.xyz> writes:
> Hello,
>
> I'm trying to learn more about the publish export option or Org mode. Specifically I am using the
> function `org-latex-publish-to-pdf` to export Orgmode files into PDF.
>
> Since this export backend is transparently using Latex, there is stuff going on behind my back that
> makes it a bit difficult debugging or customizing the formatting.
>
> My header in the Orgmode file started as simple as:
>
> #+TITLE: Title of the document
> #+OPTIONS: toc:nil date:nil author:nil
>
> #+latex_header: \usepackage[a4paper,top=4cm,bottom=4cm]{geometry}
>
> The Orgmode file is nothing but a long ordered list of items:
>
> * Title
> ** Subtitle
> (Lots of text)
> ** Subtlte II
> * Title II
> (Lots of text)
> ... more ...
>
> and so on. After compiling to PDF, I learn that the default "template" (how is it called in Latex
> lingo? `\documentclass`?) used by `org-latex-publish-to-pdf` does not handle content exceeding the
> page length so I have to manually add some page breaks, clearly a hack:
>
> * Title
> ** Subtitle
> (Lots of text)
>
> #+latex: \clearpage
> ** Subtlte II
>
> #+latex: \clearpage
> * Title II
>
> (Lots of text)
> ... more ...
>
> Why isn't this handled automatically for me? Is there a setting I should add in the org file? What's
> the default template used by `org-latex-publish-to-pdf`?
>
> Second issue: I want hyperlinks to other documents to not have a border. On Latex the solution seems
> to use the hyperref package:
>
> +latex_header: \usepackage[hidelinks]{hyperref}
>
> again, compiling triggers this error:
>
> ! LaTeX Error: Option clash for package hyperref.
>
> This error hints at some defaults I cannot see, making the document customization difficult. Where
> are these defaults?
>
> How can I get a feeling of what's happening when using this PDF publish option? I think I need a bit
> of a high-level overview, hope the author David O’Toole is around for some support :-)
>
> Ideally I'm looking into a simple way to export from Orgmode to PDF, without needing to learn Latex.
>
> Thank you for suggestions, ideas, etc.
>
> Best,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-13 19:25 Understanding Publish (ox-publish.el) jman
2024-10-14 8:37 ` Christian Moe
@ 2024-10-14 10:02 ` Dr. Arne Babenhauserheide
1 sibling, 0 replies; 12+ messages in thread
From: Dr. Arne Babenhauserheide @ 2024-10-14 10:02 UTC (permalink / raw)
To: jman; +Cc: Emacs orgmode
[-- Attachment #1: Type: text/plain, Size: 818 bytes --]
jman <emacs-orgmode@city17.xyz> writes:
> I'm trying to learn more about the publish export option or Org mode.
> Specifically I am using the function `org-latex-publish-to-pdf` to
> export Orgmode files into PDF.
>
> Since this export backend is transparently using Latex, there is stuff
> going on behind my back that makes it a bit difficult debugging or
> customizing the formatting.
As a general hint when debugging PDF export: when you hit an error, then
first export to LaTeX and convert the file to PDF with pdflatex
(following the commands defined in the variable org-latex-pdf-process).
You can then fix it directly in LaTeX-side and afterwards bring the
change into the org-mode document.
Best wishes,
Arne
--
Unpolitisch sein
heißt politisch sein,
ohne es zu merken.
draketo.de
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 1125 bytes --]
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-14 8:37 ` Christian Moe
@ 2024-10-14 15:40 ` jman
2024-10-14 18:47 ` jman
0 siblings, 1 reply; 12+ messages in thread
From: jman @ 2024-10-14 15:40 UTC (permalink / raw)
To: Christian Moe; +Cc: emacs-orgmode
Christian Moe <mail@christianmoe.com> writes:
> 1. First issue:
>
> Not quite sure what you mean by saying that it "does not handle content
> exceeding the page length". If the problem is with placing images,
> tables etc., latex does its best, and manually adding \clearpage or
> \newpage as needed tends to be the way it's done.
Hey thanks for the tips!
To be clearer about what I mean I'll provide two sample documents. I hope they're good to reproduce
the issue.
1) Compiling with ox-publish the following document produces the expected result. Text is
automatically distributed on subsequent pages
https://paste.sr.ht/~jman/06239fa6624a1af23edfbb5154f5d9dcfdf8427a
2) Compiling this other document will produce strange empty pages. The content of the ordered list
doesn't fit one page and instead of filling the next page, it will just "overflow" and "disappear":
https://paste.sr.ht/~jman/35434b0fdf08164abf6c59a413d60ea6a4d0e943
These samples are compiled with:
$ emacs --batch <file>.org --load ol-pdf.el --funcall org-publish-current-file
`ol-pdf.el` is nothing special, I think:
(require 'ol)
(require 'ox-publish)
(setq org-publish-project-alist
'(("org-to-pdf"
:base-directory "~/src"
:base-extension "org"
:publishing-directory "~/pdf"
:publishing-function org-latex-publish-to-pdf
:recursive t
:with-toc nil
:with-date nil
:with-author nil
)))
Additional info:
- I am using Emacs 29.4 (Org mode 9.6.15)
- I compile these file using the Debian/testing texlive-latex-* (2024.20240829-2) packages
(pdfTeX-1.40.26)
- I also tried compiling the PDF using `latexmk` (4.85) but the end result doesn't change
> 2. Second issue: Getting rid of link borders.
[...]
Thanks! Your suggestions gave me a few ideas to explore and this is now understood.
Best,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-14 15:40 ` jman
@ 2024-10-14 18:47 ` jman
2024-10-14 21:06 ` Christian Moe
0 siblings, 1 reply; 12+ messages in thread
From: jman @ 2024-10-14 18:47 UTC (permalink / raw)
To: Christian Moe; +Cc: emacs-orgmode
jman <emacs-orgmode@city17.xyz> writes:
> 2) Compiling this other document will produce strange empty pages. The content of the ordered list
> doesn't fit one page and instead of filling the next page, it will just "overflow" and
> "disappear":
> https://paste.sr.ht/~jman/35434b0fdf08164abf6c59a413d60ea6a4d0e943
I think the problem is that for the above file is a single ordered list and org-mode (or Latex?) for
some reason are unable to split it. For an automatic split to happen, the single list must be split.
So another hack is to add random text in between! Example:
#+TITLE: Dokument Titel
#+LATEX_HEADER: \usepackage[paper=a4paper,top=3cm,bottom=3cm]{geometry}
* Title 1
** Subtitle
*** Subsubtitle
* Title 2
** Subtitle
*** Subsubtitle
* Title 3
** Subtitle
*** Subsubtitle
This text here is only to split the ordered list.
* Title 4
** Subtitle
*** Subsubtitle
* Title 5
** Subtitle
*** Subsubtitle
This text here is only to split the ordered list.
(etc.)
Now we have multiple lists and the page split happens according to the top and bottom margins set in
the header.
I am not sure if there is a better way to work around this.
Best,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-14 18:47 ` jman
@ 2024-10-14 21:06 ` Christian Moe
2024-10-15 7:13 ` jman
2024-10-20 13:04 ` Ihor Radchenko
0 siblings, 2 replies; 12+ messages in thread
From: Christian Moe @ 2024-10-14 21:06 UTC (permalink / raw)
To: jman; +Cc: emacs-orgmode
It's due to Latex refusing to commit the typographic crime of leaving a
heading at the bottom of the page.
See:
https://tex.stackexchange.com/questions/57857/overfull-box-and-broken-pagination-with-page-that-contains-only-section-headings
(That one was also asked by an Org user -- the ease of outlining a
header structure in Org does tempt people into this situation, which one
might wish that Latex could handle with less logic and more grace.)
Note that this does /not/ happen with a list. (Try changing your long
outline from headers to a list -- you can do so quickly by including the
whole outline in the region and pressing `C-c -' -- and exporting it;
you get page breaks as expected.) So it doesn't prevent you from
exporting an outline to PDF.
Yours,
Christian
jman <emacs-orgmode@city17.xyz> writes:
> jman <emacs-orgmode@city17.xyz> writes:
>
>> 2) Compiling this other document will produce strange empty pages. The content of the ordered list
>> doesn't fit one page and instead of filling the next page, it will just "overflow" and
>> "disappear":
>> https://paste.sr.ht/~jman/35434b0fdf08164abf6c59a413d60ea6a4d0e943
>
> I think the problem is that for the above file is a single ordered list and org-mode (or Latex?) for
> some reason are unable to split it. For an automatic split to happen, the single list must be split.
>
> So another hack is to add random text in between! Example:
>
> #+TITLE: Dokument Titel
> #+LATEX_HEADER: \usepackage[paper=a4paper,top=3cm,bottom=3cm]{geometry}
>
> * Title 1
> ** Subtitle
> *** Subsubtitle
> * Title 2
> ** Subtitle
> *** Subsubtitle
> * Title 3
> ** Subtitle
> *** Subsubtitle
> This text here is only to split the ordered list.
> * Title 4
> ** Subtitle
> *** Subsubtitle
> * Title 5
> ** Subtitle
> *** Subsubtitle
> This text here is only to split the ordered list.
> (etc.)
>
> Now we have multiple lists and the page split happens according to the top and bottom margins set in
> the header.
>
> I am not sure if there is a better way to work around this.
>
> Best,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-14 21:06 ` Christian Moe
@ 2024-10-15 7:13 ` jman
2024-10-15 8:11 ` Christian Moe
2024-10-20 13:04 ` Ihor Radchenko
1 sibling, 1 reply; 12+ messages in thread
From: jman @ 2024-10-15 7:13 UTC (permalink / raw)
To: Christian Moe; +Cc: emacs-orgmode
Christian Moe <mail@christianmoe.com> writes:
> It's due to Latex refusing to commit the typographic crime of leaving a
> heading at the bottom of the page.
Wow. I had no clue something like this could happen.
> Note that this does /not/ happen with a list. (Try changing your long
> outline from headers to a list)
Interesting. A "mixed" approach like the following work too:
* Title 1
- Subtitle
- Subsubtitle
* Title 2
- Subtitle
- Subsubtitle
(etc.)
As you point out, I just need to avoid having /only/ headings.
Thank you so much for hand-holding me to fully understanding the
problem!
Cheers,
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-15 7:13 ` jman
@ 2024-10-15 8:11 ` Christian Moe
2024-10-15 11:54 ` Rens Oliemans
0 siblings, 1 reply; 12+ messages in thread
From: Christian Moe @ 2024-10-15 8:11 UTC (permalink / raw)
To: jman; +Cc: Christian Moe, emacs-orgmode
> As you point out, I just need to avoid having /only/ headings.
Or have only headings, but insert a strategic \clearpage here and there,
if you *want* the outline to have the look of headings.
> Thank you so much for hand-holding me to fully understanding the
> problem!
You're welcome!
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-15 8:11 ` Christian Moe
@ 2024-10-15 11:54 ` Rens Oliemans
0 siblings, 0 replies; 12+ messages in thread
From: Rens Oliemans @ 2024-10-15 11:54 UTC (permalink / raw)
To: Christian Moe, jman; +Cc: Christian Moe, emacs-orgmode
Christian Moe <mail@christianmoe.com> writes:
>> As you point out, I just need to avoid having /only/ headings.
>
> Or have only headings, but insert a strategic \clearpage here and there,
> if you *want* the outline to have the look of headings.
Or have only headings, but have some text in some of the sections: LaTeX is fine with
breaking after a paragraph. See:
https://paste.sr.ht/~rensoliemans/ff5bff303e02c559c53c3cd98e36b03a7d1dc00a
Which breaks and looks OK.
Best
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-14 21:06 ` Christian Moe
2024-10-15 7:13 ` jman
@ 2024-10-20 13:04 ` Ihor Radchenko
2024-10-21 7:07 ` Christian Moe
1 sibling, 1 reply; 12+ messages in thread
From: Ihor Radchenko @ 2024-10-20 13:04 UTC (permalink / raw)
To: Christian Moe; +Cc: jman, emacs-orgmode
Christian Moe <mail@christianmoe.com> writes:
> It's due to Latex refusing to commit the typographic crime of leaving a
> heading at the bottom of the page.
> ...
and is committing another typographic crime :)
I am wondering if this may somehow be addressed.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-20 13:04 ` Ihor Radchenko
@ 2024-10-21 7:07 ` Christian Moe
2024-10-26 17:38 ` Ihor Radchenko
0 siblings, 1 reply; 12+ messages in thread
From: Christian Moe @ 2024-10-21 7:07 UTC (permalink / raw)
To: Ihor Radchenko; +Cc: Christian Moe, jman, emacs-orgmode
Ihor Radchenko <yantar92@posteo.net> writes:
> Christian Moe <mail@christianmoe.com> writes:
>
>> It's due to Latex refusing to commit the typographic crime of leaving a
>> heading at the bottom of the page.
>> ...
>
> and is committing another typographic crime :)
> I am wondering if this may somehow be addressed.
Indeed. The best place to address it would be in Latex, I suppose. Kind
of surprising that it hasn't been.
I don't suppose there's any way for Org to know beforehand how much
space an empty outline will take on the PDF page.
But Org could perhaps just check the outline and insert a page break every so
often after a run of empty headers? Something like this hook:
#+BEGIN_SRC elisp
(defvar my/org-latex-pagebreak-every 20
"Number of empty (sub)headings after which to insert pagebreak.")
(defun my/org-latex-insert-pagebreaks (backend)
"Insert page breaks in an empty outline on LaTeX export.
A page break is inserted for every nth consecutive empty (sub)heading,
where n is given by `my/org-latex-pagebreak-after', to allow an
empty outline to break gracefully in PDF export."
(when (eq backend 'latex)
(let ((c 0))
(org-map-entries
(lambda ()
;; if entry is empty
(unless (string-match (org-get-entry) "[[:graph:]]")
(setq c (1+ c))
(when (= c my/org-latex-pagebreak-every)
(setq c 0) ; reset counter
(org-end-of-line)
(insert "\n\\clearpage\n"))))))))
(add-hook 'org-export-before-parsing-functions #'my/org-latex-insert-pagebreaks)
#+END_SRC
Yours,
Christian
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: Understanding Publish (ox-publish.el)
2024-10-21 7:07 ` Christian Moe
@ 2024-10-26 17:38 ` Ihor Radchenko
0 siblings, 0 replies; 12+ messages in thread
From: Ihor Radchenko @ 2024-10-26 17:38 UTC (permalink / raw)
To: Christian Moe; +Cc: jman, emacs-orgmode
Christian Moe <mail@christianmoe.com> writes:
>> and is committing another typographic crime :)
>> I am wondering if this may somehow be addressed.
>
> Indeed. The best place to address it would be in Latex, I suppose. Kind
> of surprising that it hasn't been.
That's what I was hoping for...
Maybe some low-level TeX command or something.
> I don't suppose there's any way for Org to know beforehand how much
> space an empty outline will take on the PDF page.
>
> But Org could perhaps just check the outline and insert a page break every so
> often after a run of empty headers? Something like this hook:
> ...
I suspect that it is going to be fragile. Whether your idea work or not
will depend on the documentclass, fonts, font sizes, page sizes, etc.
I am afraid that such a partial solution is not worth the hassle - it
will complicate the exporter code for questionable gain.
--
Ihor Radchenko // yantar92,
Org mode contributor,
Learn more about Org mode at <https://orgmode.org/>.
Support Org development at <https://liberapay.com/org-mode>,
or support my work at <https://liberapay.com/yantar92>
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2024-10-26 17:37 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-13 19:25 Understanding Publish (ox-publish.el) jman
2024-10-14 8:37 ` Christian Moe
2024-10-14 15:40 ` jman
2024-10-14 18:47 ` jman
2024-10-14 21:06 ` Christian Moe
2024-10-15 7:13 ` jman
2024-10-15 8:11 ` Christian Moe
2024-10-15 11:54 ` Rens Oliemans
2024-10-20 13:04 ` Ihor Radchenko
2024-10-21 7:07 ` Christian Moe
2024-10-26 17:38 ` Ihor Radchenko
2024-10-14 10:02 ` Dr. Arne Babenhauserheide
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).