Org-babel sonuçları kod yorumu olarak çıkarılabilir mi?


13

Bloglarda, ders kitaplarında vb. Bazı kodların sonuçlarını yorum olarak görüntülemek gerçekten yaygındır, örneğin:

(+ 1 1) ;=> 2

Kuruluş Modu'nun Babil özelliğini kullanarak bunun gibi sonuçları otomatik olarak görüntülemenin bir yolu var mı?

Özellikle, istediğim şu şekilde bir başlık belirtebilirsiniz:

#+begin_src scheme <some headers>
(+ 1 1)
(/ 4 (* 2 2))
#+end_src

Aşağıdaki durumlarda aşağıdakilere dönüşürdüm C-c C-c:

#+begin_src scheme <some headers>
(+ 1 1) ;=> 2
(/ 4 (* 2 2)) ;=> 1
#+end_src

Ve sonra bazı değişiklikler yaptıysam, böyle ...

#+begin_src scheme <some headers>
(+ 1 5) ;=> 2
(/ 8 (* 2 2)) ;=> 1
#+end_src

... ve C-c C-cyorumları güncellenenlerle değiştirir:

#+begin_src scheme <some headers>
(+ 1 5) ;=> 6
(/ 8 (* 2 2)) ;=> 2
#+end_src

Ya da, yukarıda hayal ettiğimden kısa, sonuçların github'ın org dosya oluşturucusu tarafından görüntülenmesinin kolay bir yolu var, bu yüzden aşağıdakiler görünür olacak (ideal olarak belge düzeyinde belirlediğim biçimlendirme ile):

#+RESULTS:
: 2

İlginç bir fikir, ama hazır bir şey olduğunu sanmıyorum. Sonuçları önceden belirlenmiş bir yere yerleştirmek için belirli Babel arka ucunu değiştirmeye çalışırdım. Sonuçlar karmaşık gibi görünse de, sonuçlarda birden fazla satır olduğunda.
wvxvw

Yanıtlar:


7

bunu dene

Kodunuzu nowebokuryazar bir programa dönüştürmek için adlandırılmış kod bloklarını ve üstbilgiyi kullanın.

#+NAME: my-code
#+BEGIN_SRC elisp :exports none 
(+ 1 1)
#+END_SRC

#+NAME: my-other-code 
#+BEGIN_SRC elisp :exports none 
(/ 4 (* 2 2))
#+END_SRC

orgKodunuzu sonucunuzla biçimlendirmek için bir kod bloğu oluşturun

#+BEGIN_SRC org :results drawer replace :noweb yes :exports results 

  ,#+NAME: my-code-with-answer
  ,#+BEGIN_SRC elisp  :exports code 
  <<my-code>> ;=> <<my-code()>>
  <<my-other-code>> ;=> <<my-other-code()>>
  ,#+END_SRC


#+END_SRC

Bir Do C-c C-cüzerinde orgkod bloğu ve aşağıda koduna benzer sonuçlar görürsünüz:

#+RESULTS:
:RESULTS:

#+NAME: my-code-with-answer
#+BEGIN_SRC elisp  :exports code 
(+ 1 1) ;=> 2
(/ 4 (* 2 2)) ;=> 1
#+END_SRC

:END:

Github'a kod gönderirseniz,

(+ 1 1) ;=> 2
(/ 4 (* 2 2)) ;=> 1

Bu kod
GNU Emacs 24.5.1 (x86_64-bilinmeyen-cygwin, GTK + Sürüm 3.14.13)
Kuruluş Modu Sürümü: 8.3.2
ve github ile test edilmiştir .


Teşekkürler. Bu yararlı bir yaklaşımdır ve sonuçların istediğim şekilde biçimlendirilmesine izin verecek kadar esnek görünüyor. Ancak, (kendi çözümüm gibi) hızlı notlar veya blog gönderileri için uygun olamayacak kadar ayrıntılı olduğunu düşünüyorum, bu yüzden bulmayı umuyordum. Belki de bu işlevsellik üzerine babil inşasında bazı değişiklikler beni oraya götürebilir.
parkeristyping

