Cómo hacer referencia a bloques de origen en el texto de la organización

8

Quiero crear bloques de origen (en cualquier idioma, incluido LaTeX), luego consultarlos en el texto utilizando enlaces internos , con las descripciones que se muestran a continuación. Esta publicación similar no me funciona.

He fácilmente podido creado muchos bloques de la fuente utilizando la estructura común, por ejemplo:

#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Luego agregué nombres a los bloques porque quiero hablar sobre ellos con enlaces internos. Id hice esto agregando #+NAME:, y también tengo esto:

#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Entonces, el bloque de texto está en algún lugar dentro de un archivo de organización (el mismo en mi caso) y quiero insertar un enlace a ese bloque de código anterior usando C-c C-l. He intentado esto con y sin una descripción, así que terminé con ambos:

[[some-source-code][my description]]

y

[[some-source-code]]

pero tampoco se reconocen en el archivo PDF exportado. Simplemente recibo un par de signos de interrogación en el archivo PDF y *Org PDF LaTeX output buffer*solo hay un mensaje que dice:

Hipereferencia de algún código fuente en la página 6 indefinido en la línea de entrada 182.

Dentro del archivo org, los enlaces se muestran y si hago clic en ellos, me llevan al bloque de código como se esperaba.

En la documentación de babel para tales bloques de origen había una oración de aspecto inacabado con respecto al (que supongo que significa el nombre que proporciono para un bloque de origen), que dice:

El nombre puede tener 20 caracteres y contener ... XXX

¿Existen realmente reglas con respecto a la #+NAME: <label>?

¿Debo incluir un # + LaTeX_HEADER específico en el archivo org?

Yo soy capaz de crear enlaces a sitios web que utilizan C-c C-l, con una descripción - y esto se exporta como se esperaba a PDF.

Tengo org-version 8.2.10, emacs versión 24.5.

n1k31t4
fuente
¿Es obligatorio exportar enlaces a PDF?
Melioratus
@Melioratus: sí, me gustaría tener los enlaces disponibles (clicables) en la salida en pdf.
n1k31t4
Bummer, los enlaces en mi respuesta no se exportarán a PDF. Lo siento. Buscaré otra solución.
Melioratus
Creo que encontré una forma de vincular de nuevo al bloque de código al exportar a PDF. Publicaré mi respuesta pronto.
Melioratus
¡Gracias por hacer una pregunta! Agregué el método 3 que se vinculará de nuevo al bloque de código cuando se exporte a PDF.
Melioratus

Respuestas:

8

Si usa org-ref ( https://github.com/jkitchin/org-ref ), puede hacer esto:

#+caption: test label:some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC


See Listing ref:some-source-code

Esto exporta a PDF y HTML con enlaces activos.

John Kitchin
fuente
4

Prueba esto

#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

Método 1

[[file:::some-source-code]]

Esto debería vincular de nuevo a some-source-code.

Advertencia: [[file:::some-source-code]] está realizando una búsqueda degenerada y buscará <<some-source-code>>enlaces antes #+NAME: some-source-code.

Método 2

[[file:::/#\+name: +some-source-code/]]

/ regexp / Realiza
una búsqueda de expresiones regulares para regexp. Esto utiliza el comando Emacs para enumerar todas las coincidencias en una ventana separada. Si el archivo de destino está en modo Org, org-ocurren se usa para crear un árbol disperso con las coincidencias.

Método 3

Al exportar a PDF, esto debería funcionar.

#+BEGIN_LaTeX
\hypertarget{some-source-code}{} 
#+END_LaTeX
#+NAME: some-source-code
#+BEGIN_SRC python
  for i in 1:10:
      print i
#+END_SRC

#+BEGIN_SRC latex
  See \hyperlink{some-source-code}{some source code}.
#+END_SRC

Espero que haya ayudado!


Este código se probó usando
GNU Emacs 24.4.1 (x86_64-apple-darwin14.0.0, NS apple-appkit-1343.14) de 2014-12-25
org-mode: 8.3.2

Melioratus
fuente
Desafortunadamente, ninguno de estos funciona para mí. Método 2 lanza el error: Not a Tramp file name: (the regex). El Método 1 creó un enlace vacío, que es una descripción cero y un enlace a ninguna parte. Si lo reescribo para esto: [[file:alg-page-scrape][My Description]]entonces obtengo un enlace a ninguna parte nuevamente, pero al menos con la descripción que aparece en el PDF. No quiero sonar arrogante, pero ¿no debería ser este tipo de cosas el pan y la mantequilla del modo org? Funciona para archivos como se esperaba, pero no para bloques de origen ...
n1k31t4
@DexterMorgan: cuando reescribió los enlaces, ¿utilizó 3 puntos, es decir file:::alg-page-scrap? Los ejemplos solo funcionan con 3 puntos. Entonces [[file:::alg-page-scrape][My Description]]debería funcionar. Avísame si no es así.
Melioratus
Lo intenté primero con tres: y eso no funcionó. Luego lo probé con uno después.
n1k31t4
@DexterMorgan: cuando dice que no funciona, ¿quiere decir que al exportar a PDF?
Melioratus
Como mencioné, hay una apariencia de enlace normal ( org-link-face??), sin embargo, no hay un enlace real. Hacer clic en él no me llevó al bloque de origen.
n1k31t4