我希望能够编写一个 LaTeX 文档,其中包含我已安装 Jupyter 内核的任何语言的代码块,并让 LaTeX 编译器在这些代码块上运行 Jupyter 的控制台并包含它们的输出,就像 PythonTeX 所做的那样。
我尝试过在网上搜索,但得到的都是包含“LaTeX”和“Jupyter”但与我的需求无关的内容。大多数都是关于将 LaTeX 嵌入 Jupyter(与我想要的相反)。其他一些则自动将现有的 .ipynb 文件转换为完整的 LaTeX 文档(但我想完全跳过 .ipynb 文件,只在 LaTeX 中工作)。在 CTAN 上搜索“Jupyter”没有返回任何结果。
我已经要求 PythonTeX 支持此功能,但他们的回答是“是的,但不会很快。”有人知道现在是否还有其他解决方案吗?
答案1
泰克斯外科
加拿大运输安全局:https://ctan.org/pkg/texsurgery(自 2021-07-10 起 CTAN 新增内容)
存储库:https://framagit.org/pang/texsurgery
例子GAP Jupyter 内核
mkdir demo-texsurgery && cd demo-texsurgery
pipenv install texsurgery pyparsing
有关 Jupyter 内核的安装,请参阅相应内核的相应说明,例如 https://github.com/gap-packages/JupyterKernel#installation。
手动应用未发布的修复程序手术0.6.3(皮皮自 2023 年 3 月起),允许内核名称带有-
(此处gap-4
):
https://framagit.org/pang/texsurgery/-/commit/86d8902e3e592371d191d42517dd41eacc21fd5a
创建演示文件
% file: demo-texsurgery-hello-gap-kernel.tex
\documentclass{article}
\usepackage[gap-4]{texsurgery} % specify kernel
\begin{document}
Here comes output of the GAP Jupyter Kernel:
\begin{run}
modtbl:= CharacterTable( "L3(2)" ) mod 2;;
Print( LaTeXStringDecompositionMatrix( modtbl, 1 ) );
\end{run}
\end{document}
手术预处理文档并输出替换部分的新文档。您可以将texsurgery
和组合pdflatex
如下(此处带有pipenv
前缀):
pipenv run texsurgery demo-texsurgery-hello-gap-kernel.tex -pdf --pdflatex-options -synctex=1
结果如下:
笔记,手术允许在一个文档中使用多个 Jupyter 内核,如下所述: https://framagit.org/pang/texsurgery/-/blob/master/docs/source/kernels.md
补充:TikZ 可视化小于 2500 的素数和孪生素数GAP 封装图
\documentclass{article}
\usepackage[gap-4]{texsurgery} % specify kernel
\usepackage[landscape]{geometry} % tikz matrix is too wide
% for the gap package IntPic generating TikZ code
\usepackage{amsmath}
\usepackage{tikz}
\usepgfmodule{plot}
\usepgflibrary{plothandlers}
\usetikzlibrary{shapes.geometric}
\usetikzlibrary{shadings}
\begin{runsilent}
LoadPackage("Singular");
LoadPackage("IntPic");
SetPrintFormattingStatus("*stdout*", false);
\end{runsilent}
\begin{document}
\begin{run}
row_length := 100;; # the maximum length of a row
nrows := 25;; # the number of rows; TIMEOUT Error for 50
n := row_length*nrows;;
##compute the primes less than n
# Primes is a GAP variable representing the list of primes less than n
mp := Maximum(Primes);;
newprimes := [];;
while mp < n do
mp := NextPrimeInt(mp);;
Add(newprimes, mp);;
od;
small_primes := Union(Primes, newprimes);;
##compute the first element of each pair of twin primes less than n
twins := Filtered(small_primes, p -> IsPrime(p+2));;
rg := [1..n];;
arr := [Intersection(small_primes,rg),[],[],
Intersection(Union(twins,twins+2),rg),[],[],[],[],[],[],[],
[],[],[],[],[],[],Difference(rg,small_primes)];;
Print(IP_TikzArrayOfIntegers([1..n],row_length,rec(highlights:=arr,
cell_width := "6",colsep:="0",rowsep:="0",inner_sep:="2",
shape_only:="",line_width:="0",line_color:="black!20" )));
\end{run}
\end{document}