Eine Matrix aus GAP direkt in TeX abrufen

Eine Matrix aus GAP direkt in TeX abrufen

In GAP erhält man als Ausgabe eine Matrix auf folgende Weise:

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

Diese Matrix wird als Liste von Listen (die die Zeilenvektoren darstellen) angegeben.

Frage: Gibt es eine direkte Möglichkeit, diese GAP-Ausgabe einer Matrix direkt in eine TeX-Datei einzufügen und die Matrix in TeX zu erhalten?

Der Grund für diese Frage liegt darin, dass man von GAP manchmal sehr große Matrizen (etwa 40 mal 40) als Ausgabe erhält und es schön wäre, wenn man eine solche GAP-Ausgabe direkt in TeX einfügen könnte, um die Matrix in LaTeX zu erhalten.

Antwort1

Bildbeschreibung hier eingeben

\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}

Antwort2

Ein anderer Ansatz (weniger hinterhältig als der von 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}

Bildbeschreibung hier eingeben

Antwort3

GAP-Schnittstelle in Sage, Sage-Methode latex(obj)und LaTeX-Paketsagetex

Zur Installation sagetexsiehehttps://doc.sagemath.org/html/en/tutorial/sagetex.html#make-sagetex-known-to-tex

Es wird darauf hingewiesen, dass die CTAN-Version und die mit TeXLive verteilte Version möglicherweise nicht mit Ihrer Sage-Version kompatibel sind. Daher sollte sagetex.stydie Installation manuell mit der mit Sage selbst verteilten Version erfolgen:sagetex.sty

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

Für mich SAGE_ROOTist

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

So sieht die Verwendung nun aus:

\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}

Beachten Sie, dass Sie nicht selbst aufrufen müssen latex(obj): Der \sageBefehl erledigt dies für Sie. \sagestr{}tut dies nicht.

In diesem speziellen Fall gap('gap code').sage()wäre der Aufruf von nicht notwendig, da die Matrixnotation in GAP und in Sage (Python) identisch ist. Der Kern der Frage ist jedoch, wie man GAP-Code (GAP-Matrix) in ein TeX-Dokument einfügt und ein korrekt gesetztes Ergebnis in LaTeX erhält. Dies sollte diese Möglichkeit veranschaulichen.

Antwort4

GAP-Pakettypeset

Version 1.0 Veröffentlichung: 11.11.2022
Repository:https://github.com/gap-packages/typeset

Dieses Paket ermöglicht die Generierung von TeX-Ausgaben in GAP zum Einfügen in TeX (ähnlich wie TeXFormin Mathematica).

Beispiel:

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)

Optional: GAP-Code innerhalb des TeX-Dokuments aufrufen

Wenn Sie den Einfügeschritt in das LaTeX-Dokument automatisieren möchten, können Sie GAP-Code aus einem TeX-Dokument ausführen. Folgende CTAN-Pakete zielen auf diese Funktionalität ab (CTAN Topics Callback, Exec Foreign, Externer Code)

Minimalbeispiel mittexsurgery

\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:

Bildbeschreibung hier eingeben

verwandte Informationen