emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* [patch] new option `org-latex-default-class-options'
@ 2025-01-22 16:13 hugo
  0 siblings, 0 replies; only message in thread
From: hugo @ 2025-01-22 16:13 UTC (permalink / raw)
  To: emacs-orgmode

[-- Attachment #1: Type: text/plain, Size: 2579 bytes --]

Hi,

Attached is a patch adding a new option
`org-latex-default-class-options'. The option can be set locally (file
locally, buffer locally, etc.) to effect the options which are
interpolated in LaTeX exports by default.

This might not seem terribly useful: if you want to have
standard/common options set for a certain class (or even all classes)
just specify them in the header string in `org-latex-classes'. This is
usually sufficient, but not always.

I have recently been using the LaTeX subfiles package a lot, with org
mode. The package lets your compile multi-file projects in convenient
ways, but (in order to do this) requires that: 1. each subfile uses
the `subfile' class, 2. with the path of the master file passed as an
argument

My workflow is that I have a master file in LaTeX, which includes
various other LaTeX files (which are exports from org files) as
subfiles, thus:

,----
| /project-folder
| ├ main.tex
| ├ chapterOne
| │ ├ chapterone.org
| │ └ chapterone.tex (org export)
| ├ chapterTwo
| │ ├ chaptertwo.org
| │ └ chaptertwo.tex (org export)
| └ chapterThree
|   ├ chapterthree.org
|   └ chapterthree.tex (org export)
`----

Whenever I edit one of the org files, I re-export it, thus updating
the LaTeX subfiles source. So I need that export procedure to fulfil
both 1 and 2 (or,if it doesn't, I have to fiddle with the exported
LaTeX manually, which I don't want to).

Fulfilling 1 is easy---I just set `org-latex-default-class' to
"subfile" in .dir-locals in project-folder (and of course make sure
that "subfile" has a valid class in in `org-latex-classes').

I want to fulfil 2, but I don't want to hardcode `../main.tex', into
my `org-latex-classes', because I might have other projects where the
main file is called something else (or even recursive subfile systems
where different files are the 'main' file at different levels).

At the moment, I solve this by putting:

,----
| #+latex_class_options: [../thesis.tex]
`----

At the top of every org file, but since I do have to this for /every/
file in the hierarchy, it would be nice to get the same effect by just
setting a variable.

So: if I set the newly introduced `org-latex-default-class-options' in
.dir-locals in project-folder, I'll get the right export behaviour
every time and not have to edit the LaTeX manually, /or/ add the
header to each org file manually.

Someone seems to have shown interest in this sort of feature once
before:
<https://emacs.stackexchange.com/questions/29107/org-latex-export-set-default-options-for-documentclass>

best,

Hugo

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-ox-latex.el-new-custom-var-org-latex-default-class-o.patch --]
[-- Type: text/x-diff; name=0001-ox-latex.el-new-custom-var-org-latex-default-class-o.patch, Size: 1498 bytes --]

From 64dce3c5c77eb90e59b73c293e15b96cd275855f Mon Sep 17 00:00:00 2001
From: Hugo Heagren <hugo@heagren.com>
Date: Fri, 10 Jan 2025 13:01:28 +0000
Subject: [PATCH] ox-latex.el: new custom var `org-latex-default-class-options'

* lisp/ox-latex.el (org-latex-default-class-options): New
option.
(latex): Default to `org-latex-default-class-options'.
---
 lisp/ox-latex.el | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/lisp/ox-latex.el b/lisp/ox-latex.el
index 782be244b..b99fae1df 100644
--- a/lisp/ox-latex.el
+++ b/lisp/ox-latex.el
@@ -121,7 +121,7 @@ (org-export-define-backend 'latex
 		   (:filter-verse-block . org-latex-clean-invalid-line-breaks))
   :options-alist
   '((:latex-class "LATEX_CLASS" nil org-latex-default-class t)
-    (:latex-class-options "LATEX_CLASS_OPTIONS" nil nil t)
+    (:latex-class-options "LATEX_CLASS_OPTIONS" nil org-latex-default-class-options t)
     (:latex-header "LATEX_HEADER" nil nil newline)
     (:latex-header-extra "LATEX_HEADER_EXTRA" nil nil newline)
     (:description "DESCRIPTION" nil nil parse)
@@ -423,6 +423,12 @@ (defcustom org-latex-default-class "article"
   :group 'org-export-latex
   :type '(string :tag "LaTeX class"))
 
+(defcustom org-latex-default-class-options ""
+  "The defailt options passed to the document class."
+  :group 'org-export-latex
+  :type '(string :tag "LaTeX class")
+  :safe #'stringp)
+
 (defcustom org-latex-classes
   '(("article"
      "\\documentclass[11pt]{article}"
-- 
2.39.5


^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2025-01-22 16:31 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-01-22 16:13 [patch] new option `org-latex-default-class-options' hugo

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).