A posibilidade de introducir código Python nun documento Latex, otórgalle a estes unha capacidade de edición de contidos incríbel. Pódense crear exercicios con datos automatizados e aleatorios e incluso se lle pode facilitar a resposta correcta ao alumno, permite a representación de funcións e gráficos de diferentes tipos, o análise dun ficheiro con datos: cálculo de medias, varianzas, etc. Tamén podemos imprimir nun pdf distintos mapas de Google Maps. Vexamos como se instala a librería Pythontex, que é a protagonista desta maxia.
Primeiramente comprobamos se está instalada pythontex no sistema operativo. Tan só temos que abrir o emulador de terminal e escribir pythontex. No caso de instalar texlive-full, xa dispoñemos desta ferramenta, que está na ruta:
/usr/share/texlive/texmf-dist/scripts/pythontex
Se a distribución coa que traballas non recoñece o comando pythontex á hora de escribilo no terminal, debemos instalar esta ferramenta segundo os seguintes puntos:
1. Descarga da librería pythontex
Páxina oficial: https://ctan.org/pkg/pythontex
Ligazón para a súa descarga: https://mirrors.ctan.org/macros/latex/contrib/pythontex.zip
2. Descomprimimos e instalamos
Abrimos un terminal no cartafol e executamos as seguintes intrucións:
latex pythontex.ins
E con esta orde xérase o ficheiro pythontex.sty
Seguidamente executamos o seguinte:
su root (introducimos o contrasinal) python pythontex_install.py
E aparece un diálogo mediante o cal nos pregunta pola ruta na que queremos instalar o pythontex. Escollemos a opción 1
E instala na seguinte ruta:
/usr/share/texmf-dist/scripts/pythontex
3. Editamos un ficheiro tex
Neste exemplo creamos un número aleatorio con Python. Introducimos o seguinte código no noso editor favorito:
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \begin{document} Número aleatorio: \begin{pycode} from numpy import * r1=random.uniform(3,11) print (r1) \end{pycode} \end{document}
Se o que desexamos é escoller un número dentro dunha serie deles definidos nun array, podemos facelo do seguinte xeito:
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \begin{document} Número aleatorio: \begin{pycode} from numpy import * r1=random.choice([2,3,4,5,6]) print (r1) \end{pycode} \end{document}
Incluso podemos rescatar un valor calculado en Python e empregalo dentro do documento Latex. Ista propiedade é moi interesante, xa que nos permite crear exercicios con valores aleatorios e automatizados.
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \begin{document} \begin{pycode} from numpy import * r1=random.choice([2,3,4,5,6]) \end{pycode} Valor aleatorio: \py{r1} \end{document}
4. Compilamos o ficheiro .tex
Abrimos o terminal na ruta na cal teñamos gardado o ficheiro anterior e executamos as tres ordes seguintes en orde:
pdflatex --shell-escape -synctex=1 -interaction=nonstopmode *.tex python3 /usr/share/texmf-dist/scripts/pythontex/pythontex3.py *.tex pdflatex --shell-escape -synctex=1 -interaction=nonstopmode *.tex
Se abrimos o ficheiro pdf que se xerou no mesmo cartafol no cal está situado o ficheiro tex, visalizamos o resultado:
Resulta moi cómodo crear uns alias dos comandos para evitar recordar ordes tan longas ou ter que andar copiando e pegando no terminal. Para isto editamos o ficheiros .bashrc do usuario que utilicemos
cd ~ nano .bashrc
E engadimos ao final do ficheiro os seguintes alias:
alias plx='pdflatex --shell-escape -synctex=1 -interaction=nonstopmode' alias ptx='python3 /usr/share/texmf-dist/scripts/pythontex/pythontex3.py'
Para gardar prememos a combinación de teclas Ctrl + o e para saír Ctrl + x
E seguidamente para cargar estes alias, podemos reiniciar o equipo ou escribir:
source ~.bashrc
Se empregamos os alias anteriores procederiamos do seguinte xeito para compilar o ficheiro tex:
plx *.tex && ptx *.tex && plx *.tex
5. importar librerías Python
Nos seguinte exemplos debemos importar librerías Python.
apt install python-
sympy
python-numpy python-scipy python-matplotlib
6. Outros exemplos
a. Outra forma de chamar a comandos Python
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \begin{document} Sabes que $2^{65} = \py{2**65}$? \end{document}
E compilando, obtemos:
b. Inserir gráficos no documento final
Con Python podemos crear moitos gráficos a partir de datos numéricos. Na seguinte páxina dispoñemos de moitos tipos de gráficos e do seu código python para crealos. Facendo unha labor de adaptación podemos empregalos en Latex. Vexamos un exemplo:
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \begin{document} \begin{pycode} from pylab import * t = arange(0.0, 2.0, 0.01) s = sin(2*pi*t) plot(t, s) grid(True) # MATLAB style xticklines = getp(gca(), 'xticklines') yticklines = getp(gca(), 'yticklines') xgridlines = getp(gca(), 'xgridlines') ygridlines = getp(gca(), 'ygridlines') xticklabels = getp(gca(), 'xticklabels') yticklabels = getp(gca(), 'yticklabels') setp(xticklines, 'linewidth', 3) setp(yticklines, 'linewidth', 3) setp(xgridlines, 'linestyle', '-') setp(ygridlines, 'linestyle', '-') setp(yticklabels, 'color', 'r', fontsize='medium') setp(xticklabels, 'color', 'r', fontsize='medium') show() \end{pycode} \end{document}
E despois de compilalo obtemos esta vista:
c. Enviar unha función a un pdf
\documentclass{article} \usepackage[pyfuture=none,gobble=auto]{pythontex} \pgfplotsset{compat=1.17} \usepackage{pgfplots} \usepackage{graphicx} \begin{document} \begin{pycode} from pylab import * t = arange(0.0, 2.0, 0.01) s = sin(2*pi*t) plot(t, s) grid(True) # MATLAB style xticklines = getp(gca(), 'xticklines') yticklines = getp(gca(), 'yticklines') xgridlines = getp(gca(), 'xgridlines') ygridlines = getp(gca(), 'ygridlines') xticklabels = getp(gca(), 'xticklabels') yticklabels = getp(gca(), 'yticklabels') setp(xticklines, 'linewidth', 3) setp(yticklines, 'linewidth', 3) setp(xgridlines, 'linestyle', '-') setp(ygridlines, 'linestyle', '-') setp(yticklabels, 'color', 'r', fontsize='medium') setp(xticklabels, 'color', 'r', fontsize='medium') plt.savefig('figure.png',dpi=200) \end{pycode} \IfFileExists{figure.png}{ \includegraphics{figure} }{} \end{document}
Pero para compilalo, debemos de chamar aos tres comandos, pero por separado. Cando remate un executamos o outro:
plx *.tex
ptx *.tex
plx *.tex