summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2022-06-05 21:02:04 +0000
committerKarl Berry <karl@freefriends.org>2022-06-05 21:02:04 +0000
commit80aa3b5de37b11d9f895cf844adcd9bb8fc127d2 (patch)
tree1453475e0f24bea856956c6326dfba3ceb01fc3a
parent4d435df3faff5acb9f1c0f0b94944c4285980c9e (diff)
pyluatex (5jun22)
git-svn-id: svn://tug.org/texlive/trunk@63491 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/lualatex/pyluatex/README.md6
-rw-r--r--Master/texmf-dist/doc/lualatex/pyluatex/example/beamer.tex38
-rw-r--r--Master/texmf-dist/doc/lualatex/pyluatex/example/repl.tex4
-rw-r--r--Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.pdfbin81863 -> 82658 bytes
-rw-r--r--Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.tex43
-rw-r--r--Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.lua15
-rw-r--r--Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.sty11
7 files changed, 69 insertions, 48 deletions
diff --git a/Master/texmf-dist/doc/lualatex/pyluatex/README.md b/Master/texmf-dist/doc/lualatex/pyluatex/README.md
index a6faac70c23..c93a3b8c8bf 100644
--- a/Master/texmf-dist/doc/lualatex/pyluatex/README.md
+++ b/Master/texmf-dist/doc/lualatex/pyluatex/README.md
@@ -34,7 +34,7 @@ $\sqrt{371} = \py{math.sqrt(371)}$
```
**Note:** PyLuaTeX starts Python 3 using the command `python3` by default.
If `python3` does not start Python 3 on your system, find the correct command
-and replace `\usepackage{pyluatex}` with `\usepackage[executable={your python command}]{pyluatex}`.
+and replace `\usepackage{pyluatex}` with `\usepackage[executable=<your python command>]{pyluatex}`.
For example, `\usepackage[executable=python.exe]{pyluatex}`.
2\. Compile using LuaLaTeX (shell escape is required)
@@ -49,8 +49,8 @@ executed. For this reason, it is recommended to compile trusted documents only.
* Python 3
* Linux, macOS or Windows
-Our automated tests currently use TeX Live 2021 and Python 3.7+ on
-Ubuntu 20.04, macOS Big Sur 11 and Windows Server 2019.
+The automated tests currently use TeX Live 2022 and Python 3.8+ on
+Ubuntu 20.04, macOS Big Sur 11 and Windows Server 2022.
## License
[LPPL 1.3c](http://www.latex-project.org/lppl.txt) for LaTeX code and
diff --git a/Master/texmf-dist/doc/lualatex/pyluatex/example/beamer.tex b/Master/texmf-dist/doc/lualatex/pyluatex/example/beamer.tex
index 6dea2ea6c96..31ba69db821 100644
--- a/Master/texmf-dist/doc/lualatex/pyluatex/example/beamer.tex
+++ b/Master/texmf-dist/doc/lualatex/pyluatex/example/beamer.tex
@@ -8,7 +8,7 @@
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-\documentclass{beamer}
+\documentclass[t]{beamer}
\usepackage{pyluatex}
\usepackage{listings}
@@ -64,13 +64,17 @@ end
%%%%%%%%%%%%%%%%%%%%%% frame
\begin{frame}{Important}
-Using PyLuaTeX environments (\emph{python} or \emph{pythonq}) inside BEAMER frames
-requires the \emph{fragile} option for those frames.
+Using PyLuaTeX environments (\texttt{python}, \texttt{pythonq}, or \texttt{pythonrepl}) inside BEAMER frames
+requires the \texttt{fragile} option for those frames.
+
+\medskip
+If you don't use overlays in a frame, i.e. the frame contains only a single slide,
+you can use the \texttt{fragile=singleslide} option.
\end{frame}
%%%%%%%%%%%%%%%%%%%%%% frame
-\begin{frame}[fragile]{Slide 1}
+\begin{frame}[fragile=singleslide]{Python environment inside frame}
\begin{pythonq}
msg = 'Hello slide 1'
@@ -96,27 +100,31 @@ msg = 'Hello slide 2'
print(msg)
\end{pythonq}
-\begin{frame}{Slide 1}
+\begin{frame}{Python environment outside frame}
\pytypeset
-The \emph{fragile} option is not required in this frame because
-the \emph{pythonq} environment is outside the frame.
-Only the macro \emph{\textbackslash pytypeset} for typesetting the code and output is inside
+The \texttt{fragile} option is not required in this frame because
+the \texttt{pythonq} environment is outside the frame.
+Only the macro \texttt{\textbackslash pytypeset} for typesetting the code and output is inside
the frame.
+
+\medskip
+Inline Python still works: The result of \pyq{17 + 300}$\coderaw$ is \outputraw
\end{frame}
%%%%%%%%%%%%%%%%%%%%%% frame
-\newenvironment{typesetpython}
- {\PyLTVerbatimEnv\begin{pythonq}}
- {\end{pythonq}\pytypeset}
-
-\begin{frame}[fragile]{Slide 2}
-\begin{typesetpython}
+\begin{frame}[fragile]{Overlays}
+\begin{pythonq}
msg = 'Custom environment'
print(msg)
-\end{typesetpython}
+\end{pythonq}
+\pytypeset
+\pause
+
+In this frame, \texttt{fragile} is required instead of \texttt{fragile=singleslide},
+because we use overlays.
\end{frame}
\end{document}
diff --git a/Master/texmf-dist/doc/lualatex/pyluatex/example/repl.tex b/Master/texmf-dist/doc/lualatex/pyluatex/example/repl.tex
index 28de0090cf9..8622223ef3c 100644
--- a/Master/texmf-dist/doc/lualatex/pyluatex/example/repl.tex
+++ b/Master/texmf-dist/doc/lualatex/pyluatex/example/repl.tex
@@ -57,9 +57,9 @@ square(5)
\maketitle
PyLuaTeX allows you to run and typeset Python code in an interactive console
-or read–eval–print loop (REPL) fashion. Very much like in an IPython session,
+or read–eval–print loop (REPL) fashion. Very much like in an interactive python session,
code is prefixed with \verb|>>>| (or \verb|...| in case of multi-line commands)
-and the results are printed automatically.
+and the results are added to the output buffer automatically.
Both code and output are stored in PyLuaTeX's ouput buffer and can be accessed
by \verb|pyluatex.get_last_output()|. In this way, you can adjust the typesetting
diff --git a/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.pdf b/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.pdf
index 82ff4f85bf1..c7710f6f78c 100644
--- a/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.pdf
+++ b/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.tex b/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.tex
index c4a10738ac0..366a7ae8dae 100644
--- a/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.tex
+++ b/Master/texmf-dist/doc/lualatex/pyluatex/pyluatex.tex
@@ -15,7 +15,7 @@
\usepackage{url}
\title{The \emph{pyluatex} package}
\author{Tobias Enderle\\\url{https://github.com/tndrle/PyLuaTeX}}
-\date{v0.4.4 (2022/03/16)}
+\date{v0.5.0 (2022/06/05)}
\begin{document}
\maketitle
\raggedright
@@ -56,7 +56,7 @@ $\sqrt{371} = \py{math.sqrt(371)}$
\end{tcblisting}
\textbf{Note:} PyLuaTeX starts Python 3 using the command \inlcode|python3| by default.
If \inlcode|python3| does not start Python 3 on your system, find the correct command
-and replace \inlcode|\usepackage{pyluatex}| with \inlcode|\usepackage[executable={your python command}]{pyluatex}|.
+and replace \inlcode|\usepackage{pyluatex}| with \inlcode|\usepackage[executable=<your python command>]{pyluatex}|.
For example, \inlcode|\usepackage[executable=python.exe]{pyluatex}|.
\item Compile using Lua\LaTeX{} (shell escape is required)
\begin{tcblisting}{breakable,listing only,
@@ -131,32 +131,35 @@ The package options \inlcode|verbose| and \inlcode|ignoreerrors| can be changed
\subsection{Macros}
\begin{itemize}
-\item \inlcode|\py{code}|\\[0.5ex]
- Executes (object-like) \inlcode|code| and writes its string representation to the document.\\[0.5ex]
+\item \inlcode|\py{<code>}|\\[0.5ex]
+ Executes (object-like) \inlcode|<code>| and writes its string representation to the document.\\[0.5ex]
\textit{Example:} \inlcode|\py{3 + 7}|
-\item \inlcode|\pyq{code}|\\[0.5ex]
- Executes (object-like) \inlcode|code|. Any output is suppressed.\\[0.5ex]
+\item \inlcode|\pyq{<code>}|\\[0.5ex]
+ Executes (object-like) \inlcode|<code>|. Any output is suppressed.\\[0.5ex]
\textit{Example:} \inlcode|\pyq{3 + 7}|
-\item \inlcode|\pyc{code}|\\[0.5ex]
- Executes \inlcode|code|. Output (e.g. from a call to \inlcode|print()|) is written to the document.\\[0.5ex]
+\item \inlcode|\pyc{<code>}|\\[0.5ex]
+ Executes \inlcode|<code>|. Output (e.g. from a call to \inlcode|print()|) is written to the document.\\[0.5ex]
\textit{Examples:} \inlcode|\pyc{x = 5}|, \inlcode|\pyc{print('hello')}|
-\item \inlcode|\pycq{code}|\\[0.5ex]
- Executes \inlcode|code|. Any output is suppressed.\\[0.5ex]
+\item \inlcode|\pycq{<code>}|\\[0.5ex]
+ Executes \inlcode|<code>|. Any output is suppressed.\\[0.5ex]
\textit{Example:} \inlcode|\pycq{x = 5}|
-\item \inlcode|\pyfile{path}|\\[0.5ex]
- Executes the Python file specified by \inlcode|path|. Output (e.g. from a call to \inlcode|print()|) is written to the document.\\[0.5ex]
+\item \inlcode|\pyfile{<path>}|\\[0.5ex]
+ Executes the Python file specified by \inlcode|<path>|. Output (e.g. from a call to \inlcode|print()|) is written to the document.\\[0.5ex]
\textit{Example:} \inlcode|\pyfile{main.py}|
-\item \inlcode|\pyfileq{path}|\\[0.5ex]
- Executes the Python file specified by \inlcode|path|. Any output is suppressed.\\[0.5ex]
+\item \inlcode|\pyfileq{<path>}|\\[0.5ex]
+ Executes the Python file specified by \inlcode|<path>|. Any output is suppressed.\\[0.5ex]
\textit{Example:} \inlcode|\pyfileq{main.py}|
-\item \inlcode|\pysession{session}|\\[0.5ex]
- Selects \inlcode|session| as Python session for subsequent Python code.\\[0.5ex]
+\item \inlcode|\pysession{<session>}|\\[0.5ex]
+ Selects \inlcode|<session>| as Python session for subsequent Python code.\\[0.5ex]
The session that is active at the beginning is \inlcode|default|.\\[0.5ex]
\textit{Example:} \inlcode|\pysession{main}|
-\item \inlcode|\pyoption{option}{value}|\\[0.5ex]
- Assigns \inlcode|value| to the package option \inlcode|option| anywhere in the document. For more information consider
+\item \inlcode|\pyoption{<option>}{<value>}|\\[0.5ex]
+ Assigns \inlcode|<value>| to the package option \inlcode|<option>| anywhere in the document. For more information consider
the Package Options section.\\[0.5ex]
\textit{Example:} \inlcode|\pyoption{verbose}{true}|
+\item \inlcode|\pyif{<test>}{<then clause>}{<else clause>}|\\[0.5ex]
+ Evaluates the Python boolean expression \inlcode|<test>|, and then executes either the \LaTeX{} code in \inlcode|<then clause>| or the \LaTeX{} code in \inlcode|<else clause>|.\\[0.5ex]
+ \textit{Example:} \inlcode|\pyif{a == 1}{$a = 1$}{$a \neq 1$}|
\end{itemize}
\subsection{Environments}
\begin{itemize}
@@ -197,8 +200,8 @@ in your environment definition, e.g.
\item Python 3
\item Linux, macOS or Windows
\end{itemize}
-Our automated tests currently use TeX Live 2021 and Python 3.7+ on
-Ubuntu 20.04, macOS Big Sur 11 and Windows Server 2019.
+The automated tests currently use TeX Live 2022 and Python 3.8+ on
+Ubuntu 20.04, macOS Big Sur 11 and Windows Server 2022.
\section{Typesetting Code}
Sometimes, in addition to having Python code executed and the output written to your document, you also want to show the code itself in your document.
diff --git a/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.lua b/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.lua
index efa80c75f41..0580d25a539 100644
--- a/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.lua
+++ b/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.lua
@@ -141,7 +141,7 @@ local function split_lines(str)
return t
end
-function pyluatex.execute(code, auto_print, write, repl_mode)
+function pyluatex.execute(code, auto_print, write, repl_mode, store)
local full_code
if auto_print then
full_code = "print(str(" .. code .. "), end='')"
@@ -159,14 +159,17 @@ function pyluatex.execute(code, auto_print, write, repl_mode)
ignore_errors = pyluatex.ignore_errors
}
)
- last_code = split_lines(code)
- last_output = split_lines(output)
+ local output_lines = split_lines(output)
+ if store then
+ last_code = split_lines(code)
+ last_output = output_lines
+ end
if success or pyluatex.ignore_errors then
if pyluatex.verbose or not success then log_output(output) end
if write then
- tex.print(last_output)
+ tex.print(output_lines)
end
else
if not pyluatex.verbose then log_input(full_code) end
@@ -195,7 +198,7 @@ local function record_line(line)
table.insert(env_lines, code_in_line)
end
local code = table.concat(env_lines, "\n")
- local success = pyluatex.execute(code, false, false, env_repl_mode)
+ local success = pyluatex.execute(code, false, false, env_repl_mode, true)
if success or pyluatex.ignore_errors then
return line:sub(s)
else
@@ -235,7 +238,7 @@ function pyluatex.run_file(path, write, repl_mode)
elseif code:sub(-1) == "\n" then
code = code:sub(0, -2)
end
- pyluatex.execute(code, false, write, repl_mode)
+ pyluatex.execute(code, false, write, repl_mode, true)
else
tex.sprint(err_cmd("File not found: " .. path))
end
diff --git a/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.sty b/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.sty
index 4d8325c8078..6e287e51000 100644
--- a/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.sty
+++ b/Master/texmf-dist/tex/lualatex/pyluatex/pyluatex.sty
@@ -9,7 +9,7 @@
%% version 2005/12/01 or later.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{pyluatex}[2022/03/16 v0.4.4 Execute Python code on the fly]
+\ProvidesPackage{pyluatex}[2022/06/05 v0.5.0 Execute Python code on the fly]
\RequirePackage{expl3}
\ExplSyntaxOn
@@ -66,7 +66,7 @@
\newenvironment{pythonrepl}{\directlua{pyluatex.record_env("pythonrepl", true)}}{}
-\newcommand*{\pyluatex@inline}[3]{\directlua{pyluatex.execute([==[#1]==], #2, #3, false)}}
+\newcommand*{\pyluatex@inline}[3]{\directlua{pyluatex.execute([==[#1]==], #2, #3, false, true)}}
\newcommand*{\py}[1]{\pyluatex@inline{#1}{true}{true}}
\newcommand*{\pyq}[1]{\pyluatex@inline{#1}{true}{false}}
@@ -81,4 +81,11 @@
\newcommand*{\pyfileq}[1]{\directlua{pyluatex.run_file([==[#1]==], false, false)}}
\newcommand*{\pyfilerepl}[1]{\directlua{pyluatex.run_file([==[#1]==], false, true)}}
+\newcommand*{\pyif}[1]{%
+ \ifnum1=\directlua{pyluatex.execute([==['1' if (#1) else '0']==], true, true, false, false)}\relax
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi}
+
\endinput