Saya sedang menulis makalah yang dapat direproduksi, dan makalah ini memiliki hasil komputasi yang dihasilkan oleh skrip Python (skrip MATLAB serupa menghasilkan hasil yang hampir identik). Saya merasa bahwa makalah ini akan lebih mudah dipahami oleh pembaca jika mereka dapat mencocokkan perhitungan di koran dengan perhitungan dalam kode. Karya ini mengusulkan formalisme abstrak, dan contoh-contoh di koran seharusnya membuat formalisme ini lebih konkret bagi pembaca (banyak dari mereka akan menjadi insinyur); kode mungkin akan menjadi catatan paling rinci tentang cara melakukan perhitungan, dan membuatnya jelas dapat membantu kami selama proses peninjauan.
Adakah yang punya saran tentang bagaimana membuat korespondensi antara kode dan hasil komputasi (angka, persamaan) lebih jelas?
Sebagai contoh, saya berpikir bahwa ketika sampai pada garis kode yang menerapkan berbagai langkah di koran, saya dapat mengutip angka persamaan (akan luar biasa jika saya bisa melintasi referensi antara kode dan LaTeX, tetapi pelabelan tangan mereka baik-baik saja) , dan saya bisa menulis fungsi yang sesuai dengan berbagai contoh dan angka, seperti
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Jika kodenya besar, dan saya tidak mencoba menjelaskan bagaimana sekelompok metode matematika yang berbeda yang digunakan dalam rekayasa sebenarnya sama, saya mungkin tidak akan terlalu repot dengan membuat kode jelas, tetapi mengingat sifat abstrak dari kertas dan basis kode kecil, sepertinya ada nilai dalam latihan ini.
sumber
Jawaban:
Anda mungkin mempertimbangkan untuk menulis seluruh makalah di Noweb . Agak membosankan untuk diatur, tetapi ini adalah cara yang sangat ampuh untuk mencampur kode dan teks, persamaan, dan gambar berformat LaTeX. Untuk program yang panjang, cenderung mengubah kode Anda menjadi lebih dari sebuah buku daripada sebuah artikel, tetapi untuk program pendek, itu mungkin bekerja dengan cukup baik.
Jika Anda tidak ingin melangkah sejauh itu, masih cukup mudah untuk memformat bagian komentar dari daftar kode Anda menggunakan LaTeX. The
listings
paket dapat membantu Anda melakukan ini. Ini contoh singkatnya:Dengan beberapa manipulasi tambahan, Anda harus bisa membuat nomor persamaan referensi Anda muncul di font monospace yang digunakan untuk daftar persamaan.
sumber
Pendekatan noweb yang disebutkan oleh Bill telah berevolusi sedikit, baik di dalamnya semangat asli mendokumentasikan kode (daripada publikasi ilmiah) di bawah istilah pemrograman melek dan sekarang datang dalam banyak rasa (saya kira noweb adalah generalisasi dari cweb awalnya), dari yang mana
doxygen
dan berbagai versi spesifik bahasa dapat menghasilkan dokumentasi dalam TeX, HTML, dan format lainnya.Lebih ke titik Anda, noweb telah dikembangkan untuk beberapa waktu di
R
komunitas (awalnyaS
komunitas, maka nama) di bawah judul "Sweave" dengan tujuan menyediakan kertas "penelitian direproduksi", di mana kode sebenarnya dijalankan ketika file lateks dikompilasi (dan juga ditampilkan opsional). Cukup banyak makalah akademis yang ditulis dalam Sweave (termasuk, saya percaya, semua R-jurnal; tetapi lihat juga jurnal biostatistik dan kebijakan tentang makalah yang dapat direproduksi).Walaupun Sweave masih merupakan bagian dari instalasi R dasar apa pun, itu sedang digantikan oleh knitr yang sekarang menjadi bahasa agnostik , menjadikannya pilihan yang mungkin untuk kode python Anda. Knitr mendukung penulisan dalam LaTeX atau penurunan harga, mendukung penyorotan sintaks, caching, eksternalisasi kode dari sumber lateks dan banyak fitur lain yang diinginkan untuk jenis pekerjaan ini.
Python memiliki solusi sendiri yang mirip, notebook ipython , yang dapat di-render ke HTML, mungkin LaTeX, tapi saya kurang tahu tentang ini.
Proyek lain yang pasti patut dilihat adalah dexyit , program agnostik bahasa lain yang bekerja sangat baik dengan LaTeX dan HTML. Meskipun memiliki lebih banyak contoh dalam mendokumentasikan kode daripada menulis makalah ilmiah, bekerja di LaTeX harus langsung.
Keduanya
knitr
dandexyit
akan melakukan apa yang Anda jelaskan di LaTeX, termasuk menunjuk ke skrip python eksternal dan membaca dalam kode. Hal serupa dapat dicapai dalam DocBook dan XML, meskipun saya kurang terbiasa dengan pendekatan ini.sumber
Paket LaTeX dicetak menyediakan penyorotan sintaksis yang sangat luas (berdasarkan Pygments) dan memungkinkan referensi silang di kedua arah. Anda dapat melarikan diri ke LaTeX dari dalam bagian kode (bagian dicetak) dan Anda dapat merujuk dalam teks utama Anda ke baris kode. Selain itu, ini menyediakan lingkungan daftar sehingga Anda dapat menghasilkan "daftar daftar" (seperti daftar tabel) dan memungkinkan referensi seluruh daftar. Lihat LaTeX MWE dan hasilnya dengan LuaLaTeX di bawah ini (jangan menilai kode :-)).
Opsi lain adalah menggunakan PythonTeX dari penulis / pengelola yang sama yang memungkinkan menjalankan perhitungan sambil mengkompilasi sumber LaTeX, karenanya hasil kertas dan kode selalu dihasilkan bersama dan karenanya selalu koheren. Lihat galeri PythonTeX di sini.
sumber
Gunakan Fungsi Pemrograman Literate dari mode-org .
Sebagian besar pengguna mode-org cenderung berfokus secara eksklusif pada fungsionalitas manajemen proyek / waktu bawaan atau kemampuan untuk mengekspor dokumen ke berbagai format file populer, misalnya PDF , dari pemeliharaan file teks yang mudah .
Namun, fitur terbaik dari mode-org adalah kemampuan untuk membuat program melek di lebih dari 30 bahasa dengan lebih banyak bahasa ditambahkan setiap bulan oleh komunitas open source.
Berikut adalah contoh kode sepele menggunakan Ruby dan Python:
Pro
Kemampuan untuk:
SRC
hasil blok sebagai output dan / atau nilai.SRC
hasil blok sebagai kode, daftar, tabel, lateks, htmlSRC
blok.SRC
blok bernama ke dalamSRC
blok sebagai variabel.noweb
sintaks di dalamSRC
blok.Proyek open source - keduanya gratis seperti dalam bir dan gratis seperti dalam kebebasan.
Cons
Perlu menginstal dan mengkonfigurasi gnu emacs untuk menggunakan mode-org.
Perlu menginstal dan mengkonfigurasi semua perangkat lunak pemrograman yang Anda butuhkan.
ipython notebooks
atauSweave
Anda mungkin tidak akan melihat banyak lowongan pekerjaan meskipun fungsi Pemrograman Sastra telah ditambahkan pada 2008.sumber