# Catext Help
In this reference manual you will find detailed information on every aspect of Catext. If there is no answer for your question here, feel free to send an email.
## General Syntax
There are three types of elements in Catext: expressions, text and comments. Basically, anything that's not text or a comment is an expression.
## Expressions
Expressions define operations to perform on numbers, the result of which is then calculated by Catext. Numbers are the basic building block for expressions:
1 // integer
1.2 // decimal fraction
1.2e3 // exponential notation
1.2M = 1.2e6 // SI metric prefixes
1Ki = 1 024 // IEC binary prefixes
To resolve the ambiguity between `E` used as a SI metric prefix (exa) and `E` used to express a number in exponential notation, just add spaces: {1E−2} vs {1E − 2}.
Catext supports the standard basic set of arithmetic operations:
1 + 2 = 3 // addition
3 − 1 = 2 // subtraction
2 × 3 = 6 // multiplication
3 / 2 = 1.5 // division
Parentheses can be used to change the default order of operations:
2 × (1 + 3) = 8
The basic set is extended with the following operations:
2 % 3 = 2 // modulo/remainder
3^2 = 9 // exponentiation/power
If you are facing an ambiguity between `%` used as an operator and as a percent sign, pad `%` with spaces to make it behave like an operator: {1% + 1} vs {1 % +1}.
Exponentiation is right-associative: {4^3^2} means {4^(3^2)}.
### Variables
Variables are defined using the equal sign:
gross = 50k
tax = 20%
After the definition, variables can be referenced by their names:
gross − tax = 40k
Variables can be defined in terms of other variables:
net = gross − tax = 40k
net / 12 ≈ 3.333k
You can use multiple words in a variable name:
monthly net = net / 12 ≈ 3.333k
monthly net / 30 ≈ 111.111
Here are some more examples of valid variable names:
some_variable = 123
variable2 = 5
anotherVariable = 1
THE VARIABLE = 0 / 0
Catext provides autocompletion for variables, use Tab key to accept a completion.
### Percentages
Catext supports the following basic percentage operations:
200 + 10% = 220 // 10% more
200 − 10% = 180 // 10% less
200 × 10% = 20 // 10% of 200
10% + 20% = 30% // addition
10% − 20% = −10% // subtraction
10% / 2 = 5% // division
10% × 2 = 20% // multiplication
More advanced percentage operations are also supported:
// compound percentage
10% × −5% ≈ 4.5%
200 × (10% × −5%) ≈ 9
// effective annual percentage
(10% / 12)^12 ≈ 10.471%
1 000 + (10% / 12)^(5 × 12) ≈ 1 645.309
### Built-in Constants and Functions
The following built-in constants and functions are supported:
π ≈ 3.142 // `pi`
e ≈ 2.718 // Euler's number
abs(−1) = 1 // absolute value
round(π) = 3 // round to nearest
floor(π) = 3 // round down
ceil(π) = 4 // round up
int(π) = 3 // integer part
frac(π) ≈ 0.142 // fractional part
ln(e) = 1 // natural logarithm
log(e) = 1
lg(100) = 2 // base 10
log₁₀(100) = 2 // `log10(100)`
lb(8) = 3 // base 2
log₂(8) = 3 // `log2(8)`
sin(π / 2) = 1 // sine
asin(1) ≈ 1.571
arcsin(1) ≈ 1.571
cos(π) = −1 // cosine
acos(−1) ≈ 3.142
arccos(−1) ≈ 3.142
tan(π / 4) = 1 // tangent
atan(1) ≈ 0.785
arctan(1) ≈ 0.785
## Text
Lines starting with an uppercase letter and containing at least 3 words separated by spaces or commas are considered paragraphs. The familiar Markdown-like formatting is supported inside text:
• *italic* or _italic_
• **bold** or __bold__
• ***bold italic*** or ___bold italic___
• **_bold italic_ inside bold**
• \*escaping\*
• `preformatted: *regular*`
As an extension, you can also embed expressions into text using braces: {1 + 1}.
### Lists
Numbered list items begin with an integer number, followed by a dot and then by a space. Use `?. ` to automatically assign a number to an item. The second item is automatically numbered in the following list:
1. first item
2. second item
Bulleted list items begin with `-`, `*`, `+` or `?` followed by a space:
• bullet
+ pros
- cons
? investigate
## Comments
Line comments start with `//`, any following text until the end of the line is considered a comment:
// calculate 2
1 + 1 = 2 // should be 2
Comments support Markdown-like formatting. If you want to disable the formatting, just omit the space after `//`:
// this comment is **formatted**
//this comment is **not** formatted