|
4 years ago | |
---|---|---|
config | 4 years ago | |
include/TeX | 4 years ago | |
src | 4 years ago | |
.gitignore | 4 years ago | |
Makefile | 4 years ago | |
README.md | 4 years ago | |
TODO.md | 4 years ago | |
configure | 4 years ago | |
font5x7.bmp | 4 years ago | |
font8x9.bmp | 4 years ago | |
font10x12.bmp | 4 years ago |
README.md
Natural display engine with TeX syntax for fx-9860G and fx-CG 50
This library is a customizable 2D math rendering tool for calculators. It can be used to render 2D formulae, either from an existing structure or TeX syntax.
\frac{x^7 \left[X,Y\right] + 3\left|\frac{A}{B}\right>}
{\left\{\frac{a_k+b_k}{k!}\right\}^5}
+ \int_a^b \frac{\left(b-t\right)^{n+1}}{n!} dt
+ \left(\begin{matrix} \frac{1}{2} & 5 \\ -1 & a+b \end{matrix}\right)
Features
- Build formulae from TeX syntax or using the structural API
- Highly-customizable graphical and layout parameters
- Drawing uses only a few user primitives (point, line, text size, text)
- Compatible with fxlib and gint
List of currently supported elements:
- Fractions (
\frac
) - Subscripts and superscripts (
_
and^
) - Grouping parentheses, brackets, and braces (
\left
and\right
) - Grouping angle brackets, vertical lines, and dots (invisible)
- Sums, products and integrals (
\sum
,\prod
and\int
) - Vectors (
\vec
) and limits (\lim
) - Square roots (
\sqrt
) - Matrices (
\begin{matrix} ... \end{matrix}
)
Features that are partially implemented (and what is left to finish them):
- Support for inline style and display style (expose a parameter)
- Theme that can decently port to fx-CG 50 (suitable parenthesis styles)
See the TODO.md
file for more features to come.
Building
First specify the platform you want to use :
cli
is for command-line tests, with no visualization (PC)sdl2
is an SDL interface with visualization (PC)fx9860g
builds the library for fx-9860G targets (calculator)fxcg50
builds the library for fx-CG 50 targets (calculator)
For calculator platforms, you can use --toolchain
to specify a different toolchain than the default sh3eb
and sh4eb
. The install directory of the library is guessed by asking the compiler, you can override it with --prefix
.
Example for an SDL setup:
% ./configure --platform=sdl2
Then you can make the program, and if it's a calculator library, install it. You can later delete Makefile.cfg
to reset the configuration, or just reconfigure as needed.
% make
% make install # fx9860g and fxcg50 only
Using in a program
Before using the library in a program, a configuration step is needed. The library does not have drawing functions and instead requires that you provide some, namely:
- Draw a pixel (
TeX_intf_pixel
) - Draw a line (
TeX_intf_line
) - Compute the size occupied by a string (
TeX_intf_size
) - Render a string (
TeX_intf_text
)
The three rendering functions are available in fxlib; for monospaced fonts the fourth can be implemented trivially. In gint, the four can be defined as wrappers for dpixel()
, dline()
, dsize()
and dtext()
.
The type of formulae is TeX_Env
. To parse and compute the size of a formula, use the TeX_parse()
function, which returns a new formula object (or NULL
if a critical error occurs). The second parameter display
is set to non-zero to use display mode (similar to \[ .. \]
in LaTeX) or zero to use inline mode (similar to $ .. $
in LaTeX).
char *code = "\\frac{x_7}{\\left\\{\\frac{\\frac{2}{3}}{27}\\right\\}^2}";
struct TeX_Env *formula = TeX_parse(code, 1);
The size of the formula can be queried through formula->width
and formula->height
. To render, specify the location of the top-left corner and the drawing color (which will be passed to all primitives):
TeX_draw(formula, 0, 0, BLACK);
The same formula can be drawn several times. When it is no longer needed, free it with TeX_free()
:
TeX_free(formula);