Ich schreibe ein reproduzierbares Papier, und das Papier enthält Berechnungsergebnisse, die von einem Python-Skript generiert werden (ein ähnliches MATLAB-Skript generiert nahezu identische Ergebnisse). Ich bin der Meinung, dass das Papier für die Leser leichter zu verstehen wäre, wenn sie die Berechnungen im Papier mit den Berechnungen im Code in Einklang bringen könnten. Die Arbeit schlägt einen abstrakten Formalismus vor, und die Beispiele in der Arbeit sollen diesen Formalismus für die Leser (von denen viele Ingenieure sein werden) konkreter machen. Der Code wird wahrscheinlich die detaillierteste Aufzeichnung der Durchführung der Berechnungen sein, und eine Verdeutlichung könnte uns während des Überprüfungsprozesses helfen.
Hat jemand Vorschläge, wie man die Entsprechung zwischen Code und Rechenergebnissen (Zahlen, Gleichungen) klarer machen kann?
Ich dachte zum Beispiel, wenn es um Codezeilen geht, in denen verschiedene Schritte des Papiers implementiert werden, könnte ich Gleichungsnummern zitieren (es wäre erstaunlich, wenn ich den Code mit LaTeX vergleichen könnte, aber Handkennzeichnung ist in Ordnung). und ich könnte Funktionen schreiben, die den verschiedenen Beispielen und Figuren entsprechen, wie z
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Wenn der Code groß wäre und ich nicht erklären wollte, wie viele verschiedene mathematische Methoden in der Technik tatsächlich gleich waren, würde ich mich wahrscheinlich nicht so sehr darum kümmern, den Code klarer zu machen, sondern angesichts der abstrakten Natur der Papier und die kleine Codebasis scheinen in dieser Übung einen Wert zu haben.
quelle
Antworten:
Sie könnten erwägen, das gesamte Papier in Noweb zu schreiben . Das Einrichten ist etwas langwierig, aber das Mischen von Code und LaTeX-formatiertem Text, Gleichungen und Zahlen ist eine sehr leistungsstarke Methode. Bei langen Programmen verwandelt sich Ihr Code eher in ein Buch als in einen Artikel. Bei kurzen Programmen kann dies jedoch recht gut funktionieren.
Wenn Sie nicht so weit gehen möchten, sollte es dennoch recht einfach sein, die Kommentarbereiche Ihrer Codeauflistungen mit LaTeX zu formatieren. Das
listings
Paket kann Ihnen dabei helfen. Hier ist ein kurzes Beispiel:Mit einigen zusätzlichen Manipulationen sollten Sie in der Lage sein, Ihre referenzierten Gleichungsnummern in der Monospace-Schriftart anzuzeigen, die zum Auflisten der Gleichung verwendet wird.
quelle
Der noweb Ansatz von Bill erwähnt hat einiges weiterentwickelt, sowohl in seiner ursprünglichen Geist Code zu dokumentieren ( und nicht als wissenschaftliche Publikation) unter dem Begriff Literarische Programmierung und kommt jetzt in vielen Geschmacksrichtungen (Ich denke , noweb eine Verallgemeinerung von cweb anfangs war), von Welche
doxygen
und verschiedene sprachspezifische Versionen können Dokumentation in TeX, HTML und anderen Formaten generieren.Weiter zu Ihrem Punkt, noweb wurde für einige Zeit in der
R
Community (also ursprünglich dieS
Community, daher der Name) unter dem Titel "Sweave" mit dem Ziel entwickelt, ein "reproduzierbares Research" -Papier bereitzustellen, in dem der Code tatsächlich ausgeführt wird, wenn Die Latexdatei wird kompiliert (und optional auch angezeigt). In Sweave ist eine ganze Reihe von wissenschaftlichen Artikeln verfasst (einschließlich meines Erachtens des gesamten R-Journals; siehe aber auch das Journal of Biostatistics und dessen Richtlinien für reproduzierbare Artikel).Während Sweave immer noch Teil einer Base-R-Installation ist, wird es durch knitr ersetzt, das jetzt sprachunabhängig ist , was es zu einer möglichen Wahl für Ihren Python-Code macht. Knitr unterstützt das Schreiben in LaTeX oder Markdown, das Hervorheben der Syntax, das Zwischenspeichern, das Externalisieren des Codes aus dem Quelllatex und viele andere wünschenswerte Funktionen für diese Art von Arbeit.
Python hat seine eigenen Lösungen, ähnlich wie Ipython-Notizbücher , die in HTML, vielleicht LaTeX, gerendert werden können, aber ich weiß weniger darüber.
Ein anderes Projekt, das definitiv einen Blick wert ist , ist dexyit , ein anderes sprachunabhängiges Programm, das sehr gut mit LaTeX und HTML zusammenarbeitet. Es gibt zwar mehr Beispiele für die Dokumentation von Code als für das Schreiben von wissenschaftlichen Artikeln, die Arbeit in LaTeX sollte jedoch einfach sein.
Beide
knitr
unddexyit
werden genau das tun, was Sie in LaTeX beschrieben haben, einschließlich Verweisen auf ein externes Python-Skript und Einlesen des Codes. Ähnliche Dinge können in DocBook und XML ausgeführt werden, obwohl ich mit diesem Ansatz weniger vertraut bin.quelle
Das Latex Paket geprägt liefert sehr umfangreiche Syntax - Hervorhebung (basierend auf Pygments) und erlaubt Querverweise in beiden Richtungen. Sie können aus dem Codeteil (dem geprägten Teil) heraus zu LaTeX wechseln und in Ihrem Haupttext auf Codezeilen verweisen. Darüber hinaus bietet es eine Listungsumgebung, mit der Sie eine "Listungsliste" (wie eine Liste von Tabellen) erstellen und auf ganze Listungen verweisen können. Siehe LaTeX MWE und seine Ausgabe mit LuaLaTeX unten (den Code nicht beurteilen :-)).
Eine andere Möglichkeit wäre, PythonTeX vom selben Autor / Betreuer zu verwenden, wodurch die Berechnungen beim Kompilieren der LaTeX-Quelle ausgeführt werden können. Daher werden Papier- und Code-Ergebnisse immer zusammen generiert und sind daher immer kohärent. Sehen Sie sich hier die PythonTeX-Galerie an.
quelle
Verwenden Sie die Literate Programming Functionality des org-Modus .
Die meisten Benutzer im Organisationsmodus konzentrieren sich in der Regel ausschließlich auf die integrierte Projekt- / Zeitverwaltungsfunktion oder auf die Möglichkeit, Dokumente in mehrere gängige Dateiformate, z. B. PDF, zu exportieren aus einfach zu verwaltenden Textdateien , .
Die beste Funktion von org-mode ist jedoch die Möglichkeit, Lese- und Schreibprogramme in über 30 Sprachen zu erstellen, wobei die Open-Source-Community jeden Monat weitere Sprachen hinzufügt.
Nachfolgend finden Sie einfache Codebeispiele mit Ruby und Python:
Vorteile
Die Fähigkeit zu:
SRC
als Ausgabe und / oder Wert erfassen.SRC
Blockergebnisse als Code, Listen, Tabelle, Latex, HTMLSRC
Blöcken.SRC
Blöcken inSRC
Blöcken als Variablen.noweb
Syntax inSRC
Blöcken.Open-Source-Projekt - kostenlos wie in Bier und kostenlos wie in Freiheit.
Nachteile
Es muss Gnu-Emacs installiert und konfiguriert sein, um den Organisationsmodus zu verwenden.
Es muss die gesamte benötigte Programmiersoftware installiert und konfiguriert werden.
ipython notebooks
orSweave
so, Sie werden wahrscheinlich nicht so viele Stellenausschreibungen sehen, obwohl die Literate Programming-Funktionalität 2008 hinzugefügt wurde.quelle