J'écris un papier reproductible, et le papier a des résultats de calcul qui sont générés par un script Python (un script MATLAB similaire génère des résultats presque identiques). Je pense que le papier serait plus facile à comprendre pour les lecteurs s'ils pouvaient faire correspondre les calculs dans le papier avec les calculs dans le code. L'ouvrage propose un formalisme abstrait, et les exemples de l'article sont censés rendre ce formalisme plus concret pour les lecteurs (dont beaucoup seront des ingénieurs); le code sera probablement l'enregistrement le plus détaillé de la façon d'effectuer les calculs, et le clarifier pourrait nous aider pendant le processus d'examen.
Quelqu'un a-t-il des suggestions sur la façon de rendre plus claire la correspondance entre le code et les résultats de calcul (figures, équations)?
Par exemple, je pensais que lorsqu'il s'agissait de lignes de code mettant en œuvre diverses étapes du document, je pouvais citer des nombres d'équations (ce serait étonnant si je pouvais croiser les références entre le code et LaTeX, mais les étiqueter à la main est très bien) , et je pourrais écrire des fonctions correspondant aux différents exemples et figures, comme
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Si le code était volumineux et que je n'essayais pas d'expliquer en quoi un tas de méthodes mathématiques différentes utilisées en ingénierie étaient en fait les mêmes, je ne me soucierais probablement pas autant de clarifier le code, mais étant donné la nature abstraite du papier et la petite base de code, il semble que cet exercice puisse être utile.
la source
Réponses:
Vous pourriez envisager d'écrire l'intégralité du document dans Noweb . C'est un peu fastidieux à configurer, mais c'est un moyen très puissant de mélanger du code et du texte, des équations et des figures au format LaTeX. Pour les programmes longs, il a tendance à transformer votre code en un livre plutôt qu'en un article, mais pour les programmes courts, cela pourrait très bien fonctionner.
Si vous ne voulez pas aller aussi loin, il devrait toujours être assez simple de formater les sections de commentaires de vos listes de codes à l'aide de LaTeX. Le
listings
package peut vous aider à retirer cela. Voici un petit exemple:Avec quelques manipulations supplémentaires, vous devriez pouvoir faire apparaître vos numéros d'équation référencés dans la police à espacement fixe qu'il utilise pour répertorier l'équation.
la source
L'approche noweb mentionnée par Bill a beaucoup évolué, à la fois dans son esprit original de documenter le code (plutôt que dans la publication scientifique) sous le terme de programmation alphabétisée et se décline désormais en plusieurs saveurs (je suppose que noweb était une généralisation de cweb au départ), de lesquelles
doxygen
et diverses versions spécifiques à une langue peuvent générer de la documentation en TeX, HTML et autres formats.Plus précisément, noweb a été développé pendant un certain temps dans la
R
communauté (enfin à l'origine laS
communauté, d'où le nom) sous le titre "Sweave" dans le but de fournir un document de "recherche reproductible", où le code est réellement exécuté lorsque le fichier latex est compilé (et éventuellement affiché également). Un grand nombre d'articles universitaires sont écrits en Sweave (y compris, je crois, tous les R-journal; mais voir aussi le journal de biostatistique et sa politique sur les articles reproductibles).Alors que Sweave fait toujours partie de toute installation de base R, il est remplacé par knitr qui est désormais indépendant du langage , ce qui en fait un choix possible pour votre code python. Knitr prend en charge l'écriture dans LaTeX ou le démarquage, prenant en charge la mise en évidence de la syntaxe, la mise en cache, l'externalisation du code à partir du latex source et de nombreuses autres fonctionnalités souhaitables pour ce type de travail.
Python a ses propres solutions similaires, des cahiers ipython , qui peuvent être rendus en HTML, peut-être LaTeX, mais j'en sais moins à ce sujet.
Dexyit , un autre programme indépendant de la langue qui fonctionne très bien avec LaTeX et HTML, vaut vraiment le coup d'œil . Bien qu'il ait plus d'exemples dans la documentation du code que dans la rédaction d'articles scientifiques, travailler dans LaTeX devrait être simple.
Les deux
knitr
etdexyit
fera exactement ce que vous décrivez dans le LATEX, y compris en montrant script python externe et la lecture dans le code. Des choses similaires peuvent être accomplies dans DocBook et XML, bien que je connaisse moins bien cette approche.la source
Le package LaTeX minted fournit une coloration syntaxique très étendue (basée sur Pygments) et permet des références croisées dans les deux directions. Vous pouvez échapper à LaTeX depuis la partie code (la partie frappée) et vous pouvez vous référer dans votre texte principal aux lignes de code. En plus de cela, il fournit un environnement de listes afin que vous puissiez générer une "liste de listes" (comme une liste de tableaux) et permet de référencer des listes entières. Voir LaTeX MWE et sa sortie avec LuaLaTeX ci-dessous (ne jugez pas le code :-)).
Une autre option serait d'utiliser PythonTeX du même auteur / mainteneur qui permet d'exécuter les calculs tout en compilant la source LaTeX, donc les résultats papier et code sont toujours générés ensemble et donc toujours cohérents. Voir la galerie PythonTeX ici.
la source
Utilisez la fonctionnalité de programmation littéraire du mode org .
La plupart des utilisateurs en mode org ont tendance à se concentrer exclusivement sur la fonctionnalité intégrée de gestion de projet / temps ou sur la possibilité d'exporter des documents dans plusieurs formats de fichiers populaires, par exemple PDF , à partir de fichiers texte faciles à entretenir .
Cependant, la meilleure caractéristique du mode org est la possibilité de créer des programmes alphabétisés dans plus de 30 langues avec plus de langues ajoutées chaque mois par la communauté open source.
Voici des exemples de code triviaux utilisant Ruby et Python:
Avantages
La capacité à:
SRC
les résultats des blocs en tant que sortie et / ou valeur.SRC
les résultats des blocs en tant que code, listes, table, latex, htmlSRC
blocs.SRC
blocs nommés enSRC
blocs en tant que variables.noweb
syntaxe à l'intérieur desSRC
blocs.Projet open source - à la fois gratuit comme dans la bière et gratuit comme dans la liberté.
Les inconvénients
Besoin d'avoir gnu emacs installé et configuré pour utiliser le mode org.
Besoin d'installer et de configurer tous les logiciels de programmation dont vous avez besoin.
ipython notebooks
ouSweave
donc vous ne verrez probablement pas autant de offres d'emploi , même si la fonctionnalité de programmation lettrée a été ajouté en 2008.la source