ES-TEX Archivos

Usuarios hispanohablantes de TeX

ES-TEX@LISTSERV.REDIRIS.ES

Opciones: Vista Forum

Use Monospaced Font
Por defecto enseñar Text Part
Mostrar todas las cabeceras de correo

Mensaje: [<< Primero] [< Prev] [Siguiente >] [Último >>]
Tema: [<< Primero] [< Prev] [Siguiente >] [Último >>]
Autor: [<< Primero] [< Prev] [Siguiente >] [Último >>]

Print Responder
Subject:
Emisor:
Juan Manuel Macías <[log in para visualizar]>
Reply To:
Usuarios hispanohablantes de TeX <[log in para visualizar]>
Fecha:
Fri, 6 Aug 2021 18:07:39 +0000
Content-Type:
multipart/alternative
Parts/Attachments:
text/plain (10 kB)
<p> [por error mío se me habían perdido las partes con los ejemplos en
el correo anterior. Esta es la versión buena. Perdonad el lío].
</p>

<p>
Estos días he recibido algunas consultas sobre cómo preparar el preámbulo de LaTeX cuando
se trabaja desde Org-Mode. Bueno, como lo de mi prometido tutorial aún tardará algo (no
creo que lo pueda tener acabado hasta el otoño), y como ahora tenemos algún hueco libre,
vamos a adelantar esta cuestión del preámbulo aquí, por si queréis ir trasteando con ello,
a modo de chuleta. Intentaremos ser concisos y prácticos, aunque me temo que me voy a
extender algo. Mando este correo formateado en HTML para que se vean bien los ejemplos,
espero que no haya problemas de visualización&#x2026;
</p>

<p>
En primer lugar, un documento de Org no tiene nada parecido a un preámbulo ni a un
begin/end{document}. Lo que tiene son datos y metadatos. Los primeros es el contenido
textual en sí, agrupado en nodos (árboles y sub-arboles, aunque se puede añadir texto sin
que dependa de un nodo). Los metadatos pueden ponerse en cualquier parte del documento,
incluso mezclados entre el texto: no hay ninguna norma de ubicación, aunque sí ciertas
buenas prácticas, como la de colocar las directivas TITLE y AUTHOR al principio del
documento, junto con las opciones generales de exportación (los valores de la directiva
OPTIONS), el idioma principal del documento, y algunas cosas más. Pero no es más que una
costumbre: si todo eso va al final no pasa nada. También, cuando hay una gran cantidad de
metadatos para el documento, suele ser útil y ordenado agrupar todo ese material en un
nodo o árbol no exportable. Yo lo suelo poner al final, y suelo llamar a esa sección
&laquo;Configuración&raquo;. Para que no se exporte, basta con añadirle una etiqueta &laquo;noexport&raquo; (las
etiquetas se añaden haciendo C-c C-c con el cursor sobre el título de la sección).
</p>

<p>
Bien, dicho esto, hay que recordar que Org Mode construye de fábrica un preámbulo ya
definido, cargando él por su cuenta una serie de paquetes. La razón de que Org tome estas
decisiones de oficio es por asegurar siempre una salida en PDF sin necesidad de que el
usuario de Org tenga algún conocimiento de LaTeX. Naturalmente, eso no es lo que
pretendemos aquí, ya que queremos tener todo el control y no dejar a Org que tome
decisiones respecto al preámbulo. Si lo que queremos es partir de cero, tenemos que
configurar estas tres variables en nuestro archivo de inicio como <code>nil</code>:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(<span style="color: #0000FF;">setq</span> org-latex-default-packages-alist nil)
(<span style="color: #0000FF;">setq</span> org-latex-packages-alist nil)
(<span style="color: #0000FF;">setq</span> org-latex-hyperref-template nil)
</pre>
</div>

<p>
Y ahora vamos con nuestro preámbulo. La forma más de bajo nivel que tenemos en Org para
añadir líneas al preámbulo cuando la salida es a LaTeX es mediante la directiva
<code>#+LaTeX_Header:</code>. Por ejemplo:
</p>

