Tengo muchos documentos como archivos de organización que tienen una propiedad CUSTOM_LABEL, como
* Introduction
:PROPERTIES:
:CUSTOM_LABEL: AP 1
:END:
En este caso, los archivos deben exportarse como LaTeX, traduciéndose CUSTOM_LABEL
como a \label{marker}
. El ejemplo anterior debería traducirse a \label{AP 1}
.
Ya sé cómo llamar a funciones personalizadas en el momento de la exportación, pero no soy lo suficientemente experto como para escribir un defun para hacer esa conversión en particular, es decir CUSTOM_LABEL
->\label{}
¿Cómo puede el defun inyectar un custom_label
como \label{}
se escribe?
Agradecería incluso algunos pseudocódigos o algunos punteros.
Estoy haciendo esta pregunta aquí en lugar de otros lugares, porque esta es más una pregunta de Emacs, ya que busqué a fondo el manual del modo org, y ese tipo de característica no está disponible actualmente.
Una función genérica para convertir una PROPIEDAD dada al exportar (LaTeX, HTML o cualquier otro formato) sería aún mejor.
Gracias.
emacs-orgmode
lista (entre otras, lists.gnu.org/archive/html/emacs-orgmode/2014-09/msg00498.html ). Intenté ese código, y solo configuréorg-latex-custom-id-as-label
. Funciona bien con la exportación HTML, pero no tiene ningún efecto con la exportación LaTeX. Desearía poder confiar solo enorg-mode
las funciones principales, aún así me gusta la respuesta de @ malababrba, ya que permite una buena generalización.\section{h}\label{sec-1}
que estoy usandoGNU Emacs 24.3.94.1 (x86_64-apple-darwin13.4.0, NS apple-appkit-1265.21) of 2014-10-04 on builder10-9.porkrind.org
yOrg-mode version 8.2.6 (release_8.2.6-1 @ /Applications/Emacs.app/Contents/Resources/lisp/org/)
. Además, para asegurarme, cambié el nombre de mi .emacs.d, por lo que se ejecutó sin cosas personalizadas.org-mode
usando estael-get
receta: github.com/dimitri/el-get/blob/master/recipes/org-mode.rcp , pero todavía obtengoOrg-mode version 8.2.6 (release_8.2.6-1 @ /Users/gsl/.emacs.d/el-get/org-mode/lisp/
¿ Sabrías cómo ajustar esa receta para poder usarla para el rama de desarrollo? También podría hacer esto como una nueva pregunta. Muchas gracias por señalar eso.Respuestas:
He escrito una función que hace lo que quieres de una manera bastante extensible. Comprueba qué títulos contienen la propiedad
CUSTOM_LABEL
(o alguna otra propiedad que configure) y llama a la funciónendless/insert-org-label-latex
en cada uno de ellos con el valor de la propiedad como argumento.El fragmento de ejemplo también muestra cómo extenderlo para html u otros backends.
Configurar los reemplazos
Con esta variable puede configurar las propiedades que le interesan y qué funciones se llaman para manejar cada propiedad.
El trabajador pesado
Esta función es lo que debe agregar al enlace de exportación de la organización. Se encarga de verificar las propiedades enumeradas anteriormente y llamar a las funciones asociadas con esas propiedades.
Las funciones que define
Estos son los que hacen el reemplazo real. A continuación se muestra un ejemplo para el caso de látex.
Resultado
Evalúe todo este código anterior, luego exporte el siguiente búfer de organización a latex.
El búfer de látex resultante debería ser algo como esto.
fuente
Nota para los fragmentos de código que debe utilizar la corriente de desarrollo-versión,
(org-version) => "8.3beta"
.Utilice
CUSTOM_ID
y enlace interno. Ver(info "(org) Handling links")
.En la mayoría de los casos, no debe preocuparse por el resultado exportado de la denominación interna en Org. Los enlaces a figuras y titulares, por ejemplo, serán correctos cuando se exporten. Ver
(info "(org) Internal links")
.Para LaTeX intente:
Resultado:
En los exportadores como
ox-odt
y losox-html
titulares contienen tanto ID internaID
comoCUSTOM_ID
. El enlace utilizado depende del enlace:Resultado:
fuente
CUSTOM_ID
, mientras todavía usa @ malabarba para pasar cualquier otra propiedad de organización. De hecho, lo estoy usando de esa manera para pasar algunas otras propiedades (como cite-keys, género, lugar, etc.), ademásCUSTOM_ID
.No estoy seguro, pero es probable que necesite aconsejar o incluso sobrescribir la función de exportador. En Org 8, eso es
org-latex-export-headline
.La función obtiene el elemento de título, el contenido del título y una lista de propiedades adicional. Dentro de la función de exportador, puede obtener propiedades de elementos (incluida su etiqueta personalizada) con
org-element-property
.fuente
org
exportador no trabaja demasiado con el asesoramiento, sino que creafilter
funciones que se llamarán en una determinada etapa del proceso de exportación, más o menos así: `` `(eval-after -load 'ox-latex' (agregar a la lista 'org-export-filter-final-output-functions' my-filter-function)) `` (No estoy seguro de por qué la sintaxis de retroceso no funciona en comentarios?)