Estoy escribiendo un documento reproducible, y el documento tiene resultados computacionales generados por un script de Python (un script MATLAB similar genera resultados casi idénticos). Siento que el papel sería más fácil de entender para los lectores si pudieran hacer coincidir los cálculos en el papel con los cálculos en el código. El trabajo propone un formalismo abstracto, y se supone que los ejemplos en el documento hacen este formalismo más concreto para los lectores (muchos de los cuales serán ingenieros); el código probablemente será el registro más detallado de cómo realizar los cálculos, y dejarlo en claro podría ayudarnos durante el proceso de revisión.
¿Alguien tiene alguna sugerencia sobre cómo hacer que la correspondencia entre el código y los resultados computacionales (figuras, ecuaciones) sea más clara?
Por ejemplo, estaba pensando que cuando se trata de líneas de código que implementan varios pasos en el documento, podría citar números de ecuaciones (sería increíble si pudiera hacer referencias cruzadas entre el código y LaTeX, pero etiquetarlos a mano está bien) , y podría escribir funciones correspondientes a los diversos ejemplos y figuras, como
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Si el código fuera grande, y no estuviera tratando de explicar cómo un montón de métodos matemáticos diferentes utilizados en ingeniería eran realmente los mismos, probablemente no me molestaría tanto en aclarar el código, pero dada la naturaleza abstracta del papel y la pequeña base de código, parece que podría haber valor en este ejercicio.
fuente
Respuestas:
Puede considerar escribir todo el artículo en Noweb . Es un poco tedioso configurarlo, pero es una forma muy poderosa de mezclar código y texto, ecuaciones y figuras con formato LaTeX. Para programas largos, tiende a convertir su código en más de un libro que un artículo, pero para programas cortos, podría funcionar bastante bien.
Si no quiere llegar tan lejos, aún así debería ser razonablemente sencillo formatear las secciones de comentarios de sus listados de códigos utilizando LaTeX. El
listings
paquete puede ayudarlo a lograr esto. Aquí hay un breve ejemplo:Con algunas manipulaciones adicionales, debería poder obtener sus números de ecuación referenciados para que aparezcan en la fuente monoespacial que utiliza para enumerar la ecuación.
fuente
El enfoque noweb mencionado por Bill ha evolucionado bastante, tanto en su espíritu original de documentar código (en lugar de publicación científica) bajo el término programación alfabetizada y ahora viene en muchos sabores (supongo que noweb fue una generalización de cweb inicialmente), de cuál
doxygen
y varias versiones específicas del idioma pueden generar documentación en TeX, HTML y otros formatos.Además, noweb se ha desarrollado durante algún tiempo en la
R
comunidad (bueno, originalmente laS
comunidad, de ahí el nombre) bajo el título "Sweave" con el objetivo de proporcionar un documento de "investigación reproducible", donde el código se ejecuta realmente cuando el archivo de látex se compila (y opcionalmente también se muestra). Una gran cantidad de artículos académicos están escritos en Sweave (incluyendo, creo, toda la revista R; pero vea también la revista de bioestadística y su política sobre documentos reproducibles).Si bien Sweave todavía es parte de cualquier instalación de base R, está siendo reemplazada por knitr, que ahora es independiente del lenguaje , por lo que es una posible opción para su código de Python. Knitr admite la escritura en LaTeX o Markdown, lo que permite resaltar la sintaxis, el almacenamiento en caché, la externalización del código del látex de origen y muchas otras características deseables para este tipo de trabajo.
Python tiene sus propias soluciones que son similares, portátiles de ipython , que pueden renderizar a HTML, tal vez LaTeX, pero sé menos sobre esto.
Otro proyecto que definitivamente vale la pena ver es Dexyit , otro programa independiente del lenguaje que funciona muy bien con LaTeX y HTML. Si bien tiene más ejemplos en la documentación de código que en la redacción de artículos científicos, trabajar en LaTeX debería ser sencillo.
Tanto
knitr
ydexyit
hará exactamente lo que usted describe en el látex, incluyendo apuntando a un script en Python externa y la lectura en el código. Se pueden lograr cosas similares en DocBook y XML, aunque estoy menos familiarizado con este enfoque.fuente
El paquete LaTeX creado ofrece un resaltado de sintaxis muy extenso (basado en Pygments) y permite referencias cruzadas en ambas direcciones. Puede escapar a LaTeX desde la parte del código (la parte acuñada) y puede hacer referencia en su texto principal a líneas de código. Además de eso, proporciona un entorno de listados para que pueda generar una "lista de listados" (como una lista de tablas) y permite hacer referencia a listados completos. Vea LaTeX MWE y su salida con LuaLaTeX a continuación (no juzgue el código :-)).
Otra opción sería usar PythonTeX del mismo autor / mantenedor que permite ejecutar los cálculos al compilar la fuente LaTeX, por lo tanto, los resultados en papel y en código siempre se generan juntos y, por lo tanto, siempre son coherentes. Vea la galería de PythonTeX aquí.
fuente
Utilice la funcionalidad de programación literaria del modo org .
La mayoría de los usuarios del modo de organización tienden a centrarse exclusivamente en la funcionalidad integrada de gestión de tiempo / proyecto o en la capacidad de exportar documentos a múltiples formatos de archivo populares, por ejemplo , PDF , desde archivos de texto fáciles de mantener .
Sin embargo, la mejor característica del modo org es la capacidad de crear programas alfabetizados en más de 30 idiomas con más idiomas agregados cada mes por la comunidad de código abierto.
A continuación se muestran ejemplos de códigos triviales con Ruby y Python:
Pros
La habilidad para:
SRC
resultados del bloque como salida y / o valor.SRC
resultados del bloque como código, listas, tabla, látex, htmlSRC
bloques.SRC
bloques con nombre enSRC
bloques como variables.noweb
sintaxis dentro de losSRC
bloques.Proyecto de código abierto, tanto gratis como en cerveza y gratis como en libertad.
Contras
Necesita tener gnu emacs instalado y configurado para usar el modo org.
Necesita instalar y configurar todo el software de programación que necesita.
ipython notebooks
oSweave
por lo que probablemente no verá tantas ofertas de trabajo a pesar de que sabe leer y escribir funcionalidad de programación se añadió en 2008.fuente