<div class="org-src-container">
<pre class="src src-org"><span style="color: #008ED1; background-color: #EAEAFF;">#+LaTeX_Header: \usepackage{enumitem}</span>
</pre>
</div>

<p>
¿Cuál es el problema de hacerlo así? Las directivas (keywords) de Org están orientadas a
la línea única y no al párrafo, de modo que si nuestro preámbulo tiene muchas líneas,
debemos poner un <code>#+LaTeX_Header:</code> ante cada una de ellas, lo cual no es muy productivo.
Un forma muy simple de puentear esto es mediante las funcionalidades de programación
literaria que tiene Org, especialmente el argumento de cabecera <code>noweb</code> de un bloque
código, que permite enlazar el contenido de varios bloques. Primero crearíamos un bloque
LaTeX, no exportable, que llamaríamos, por ejemplo, &laquo;preambulo&raquo;, y allí meteríamos todo el
contenido de nuestro preámbulo para el documento. La ventaja de utilizar bloques código es
que podemos entrar en el correspondiente modo del lenguaje del bloque, en este caso el
LaTeX-mode, haciendo <code>C-c '</code> (<code>org-edit-special</code>):
</p>

<div class="org-src-container">
<pre class="src src-org"><span style="color: #008ED1; background-color: #EAEAFF;">#+NAME: preambulo</span>
<span style="color: #555555; background-color: #E2E1D5;">#+begin_src latex :exports none</span>
<span style="color: #000088; background-color: #FFFFE0;">aqu&#237; meter&#237;amos todo el pre&#225;mbulo...</span>
<span style="color: #555555; background-color: #E2E1D5;">#+end_src</span>
</pre>
</div>

<p>
Y luego lo enlazamos a otro bloque LaTeX más simple, con el argumento de cabecera <code>noweb</code>,
para que añada iterativamente la directiva <code>#+LaTeX_Header:</code> a cada línea del bloque
anterior. Los resultados de exportación serán en bruto. Y la coma frente al signo de la
almohadilla es un carácter de escape:
</p>

<div class="org-src-container">
<pre class="src src-org"><span style="color: #555555; background-color: #E2E1D5;">#+begin_src latex :noweb yes :results raw</span>
<span style="color: #000088; background-color: #FFFFE0;">,#+LaTeX_HEADER: </span><span style="color: #0066FF; background-color: #FFFFE0; font-weight: bold;">&lt;&lt;preambulo&gt;&gt;</span>
<span style="color: #555555; background-color: #E2E1D5;">#+end_src</span>
</pre>
</div>

<p>
El uso de <code>noweb</code> también puede ser muy útil cuando estamos incluyendo en nuestro
preámbulo código Lua. Podemos abrir un árbol sólo para el código Lua, meterlo en distintos
bloques Lua y luego ir enlazándolo mediante <code>noweb</code> en los bloques de LaTeX. Realmente,
muy productivo, una gozada trabajar así.
</p>

<p>
Si queremos reutilizar este preámbulo en otros documentos de Org podemos hacerlo mediante
la directiva <code>INCLUDE</code>, donde podemos indicar las líneas desde-hasta de un documento a
incluir (véase el manual de Org). Pero también podemos crear nuestras propias plantillas,
que es lo que Org denomina &laquo;clases&raquo;, y que no tienen nada que ver con las clases de LaTeX.
Cada clase es una lista elisp. Aunque no tengáis mucha experiencia con Elisp, la
estructura es bastante obvia de comprender, y podéis tomar una clase como plantilla para
definir las vuestras. Por ejemplo, aquí tengo definida en mi archivo de inicio una clase
que lo único que me carga es un paquete escrito por mí, <code>normal-lua</code>, donde meto toda mi
configuración habitual. Y en esta clase la sección de primer nivel es <code>section</code>:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(add-to-list 'org-latex-classes
             '(<span style="color: #008000;">"normal-lua-org"</span>
               <span style="color: #008000;">"\\documentclass[11pt]{article}</span>
<span style="color: #008000;">          \\usepackage{normal-lua}</span>
<span style="color: #008000;">         [NO-DEFAULT-PACKAGES]</span>
<span style="color: #008000;">         [PACKAGES]</span>
<span style="color: #008000;">         [EXTRA]"</span>
               (<span style="color: #008000;">"\\section{%s}"</span> . <span style="color: #008000;">"\\section*{%s}"</span>)
               (<span style="color: #008000;">"\\subsection{%s}"</span> . <span style="color: #008000;">"\\subsection*{%s}"</span>)
               (<span style="color: #008000;">"\\subsubsection{%s}"</span> . <span style="color: #008000;">"\\subsubsection*{%s}"</span>)
               (<span style="color: #008000;">"\\paragraph{%s}"</span> . <span style="color: #008000;">"\\paragraph*{%s}"</span>)
               (<span style="color: #008000;">"\\subparagraph{%s}"</span> . <span style="color: #008000;">"\\subparagraph*{%s}"</span>)))
