TeX에서 직접 GAP로부터 행렬 얻기

TeX에서 직접 GAP로부터 행렬 얻기

GAP에서는 출력으로 다음과 같은 방식으로 행렬을 얻습니다.

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

이 행렬은 목록(행 벡터)의 목록으로 제공됩니다.

질문: 행렬의 GAP 출력을 TeX 파일에 직접 붙여넣고 TeX에서 행렬을 얻는 직접적인 방법이 있습니까?

이 질문에 대한 동기는 때때로 GAP에서 출력으로 매우 큰(예: 40 x 40) 행렬을 얻고 이러한 GAP 출력을 TeX에 직접 붙여넣어 LaTeX에서 행렬을 얻을 수 있으면 좋을 것이라는 것입니다.

답변1

여기에 이미지 설명을 입력하세요

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

답변2

다른 접근 방식(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}

여기에 이미지 설명을 입력하세요

답변3

Sage, Sage 방식 latex(obj)및 LaTeX 패키지 의 GAP 인터페이스sagetex

설치에 대해서는 sagetex참조https://doc.sagemath.org/html/en/tutorial/sagetex.html#make-sagetex-known-to-tex

sagetex.styCTAN 버전과 TeXLive와 함께 배포되는 버전은 Sage 버전과 호환되지 않을 수 있으므로 sagetex.stySage 자체와 함께 배포되는 버전을 사용하여 수동으로 설치해야 한다는 점이 지적되어 있습니다 .

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

SAGE_ROOT에게는

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

이제 사용법은 다음과 같습니다.

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

자신을 호출할 필요는 없습니다 latex(obj). \sage명령이 이를 수행합니다. \sagestr{}하지 않습니다.

이 특별한 경우에는 GAP와 Sage(Python)의 행렬 표기법이 일치하므로 호출이 gap('gap code').sage()필요하지 않습니다. 그러나 문제의 요점은 TeX 문서 GAP 코드(GAP 매트릭스)에 어떻게 삽입하고 LaTeX에서 적절한 조판 결과를 얻는가 하는 것입니다. 이는 이러한 가능성을 보여줍니다.

답변4

갭 패키지typeset

버전 1.0 릴리스: 2022-11-11
저장소:https://github.com/gap-packages/typeset

이 패키지를 사용하면 TeX에 붙여넣기 위해 GAP에서 TeX 출력을 생성할 수 있습니다( TeXFormMathematica와 유사).

예:

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)

선택 사항: TeX 문서 내에서 GAP 코드 호출

LaTeX 문서에 삽입 단계를 자동화하려면 TeX 문서에서 GAP 코드를 실행할 수 있습니다. 다음 CTAN 패키지는 이 기능을 대상으로 합니다(CTAN 주제 콜백, 외부 실행, 외부 코드).

최소 예texsurgery

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

여기에 이미지 설명을 입력하세요

관련 정보