Piszę powtarzalny artykuł, a artykuł ma wyniki obliczeń generowane przez skrypt Pythona (podobny skrypt MATLAB generuje prawie identyczne wyniki). Wydaje mi się, że artykuł byłby łatwiejszy do zrozumienia dla czytelników, gdyby mogli dopasować obliczenia w artykule do obliczeń w kodzie. Praca proponuje abstrakcyjny formalizm, a przykłady w artykule mają uczynić ten formalizm bardziej konkretnym dla czytelników (z których wielu będzie inżynierami); kod będzie prawdopodobnie najdokładniejszym zapisem sposobu wykonywania obliczeń, a jego wyjaśnienie może nam pomóc w procesie przeglądu.
Czy ktoś ma jakieś sugestie, jak wyjaśnić zgodność między kodem a wynikami obliczeniowymi (liczby, równania)?
Na przykład myślałem, że jeśli chodzi o wiersze kodu implementujące różne kroki w dokumencie, mogę zacytować liczby równań (byłoby niesamowite, gdybym mógł powiązać kod z LaTeX-em, ale ręczne etykietowanie ich jest w porządku) , i mógłbym pisać funkcje odpowiadające różnym przykładom i rysunkom, takie jak
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Gdyby kod był duży, a ja nie próbowałem wyjaśnić, jak wiele różnych metod matematycznych stosowanych w inżynierii było w rzeczywistości takich samych, prawdopodobnie nie zawracałbym sobie głowy wyjaśnianiem kodu, ale biorąc pod uwagę abstrakcyjną naturę papier i mała podstawa kodu, wydaje się, że w tym ćwiczeniu może być wartość.
źródło
Odpowiedzi:
Możesz rozważyć napisanie całego artykułu w Nowymb . Konfiguracja jest nieco żmudna, ale jest to bardzo skuteczny sposób mieszania kodu z tekstem, równaniami i liczbami w formacie LaTeX-a. W przypadku długich programów kod zmienia się raczej w książkę niż artykuł, ale w przypadku krótkich programów może działać całkiem nieźle.
Jeśli nie chcesz posuwać się tak daleko, formatowanie sekcji komentarzy na listach kodów za pomocą LaTeX-a powinno być dość proste.
listings
Pakiet może pomóc ciągnąć ten off. Oto krótki przykład:Przy niektórych dodatkowych manipulacjach powinieneś być w stanie uzyskać odniesienia do numerów równań, które pojawią się w czcionce o jednolitej przestrzeni używanej do wyliczenia równania.
źródło
Podejście nowegob, o którym wspomniał Bill, ewoluowało całkiem sporo, zarówno w oryginalnym duchu dokumentowania kodu (a nie publikacji naukowej) pod pojęciem programowania literackiego, a teraz ma wiele smaków (domyślam się, że noweb było początkowo uogólnieniem cweb), która
doxygen
i różne wersje językowe mogą generować dokumentację w TeX, HTML i innych formatach.Co więcej, noweb zostało opracowane przez pewien czas w
R
społeczności (pierwotnie wS
społeczności, stąd nazwa) pod tytułem „Sweave” w celu zapewnienia „powtarzalnego badania”, w którym kod jest uruchamiany, gdy plik lateksu jest kompilowany (i opcjonalnie również wyświetlany). W Sweave napisanych jest całkiem sporo artykułów naukowych (w tym, jak sądzę, cały dziennik R; ale patrz także dziennik biostatystyczny i jego polityka dotycząca powtarzalnych artykułów).Chociaż Sweave jest nadal częścią każdej podstawowej instalacji R, jest on zastępowany przez knitr, który jest teraz niezależny od języka , co czyni go możliwym wyborem dla twojego kodu python. Knitr obsługuje pisanie w LaTeX-ie lub markdown, obsługuje podświetlanie składni, buforowanie, eksternalizację kodu z lateksu źródłowego i wiele innych pożądanych funkcji do tego rodzaju pracy.
Python ma własne rozwiązania, które są podobne, zeszyty ipython , które mogą renderować do HTML, może LaTeX, ale mniej o tym wiem.
Kolejnym projektem zdecydowanie wartym obejrzenia jest dexyit , inny program niezależny od języka, który działa bardzo dobrze z LaTeX i HTML. Chociaż ma więcej przykładów w dokumentowaniu kodu niż w pisaniu artykułów naukowych, praca w LaTeXie powinna być prosta.
Oba
knitr
idexyit
zrobią dokładnie to, co opisujesz w LaTeX, włączając w to wskazywanie na zewnętrzny skrypt Pythona i wczytywanie kodu. Podobne rzeczy można osiągnąć w DocBook i XML, choć mniej znam tego podejścia.źródło
Pakiet LaTeX wybite zapewnia bardzo szerokie podświetlanie składni (w oparciu o Pygments) i pozwala na powiązanie danych w obu kierunkach. Możesz uciec do LaTeXa z części kodowej (część wybita) i możesz odwoływać się w tekście głównym do wierszy kodu. Ponadto zapewnia środowisko listowania, dzięki czemu można wygenerować „listę list” (np. Listę tabel) i umożliwić odwoływanie się do całych list. Zobacz LaTeX MWE i jego dane wyjściowe z LuaLaTeX poniżej (nie oceniaj kodu :-)).
Inną opcją byłoby użycie PythonTeX od tego samego autora / opiekuna, który umożliwia uruchomienie obliczeń podczas kompilacji źródła LaTeX, dlatego wyniki papierowe i kodowe są zawsze generowane razem, a zatem są zawsze spójne. Zobacz galerię PythonTeX tutaj.
źródło
Skorzystaj z funkcji programowania umiejętności czytania i pisania w trybie org .
Większość użytkowników w trybie org koncentruje się wyłącznie na wbudowanej funkcji zarządzania projektami / czasem lub na możliwości eksportowania dokumentów do wielu popularnych formatów plików, np. PDF , z łatwych w utrzymaniu plików tekstowych .
Jednak najlepszą funkcją trybu org jest możliwość tworzenia programów czytania i pisania w ponad 30 językach, a co miesiąc dodawanych jest więcej języków przez społeczność open source.
Poniżej znajdują się trywialne przykłady kodu wykorzystujące Ruby i Python:
Plusy
Zdolność do:
SRC
wyniki bloku jako dane wyjściowe i / lub wartość.SRC
wyniki bloków jako kod, listy, tabele, lateks, HTMLSRC
bloków.SRC
bloków wSRC
bloki jako zmienne.noweb
składni wSRC
blokach.Projekt open source - zarówno darmowy jak w piwie, jak i wolny jak wolność.
Cons
Musisz mieć zainstalowany gnu emacs i skonfigurowany do korzystania z trybu org.
Musisz zainstalować i skonfigurować całe potrzebne oprogramowanie do programowania.
ipython notebooks
iSweave
tak prawdopodobnie nie będzie widać, jak wiele ofert pracy, chociaż funkcjonalność Literate Programowanie został dodany w 2008 roku.źródło