Estou escrevendo um artigo reproduzível, e o artigo tem resultados computacionais gerados por um script Python (um script MATLAB semelhante gera resultados quase idênticos). Eu acho que o artigo seria mais fácil de entender para os leitores se eles pudessem combinar os cálculos no papel com os cálculos no código. O trabalho propõe um formalismo abstrato, e os exemplos no artigo devem tornar esse formalismo mais concreto para os leitores (muitos dos quais serão engenheiros); o código provavelmente será o registro mais detalhado de como executar os cálculos, e deixar claro pode nos ajudar durante o processo de revisão.
Alguém tem alguma sugestão de como tornar mais clara a correspondência entre código e resultados computacionais (figuras, equações)?
Por exemplo, eu estava pensando que quando se tratava de linhas de código implementando várias etapas do artigo, eu poderia citar números de equações (seria incrível se eu pudesse cruzar a referência entre o código e o LaTeX, mas rotulá-los à mão é bom) , e eu poderia escrever funções correspondentes aos vários exemplos e figuras, como
def example_1():
# Insert code corresponding to first example
pass
def figure_1():
# Insert code that generates Figure 1
pass
Se o código fosse grande e eu não estivesse tentando explicar como vários métodos matemáticos usados na engenharia eram realmente os mesmos, provavelmente não me incomodaria muito em tornar o código claro, mas, dada a natureza abstrata do papel e a pequena base de código, parece que poderia haver valor neste exercício.
fonte
Respostas:
Você pode escrever o artigo inteiro no Noweb . É um pouco tedioso de configurar, mas é uma maneira muito poderosa de misturar código, texto, equações e figuras no formato LaTeX. Para programas longos, ele tende a transformar seu código em mais um livro do que em um artigo, mas para programas curtos, pode funcionar muito bem.
Se você não deseja ir tão longe, ainda deve ser razoavelmente simples formatar as seções de comentários de suas listagens de código usando o LaTeX. O
listings
pacote pode ajudá-lo a fazer isso. Aqui está um pequeno exemplo:Com algumas manipulações adicionais, você deve conseguir que seus números de equações referenciados apareçam na fonte monoespaçada usada para listar a equação.
fonte
A abordagem noweb mencionada por Bill evoluiu bastante, tanto em seu espírito original de documentar código (em vez de publicação científica) sob o termo programação alfabetizada e agora vem em vários sabores (acho que noweb foi uma generalização da cweb inicialmente), de que
doxygen
e várias versões específicas de idiomas podem gerar documentação em TeX, HTML e outros formatos.Mais ao seu ponto, noweb foi desenvolvido há algum tempo na
R
comunidade (bem originalmente aS
comunidade, daí o nome) sob o título "Sweave", com o objetivo de fornecer um documento de "pesquisa reproduzível", onde o código é realmente executado quando o arquivo de látex é compilado (e opcionalmente exibido também). Muitos artigos acadêmicos são escritos em Sweave (incluindo, acredito, todo o periódico R; mas veja também o jornal de bioestatística e sua política sobre artigos reproduzíveis).Enquanto o Sweave ainda faz parte de qualquer instalação básica do R, ele está sendo substituído pelo knitr, que agora é independente da linguagem , tornando-o uma opção possível para o seu código python. Knitr suporta gravação em LaTeX ou markdown, suportando destaque de sintaxe, armazenamento em cache, externalização do código a partir do látex de origem e muitos outros recursos desejáveis para esse tipo de trabalho.
O Python possui soluções próprias que são similares, notebooks ipython , que podem renderizar para HTML, talvez LaTeX, mas eu sei menos sobre isso.
Outro projeto que definitivamente merece ser visto é o dexyit , outro programa independente de idioma que funciona muito bem com LaTeX e HTML. Embora tenha mais exemplos de documentação de códigos do que de artigos científicos, trabalhar no LaTeX deve ser direto.
Ambos
knitr
edexyit
vai fazer exatamente o que você descreve no LaTeX, incluindo apontando para script python externo e ler no código. Coisas semelhantes podem ser realizadas no DocBook e XML, embora eu esteja menos familiarizado com essa abordagem.fonte
O pacote LaTeX cunhado fornece realce de sintaxe muito extenso (baseado em pigmentos) e permite referências cruzadas em ambas as direções. Você pode escapar para o LaTeX de dentro da parte do código (a parte cunhada) e pode consultar no texto principal as linhas de código. Além disso, ele fornece um ambiente de listagem para que você possa gerar uma "lista de listagens" (como uma lista de tabelas) e permite fazer referência a listagens inteiras. Veja LaTeX MWE e sua saída com LuaLaTeX abaixo (não julgue o código :-)).
Outra opção seria usar o PythonTeX do mesmo autor / mantenedor, o que permite executar os cálculos enquanto compila a fonte do LaTeX; portanto, os resultados de papel e código são sempre gerados juntos e, portanto, sempre coerentes. Veja a galeria do PythonTeX aqui.
fonte
Use a funcionalidade de programação alfabética do modo organizacional .
A maioria dos usuários do modo organizacional tendem a se concentrar exclusivamente na funcionalidade de gerenciamento de projeto / tempo ou na capacidade de exportar documentos para vários formatos populares de arquivos, como PDF , de arquivos de texto fáceis de manter .
No entanto, a melhor característica do modo organizacional é a capacidade de criar programas alfabetizados em mais de 30 idiomas, com mais idiomas adicionados todos os meses pela comunidade de código aberto.
Abaixo estão exemplos de código triviais usando Ruby e Python:
Prós
A habilidade de:
SRC
resultados do bloco como saída e / ou valor.SRC
resultados do bloco como código, listas, tabela, látex, htmlSRC
blocos.SRC
blocos nomeados emSRC
blocos como variáveis.noweb
sintaxe dentro deSRC
blocos.Projeto de código aberto - tanto grátis quanto em cerveja e livre como em liberdade.
Contras
Precisa ter o gnu emacs instalado e configurado para usar o modo organizacional.
Precisa instalar e configurar todo o software de programação necessário.
ipython notebooks
ouSweave
então você provavelmente não vai ver como muitas ofertas de trabalho, embora a funcionalidade Alfabetizado programação foi introduzido em 2008.fonte