</pre>
</div>

<p>
Cuando quiero usar esa clase, añado a mi documento de org la directiva <code>#+LaTeX_CLASS:
normal-lua</code>. Y aún puedo meter opciones de la clase (en términos de LaTeX no de org) con
esta otra directiva: <code>#+LaTeX_CLASS_options: [draft]</code>.
</p>

<p>
NB: en las directivas es indiferente que uséis mayúsculas, minúsculas o ambas.
</p>

<p>
Aquí va otro ejemplo de clase que me produce un preámbulo vacío y cuya sección de primer
nivel es <code>part</code>:
</p>

<div class="org-src-container">
<pre class="src src-emacs-lisp">(add-to-list 'org-latex-classes
             '(<span style="color: #008000;">"odisea-empty"</span>
               <span style="color: #008000;">"[NO-DEFAULT-PACKAGES]</span>
<span style="color: #008000;">         [PACKAGES]</span>
<span style="color: #008000;">         [EXTRA]"</span>
               (<span style="color: #008000;">"\\part{%s}"</span> . <span style="color: #008000;">"\\part*{%s}"</span>)
               (<span style="color: #008000;">"\\chapter{%s}"</span> . <span style="color: #008000;">"\\chapter*{%s}"</span>)
               (<span style="color: #008000;">"\\section{%s}"</span> . <span style="color: #008000;">"\\section*{%s}"</span>)
               (<span style="color: #008000;">"\\subsection{%s}"</span> . <span style="color: #008000;">"\\subsection*{%s}"</span>)
               (<span style="color: #008000;">"\\subsubsection{%s}"</span> . <span style="color: #008000;">"\\subsubsection*{%s}"</span>)
               (<span style="color: #008000;">"\\paragraph{%s}"</span> . <span style="color: #008000;">"\\paragraph*{%s}"</span>)
               (<span style="color: #008000;">"\\subparagraph{%s}"</span> . <span style="color: #008000;">"\\subparagraph*{%s}"</span>)))
</pre>
</div>

<p>
Y ya, para terminar, cuando yo uso preámbulos de LaTeX realmente largos, los hago en un
documento aparte, y basta simplemente con meter en algún lugar de mi documento org:
</p>

<div class="org-src-container">
<pre class="src src-org"><span style="color: #008ED1; background-color: #EAEAFF;">#+LaTeX_Header: \input{mi-pre&#225;mbulo-largo}</span>
</pre>
</div>

<p>
Y así, más o menos, se definen los preámbulos de LaTeX desde Org. Como veis, bastante
fácil. Luego hay otros parámetros, como el título, la fecha, la tabla de contenido y
muchos más, que deben controlarse mediante las opciones de exportación generales, que son
los valores que damos a la directiva <code>#+options:</code> (véase el manual), pero eso ya es otro
cantar.
</p>

<p>
Saludos,
</p>

<p>
Juan Manuel
</p>


----------------------------------------------------
Normas para el correcto uso del correo electrónico:
		http://www.rediris.es/mail/estilo.html
----------------------------------------------------



ATOM RSS1 RSS2