用于偏序集的 SageTeX

用于偏序集的 SageTeX

可以使用 SAGE 获得偏序集的 LaTeX 输出。例如输入

u=posets.BooleanLattice(4)

print(display(u),print(latex(u)))

在鼠尾草细胞中(https://sagecell.sagemath.org/) 将显示偏序集 u,然后给出 TikZ 输出以在 LaTeX 中获得它。

现在在 SAGE 中,具有 n 个点的偏序集的点从 0 到 n-1 枚举,而不是从 1 到 n。

问题:有没有一种简单的方法可以获取 LaTeX 输出,其中的点按 1 到 n 进行枚举(通过在 SAGE 图形中设置 i->i+1)?

当然,对于给定的例子,我们可以手动完成这一操作,但对于大的偏序集,最好有一种自动的方法来做到这一点(通过 SAGE?)。

答案1

使用这一页在 poset 文档中,您只需使用 来relabel()更改顶点。SAGE 会处理其余的事情。

\documentclass{article}
\usepackage{sagetex}
\usepackage{tikz,tkz-graph,tkz-berge}
\begin{document}
\begin{sagesilent}
u=posets.BooleanLattice(4)
output = latex(u)

Q = u.relabel(lambda x: x+1)
output2 = latex(Q)
\end{sagesilent}
The original poset in SAGE is this:

\begin{center}
\sagestr{output}
\end{center}

After relabelling the vertices, it now looks like this:

\begin{center}
\sagestr{output2}
\end{center}
\end{document}

Cocalc 中运行的输出是: 在此处输入图片描述

答案2

latex(u)我假设你在执行完后编译了代码输出u = posets.BooleanLattice(4)。在这种情况下,您可以使用扩展文本检索此 LaTeX(实际上,TiZ) 代码并将其存储在宏(此处为变量tl)中。然后,这有点像 hack,但您可以使用l3regex(某种程度上)替换检索到的代码中L=\hbox{$〈number〉$}出现的每个:L=\mbox{$〈number+1〉$}

% document.tex
\documentclass{article}
\usepackage{tikz}
\usepackage{tkz-graph}
\usepackage{xparse}
\usepackage{expsagetex}

\ExplSyntaxOn
\tl_new:N \l__mare_diagram_code_tl
\tl_new:N \l__mare_diagram_ID_tl

\NewDocumentCommand \myInsertDiagram { m }
  {
    \est_record_formatted:Nn \l__mare_diagram_ID_tl {#1}
    \est_refused:V \l__mare_diagram_ID_tl
    \tl_set:Nx \l__mare_diagram_code_tl
      { \est_get:Vnn \l__mare_diagram_ID_tl {??} { \emph{paused} } }
    \regex_replace_all:nnN { L\ *\=\ *\c{hbox} \cB\{ \cM\$ (\d+) \cM\$ \cE\} }
      { L\=\c{mbox} \cB\{ \cM\$ \c{int_eval:n} \cB\{ \1 + 1 \cE\} \cM\$ \cE\} }
      \l__mare_diagram_code_tl
    \tl_use:N \l__mare_diagram_code_tl
  }
\ExplSyntaxOff

\begin{document}

% The default output at scale=1 has many overlapping nodes
\tikzset{every picture/.append style={scale=2}}
\myInsertDiagram{posets.BooleanLattice(4)}

\end{document}

例如运行pdflatex document.tex,然后运行sage document.sagetex.sage,然后再次运行pdflatex document.tex,您将获得:

在此处输入图片描述

相关内容