summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacas/doc/appendix/luacas.dat
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/luacas/doc/appendix/luacas.dat')
-rw-r--r--macros/luatex/latex/luacas/doc/appendix/luacas.dat230
1 files changed, 230 insertions, 0 deletions
diff --git a/macros/luatex/latex/luacas/doc/appendix/luacas.dat b/macros/luatex/latex/luacas/doc/appendix/luacas.dat
new file mode 100644
index 0000000000..60866bae05
--- /dev/null
+++ b/macros/luatex/latex/luacas/doc/appendix/luacas.dat
@@ -0,0 +1,230 @@
+% Copyright (c) ???
+%
+% Permission is granted to copy, distribute and/or modify this
+% software under the terms of the LaTeX Project Public License
+% (LPPL), version 1.3c or any later version.
+%
+% This software is provided 'as is', without warranty of any kind,
+% either expressed or implied, including, but not limited to, the
+% implied warranties of merchantability and fitness for a
+% particular purpose.
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{luacas}
+ [2022/05/07 v1.0 CAS written in Lua for LaTeX]
+
+\RequirePackage{iftex}
+\ifluatex
+ \RequirePackage{luacode}
+\else
+ {\PackageError{luacas}
+ {Not running under LuaLaTeX}
+ {This package requires LuaLaTeX. Try compiling this document with\MessageBreak 'lualatex' instead of 'latex'. This is a fatal error; I'm aborting now.}%
+ }\stop
+\fi
+
+%Required Packages
+\RequirePackage{xparse}
+\RequirePackage{pgfkeys}
+\RequirePackage{verbatim}
+\RequirePackage{tikz}
+\RequirePackage{xcolor}
+\RequirePackage{mathtools}
+
+%These files contain Lua code for parsing luacas output; they also initialize the CAS itself
+\directlua{require('test.parser')
+ require('test.helper')
+}
+
+\NewDocumentEnvironment{CAS}%
+ {+b}%
+ {\luaexec{CASparse([[#1]])}}%
+ {}
+
+\newcommand{\get}%
+ [2][true]%
+ {\directlua{disp(#2, #1)}}
+
+\newcommand{\fetch}[1]{
+ \directlua{tex.print(tostring(#1))}
+}
+
+\NewDocumentCommand{\store}{m O{#1}}{
+ \expandafter\def\csname #2\endcsname{%
+ \directlua{
+ input = #1
+ if not input[1] then
+ tex.sprint{tostring(input)}
+ else
+ tex.sprint("{")
+ for _,entry in ipairs(input) do
+ tex.sprint(tostring(entry),",")
+ end
+ tex.sprint("}")
+ end
+ }%
+ }%
+}%
+
+%%%%%%%%%%
+%% Core %%
+%%%%%%%%%%
+
+%pretty print
+
+\NewDocumentCommand{\print}{s m}{%
+ \IfBooleanTF{#1}{%
+ \directlua{
+ local sym = #2
+ if sym then
+ tex.print(sym:autosimplify():tolatex())
+ else
+ tex.print('nil')
+ end
+ }%
+ }{%
+ \directlua{
+ local sym = #2
+ if sym then
+ tex.print(sym:tolatex())
+ else
+ tex.print('nil')
+ end
+ }%
+ }%
+}
+
+\NewDocumentCommand{\vprint}{s m}{%
+ \IfBooleanTF{#1}{%
+ \directlua{
+ local sym = #2
+ tex.sprint([[\unexpanded{\begin{verbatim}]] .. tostring(sym) .. [[\end{verbatim}}]])
+ }%
+ }{%
+ \directlua{
+ local sym = #2
+ tex.sprint([[\unexpanded{\begin{verbatim}]] .. tostring(sym:autosimplify()) .. [[\end{verbatim}}]])
+ }%
+ }%
+}
+
+\NewDocumentCommand{\lprint}{m O{nil,nil}}{%
+ \luaexec{
+ local tbl = #1
+ local low,upp = #2
+ local tmp =0
+ if tbl[0] == nil then
+ tmp = 1
+ end
+ upp = upp or \#tbl
+ low = low or tmp
+ for i=low,upp do
+ tex.print(tbl[i]:tolatex())
+ if tbl[i+1] then
+ tex.print(",")
+ end
+ end
+ }
+}
+
+%prints the first level of an expression tree; for use within a tikzpicture environment
+
+\NewDocumentCommand{\printshrub}{s m}{%
+ \IfBooleanTF{#1}{%
+ \directlua{
+ local sym = #2
+ sym = sym:autosimplify()
+ tex.print("\\node [label=90:", whatis(sym), "] {", nameof(sym), "}")
+ tex.print(sym:gettheshrub())
+ tex.print(";")
+ }%
+ }{%
+ \directlua{
+ local sym = #2
+ tex.print("\\node [label=90:", whatis(sym), "] {", nameof(sym), "}")
+ tex.print(sym:gettheshrub())
+ tex.print(";")
+ }%
+ }
+}
+
+%prints the full expression tree; for use within a tikzpicture environment
+
+\NewDocumentCommand{\printtree}{s m}{%
+ \IfBooleanTF{#1}{%
+ \luaexec{
+ local sym = #2
+ sym = sym:autosimplify()
+ tex.print("\\node {",nameof(sym),"}")
+ tex.print(sym:getthetree())
+ tex.print(";")
+ }%
+ }{%
+ \luaexec{
+ local sym = #2
+ tex.print("\\node {",nameof(sym),"}")
+ tex.print(sym:getthetree())
+ tex.print(";")
+ }%
+ }
+}
+
+%parses an expression tree for use within the forest environment; result is stored in \forestresult
+
+\NewDocumentCommand{\parseforest}{s m}{%
+ \IfBooleanTF{#1}{%
+ \luaexec{
+ local sym = #2
+ sym = sym:autosimplify()
+ tex.print("\\def\\forestresult{")
+ tex.print("[")
+ tex.print(nameof(sym))
+ tex.print(sym:gettheforest())
+ tex.print("]")
+ tex.print("}")
+ }%
+ }{%
+ \luaexec {
+ local sym = #2
+ tex.print("\\def\\forestresult{")
+ tex.print("[")
+ tex.print(nameof(sym))
+ tex.print(sym:gettheforest())
+ tex.print("]")
+ tex.print("}")
+ }%
+ }
+}
+
+\NewDocumentCommand{\parseshrub}{s m}{%
+ \IfBooleanTF{#1}{%
+ \luaexec{
+ local sym = #2
+ sym = sym:autosimplify()
+ tex.print("\\def\\shrubresult{")
+ tex.print("[")
+ tex.print(nameof(sym))
+ tex.print(", tikz+={\\node[anchor=south] at (.north) {test};}")
+ tex.print(sym:getthefancyshrub())
+ tex.print("]")
+ tex.print("}")
+ }%
+ }{%
+ \luaexec{
+ local sym = #2
+ tex.print("\\def\\shrubresult{")
+ tex.print("[")
+ tex.print(nameof(sym))
+ tex.print(", tikz+={\\node[anchor=south font=\\ttfamily\\footnotesize,gray] at (.north) {",longwhati (sym),"};}")
+ tex.print(sym:getthefancyshrub())
+ tex.print("]")
+ tex.print("}")
+ }%
+ }
+}
+
+\NewDocumentCommand{\whatis}{m}{%
+ \luaexec{
+ tex.sprint("{\\ttfamily",longwhatis(#1),"}")
+ }%
+} \ No newline at end of file