
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](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.
```python
apt install python-
```
### 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
