Tengo algunos entornos para Python creados a partir de piton
paquetes por un lado y Pyluatex
por el otro.
A veces me gustaría copiar su contenido en un archivo Python externo (que luego se crea si aún no existe). ¿Sabes cómo se podría hacer esto? Por ejemplo, ¿creando un argumento opcional para los entornos creados? ¿Una versión estrella de pyverbatim*
, pyblock*
etc.?
\documentclass{article}
\usepackage{xcolor,currfile,needspace,fontawesome5,luacode}
\usepackage{pyluatex}
\usepackage{piton}
\begin{luacode}
function pytypeset()
tex.print("\\begin{Piton}")
tex.print(pyluatex.get_last_code())
tex.print("\\end{Piton}")
tex.print("")
end
function pytypesetREPL()
tex.print("\\begin{Piton}")
tex.print(pyluatex.get_last_output())
tex.print("\\end{Piton}")
tex.print("")
end
\end{luacode}
\newcommand*{\pytypeset}
{\directlua{pytypeset()}}
\newcommand*{\pytypesetREPL}
{\directlua{pytypesetREPL()}}
% Environnements Python
\NewPitonEnvironment{pyverbatim}{ !d<> !O{} }{
\Needspace*{\baselineskip}
\IfValueT{#1}{{\bfseries\sffamily\color{mongris}{\tiny\faSquare\:\faSquare\:\:}#1}}
\PitonOptions{#2}}{}
\NewDocumentEnvironment{pyconsole}{ !d<> !O{} }
{\Needspace*{\baselineskip}\PyLTVerbatimEnv\begin{pythonrepl}}
{\end{pythonrepl}
\IfValueT{#1}{{\bfseries\sffamily{\tiny\faSquare\:\faSquare\:\:}#1}}
\PitonOptions{#2}\pytypesetREPL}
%
\newenvironment{pycode}
{\PyLTVerbatimEnv\begin{pythonq}}
{\end{pythonq}}
%
\NewDocumentEnvironment{pyblock}{ !d<> !O{} }
{\PyLTVerbatimEnv\begin{pythonq}}
{\end{pythonq}
\Needspace*{\baselineskip}
\IfValueT{#1}{{\bfseries\sffamily{\tiny\faSquare\:\faSquare\:\:}#1}}
\PitonOptions{#2}\pytypeset
\Needspace*{\baselineskip}
}
%
\begin{document}
\begin{pyverbatim}
x = 1
\end{pyverbatim}
\begin{pyblock}
y = 2
\end{pyblock}
% Desired : environments with an other option writing environment content in "filename.py"
\begin{pyverbatim}[write="filename.py"]
x = 1
\end{pyverbatim}
% at this step, the external file does not exist so the file is created and the content x=1 written to the file
\begin{pyverbatim}[write="filename.py"]
x = 1
\end{pyverbatim}
% at this step, filename.py exist, so y = 2 is added
\begin{pyblock}[write="filename.py"]
y = 2
\end{pyblock}
\end{document}
Respuesta1
La última versión de piton
(v. 2.3 2024-01-06) proporciona una nueva clave write
con esa funcionalidad.