Réduire l'encombrement de LATEX_HEADER en haut de mes fichiers organisationnels

13

J'écris souvent des notes en mode org et les exporte au latex. Cependant, parce que certains documents sont complexes, je dois inclure de nombreux packages latex en haut comme ceci:

#+LATEX_HEADER: \usepackage[margin=1.15in]{geometry}
#+LATEX_HEADER: \usepackage{parskip}
#+LATEX_HEADER_EXTRA: \usepackage{graphicx}
#+LATEX_HEADER_EXTRA: \usepackage{mdframed}
#+LATEX_HEADER_EXTRA: \usepackage{needspace}
#+LATEX_HEADER_EXTRA: \usepackage{hyperref}         
#+LATEX_HEADER_EXTRA: \usepackage{titling}
#+LATEX_HEADER_EXTRA: \usepackage{enumitem}
#+LATEX_HEADER_EXTRA: \usepackage{etoolbox}                             
#+LATEX_HEADER_EXTRA: \usepackage{color}                             
#+LATEX_HEADER_EXTRA: \usepackage{underscore}...

Est-il possible de stocker toutes les commandes d'en-tête latex (\ usepackage, définitions de macros, etc.) dans un fichier tex séparé afin que je puisse juste avoir une seule ligne à inclure en haut du fichier org? Cela réduira beaucoup l'encombrement et me facilitera l'ajout de packages.

Bouddha souriant
la source

Réponses:

14

Vous pouvez utiliser un #+SETUPFILE:

Placez tous ces paramètres dans un fichier, par exemple ./setup/setupfile.org, puis incluez-les dans votre document avec

#+SETUPFILE: ./setup/setupfile.org

Dans ce fichier, vous pouvez également inclure #+OPTIONS:, #+AUTHORet même les paramètres en mémoire tampon. Ce qui est encore plus utile, c'est que si vous chargez le #+SETUPFILE:premier, vous pouvez ensuite remplacer certaines de ces configurations par des paramètres locaux.

Voir également le manuel de l' organisation sur l'exportation.

Une autre solution consiste à utiliser #+INCLUDE: "./setup/more-settings.org" src org(notez le ") qui inclut simplement le contenu du fichier comme source de l'organisation. C'est un peu plus polyvalent, car il peut y en avoir plusieurs là #+INCLUDEoù (afaik) ne peut en être qu'un #+SETUPFILE.

Enfin, pour masquer visuellement l'encombrement, vous pouvez également mettre tous ces paramètres locaux dans un tiroir (c'est-à-dire entre une ligne avec :DRAWER:et une ligne avec :END:), et simplement les masquer avec tab.

EFLS
la source
3
D'après mon expérience pratique, la solution de tiroir est le moyen le plus pratique et le plus rapide de travailler avec des en-têtes.
Dieter.Wilhelm
4

Une autre solution consiste à vérifier / personnaliser la variable org-latex-packages-alist- ajoutez-y tout ce dont vous avez besoin \usepackage{...}.

Cette variable est déclarée et utilisée par le ox-latex, donc la configuration de votre organisation doit avoir une déclaration (require 'os-latex). De cette façon, aucune ligne à ajouter aux documents de l'organisation, sauf le titre.

En ce qui concerne les macros, un endroit habituel pour stocker est le paquet yasnippet, si vous l'utilisez.

Ian
la source
3

Une solution alternative consiste à utiliser un titre non exporté pour encapsuler la configuration:

* Configuration :ignoreheading:
#+AUTHOR:   
#+STARTUP: showall
...

L'avantage de cette solution par rapport aux tiroirs est que vous pouvez facilement inclure une configuration sophistiquée, comme des blocs LaTeX

#+BEGIN_EXPORT LATEX
...
#+END_EXPORT

qui ne sont pas lus (par défaut) dans les tiroirs.

L'avantage de cette solution par rapport aux fichiers de configuration (fichier d'installation ou inclus) est que vous pouvez facilement modifier la configuration car elle est incluse dans le fichier actuel.

Enfin, si vous souhaitez que ce titre reste fermé par défaut lors de l'ouverture de votre fichier org, vous pouvez utiliser la syntaxe suivante:

* Configuration :ignoreheading:
  :PROPERTIES:
  :VISIBILITY: folded
  :END:
Lgen
la source
Je n'ai qu'un vote positif à donner - mais c'est devenu mon nouveau défaut! Toutes ces réponses doivent être intégrées dans le manuel de l'organisation en tant que meilleure pratique suggérée pour l'exportation de latex, en tant que configuration axée sur le document par rapport à la mise en place de la majeure partie de la configuration dans la configuration emacs.
glallen
1

Plutôt que d'utiliser #+SETUPFILE:selon la réponse acceptée, si vous êtes simplement intéressé par la sortie LaTeX, vous pouvez ajouter ce qui suit à la place:

#+LATEX_HEADER: \input{header.tex}

Dans header.tex(ou comme vous voulez l'appeler), vous pouvez ensuite mettre tout votre préambule LaTeX sans avoir besoin de tout un tas d' #+LATEX_HEADER:arguments. Pour être super meta, vous pouvez également avoir cette #+LATEX_HEADERoption dans votre #+SETUPFILE.

jdtonkin
la source
Modifié ma réponse en réponse à cette question.
jdtonkin