Obtener una matriz de GAP directamente en TeX

Obtener una matriz de GAP directamente en TeX

En GAP se obtiene una matriz de la siguiente manera como salida:

[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]

Esta matriz se proporciona como una lista de listas (que son los vectores de fila).

Pregunta: ¿Existe una forma directa de pegar esta salida GAP de una matriz directamente en un archivo TeX y obtener la matriz en TeX?

La motivación para esta pregunta es que a veces uno obtiene matrices muy grandes (como 40 por 40) de GAP como salida y sería bueno poder pegar directamente dicha salida GAP en TeX para obtener la matriz en LaTeX.

Respuesta1

ingrese la descripción de la imagen aquí

\documentclass{article}
\usepackage{amsmath}


\def\gapmatrix[{\begin{pmatrix}
\gaprows}
\def\gaprows#1[#2]#3{%
\gapcell#2\gapendrow,\ifx]#3\end{pmatrix}\else\afterfi\\\gaprows\fi}

\def\afterfi#1\fi{\fi#1}
\def\gapcell#1,{#1\uppercase{&}\gapcell}
\def\gapendrow#1\gapcell{}
\begin{document}


\[
\gapmatrix
[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]
\]

\end{document}

Respuesta2

Un enfoque diferente (menos astuto que el de David)

\documentclass{article}
\usepackage{mathtools}

\ExplSyntaxOn

\NewDocumentCommand{\gapmatrix}{sO{p}m}
 {% #2 = fences, #3 = data
  \IfBooleanTF{#1}
   {% small matrix
    \mare_gapmatrix:nn { #2small } { #3 }
   }
   {% normal size
    \mare_gapmatrix:nn { #2 } { #3 }
   }
 }

\tl_new:N \l__mare_gapmatrix_body_tl
\seq_new:N \l__mare_gapmatrix_rows_seq
\cs_generate_variant:Nn \seq_set_from_clist:Nn { NV }

\cs_new_protected:Nn \mare_gapmatrix:nn
 {
  % make sure we have no spaces at either end
  \tl_set:Nn \l__mare_gapmatrix_body_tl { #2 }
  % remove the outer brackets
  \regex_replace_once:nnN { \A\s*\[ (.*) \] \s*\Z } { \1 } \l__mare_gapmatrix_body_tl
  % replace [...] with {...}
  \regex_replace_all:nnN { \[(.*?)\] } { \{\1\} } \l__mare_gapmatrix_body_tl
  % split into a sequence of rows
  \seq_set_from_clist:NV \l__mare_gapmatrix_rows_seq \l__mare_gapmatrix_body_tl
  % now we can typeset
  \begin{#1matrix}
  \seq_map_function:NN \l__mare_gapmatrix_rows_seq \__mare_gapmatrix_row:n
  \end{#1matrix}
 }

\cs_new_protected:Nn \__mare_gapmatrix_row:n
 {
  \clist_use:nn { #1 } { & } \\
 }

\ExplSyntaxOff

\begin{document}

\[
\gapmatrix{[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]}
\gapmatrix[b]{[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]}
\gapmatrix*{[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]}
\gapmatrix*[b]{[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]}
\]

\end{document}

ingrese la descripción de la imagen aquí

Respuesta3

Interfaz GAP en Sage, método Sage latex(obj)y paquete LaTeXsagetex

Para la instalación de sagetexverhttps://doc.sagemath.org/html/en/tutorial/sagetex.html#make-sagetex-known-to-tex

Se señala que la versión CTAN y la versión sagetex.stydistribuida con TeXLive pueden ser incompatibles con su versión de Sage y, por lo tanto, la instalación sagetex.stydebe realizarse manualmente utilizando la versión distribuida con Sage:

SAGE_ROOT/venv/share/texmf/tex/latex/sagetex/sagetex.sty

Para mí SAGE_ROOTes

❯ sage -c "print(SAGE_ROOT)"
/Applications/SageMath-10-0.app/Contents/Frameworks/Sage.framework/Versions/10.0

Ahora cómo se ve el uso:

\documentclass{article}
\usepackage{sagetex}

\begin{document}

\begin{equation}
\sage{matrix(gap('[ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]').sage())}
\end{equation}

\end{document}

Tenga en cuenta que no es necesario que se llame latex(obj)a sí mismo: el \sagecomando lo hace por usted. \sagestr{}no lo hace.

En este caso particular, la llamada a gap('gap code').sage()no sería necesaria ya que la notación matricial en GAP y en Sage (Python) coinciden. Pero el punto de la pregunta es cómo insertar en un documento TeX el código GAP (matriz GAP) y obtener un resultado tipográfico adecuado en LaTeX. Esto debería ilustrar esta posibilidad.

Respuesta4

Paquete BRECHAtypeset

Lanzamiento de la versión 1.0: 2022-11-11
Repositorio:https://github.com/gap-packages/typeset

Este paquete permite generar salida TeX en GAP para pegar en TeX (similar a TeXFormMathematica).

Ejemplo:

gap> LoadPackage("typeset");
gap> x := [ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ];;
gap> Typeset(x);
\left(\begin{array}{rrrr}
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
\end{array}\right)

Opcional: llame al código GAP dentro del documento TeX

Si desea automatizar el paso de inserción en el documento LaTeX, es posible ejecutar el código GAP desde un documento TeX. Los siguientes paquetes CTAN tienen como objetivo esta funcionalidad (Devolución de llamada de temas de CTAN, Exec externo, código externo)

Ejemplo mínimo contexsurgery

\documentclass{article}
\usepackage[gap-4]{texsurgery} % specify kernel

\begin{document}

% \begin{equation} % triggers many errors on first run
% Assuming GAP package "typeset" is autoloaded by gap.
\begin{run}
Print("\\begin{equation}\n");
Typeset([ [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ 1, 0, 0, 0 ] ]);
Print("\\end{equation}\n");
\end{run}
% \end{equation}

\end{document}
❯ pipenv run texsurgery texsurgery-typeset.tex -pdf
GAP Jupyter Kernel Starting using gap
true
\begin{equation}
\left(\begin{array}{rrrr}
0 & 0 & 0 & 1 \\
0 & 0 & 1 & 0 \\
0 & 1 & 0 & 0 \\
1 & 0 & 0 & 0 \\
\end{array}\right)
\end{equation}
This is pdfTeX, Version 3.141592653-2.6-1.40.25 (TeX Live 2023) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./texsurgery-typeset.pdf.temp.tex
LaTeX2e <2023-06-01> patch level 1
L3 programming layer <2023-10-10>
(/usr/local/texlive/2023/texmf-dist/tex/latex/base/article.cls
Document Class: article 2023/05/17 v1.4n Standard LaTeX document class
(/usr/local/texlive/2023/texmf-dist/tex/latex/base/size10.clo))
(/usr/local/texlive/2023/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def)
(./texsurgery-typeset.pdf.temp.aux) [1{/usr/local/texlive/2023/texmf-var/fonts/
map/pdftex/updmap/pdftex.map}] (./texsurgery-typeset.pdf.temp.aux) )</usr/local
/texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmex10.pfb></usr/local/
texlive/2023/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
Output written on texsurgery-typeset.pdf.temp.pdf (1 page, 18009 bytes).
Transcript written on texsurgery-typeset.pdf.temp.log.

PDF:

ingrese la descripción de la imagen aquí

información relacionada