diff options
Diffstat (limited to 'macros/luatex/latex/luacas/doc/reference/ref.tex')
-rw-r--r-- | macros/luatex/latex/luacas/doc/reference/ref.tex | 236 |
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 |