1
@parkeristyping - Kabul ediyorum. Çok fazla ayrıntılı. Oldukça sık yapacağım bir şeyse, örneğin blog, genellikle 2. adımda biçimlendirilmiş org kodunu oluşturmak için bazı şablon kodları yazarım :var my_code='("my-code" "my-other-code"). Yine de istediğimden daha hantal. Cevabımı güncellememi ister misiniz?
Melioratus

@parkeristyping - Başka bir yol buldum ancak orijinal kuruluş dosyasını dışa aktarmanızı ve dışa aktarmayı GitHub'a göndermenizi gerektirir.
Melioratus

3

Mevcut Babel işlevselliğiyle başarabildiğim en yakın şey şudur:

İlk olarak, sonuçların önüne bir emacs-lisp işlevi tanımlarım ";=> ":

#+name: commentify
#+begin_src emacs-lisp :var result="" :exports none
(concat ";=> " (format "%s" result))
#+end_src

Sonra :postbaşlığı kullanarak sonuçları işliyorum:

#+begin_src scheme :post commentify(*this*) :results code :exports both
(+ 5 7)
#+end_src

Bu C-c C-c, :exports bothbaşlık nedeniyle github'da görüntülenen aşağıdakileri döndürür , ancak ayrı bir kod bloğundadır.

#+RESULTS:
#+BEGIN_SRC scheme
;=> 12
#+END_SRC

Bence bu strateji org dosyasını buna değmeyecek kadar darmadağın bırakıyor. Kod değerlendirme onayını devre dışı bırakmadığım sürece, iki "Kodu değerlendirmek istediğinizden emin misiniz?" (biri Şema bloğu için ve diğeri elisp için commentify).


1

Bunun gibi bir şey yapabilirsiniz:

  1. Senin yazın adlı zamanki gibi Çoklu Hat kaynak kod bloğunu

  2. Sargıyı olarak BEGIN/END_SRCdeğiştirin …-EXAMPLE:

    # + NAME: gerçek kaynak
    # + BEGIN_EXAMPLE emacs-lisp
    (+ 3 4)
    (* 4 47)
    # + END_EXAMPLE
  1. Bu bloğu ilk kod bloğunun altına yapıştırın ve yürütün.
    # + AD: LispBlock
    # + HEADER:: var lcmds = gerçek kaynak
    # + BEGIN_SRC emacs-lisp: sonuç çıktısı: wrap src emacs-lisp
    (dolist (cmd (bölünmüş karakter dizileri "\ n"))
      (sürece (string = "" cmd)
        (princ
         ("% s \ t biçimini seçin → →% s \ n"
                 cmd (eval (araba (dizeden okuma cmd))))))))
    # + END_SRC
  1. Sonuç:
    # + SONUÇLAR: LispBlock
    # + BEGIN_src emacs-lisp
    (+ 34); → 7
    (* 4 47); → 188
    # + END_src
  1. Metninize gerektiği gibi tek tek isimlerle ek çok satırlı kaynak blokları ekleyin

  2. Değişken #+CALL:olarak Block adını verdiğiniz satırları ekleyin lcmds. Yukarıdaki dönüştürme bloğu her belge için yalnızca bir kez gereklidir.

Dönüştürme bloğunun işlem yaptığınız dilde yazılması gerektiğini unutmayın.

İlk olarak @melioratus'tan iyi çözümü "otomatikleştirmeyi" denedim, ancak yukarıdaki çözüme girdiğimde bununla ilgili problemlerle karşılaştım.

@jpkotta-thx-kod-blok-problemi ile sayı-listesinden kaçınmak için gereken düzeltmeyi işaret etmek için.


1
Çok akıllı bir çözüm! Gönderdiğiniz için teşekkürler!
Melioratus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.