sábado, 18 de julho de 2009

Embutindo código Python no LaTeX

Depois de liberar bastante espaço no meu EeePC com o localepurge consegui, finalmente, instalar o TeXLive no meu netbook.

Como eu não sou especialista em TeX e Python é minha linguagem preferida, comecei a procurar como poderia embutir código Python em meus documentos LaTeX, dessa forma eu teria como gerar código automático em LaTeX.

Conversando com Alex Tercete, conseguimos encontrar uma página com o pacote python para LaTeX que faz exatamente o que queríamos: basta abrir um ambiente chamado python e sair programando :-) todo o output do código Python é interpretado pelo LaTeX - dessa forma podemos gerar tabelas, gráficos etc.

Vamos parar de encher o saco e ir direto ao código: para começar, baixe o pacote python.sty, esse pacote está sob licença GPLv2 e foi criado por Martin R. Ehmsen (veja o site oficial). O que esse arquivo faz, basicamente, é: joga tudo que está entre \begin{python} e \end{python} para o arquivo seu_arquivo_latex.py, executa o comando python seu_arquivo_latex.py, jogando a saída para o arquivo seu_arquivo_latex.py.out e, por fim, adiciona o conteúdo desse ao código LaTeX exatamente onde estava o \begin{python} ... \end{python}.

Depois de baixá-lo, basta colocá-lo no diretório de seu ambiente LaTeX e então incluí-lo com o comando \usepackage{python}. Agora o céu é o limite! ;-)

Apesar de simples, essa solução é bastante flexível e poderosa: podemos gerar gráficos em tempo real em Python (com bibliotecas como a Matplotlib) e gerar código LaTeX para incluí-los em nossos arquivos, gerar tabelas extensas através de loops, coletar dados atualizados de arquivos, bases de dados, sites etc. para serem incluídos em seu relatório dentre outras infinitas possibilidades.

Abaixo seguem alguns exemplos:

  • Um simples "Oi, LaTeX+Python!": Mostrar resultado - Mostrar código - Baixar código.
  • Utilizando a matplotlib: Mostrar resultado - Mostrar código - Baixar código.

Atenção: por padrão o LaTeX não permite que você execute o comando \write e para que o pacote python funcione temos duas opções:

  1. Configurar a opção shell_escape para o valor t no arquivo /usr/share/texmf/web2c/texmf.cnf (necessita de acesso como root).
  2. Passar a opção --shell-escape toda vez que for gerar o PDF, como em: pdflatex --shell-escape meu_arquivo_latex.tex

Achou útil? Comente! :-)

--
   Álvaro Justen
   Peta5 - Telecomunicações e Software Livre

5 comentários:

  1. Legal Alvaro, mas vc jé experimentou a sessão Python do TeXmacs? ou o sagetex que permite rodar python + Sage de dentro do LaTeX?

    ResponderExcluir
  2. Estava procurando exatamente isso e acabei encontrando no seu blog. ;)

    Abração

    ResponderExcluir
  3. nao consigo ter o arquivo.out em python

    ResponderExcluir