泰克斯外科

泰克斯外科

我希望能够编写一个 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 内核

我用pipenv满足要求

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}

在此处输入图片描述

相关内容