summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/luacas/doc/reference/ref.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/luacas/doc/reference/ref.tex')
-rw-r--r--macros/luatex/latex/luacas/doc/reference/ref.tex236
1 files changed, 236 insertions, 0 deletions
diff --git a/macros/luatex/latex/luacas/doc/reference/ref.tex b/macros/luatex/latex/luacas/doc/reference/ref.tex
new file mode 100644
index 0000000000..426a1e17e5
--- /dev/null
+++ b/macros/luatex/latex/luacas/doc/reference/ref.tex
@@ -0,0 +1,236 @@
+\documentclass{article}
+
+\usepackage{luacas}
+\usepackage{amsmath}
+\usepackage{amssymb}
+
+\usepackage[margin=1in]{geometry}
+\usepackage[shortlabels]{enumitem}
+
+\usepackage{pgfplots}
+\pgfplotsset{compat=1.18}
+\usetikzlibrary{positioning,calc}
+\usepackage[edges]{forest}
+\usepackage{minted}
+\usemintedstyle{pastie}
+\usepackage[hidelinks]{hyperref}
+\usepackage{parskip}
+\usepackage{multicol}
+\usepackage[most]{tcolorbox}
+ \tcbuselibrary{xparse,documentation}
+\usepackage{microtype}
+\usepackage{makeidx}
+
+\usepackage[
+backend=biber,
+style=numeric,
+]{biblatex}
+\addbibresource{sources.bib}
+
+\definecolor{rose}{RGB}{128,0,0}
+\definecolor{roseyellow}{RGB}{222,205,99}
+\definecolor{roseblue}{RGB}{167,188,214}
+\definecolor{rosenavy}{RGB}{79,117,139}
+\definecolor{roseorange}{RGB}{232,119,34}
+\definecolor{rosegreen}{RGB}{61,68,30}
+\definecolor{rosewhite}{RGB}{223,209,167}
+\definecolor{rosebrown}{RGB}{108,87,27}
+\definecolor{rosegray}{RGB}{84,88,90}
+
+\definecolor{codegreen}{HTML}{49BE25}
+
+\newtcolorbox{codebox}[1][sidebyside]{
+ enhanced,skin=bicolor,
+ #1,
+ arc=1pt,
+ colframe=brown,
+ colback=brown!15,colbacklower=white,
+ boxrule=1pt,
+ notitle
+}
+
+\newtcolorbox{codehead}[1][]{
+ enhanced,
+ frame hidden,
+ colback=rosegray!15,
+ boxrule=0mm,
+ leftrule=5mm,
+ rightrule=5mm,
+ boxsep=0mm,
+ arc=0mm,
+ outer arc=0mm,
+ left=3mm,
+ right=3mm,
+ top=1mm,
+ bottom=1mm,
+ toptitle=1mm,
+ bottomtitle=1mm,
+ oversize,
+ #1
+}
+
+\usepackage{varwidth}
+
+\newtcolorbox{newcodehead}[2][]{
+ enhanced,
+ frame hidden,
+ colback=rosegray!15,
+ boxrule=0mm,
+ leftrule=5mm,
+ rightrule=5mm,
+ boxsep=0mm,
+ arc=0mm,
+ outer arc=0mm,
+ left=3mm,
+ right=3mm,
+ top=1mm,
+ bottom=1mm,
+ toptitle=1mm,
+ bottomtitle=1mm,
+ oversize,
+ #1,
+ fonttitle=\bfseries\ttfamily\footnotesize,
+ coltitle=rosegray,
+ attach boxed title to top text right,
+ boxed title style={frame hidden,size=small,bottom=-1mm,
+ interior style={fill=none,
+ top color=white,
+ bottom color=white}},
+ title={#2}
+}
+
+\makeindex
+
+\newcommand{\coderef}[2]{%
+\begin{codehead}[sidebyside,segmentation hidden]%
+ \mintinline{lua}{#1}%
+ \tcblower%
+ \begin{flushright}%
+ \mintinline{lua}{#2}%
+ \end{flushright}%
+\end{codehead}%
+}
+
+\newcommand{\newcoderef}[3]{%
+\begin{newcodehead}[sidebyside,segmentation hidden]{#3}%
+ \mintinline{lua}{#1}%
+ \tcblower%
+ \begin{flushright}%
+ \mintinline{lua}{#2}%
+ \end{flushright}%
+\end{newcodehead}%
+}
+
+\begin{document}
+\thispagestyle{empty}
+\part{Reference}
+This part contains reference material for the classes and methods that incorporate the \texttt{luacas} package. Some classes are \emph{concrete} while others are \emph{abstract}. The concrete classes are essentially the objects that a user might reasonably interact with while using \texttt{luacas}. Thankfully, most of this interaction will be filtered through a rudimentary (but functional!) parser. Abstract classes exist for the purposes of inheritance.
+
+The classes in the diagram below are color-coded according to:
+\begin{itemize}
+ \item (\tikz[baseline=-0.5ex]\node[text=rosenavy,fill=roseblue!40]{\ttfamily\bfseries Class};) {\color{rosenavy}\ttfamily\bfseries Class}: a (concrete) class belonging to the core module;
+ \item (\tikz[baseline=-0.5ex]\node[text=rose,fill=rose!30]{\ttfamily\bfseries Class};) {\color{rose}\ttfamily\bfseries Class}: a (concrete) class belonging to the algebra module;
+ \item (\tikz[baseline=-0.5ex]\node[text=roseorange,fill=roseorange!30]{\ttfamily\bfseries Class};) {\color{roseorange}\ttfamily\bfseries Class}: a (concrete) class belonging to the calculus module.
+\end{itemize}
+Inheritance is indicated with an arrow:
+
+\forestset{multiple directions/.style={for tree={#1}, phantom, for relative level=1{no edge, delay={!c.content/.pgfmath=content("!u")}, before computing xy={l=0,s=0}}},
+ multiple directions/.default={},
+ grow subtree/.style={for tree={grow=#1}},
+ grow' subtree/.style={for tree={grow'=#1}}}
+
+\begin{center}
+ \begin{forest}
+ core/.style = {draw={rosenavy,thick},
+ font={\ttfamily\bfseries\color{rosenavy}},
+ fill = roseblue!#1},
+ algebra/.style = {draw={rose,thick},
+ font={\ttfamily\bfseries\color{rose}},
+ fill = rose!#1},
+ calculus/.style = {draw={roseorange,thick},
+ font={\ttfamily\bfseries\color{roseorange}},
+ fill = roseorange!#1},
+ multiple directions,
+ for tree = {font = \ttfamily\bfseries,
+ draw,
+ rounded corners=1pt,
+ edge = {-stealth},
+ s sep = 0.2cm}
+ [Expression
+ [, grow subtree = 90
+ [AtomicExpression,
+ core = {0},
+ for tree = {grow=east,
+ child anchor=west,
+ node options={anchor=west}},
+ forked edges,
+ calign=last,
+ l sep = 0.5cm,
+ s sep = 0.2cm
+ [SymbolExpression,
+ core={50}]
+ [ConstantExpression,
+ core ={0},
+ for tree = {grow = north,
+ node options = {anchor=north}
+ }
+ [Ring,
+ algebra ={0},
+ for tree = {grow = east}
+ [EuclideanDomain,
+ algebra={0}
+ [Field,
+ algebra = {0}
+ [IntegerModN,
+ algebra={30}]
+ [Rational,
+ algebra={30}]
+ ]
+ [Integer,
+ algebra={30}]
+ ]
+ [PolynomialRing,
+ algebra={30}]
+ ]
+ ]
+ ]]
+ [, grow subtree = -90
+ [CompoundExpression,
+ core = {0},
+ for tree = {grow=east,
+ child anchor=west,
+ node options={anchor=west}},forked edges,
+ calign=last,
+ l sep = 0.5cm,
+ s sep = 0.2cm
+ [FunctionExpression,
+ core = {40}
+ [TrigExpression,algebra={30}]
+ ]
+ [BinaryOperation,
+ core = {40}]
+ [Equation,
+ algebra = {30}]
+ [Logarithm,
+ algebra={30}]
+ [FactorialExpression,
+ algebra={30}]
+ [RootExpression,
+ algebra={30}]
+ [SqrtExpression,
+ algebra={30}]
+ [AbsExpression,
+ algebra={30}]
+ [DerivativeExpression,
+ calculus={20}]
+ [DiffExpression,
+ calculus={20}]
+ [IntegralExpression,
+ calculus={20}]
+ ]]
+ ]
+ \end{forest}
+\end{center}
+Every object in \texttt{luacas} is an expression, meaning it inherits from the {\ttfamily Expression} type (class). Since the {\ttfamily Expression} type itself has no constructor and cannot be instantiated, it it closer to an interface in Java OOP terms.\footnote{In reality, interfaces are unnecessary in Lua due to its weak typing - Lua doesn't check whether an object has a method at compile time. The {\ttfamily Expression} type is really an abstract class in Java terms.} {\ttfamily Expression}s can store any number of other expressions as sub-expressions, depending on type. This means that {\ttfamily Expression} objects are really trees. Types that inherit from {\ttfamily Expression} that can not store other expressions are called \emph{atomic expressions}, and correspond to the leaf nodes of the tree. Other expression types are \emph{compound expressions}. Thus, every {\ttfamily Expression} type inherits from one of {\ttfamily AtomicExpression} or {\ttfamily CompoundExpression}. The {\ttfamily ConstantExpresssion} interface is a subinterface to {\ttfamily AtomicExpression}. Types that inherit from {\ttfamily ConstantExpression} roughly correspond to numbers (interpreted broadly).
+
+\end{document} \ No newline at end of file