En blogs, libros de texto, etc., es muy común mostrar los resultados de algunos códigos como comentarios, por ejemplo:
(+ 1 1) ;=> 2
¿Hay alguna manera de mostrar resultados como este automáticamente usando la función Babel de Org-Mode?
Específicamente, lo que me gustaría es poder especificar un encabezado tal que esto:
#+begin_src scheme <some headers>
(+ 1 1)
(/ 4 (* 2 2))
#+end_src
Se convertiría en lo siguiente cuando yo C-c C-c:
#+begin_src scheme <some headers>
(+ 1 1) ;=> 2
(/ 4 (* 2 2)) ;=> 1
#+end_src
Y luego, si hice algunos cambios, así ...
#+begin_src scheme <some headers>
(+ 1 5) ;=> 2
(/ 8 (* 2 2)) ;=> 1
#+end_src
... y C-c C-creemplazaría los comentarios con los actualizados:
#+begin_src scheme <some headers>
(+ 1 5) ;=> 6
(/ 8 (* 2 2)) ;=> 2
#+end_src
O, por debajo de lo que he soñado anteriormente, ¿hay una manera fácil de mostrar los resultados mediante el renderizador de archivos org de github, de modo que lo siguiente sería visible (idealmente con el formato que especifico a nivel de documento):
#+RESULTS:
: 2
org-mode
org-export
org-babel
parkeristyping
fuente
fuente

Respuestas:
prueba esto
Use bloques de código con nombre y
nowebencabezado para convertir su código en un programa alfabetizado.Cree un
orgbloque de código para formatear su código con su resultado¿Es una C-c C-cde
orgbloque de código y debería ver resultados similares a los del código de abajo:Si publicas código en Github, deberías ver
fuente
:var my_code='("my-code" "my-other-code"). Aun así, es aún más engorroso de lo que me gustaría. ¿Quieres que actualice mi respuesta?Lo más cercano que he podido lograr con la funcionalidad existente de Babel es lo siguiente:
Primero, defino una función emacs-lisp para anteponer resultados con
";=> ":Luego proceso los resultados usando el
:postencabezado:Esto devuelve lo siguiente
C-c C-c, que se muestra en github debido al:exports bothencabezado, pero está en un bloque de código separado.Sin embargo, creo que esta estrategia deja el archivo org demasiado abarrotado para que valga la pena. Y, a menos que desactive la confirmación de evaluación de código, tengo que aceptar dos "¿Está seguro de que desea evaluar el código?" avisos (uno para el bloque Esquema y otro para el elisp
commentify).fuente
Puedes hacer algo como esto:
Escriba su bloque de código fuente nombrado de varias líneas como de costumbre
Cambie la envoltura de
BEGIN/END_SRCa…-EXAMPLE:# + NOMBRE: fuente real # + BEGIN_EXAMPLE emacs-lisp (+ 3 4) (* 4 47) # + END_EXAMPLE# + NOMBRE: LispBlock # + HEADER:: var lcmds = real-source # + BEGIN_SRC emacs-lisp: salida de resultados: wrap src emacs-lisp (dolist (cmd (lcmds de cadena dividida "\ n")) (a menos que (string = "" cmd) (princ (formato "% s \ t; →% s \ n" cmd (eval (car (cmd de lectura de cadena))))))) # + END_SRC# + RESULTADOS: LispBlock # + BEGIN_src emacs-lisp (+ 3 4); → 7 (* 4 47); → 188 # + END_srcAgregue bloques de origen de varias líneas adicionales con nombres individuales según sea necesario en su texto
Agregue
#+CALL:líneas donde asigne el nombre del Bloque comolcmdsvariable. El bloque transformador anterior solo se necesita una vez por documento.Tenga en cuenta que el bloque de transformación debe escribirse en el idioma que está tratando.
Primero intenté "automatizar" la buena solución de @melioratus, pero tuve problemas con eso, cuando encontré la solución anterior.
@jpkotta thx para señalar la solución necesaria para evitar el problema número-lista-con-código-bloque.
fuente