% This is part of the OpTeX project, see http://petr.olsak.net/optex

% This file is read from optex-doc.tex
% Use: optex optex-doc  (three times) to create whole documentation.

\let\new=\relax

\sec Starting with \OpTeX/
%%%%%%%%%%%%%%%%%%%%%%%%%

\new
\OpTeX/ is compiled as a format for \LuaTeX/. Maybe there is a command
`optex` in your \TeX/ distribution. Then you can write into the command line

\begtt
optex document
\endtt
%
You can try to process `optex op-demo` or `optex optex-doc`.

If there is no `optex` command, see more information about installation
\OpTeX/ at \url{http://petr.olsak.net/optex}.

A minimal document should be

\begtt
\fontfam[LMfonts]
Hello World! \bye
\endtt

The first line \~`\fontfam[LMfonts]` tells that Unicode Latin Modern
fonts (derived from Computer Modern) are used. If you omit this line then
preloaded Latin Modern fonts are used but preloaded fonts cannot be in
Unicode\fnote
{This is a technical limitation of \LuaTeX/ for fonts downloaded in formats:
only 8bit fonts can be preloaded.}.
So the sentence `Hello World` will be OK without the first line, but you
cannot print such sentence in other languages (for example `Ahoj světe!`)
where Unicode fonts are needed
because the characters like `ě` are not mapped correctly in preloaded
fonts.

A somewhat larger example with common settings should be:

\begtt \catcode`!=0
\fontfam[Termes]  % selecting Unicode font family Termes (section !ref[fontfam])
\typosize[11/13]  % setting default font size and baselineskip (sec. !ref[sizes])
\margins/1 a4 (1,1,1,1)in % setting A4 paper, 1 in margins (section !ref[marg])
\cslang           % Czech hyphenation patterns (section !ref[lang])

Tady je zkušební textík v českém jazyce.
\bye
\endtt
%
You can look at `op-demo.tex` file for a more complex, but still simple example.

\sec Page layout
%%%%%%%%%%%%%%%%

\secc[marg] Setting the margins
%%%%%%%%%%%%%%%%%%%%%%%%%%%%

The \^`\margins` command declares margins of the document. This command have
the following parameters:

\begtt \catcode`\<=13
\margins/<pg> <fmt> (<left>,<right>,<top>,<bot>)<unit>
  example:
\margins/1 a4 (2.5,2.5,2,2)cm
\endtt

Parameters are:

\begitems
* <pg> \dots\ `1` or `2` specifies one-page or two-pages design.
* <fmt> \dots\ paper format (a4, a4l, a5, letter, etc. or user defined).
* <left>, <right>, <top>, <bot> \dots\ gives the amount of left, right,
      top and bottom margins.
* <unit> \dots\ unit used for values <left>, <right>, <top>, <bot>.
\enditems

Each of the parameters <left>, <right>, <top>, <bot> can be empty.
If both <left> and <right> are nonempty then `\hsize` is set. Else `\hsize`
is unchanged. If both <left> and <right> are empty then typesetting area is
centered in the paper format. The analogical rule works when <top> or <bot>
parameter is empty (`\vsize` instead `\hsize` is used). Examples:

\begtt
\margins/1 a4 (,,,)mm   % \hsize, \vsize untouched,
                        % typesetting area centered
\margins/1 a4 (,2,,)cm  % right margin set to 2cm
                        % \hsize, \vsize untouched, vertically centered
\endtt

If `<pg>=1` then all pages have the same margins. If `<pg>=2` then the
declared margins are true for odd pages. The margins at the even pages are
automatically mirrored in such case, it means that <left> is replaced by
<right> and vice versa.

\OpTeX/ declares following paper formats: a4, a4l (landscape~a4),
a5, a5l, a3, a3l, b5, letter and user can declare another own format by \~`\sdef`:

\begtt
\sdef{_pgs:b5l}{(250,176)mm}
\sdef{_pgs:letterl}{(11,8.5)in}
\endtt

The `<fmt>` can be also in the form `(<width>,<height>)<unit>` where `<unit>` is
optional. If it is missing then `<unit>` after margins specification is
used. For example:

\begtt
\margins/1 (100,200) (7,7,7,7)mm
\endtt
%
declares the paper 100$\times$200\,mm with all four margins 7\,mm. The spaces
before and after <fmt> parameter are necessary.

The command \^`\magscale[<factor>]` scales the whole typesetting area.
\new The fixed point of such scaling is the upper left corner of the paper sheet.
Typesetting (breakpoints etc.) is unchanged. All units are relative after
such scaling. Only paper format's dimensions stay unscaled. Example:

\begtt
\margins/2 a5 (22,17,19,21)mm
\magscale[1414] \margins/1 a4 (,,,)mm
\endtt
%
The first line sets the `\hsize` and `\vsize` and margins for final
printing at a5 format. The setting on the second line centers the scaled
typesetting area to the true a4 paper while breaking points for paragraphs
and pages are unchanged. It may be usable for
review printing. After the review is done, the second line can be commented out.

\secc Concept of the default page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\OpTeX/ uses \"output routine" for page design.
It is very similar to the Plain \TeX/ output routine.
There is \^`\headline` followed by \"page body" followed by
\^`\footline`. The \^`\headline` is empty by default and it can be used
for running headers repeated on each page. The \^`\footline` prints
centered page number by default. You can set the \^`\footline` to empty
using \^`\nopagenumbers` macro.

The margins declared by \^`\margins` macro (documented in the previous
section~\ref[marg]) is concerned to the page body,
i.e.\ the \^`\headline` and \^`\footline` are placed to the top and bottom
margins.

The distance between the \^`\headline` and the top of the page body is given by
the \^`\headlinedist` register. The distance between bottom of the page body and
the \^`\footline` is given by \^`\footlinedist`. The default values are:

\begtt
\headline = {}
\footline = {\_hss\_rmfixed \_folio \_hss} % \folio expands to page number
\headlinedist = 14pt % from baseline of \headline to top of page body
\footlinedist = 24pt % from last line in pagebody to baseline of footline
\endtt

The page body should be divided into top insertions (floating tables and
figures) followed by a real text and followed by footnotes.
Typically, the only real text is here.

The \^`\pgbackground` tokens list is empty by default but it can be used for
creating a background of each page (colors, picture, watermark for example).
The macro \^`\draft` uses this register and puts big text DRAFT as a watermark
to each page. You can try it.

More about the page layout is documented in sections~\ref[oparams] and~\ref[output].

\secc Footnotes and marginal notes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

The Plain \TeX/'s macro \^`\footnote` can be used as usual. But a new macro
\^`\fnote{<text>}` is defined. The footnote mark is added automatically and it
is numbered
\new
on each chapter from one\fnote
{You can declare \^`\fnotenumglobal` if you want footnotes numbered in whole
document from one or \^`\fnotenumpages` if you want footnotes numbered at each
page from one. Default setting is \^`\fnotenumchapters`}.
The <text> is scaled to 80 \%.
User can redefine footnote mark or scaling, as shown in the section~\ref[fnotes].

The \^`\fnote` macro is fully applicable only in \"normal outer" paragraph.
It doesn't work inside boxes (tables, for example). If you are solving such
a case then you can use the command \^`\fnotemark``<numeric-label>` inside the box: only the
footnote mark is generated here. When the box is finished you can use
\^`\fnotetext{<text>}`. This macro puts the <text> to the footnote.
The <numeric-label> has to be `1` if only one such command is in the box.
Second \^`\fnotemark` inside the same box has to have the parameter `2` etc.
The same number of \^`\fnotetext`s have to be written
after the box as the number of \^`\fnotemark`s inserted inside the box.
Example:

\begtt
Text in a paragraph\fnote{First notice}...    % a "normal" footnote
\table{...}{...\fnotemark1...\fnotemark2...}  % two footnotes in a box
\fnotetext{Second notice}
\fnotetext{Third notice}
...
\table{...}{...\fnotemark1...}                % one footnote in a box
\fnotetext{Fourth notice}
\endtt

The marginal note can be printed by the \^`\mnote{<text>}` macro. The <text>
is placed to the right margin on the odd pages and it is placed to the left
margin on the even pages. This is done after second \TeX{} run because the
relevant information is stored in an external file and read from it again.
If you need to place the notes only to the fixed margin write
\^`\fixmnotes\right` or \^`\fixmnotes\left`.

The <text> is formatted as a little paragraph with the maximal width
\^`\mnotesize` ragged left on the left margins or ragged right on the right
margins. The first line of this little paragraph has its vertical position
given by the position of \^`\mnote` in the text. The exceptions are possible
by using the `up` keyword: \~`\mnote`` up<dimen>{<text>}`.
You can set such <dimen> to each \^`\mnote` manually in final printing
in order to margin notes do not overlap. The positive value of <dimen>
shifts the note up and negative value shifts it down. For example
\^`\mnote`` up 2\baselineskip{<text>}` shifts this marginal note two lines up.

\sec Fonts
%%%%%%%%%%

\secc[fontfam] Font families
%%%%%%%%%%%%%%%%%%%%%%%

You can select the font family by \^`\fontfam[<Family-name>]`.
The argument <Family-name> is case insensitive and spaces are ignored in it. For
example, \^`\fontfam[LM Fonts]` is equal to \^`\fontfam[LMfonts]` and it is equal
to \^`\fontfam[lmfonts]`. Several aliases are prepared, thus
\^`\fontfam[Latin Modern]` can be used for loading Latin Modern family too.

If you write \^`\fontfam[?]` then all font families registered in \OpTeX/
are listed on the terminal and in the log file.
If you write \^`\fontfam[catalog]` then a catalog of all fonts registered in
\OpTeX/ and available in your \TeX/ system is printed.
See also \ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]{this catalog}.

If the family is loaded then {\em font modifiers} applicable in such font family
are listed on the terminal: (`\caps`, `\cond` for example).
And there are four basic {\em variant selectors} (\^`\rm`, \^`\bf`, \^`\it`, \^`\bi`).
The usage of variant selectors is the same as in Plain \TeX:
`{\it italics text}`, `{\bf bold text}` etc.

The font modifiers (`\caps`, `\cond` for example) can
be used before a variant selector and they
can be (independently) combined: `\caps\it` or `\cond\caps\bf`. The
modifiers keep their internal setting until the group ends or until another
modifier that negates the previous feature is used. So
`{\caps \rm First text \it Second text}`
gives {\caps \rm First text \it Second text}.

The font modifier without following variant selector does not change the font
actually, it only prepares data used by next variant selectors.
There is one special variant selector \^`\currvar` which does not change the
selected variant but reloads the font due to (maybe newly
specified) font modifier(s).

The context between variants \^`\rm` $\leftrightarrow$ \^`\it` and
\^`\bf` $\leftrightarrow$ \^`\bi` is kept by the \^`\em`
macro (emphasize text).
It switches from current \^`\rm` to \^`\it`, from current \^`\it` to \^`\rm`, from
current \^`\bf` to \^`\bi` and from current \^`\bi` to \^`\bf`.
The italics correction `\/` is inserted automatically, if needed. Example:

\begtt
This is {\em important} text.     % = This is {\it important\/} text.
\it This is {\em important} text. % = This is\/ {\rm important} text.
\bf This is {\em important} text. % = This is {\bi important\/} text.
\bi This is {\em important} text. % = This is\/ {\bf important} text.
\endtt

\new
More about the \OpTeX/ Font Selection System is written in the technical
documentation in the section~\ref[fontsystem].
You can mix more font families in your document, you can
declare your own variant selectors or modifiers, etc.

\secc[sizes] Font sizes
%%%%%%%%%%%%%%%%%%%%%

The command \^`\typosize[<fontsize>/<baselineskip>]` sets the font size of text and
math fonts and baselineskip. If one of these two parameters is empty, the
corresponding feature stays unchanged. Don't write the unit of these
parameters. The unit is internally set to \^`\ptunit` which is 1pt by default.
You can change the unit by the command \^`\ptunit=<something-else>`,
for instance \^`\ptunit=1mm` enlarges all font sizes declared by \^`\typosize`.
Examples:

\begtt
\typosize[10/12]   % default of Plain TeX
\typosize[11/12.5] % font 11pt, baseline 12.5pt
\typosize[8/]      % font 8pt, baseline unchanged
\endtt

The commands for font size setting described in this section
have local validity. If you put them into a group,
the settings are lost when the group is finished. If you set
something relevant with paragraph shape (baselineskip given by
\^`\typosize` for example) then you must first finalize the
paragraph before closing the group:
`{\typosize[12/14] ...<text of paragraph>... \par}`.

The command \^`\typoscale[<font-factor>/<baselineskip-factor>]`
sets the text and math fonts
size and baselineskip as a multiple of the current fonts size and
baselineskip. The factor is written in \"scaled"-like way, it means that 1000
means factor one. The empty parameter is equal to the parameter 1000,
i.e. the value stays unchanged. Examples:

\begtt
\typoscale[800/800]    % fonts and baselineskip re-size to 80 %
\typoscale[\magstep2/] % fonts bigger 1,44times (\magstep2 expands to 1440)
\endtt

First usage of \^`\typosize` or \^`\typoscale` macro in your document sets so-called {\em main values}, i.\,e.\ main font size and main baselineskip. They are internally
saved in registers \^`\mainfosize` and \^`\mainbaselineskip`.

\new
The \^`\typoscale` command does scaling with respect to current values by default.
If you want to do it with respect to the main values, type \^`\scalemain` immediately
before \^`\typoscale` command.

\begtt
\typosize[12/14.4] % first usage in document, sets main values internally
\typosize[15/18]   % bigger font
\scalemain \typoscale[800/800] % reduces from main values, no from current.
\endtt

The \^`\typosize` and \^`\typoscale` macros initialize the font family by `\rm`.
You can re-size only the current font by the command
\^`\thefontsize[<font-size>]` or the font can be rescaled by
\^`\thefontscale[<factor>]`. These macros don't change math fonts sizes nor
baselineskip.

\new
There is \"low level" \^`\setfontsize{<size-spec>}` command which behaves like
a font modifier and sets given font size used by next variant selectors.
It doesn't change the font size immediately, but the following variant selector
does it. For example \^`\setfontsize{at15pt}`\^`\currvar` sets current variant to 15pt.

If you are using a font family with \"optical sizes feature" (i.\,e.\ there
are more recommended sizes of the same font which are not scaled
linearly; a good example is Computer Modern aka Latin Modern fonts)
then the recommended size is selected by all mentioned commands automatically.

More information about resizing of fonts is documented in the
section~\ref[setfontsize].

\secc Typesetting math
%%%%%%%%%%%%%%%%%%%%%

See the additional document
\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]
{Typesetting Math with \OpTeX/} for more details about this issue.

\OpTeX/ preloads a collection of 7bit Computer Modern math fonts
and AMS fonts in its format for math typesetting.
You can use them in any size and in the \^`\boldmath` variant.
%
\new
Most declared text font families (see \^`\fontfam` in the section~\ref[fontfam])
are configured with a recommended Unicode
math font. This font is automatically loaded unless you specify
\^`\noloadmath` before first \^`\fontfam` command. See log file for more
information about loading text font family and Unicode math fonts. If you
prefer another Unicode math font, specify it by \^`\loadmath{[<font-file>]}`
or \^`\loadmath{<font-name>}` before first \^`\fontfam` command.

Hundreds math symbols and operators like in AMS\TeX/ are accessible.
For example  `\alpha` $\alpha$, `\geq`~$\geq$, `\sum` $\sum$,
`\sphericalangle` $\sphericalangle$, `\bumpeq`, $\bumpeq$. See AMS\TeX/
manual or
\ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf\#ref:objects]
{Typesetting Math with \OpTeX/} for complete list of math symbols.

The following math alphabets are available:

\begtt    \catcode`\$=3 \catcode`/=0 \medmuskip=0mu \adef{ }{ }
\mit     % mathematical variables    $abc-xyz,ABC-XYZ$
\it      % text italics              $/it abc-xyz,ABC-XYZ$
\rm      % text roman                $/rm abc-xyz,ABC-XYZ$
\cal     % normal calligraphics      $/cal ABC-XYZ$
\script  % script                    $/script ABC-XYZ$
\frak    % fracture                  $/frak abc-xyz,ABC-XYZ$
\bbchar  % double stroked letters    $/bbchar ABC-XYZ$
\bf      % sans serif bold           $/bf abc-xyz,ABC-XYZ$
\bi      % sans serif bold slanted   $/bi abc-xyz,ABC-XYZ$
\endtt

The last two selectors \^`\bf` and \^`\bi` select the sans serif fonts in math regardless of the current text font family. This is a common notation for vectors and
matrices. You can re-declare them, see section~\ref[unimath-codes] where
definitions of Unicode math variants of \^`\bf` and \^`\bi` selectors are documented.

The math fonts can be scaled by \^`\typosize` and \^`\typoscale` macros.
Two math fonts collections are prepared: \^`\normalmath` for normal weight
and \^`\boldmath` for bold. The first one is set by default, the second one
is usable for math formulae in titles typeset in bold, for example.

\new
You can use \^`\mathbox{<text>}` inside math mode. It behaves as `{\hbox{<text>}}`
(i.e. the <text> is printed in horizontal non-math mode)
but the size of the <text> is adapted to the context of math size (text or script or
scriptscript).

\sec Typical elements of the document
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\secc[chap] Chapters and sections
%%%%%%%%%%%%%%%%%%%%%%%%%%

The documents can be divided into chapters (\^`\chap`),
sections (\^`\sec`), subsections (\^`\secc`) and they can be titled
by \^`\tit` command. The parameters are separated by the end of current line (no
braces are used):

\begtt \catcode`\<=13
\tit Document title <end of line>
\chap Chapter title <end of line>
\sec Section title <end of line>
\secc Subsection title <end of line>
\endtt

The chapters are automatically numbered by one number, sections by two numbers
(chapter.section), and subsections by three numbers. If there are no chapters
then sections have only one number and subsections two.

The implicit design of the titles of chapter etc.\ is implemented in the
macros \^`\_printchap`, \^`\_printsec` and \^`\_printsecc`. A designer can simply change
these macros if he/she needs another behavior.

The first paragraph after the title of chapter, section, and subsection is
not indented but you can type `\let`\^`\_firstnoindent=\relax` if you need all
paragraphs indented.

If a title is so long then it breaks into more lines in the output. It is better to hint at the
breakpoints because \TeX/ does not interpret the meaning of the title.
Users can put the \^`\nl` (means newline) to the breakpoints.

If you want to arrange a title to more lines in your source file then you can
use `^^J` at the end of each line (except the last one).
When `^^J` is used, then the reading of the title continues at the next line.
The \"normal" comment character `%` doesn't work in titles.
You can use \^`\nl`{\visiblesp` ^^J`} if you want to have corresponding lines in the source
and the output.

The chapter, section, or subsection isn't numbered if the \^`\nonum` precedes.
And the chapter, section, or subsection isn't delivered to the table of
contents if \^`\notoc` precedes. You can combine both prefixes.

\secc[cap] Another numbered objects
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Apart from chapters, sections, and subsections, there are another
automatically numbered objects: equations, captions for tables and
figures. The user can declare more numbered objects.

If the user writes the \^`\eqmark` as the last element of the display mode then
this equation is numbered. The equation number is printed in brackets. This number
is reset in each section by default.

If the \^`\eqalignno` is used, then user can put \^`\eqmark` to the last column
before `\cr`. For example:

\begtt
\eqalignno{
    a^2+b^2 &= c^2 \cr
          c &= \sqrt{a^2+b^2} & \eqmark \cr}
\endtt

Another automatically numbered object is a caption which is tagged by \^`\caption/t` for
tables and \^`\caption/f` for figures. The caption text follows.
The \^`\cskip` can be used between \^`\caption` text and the real object (table
or figure). You can use two orders: `<caption>\cskip <object>` or
`<object>\cskip <caption>`.
The \^`\cskip` creates appropriate vertical space between them. Example:

\begtt
\caption/t The dependency of the computer-dependency on the age.
\cskip
\noindent\hfil\table{rl}{
    age   & value \crl\noalign{\smallskip}
    0--1  & unmeasured \cr
    1--6  & observable \cr
    6--12 & significant \cr
   12--20 & extremal \cr
   20--40 & normal \cr
   40--60 & various \cr
   60--$\infty$ & moderate}
\endtt

This example produces:

\medskip
\caption/t The dependency of the computer-dependency on the age.
\cskip
\noindent\hfil\table{rl}{
                age   & value \crl\noalign{\smallskip}
                0--1  & unmeasured \cr
                1--6  & observable \cr
                6--12 & significant \cr
               12--20 & extremal \cr
               20--40 & normal \cr
               40--60 & various \cr
               60--$\infty$ & moderate}
\medskip

You can see that the word \"Table" followed by a number is added by the macro
`\caption/t`.
The caption text is centered. If it occupies more lines then the
last line is centered.

The macro \^`\caption/f` behaves like \^`\caption/t` but it is intended for
figure captions with independent numbering.
The word (Table, Figure) depends on the selected language (see
section~\ref[lang] about languages).

If you wish to make the table or figure as a floating object, you need to use
Plain \TeX/ macros \^`\midinsert` or \^`\topinsert` terminated by \^`\endinsert`.
Example:

\begtt
\topinsert  % table and its caption printed at the top of the current page
   <caption and table>
\endinsert
\endtt
%
The pair \^`\midinsert`...\^`\endinsert` prefers to put the enclosed object
to the current place. Only if this is unable due to page breaking, it
behaves like \^`\topinsert`...\^`\endinsert`.

\new
There are five prepared counters `A`, `B`, `C`, `D` and `E`.
They are reset in each chapter and section\fnote
{This feature can be changed, see the section~\ref[sections] in the technical documentation.}.
They can be used in context of \^`\numberedpar` `<letter>{<text>}`
macro. For example:
\begtt
\def\theorem    {\numberedpar A{Theorem}}
\def\corollary  {\numberedpar A{Corollary}}
\def\definition {\numberedpar B{Definition}}
\def\example    {\numberedpar C{Example}}
\endtt
%
Three independent numbers are used in this example. One for Theorems and Corollaries
second for Definitions and third for Examples. The user can write
`\theorem Let $M$ be...` and the new paragraph is started with the text:
{\bf Theorem 1.4.1.} Let $M$ be...
You can add an optional parameter in brackets. For example,
`\theorem [(L'Hôpital's rule)] Let $f$, $g$ be...`
is printed like {\bf Theorem 1.4.2 (L'Hôpital's rule).} Let $f$, $g$ be...

\secc References
%%%%%%%%%%%%%%%

Each automatically numbered object documented in
sections \ref[chap] and \ref[cap] can be referenced
\new
if optional parameter
`[<label>]` is appended to \^`\chap`, \^`\sec`,
\^`\secc`, \^`\caption/t`, \^`\caption/f` or \^`\eqmark`. The alternative syntax is
to use \^`\label[<label>]` before mentioned commands (not necessarily directly
before). The reference is realized by \^`\ref[<label>]` (prints the number
of the referenced object) or \^`\pgref[<label>]` (prints the page number).
Example:

\begtt
\sec[beatle] About Beatles

\noindent\hfil\table{rl}{...} % the table
\cskip
\caption/t [comp-depend] The dependency of the comp-dependency on the age.

\label[pythagoras]
$$ a^2 + b^2 = c^2 \eqmark $$

Now we can point to the section~\ref[beatle] on the page~\pgref[beatle]
or write something about the equation~\ref[pythagoras]. Finally there
is an interesting Table~\ref[comp-depend].
\endtt

The text printed by \^`\ref` or \^`\pgref` can be given explicitly by
\^`\ref[<label>]{<text>}` or \^`\pgref[<label>]{<text>}`. If the `<text>`
includes the `@` character, it is replaced by implicitly printed text.
Example: `see \ref[lab]{section~@}` prints the same as `see section~\ref[lab]`,
but first case creates larger active area for mouse clicking, when
\~`\hyperlinks` are declared.

If there are forward referenced objects then users have to run \TeX{} twice.
During each pass, the working `*.ref` file (with references data) is created
and this file is used (if it exists) at the beginning of the document.

You can use the \^`\label[<label>]` before the `\theorem`, `\definition` etc.\
(macros defined with `\numberedpar`) if you want to reference these numbered objects.
You can't use `\theorem[<label>]` because the optional parameter
is reserved to another purpose here.

You can create a reference to whatever else by commands
\^`\label[<label>]`\^`\wlabel{<text>}`. The connection between <label> and
<text> is established. The \^`\ref[<label>]` will print <text>.

By default, labels are not printed, of course. But if you are preparing a
draft version of your document then you can declare \^`\showlabels`. The labels
are printed at their destination places after such a declaration.

\secc Hyperlinks, outlines
%%%%%%%%%%%%%%%%%%%%%%%%%

If the command \^`\hyperlinks` `<color-in> <color-out>` is used at the beginning of
the document, then the following objects are hyperlinked in the PDF output:

\begitems
* numbers and texts generated by \^`\ref` or \^`\pgref`,
* numbers of chapters, sections, subsections, and page numbers in the table of contents,
* numbers or marks generated by \~`\cite` command (bibliography references),
* texts printed by \~`\url` or \~`\ulink` commands.
\enditems

The last object is an external link and it is colored by
<color-out>. Other links are internal and they are colored by
<color-in>. Example:

\begtt
\hyperlinks \Blue \Green % internal links blue, URLs green.
\endtt

You can use another marking of active links: by frames which are visible in
the PDF viewer but invisible when the document is printed. The way to do it
is to define the macros \^`\_pgborder`, \^`\_tocborder`, \^`\_citeborder`,
\^`\_refborder` and \^`\_urlborder` as the triple of RGB components of the used
color. Example:

\begtt
\def\_tocborder {1 0 0}  % links in table of contents: red frame
\def\_pgborder {0 1 0}   % links to pages: green frame
\def\_citeborder {0 0 1} % links to references: blue frame
\endtt

By default, these macros are not defined. It means that no frames are created.

The hyperlinked footnotes can be activated by \^`\fnotelinks` `<color-fnt> <color-fnf>`
where footnote marks in the text have `<color-fnt>` and the same footnote marks
in footnotes have <color-fnf>. You can define relevant borders
\^`\_fntborder` and \^`\_fnfborder` analogically as \^`\_pgborder` (for example).

There are \"low level" commands to create the links. You can specify the
destination of the internal link by \^`\dest[<type>:<label>]`. The
active text linked to the \^`\dest` can be created by
\^`\ilink[<type>:<label>]{<text>}`. The `<type>` parameter is one of
the `toc`, `pg`, `cite`, `ref`, or another special for your purpose.
These commands create internal links only when \^`\hyperlinks` is declared.

The \^`\url` macro prints its parameter in \~`\tt` font and creates a potential
breakpoints in it (after slash or dot, for example). If the \^`\hyperlinks`
declaration is used then the parameter of \^`\url` is treated as an external URL link.
An example: `\url{http://www.olsak.net}` creates \url{http://www.olsak.net}.
The characters \code{\%}, `\`, `#`, `{`, and `}` have to be protected by
backslash in the \^`\url` argument, the other special characters `~`,
`^`, `&` can be written as single character\fnote
{More exactly, there are the same rules as for `\code` command, see
section~\ref[verbatim].}.
You can insert the `\|` command
in the `\url` argument as a potential breakpoint.

If the linked text have to be different than the URL, you can use
\^`\ulink[<url>]{<text>}` macro. For example:
`\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}`
outputs to the text
\ulink[http://petr.olsak.net/optex]{\OpTeX/ page}.
The characters \code{\%}, `\`, `#`, `{`, and `}` must be escaped in
the <url> parameter.

The PDF format provides {\em outlines} which are notes placed in the special frame of
the PDF viewer. These notes can be managed as a structured and hyperlinked
table of contents of the document. The command \^`\outlines{<level>}` creates
such outlines from data used for the table of contents in the document. The
<level> parameter gives the level of opened sub-outlines
in the default view. The deeper levels can be opened by mouse click on the
triangle symbol after that.

\new
If you are using a special unprotected macro in section titles then \^`\outlines` macro
may crash. You must declare a variant of the macro for outlines case which is
expandable. Use \~`\regmacro` in this case. See the section \ref[toc] for more information
about \~`\regmacro`.

The command \^`\insertoutline{<text>}` inserts a next entry into PDF outlines at
the main level~0. These entries can be placed before the table of contents (created
by \^`\outlines`) or after it. Their hyperlink destination is in the place
where the \^`\insertoutline` macro is used.

The command \^`\thisoutline{<text>}` uses <text> in the outline instead of default
title text for the first following `\chap`, `\sec`, or `\secc`.
Special case: \^`\thisoutline{\relax}` doesn't create any outline for the following
`\chap`, `\sec`, or `\secc`.

\secc Lists
%%%%%%%%%%

The list of items is surrounded by \^`\begitems` and \^`\enditems` commands.
The asterisk (`*`) is active within this environment and it starts one item.
The item style can be chosen by the \^`\style` parameter written after \^`\begitems`:

\def\otrickd{\ulink[http://petr.olsak.net/optex/optex-tricks.html\#deflists]{OpTeX trick 0108}}
\begtt \catcode`|=0
\style o % small bullet
\style O % big bullet (default)
\style - % hyphen char
\style n % numbered items 1., 2., 3., ...
\style N % numbered items 1), 2), 3), ...
\style i % numbered items (i), (ii), (iii), ...
\style I % numbered items I, II, III, IV, ...
\style a % items of type a), b), c), ...
\style A % items of type A), B), C), ...
\style x % small rectangle
\style X % big rectangle
\style d % definition list, use *{word}, see |otrickd
\endtt

For example:

\begtt
\begitems
* First idea
* Second idea in subitems:
  \begitems \style i
  * First sub-idea
  * Second sub-idea
  * Last sub-idea
  \enditems
* Finito
\enditems
\endtt
%
produces:

\begitems
* First idea
* Second idea in subitems:
  \begitems \style i
   * First sub-idea
   * Second sub-idea
   * Last sub-idea
  \enditems
* Finito
\enditems

Another style can be defined by the command \~`\sdef{_item:<style>}{<text>}`.
Default item can be set by \^`\defaultitem={<text>}`.
The list environments can be nested. Each new level of items is indented by
next multiple of \^`\iindent` value which is set to `\parindent` by default.
The \^`\ilevel` register says what level of items is currently processed.
Each \^`\begitems` starts \^`\everylist` tokens register. You can set, for
example:
\begtt
\everylist={\ifcase\ilevel\or \style X \or \style x \else \style - \fi}
\endtt

You can say \^`\begitems` \^`\novspaces` if you don't want vertical spaces above
and below the list. The nested item list is without vertical spaces
automatically. More information about the design of lists of items should be
found in the section~\ref[lists].

A \"selected block of text" can be surrounded by
\^`\begblock`\dots\^`\endblock`. The default design of blocks of text is
indented text in smaller font. The blocks of text can be nested.

\secc Tables
%%%%%%%%%%%

The macro \^`\table{<declaration>}{<data>}` provides similar <declaration>
of tables as in \LaTeX: you can use letters `l`, `r`, `c`, each letter declares
one column (aligned to left, right, center, respectively).
These letters can be combined by the `|` character (vertical line). Example

\begtt
\table{||lc|r||}{                  \crl
   Month    & commodity  & price   \crli \tskip2pt
   January  & notebook   & \$ 700  \cr
   February & skateboard & \$ 100  \cr
   July     & yacht      & k\$ 170 \crl}
\endtt
%
generates the result:

\vskip-\medskipamount
\noindent\hfil\table{||lc|r||}{    \crl
   Month    & commodity  & price   \crli \tskip2pt
   January  & notebook   &  \$ 700 \cr
   February & skateboard &  \$ 100 \cr
   July     & yacht      & k\$ 170 \crl}
\medskip

Apart from `l`, `r`, `c` declarators, you can use the `p{<size>}` declarator
which declares the column with paragraphs of given width. More precisely,
a long text in the table cell is printed as a multiline paragraph with given width.
By default, the paragraph is left-right justified. But there are
alternatives:

\begitems
* `p{<size>`\^`\fL}` fit left, i.e.\ left justified, ragged right,
* `p{<size>`\^`\fR}` fit right, i.e.\ right justified, ragged left,
* `p{<size>`\^`\fC}` fit center, i.e.\ ragged left plus right,
* `p{<size>`\^`\fS}` fit special, short one-line pararaph centered,
                long paragraph normal,
* `p{<size>`\^`\fX}` fit extra, left-right justified but last line centered.
\enditems

You can use `(<text>)` in the <declaration>. Then this text is applied in
each line of the table. For example `r(\kern10pt)l` adds more 10\,pt space
between `r` and `l` rows.

An arbitrary part of the <declaration> can be repeated by a <number>
prefixed. For example `3c` means `ccc` or `c 3{|c}` means
`c|c|c|c`. Note that spaces in the <declaration> are ignored and you
can use them in order to more legibility.

The command `\cr` used in the <data> part of the table
is generally known from Plain \TeX. It marks the end of each row in the table.
Moreover \OpTeX/ defines following similar commands:

\begitems
* \^`\crl` \dots\ the end of the row with a horizontal line after it.
* \^`\crll` \dots\ the end of the row with a double horizontal line after it.
* \^`\crli` \dots\ like \^`\crl` but the horizontal line doesn't intersect the
      vertical double lines.
* \^`\crlli` \dots\ like \^`\crli` but horizontal line is doubled.
* \^`\crlp{<list>}` \dots\ like \^`\crli` but the lines are drawn only in the
  columns mentioned in comma-separated `<list>` of their numbers.
  The <list> can include `<from>-<to>` declarators, for example
  \^`\crlp{1-3,5}` is equal to \^`\crlp{1,2,3,5}`.
\enditems

The \^`\tskip``<dimen>` command works like the `\noalign{\vskip<dimen>}`
immediately after `\cr*` commands but it doesn't interrupt the vertical lines.

\new
You can use the following parameters for the \^`\table` macro. Default values are listed
too.

\begtt
\everytable={}       % code used in \vbox before table processing
\thistable={}        % code used in \vbox, it is removed after using it
\tabiteml={\enspace} % left material in each column
\tabitemr={\enspace} % right material in each column
\tabstrut={\strut}   % strut which declares lines distance in the table
\tablinespace=2pt    % additional vert. space before/after horizontal lines
\vvkern=1pt          % space between lines in double vertical line
\hhkern=1pt          % space between lines in double horizontal line
\tabskip=0pt         % space between columns
\tabskipl=0pt \tabskipr=0pt % space before first and after last column
\endtt

Example: if you do \^`\tabiteml={$\enspace}`\^`\tabitemr={\enspace$}` then
the \^`\table` acts like \LaTeX's array environment.

If there is an item that spans to more than one column in the table then
the macro \^`\multispan{<number>}` (from Plain \TeX) can help you. Another
alternative is
the command \^`\mspan``<number>[<declaration>]{<text>}`
which spans <number> columns and formats the <text> by the
<declaration>. The <declaration> must include a declaration of only one column
with the same syntax as common \^`\table` <declaration>.
If your table includes vertical rules and you want to
create continuous vertical rules by \^`\mspan`, then use rule declarators `|`
after `c`, `l` or `r` letter in \^`\mspan` <declaration>. The
exception is only in the case when \^`\mspan` includes the first
column and the table have rules on the left side. The example of \^`\mspan`
usage is below.

The \^`\frame{<text>}` makes a frame around <text>. You can put the whole \^`\table`
into \^`\frame` if you need double-ruled border of the table. Example:

\begtt
\frame{\table{|c||l||r|}{ \crl
  \mspan3[|c|]{\bf Title} \crl   \noalign{\kern\hhkern}\crli
  first & second & third  \crlli
  seven & eight  & nine   \crli}}
\endtt
%
creates the following result:

\hfil\frame{\table{|c||l||r|}{\crl
  \mspan3[|c|]{\bf Title} \crl   \noalign{\kern\hhkern}\crli
  first & second & third  \crlli
  seven & eight  & nine   \crli}}
\bigskip

The \^`\vspan``<number>{<text>}` shifts the <text> down in order it looks
like to be in the center of the <number> lines (current line is first).
You can use this for creating tables like in the following example:

\begtt \typosize[8.7/11]
\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt}
           \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt}
\table{|8{c|}}{\crlp{3-8}
   \mspan2[c|]{}      & \mspan3[c|]{Singular}         & \mspan3[c|]{Plural} \crlp{3-8}
   \mspan2[c|]{}      & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl
   \vspan2{I}   & Inclusive & \mspan3[c|]{\vspan2{O}} & \mspan3[c|]{X} \crlp{2,6-8}
                & Exclusive & \mspan3[c|]{}           & \mspan3[c|]{X} \crl
   \vspan2{II}  & Informal  & \mspan3[c|]{X}          & \mspan3[c|]{X} \crlp{2-8}
                & Formal    & \mspan6[c|]{X} \crl
   \vspan2{III} & Informal  & \vspan2{O} & X & X      & \mspan2[c|]{X} &\vspan2{O} \crlp{2,4-7}
                & Formal    &                         & \mspan4[c|]{X} & \crl
}
\endtt

\puttext 8.9cm -4cm {\pdfsave\pdfscale{.5}{.5}\rlap{%
\thistable{\tabstrut={\vrule height 20pt depth10pt width0pt}
           \baselineskip=20pt \tablinespace=0pt \rulewidth=.8pt}
\table{|8{c|}}{\crlp{3-8}
   \mspan2[c|]{}      &\mspan3[c|]{Singular} &\mspan3[c|]{Plural} \crlp{3-8}
   \mspan2[c|]{}      & Neuter & Masculine & Feminine & Masculine & Feminine & Neuter \crl
   \vspan2{I}   & Inclusive & \mspan3[c|]{\vspan2{O}} &\mspan3[c|] X \crlp{2,6-8}
                & Exclusive & \mspan3[c|]{} &\mspan3[c|] X \crl
   \vspan2{II}  & Informal  & \mspan3[c|] X &\mspan3[c|] X \crlp{2-8}
                & Formal    & \mspan6[c|] X \crl
   \vspan2{III} & Informal  & \vspan2{O} & X & X &\mspan2[c|] X & \vspan2{O} \crlp{2,4-7}
                & Formal    & &\mspan4[c|] X & \crl
}}\pdfrestore}

\hangindent=-7.5cm \hangafter=0
You can use \^`\vspan` with non-integer parameter too if you feel that the
result looks better, for example \^`\vspan2.1{text}`.

\hangindent=-7.5cm \hangafter=0
The rule width of tables and implicit width of all `\vrule`s and `\hrule`s
can be set by the command \^`\rulewidth=<dimen>`. The default value given
by \TeX/ is 0.4\,pt.

\hangindent=-7.5cm \hangafter=-2
The `c`, `l`, `r` and `p` are default \"declaration letters" but you can define
more such letters by `\def\_tabdeclare<letter>{<left>##<right>}`.
More about it is in technical documentation in section~\ref[table.impl].
See the definition of the \^`\_tabdeclarec` macro, for example.

The `:` columns boundary declarator is described in section~\ref[table.bound].
The tables with given width can be declared by `to<size>` or `pxto<size>`.
More about it is in section~\ref[table.w].
Many tips about tables can be seen on the site
\url{http://petr.olsak.net/optex/optex-tricks.html}.

\label[verbatim]\secc Verbatim
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

The display verbatim text have to be surrounded by the \^`\begtt` and
\^`\endtt` couple.
The in-line verbatim have to be tagged (before and after)
by a character which is declared by
\^`\verbchar``<char>`. For example \code{\\verbchar`}
declares the character \code{`}
for in-line verbatim markup.
And you can use \code{`\\relax`} for
verbatim `\relax` (for example).
\new
Another alternative of printing in-line
verbatim text is \~`\code{<text>}` (see below).

If the numerical register \^`\ttline` is set to the non-negative value then
display verbatim will number the lines. The first line has the number
\^`\ttline+1` and when the verbatim ends then the \^`\ttline` value is equal to the
number of the last line printed. Next \^`\begtt``...`\^`\endtt` environment will follow
the line numbering. \OpTeX/ sets \^`\ttline=-1` by default.

The indentation of each line in display verbatim is controlled by
\^`\ttindent` register. This register is set to the `\parindent` by default.
Users can change the values of the `\parindent` and \^`\ttindent` independently.

The \^`\begtt` command starts the internal group in which the catcodes are changed.
\new
Then the \^`\everytt` tokens register is run. It is empty by default and the user can
control fine behavior by it. For example, the catcodes can be re-declared here. If
you need to define an active character in the \^`\everytt`, use \~`\adef` as in the
following example:

\begtt \adef@{\string\endtt}
\everytt={\adef!{?}\adef?{!}}
\begtt
Each occurrence of the exclamation mark will be changed to
the question mark and vice versa. Really? You can try it!
@
\endtt
%
The \~`\adef` command sets its parameter as active {\it after\/}
the parameter of \^`\everytt` is read. So you don't have to worry about active
categories in this parameter.

There is an alternative to \^`\everytt` named \^`\everyintt` which is used for
in-line verbatim surrounded by an \^`\verbchar` or processed by the \~`\code`
command.

The \^`\everytt` is applied to all \^`\begtt``...`\^`\endtt` environments (if it is not
declared in a group). There are tips for such global `\everytt` definitions here:

\begtt \adef!{\char9251 }
\everytt={\typosize[9/11]}  % setting font size for verbatim
\everytt={\ttline=0}        % each listing will be numbered from one
\everytt={\visiblesp}       % visualization!of!spaces
\endtt

\new
If you want to apply a special code only for one \^`\begtt``...`\^`\endtt`
environment then don't set any \^`\everytt` but put desired material at the
same line where \^`\begtt` is. For example:

\begtt   \adef@{\string\endtt}
\begtt   \adef!{?}\adef?{!}
Each occurrence of ? will be changed to ! and vice versa.
@
\endtt

The in-line verbatim surrounded by a \^`\verbchar` doesn't work in
parameter of macros and macro definitions. (It works in titles declared by
\~`\chap`, \~`\sec` etc. and in \~`\fnote`s, because these macros are
specially defined in \OpTeX/).
\new
You can use more robust command \^`\code{<text>}` in problematic
situations, but you have to escape the following characters in the <text>:
`\`, `#`, `%`, braces (if the braces are unmatched in the <text>),
and space or `^` (if there are more than one subsequent spaces or `^` in
the <text>). Examples:

\begtt
\code{\\text, \%\#} ... prints \text, %#
\code{@{..}*&^$ $}  ... prints @{..}*&^$ $ without escaping, but you can
                        escape these characters too, if you want.
\code{a \ b}        ... two spaces between a  b, the second must be escaped
\code{xy\{z}        ... xy{z ... unbalanced brace must be escaped
\code{^\^M}         ... prints ^^M, the second ^ must be escaped
\endtt

You can print verbatim listing from external files by the \^`\verbinput` command.
Examples:

\begtt
\verbinput (12-42) program.c  % listing from program.c, only lines 12-42
\verbinput (-60) program.c    % print from begin to the line 60
\verbinput (61-) program.c    % from line 61 to the end
\verbinput (-) program.c      % whole file is printed
\verbinput (70+10) program.c  % from line 70, only 10 lines printed
\verbinput (+10) program.c    % from the last line read, print 10 lines
\verbinput (-5+7) program.c   % from the last line read, skip 5, print 7
\verbinput (+) program.c      % from the last line read to the end
\endtt

\new
You can insert additional commands for \^`\verbinput` before
the first opening bracket. They are processed in the local group.
For example, `\verbinput \hsize=20cm (-) program.c`.

The \~`\ttline` influences the line numbering by the same way as in
\~`\begtt``...`\~`\endtt` environment. If \~`\ttline=-1` then real line numbers are
printed (this is the default). If \code{\\ttline<-1} then no line
numbers are printed.

The \^`\verbinput` can be controlled by \^`\everytt`, \^`\ttindent` just like
in \~`\begtt``...`\~`\endtt`.

The \~`\begtt`...\~`\endtt` pair or \~`\verbinput` can be used for listings of
codes. Automatic syntax highlighting is possible, for example
`\begtt` \^`\hisyntax{C}` activates colors for C programs. Or
`\verbinput` \^`\hisyntax{HTML} (-) file.html` can be used for HTML or XML codes.
\OpTeX/ implements syntax highlighting of C, Lua, Python, \TeX/, HTML, XML and more.
For a declaration of a new language, see the section~\ref[hisyntax].

If the code is read by \^`\verbinput` and there are comment lines prefixed
by two characters then
you can set them by \~`\commentchars``<first><second>`. Such comments are
fully interpreted by \TeX/ (i.e. not verbatim).
Section~\ref[verb] (page \pgref[commentchars]) says more about this feature.

\sec Autogenerated lists
%%%%%%%%%%%%%%%%%%%%%%%%

\secc[toc] Table of contents
%%%%%%%%%%%%%%%%%%%%%%

The \^`\maketoc` command prints the table of contents of all \~`\chap`, \~`\sec`
and \~`\secc` used in the document. These data are read from the external `*.ref` file, so
you have to run \TeX/ more than once (typically three times if the table of
contents is at the beginning of the document).

Typically, we don't want to repeat the name of the section \"Table of contents"
in the table of contents again. The direct usage
of \~`\chap` or \~`\sec` isn't recommended here because the table of contents
is typically not referenced to itself. You can print the unnumbered and unreferenced
title of the section like this:

\begtt
\nonum\notoc\sec Table of Contents
\endtt
If you need a customization of the design of the TOC, read the
section~\ref[maketoc].

\new
If you are using a special macro in section or chapter titles
and you need different behavior of such macro in other cases then use
\^`\regmacro{<case-toc>}{<case-mark>}{<case-outline>}`.
The parameters are applied locally in given cases. The \^`\regmacro` can be
used repeatedly: then its parameters are accumulated (for more macros).
If a parameter is empty then original definition is used in given case.
For example:

\begtt
% default value of \mylogo macro used in text and in the titles:
\def\mylogo{\leavevmode\hbox{{\Red\it My}{\setfontsize{mag1.5}\rm Lo}Go}}
% another variants:
\regmacro {\def\mylogo{\hbox{\Red My\Black LoGo}}} % used in TOC
          {\def\mylogo{\hbox{{\it My}\/LoGo}}}     % used in running heads
          {\def\mylogo{MyLoGo}}                    % used in PDF outlines
\endtt

\secc Making the index
%%%%%%%%%%%%%%%%%%%%%

The index can be included in the document by the \^`\makeindex` macro. No external
program is needed, the alphabetical sorting is done inside \TeX/ at macro
level.

The \^`\ii` command (insert to index) declares the word separated by the space
as the index item. This declaration is represented as an invisible item on the
page connected to the next visible word. The page number of the page where
this item occurs is listed in the index entry. So you can type:

\begtt
The \ii resistor resistor is a passive electrical component ...
\endtt

You don't have to double the word if you use the \^`\iid` instead of \^`\ii`:

\begtt
The \iid resistor is a passive electrical component ...
or:
Now we'll deal with the \iid resistor .
\endtt

Note that the dot or comma has to be separated by space when \^`\iid` is
used. This space (before dot or comma) is removed by the macro in
the current text.

The multiple-words entries are commonly arranged in the index as follows:

\medskip

linear~dependency  11, 40--50

--- independency 12, 42--53

--- space 57, 76

--- subspace 58

\medskip

To do this you have to declare the parts of the index entries by the `/` separator.
Example:

\begtt
{\bf Definition.}
\ii linear/space,vector/space
{\em Linear space} (or {\em vector space}) is a nonempty set of...
\endtt

The number of the parts of one index entry (separated by `/`) is unlimited. Note, that you can
spare your typing by the comma in the \~`\ii` parameter. The previous example
is equivalent to `\ii linear/space \ii vector/space`~.

Maybe you need to propagate to the index the similar entry to the
linear/space in the form of space/linear. You can do this by the shorthand `,@`
at the end of the \~`\ii` parameter. Example:

\begtt
\ii linear/space,vector/space,@
is equivalent to:
\ii linear/space,vector/space \ii space/linear,space/vector
\endtt

If you really need to insert the space into the index entry, write `~`.

The \~`\ii` or \~`\iid` commands can be preceded by \^`\iitype` `<letter>`, then such
reference (or more references generated by one \~`\ii`) has the specified type.
The page numbers of such references should be formatted
specially in the index. \OpTeX/ implements only \^`\iitype` `b`,
\^`\iitype` `i` and \^`\iitype` `u`:
the page number in bold or in italics or underlined is printed
in the index when these types are used. The default index type is empty, which
prints page numbers in normal font. The \TeX/book index is a good example.

The \^`\makeindex` creates the list of alphabetically sorted index entries
without the title of the section and without creating more columns. \OpTeX/
provides other macros \^`\begmulti` and \^`\endmulti` for more columns:

\begtt \catcode`\<=13
\begmulti <number of columns>
<text>
\endmulti
\endtt
The columns will be balanced. The Index can be printed by the following
code:

\begtt
\sec Index
\begmulti 3 \makeindex \endmulti
\endtt

Only \"pure words" can be propagated to the index by the \~`\ii` command. It
means that there cannot be any macro, \TeX/ primitive, math selector, etc.
But there is another possibility to create such a complex index entry. Use
\"pure equivalent" in the \~`\ii` parameter and map this equivalent to a
real word that is printed in the index. Such mapping is done by
\^`\iis` command. Example:

\begtt
The \ii chiquadrat $\chi$-quadrat method is ...
If the \ii relax `\relax` command is used then \TeX/ is relaxing.
...
\iis chiquadrat {$\chi$-quadrat}
\iis relax {\code{\\relax}}
\endtt
%
The \^`\iis` `<equivalent> {<text>}` creates one entry in the \"dictionary
of the exceptions". The sorting is done by the <equivalent> but the
<text> is printed in the index entry list.

The sorting rules when \^`\makeindex` runs depends on the current language.
See section~\ref[lang] about languages selection.

\secc Bib\TeX/ing
%%%%%%%%%%%%%%%%

The command \^`\cite[<label>]` (or
\hbox{\^`\cite[<label-1>,<label-2>,...,<label-n>]`})
creates the citation in the form [42] (or [15,~19,~26]).
If \^`\shortcitations` is declared at the beginning of the document then
continuous sequences of numbers are re-printed like this:
\hbox{[3--5,~7,~9--11]}. If
\^`\sortcitations` is declared then numbers generated by one \^`\cite` command
are sorted upward.

If \^`\nonumcitations` is declared then the marks instead of numbers are generated
depending on the used bib-style. For example, the citations look like
[Now08] or [Nowak, 2008].

The \^`\rcite[<labels>]` creates the same list as \^`\cite[<labels>]` but without
the outer brackets. Example: `[\rcite[tbn], pg.~13]` creates [4,~pg.~13].

The \^`\ecite[<label>]{<text>}` prints the `<text>` only, but the entry labeled
<label> is decided as to be cited. If \~`\hyperlinks` is used then <text>
is linked to the references list.

You can define alternative formating of \^`\cite` command. Example:

\begtt \catcode`\<=13
\def\cite[#1]{(\rcite[#1])}    % \cite[<label>] creates (27)
\def\cite[#1]{$^{\rcite[#1]}$} % \cite[<label>] creates^{27}
\endtt

The numbers printed by \^`\cite` correspond to the same numbers generated in
the list of references. There are two possibilities to generate this
references list:

\begitems
* Manually using \~`\bib[<label>]` commands.
* By \~`\usebib/<type> (<style>) <bib-base>` command which reads `*.bib`
  files directly.
\enditems

\new
Note that another two possibilities documented in OPmac (using external
Bib\TeX/ program) isn't supported because Bib\TeX/ is an old program that does not
support Unicode. And Biber seems to be not compliant with Plain \TeX.

\medskip\noindent
{\bf References created manually using \^`\bib[<label>]` command.}

\begtt
\bib [tbn] P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 1997.
\bib [tst] P. Olšák. {\it Typografický systém \TeX.}
           269~s. Praha: CSTUG, 1995.
\endtt

If you are using \~`\nonumcitations` then you need to declare the <marks>
used by \~`\cite` command. To do it you must use long form of the \^`\bib`
command in the format \^`\bib[<label>] = {<mark>}`. The spaces around
equal sign are mandatory. Example:

\begtt
\bib [tbn] = {Olšák, 2001}
    P. Olšák. {\it\TeX{}book naruby.} 468~s. Brno: Konvoj, 2001.
\endtt

\noindent
{\bf Direct reading of `.bib` files} is possible by \^`\usebib` macro.
This macro reads and uses macro package `librarian.tex` by Paul Isambert.
The usage is:

\begtt \catcode`\<=13
\usebib/c (<style>) <bib-base> % sorted by \cite-order (c=cite),
\usebib/s (<style>) <bib-base> % sorted by style (s=style).
% example:
\nocite[*] \usebib/s (simple) op-biblist  % prints all from op-biblist.bib
\endtt

The <bib-base> is one or more `*.bib` database source files (separated by
commas and without extension) and the <style> is the part of the filename
`bib-<style>.opm` where the formatting of the references list is
defined. \OpTeX/ supports `simple` or `iso690` styles. The features of
the `iso690` style is documented in the section~\ref[isobib] in detail.
The \^`\usebib` command is more documented in section~\ref[usebib].

Not all records are printed from <bib-base> files: the command \^`\usebib`
selects only such bib-records which were used in \~`\cite` or \^`\nocite`
commands in your document. The \^`\nocite` behaves as \~`\cite` but prints
nothing. It tells only that the mentioned bib-record should be printed in the
reference list. If \^`\nocite[*]` is used then all records from <bib-base>
are printed.

You can create more independent lists of references (you are creating proceedings,
for example). Use \^`\bibpart` `{<name>}` to set the scope where \~`\cite`s
and references list are printed (and interconnected) independent of another
parts of your document. The \~`\cite` labels used in different parts can be
the same and they are not affected. References lists can be created manualy
by \^`\bib` or from a database by `\usebib`.
Example:

\begtt \typosize[10/12]
\bibpart {AA}
...\cite[labelX] ... \cite[labelY] ... % They belong to AA bib-list
\usebib/c (simple) file.bib            % generates AA bib-list numbered 1, 2, ...
                                       % \cite prints [1], [2], ... by bib-list AA
\bibpart {BB}
...\cite[labelZ] ... \cite[labelX] ... % They belong to BB bib-list
\bibnum=0 \usebib/c (simple) my.bib    % generates BB bib-list numbered 1, 2, ...
                                       % \cite prints [1], [2], ... by bib-list BB
\endtt
%
By default, \^`\bibpart` is empty. So \~`\cite`s and the references list are conneted
using this empty internal name.


\sec Graphics
%%%%%%%%%%%%%

\secc Colors, transparency
%%%%%%%%%%%

\OpTeX/ provides a small number of color selectors:
{\Blue `\Blue`},
{\Red `\Red`},
{\Brown `\Brown`},
{\Green `\Green`},
{\Yellow `\Yellow`},
{\Cyan `\Cyan`},
{\Magenta `\Magenta`},
{`\White`},
{\Grey `\Grey`},
{\LightGrey `\LightGrey`} and
`\Black`. More
such selectors can be defined
by setting four CMYK components (using \^`\setcmykcolor`),
or three RGB components (using \^`\setrgbcolor`)
or one grey component (using \^`\setgreycolor`). For example

\begtt
\def \Orange {\setcmykcolor{0 0.5 1 0}}
\def \Purple {\setrgbcolor{1 0 1}}
\def \DarkGrey {\setgreycolor{.1}}
\endtt

The color selectors work locally in groups like font selectors.

The command \^`\morecolors` reads more definitions of color selectors from
the \LaTeX/ file `x11nam.def`.
There are about 300 color names like
`\DeepPink`, `\Chocolate` etc. If there are numbered variants of the same
name, then the letters B, C, etc. are appended to the name in \OpTeX/. For example
`\Chocolate` is Chocolate1, `\ChocolateB` is Chocolate2 etc.

The basic colors \^`\Blue`, \^`\Red`, \^`\Cyan`, \^`\Yellow` etc.\ are defined
with CMYK components using \^`\setcmykcolor`.
On the other hand, you can define a color with three
RGB components and \^`\morecolors` defines such RGB colors.
By default, the color model isn't converted but only stored to
PDF output for each used color. Thus, there may be a mix of color
models in the PDF output which is not a good idea. You can overcome this
problem by declaration \^`\onlyrgb` or \^`\onlycmyk`. Then only the selected color
model is used for PDF output and if a used color is declared by another color
model then it is converted.
The \^`\onlyrgb` creates colors more bright (usable for computer
presentations). On the other hand, CMYK makes colors more true\fnote
{Printed output is more equal to the monitor preview especially if you are
using ICC profile for your printer.}
for printing.

You can define your color by a linear combination of previously defined colors using
\^`\colordef`. For example:

\begtt
\colordef \myCyan {.3\Green + .5\Blue}  % 30 % green, 50 % blue, 20% white
\colordef \DarkBlue {\Blue + .4\Black}  % Blue mixed with 40 % of black
\colordef \myGreen{\Cyan+\Yellow}       % exact the same as \Green
\colordef \MyColor {.3\Orange+.5\Green+.2\Yellow}
\endtt
%
The linear combination is done in CMYK subtractive color space by default
(RGB colors used in \^`\colordef` argument are converted first).
If the resulting component is greater than 1 then it is truncated to 1.
If a convex linear combination (as in the last example above) is used then it
emulates color behavior on a painter's palette.
You can use \^`\rgbcolordef` instead of \^`\colordef` if you want to mix colors
in the additive RGB color space.
If \^`\onlyrgb` is set then \^`\colordef` works like \^`\rgbcolordef`.

\def\coloron#1#2#3{%
   \setbox0=\hbox{#2#3}\leavevmode
   \rlap{#1\strut \vrule width\wd0}\box0
}
The following example defines the macro for
\coloron\Yellow\Brown{colored text on colored background}. Usage:
`\coloron<background><foreground>{<text>}`

The `\coloron` macro can be defined as follows:

\begtt
\def\coloron#1#2#3{%
   \setbox0=\hbox{#2#3}%
   \leavevmode \rlap{#1\strut \vrule width\wd0}\box0
}
\coloron\Yellow\Brown{Brown text on yellow background}
\endtt

The \^`\transparency``<number>` sets the transparency amount of following
typesetting material until the current group is closed.
The <number> must be in the range 0..255,
zero means no transparency (solid objects), 255 means
full transparency (invisible objects). You can see the effect when
overlapping one object over another.


\secc Images
%%%%%%%%%%%

The \^`\inspic` `{<filename>.<extension>}` or
\^`\inspic` `<filename>.<extension><space>`
inserts the picture stored in
the graphics file with the name `<filename>.<extension>` to the document.
You can set the picture width by \^`\picw=<dimen>`
before \^`\inspic` command which declares the width of the picture.
The image files can be in the PNG, JPG, JBIG2 or PDF format.

The \^`\picwidth` is an equivalent register to `\picw`. Moreover, there is an
\^`\picheight` register which denotes the height of the picture. If both
registers are set then the picture will be (probably) deformed.

The image files are searched in \^`\picdir`. This token list is empty
by default, this means that the image files are searched in the
current directory. Example: \^`\picdir={img/}` supposes that image files are
in `img` subdirectory. Note: the directory name must end by `/` in
the \^`\picdir` declaration.
More parameters can be inclued using the \^`\picparams` token list.

Inkscape\fnote
{A powerful and free Wysiwyg editor for creating vector graphics.}
is able to save a picture to PDF and labels of the picture to another
file\fnote
{Chose \"Omit text in PDF and create LaTeX file" option.}.
This second file should be read by \TeX/to print labels
in the same font as document font. \OpTeX/ supports this feature by
\^`\inkinspic` `{<filename>.pdf}` command. It reads and displays
both: PDF image and labels generated by Inkscape.

If you want to create vector graphics (diagrams, schema, geometry
skicing) then you can do it by Wysiwyg graphics editor (Inkscape, Geogebra for
example), export the result to PDF and include it by \^`\inspic`.
If you want to \"program" such pictures then Tikz package is recommended.
It works in Plain \TeX/ and \OpTeX.

\secc PDF transformations
%%%%%%%%%%%%%%%%%%%%%%%%

All typesetting elements are transformed by linear
transformation given by the current transformation matrix. The
`\pdfsetmatrix` `{<a> <b> <c> <d>}` command makes the internal multiplication
with the current matrix so linear transformations can be composed.
One linear transformation given by the `\pdfsetmatrix` above transforms
the vector $[0,1]$ to [<a>,\,<b>] and $[1,0]$ to [<c>,\,<d>].
The stack-oriented commands `\pdfsave` and `\pdfrestore` gives a possibility of
storing and restoring the current transformation matrix and the position of the current point.
This position has to be the same from \TeX{}'s point of
view as from the transformation point of view when `\pdfrestore` is processed.
Due to this fact the `\pdfsave\rlap{<transformed text>}\pdfrestore`
or something similar is recommended.

\OpTeX/ provides two special transformation macros
\^`\pdfscale` and \^`\pdfrotate`:

\begtt \catcode`\<=13
\pdfscale{<horizontal-factor>}{<vertical-factor>}
\pdfrotate{<angle-in-degrees>}
\endtt

These macros simply call the properly `\pdfsetmatrix` command.

It is known that the composition of transformations is not commutative. It
means that the order is important. You have to read the transformation
matrices from right to left. Example:

\begtt
First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore
      % text1 is scaled two times and it is reflected about vertical axis
      % and next it is rotated by 30 degrees left.
second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore
      % text2 is rotated by 30 degrees left then it is scaled two times
      % and reflected about vertical axis.
third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}%
       \pdfrestore % first slanted, then rotated by 15.3 degrees right
\endtt
%
\par\nobreak\bigskip\smallskip
This gives the following result.
First: \pdfsave \pdfrotate{30}\pdfscale{-2}{2}\rlap{text1}\pdfrestore
second: \pdfsave \pdfscale{-2}{2}\pdfrotate{30}\rlap{text2}\pdfrestore
third: \pdfsave \pdfrotate{-15.3}\pdfsetmatrix{2 0 1.5 2}\rlap{text3}\pdfrestore
\par\nobreak\bigskip\penalty0%\bigskip

You can see that \TeX/ knows nothing about dimensions of transformed material,
it treats it as with a zero dimension object.
\new
The \^`\transformbox{<transformation>}{<text>}`
macro solves the problem. This macro puts the transformed
material into a box with relevant dimensions. The <transfromation> parameter
includes one or more transformation commands `\pdfsetmatrix`, `\pdfscale`,
`\pdfrotate` with their parameters. The <text> is transformed text.

Example: \~`\frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}`
creates \frame{\transformbox{\pdfscale{1}{1.5}\pdfrotate{-10}}{moj}}.

The \^`\rotbox{<deg>}{<text>}` is shortcut for
\^`\transformbox{\pdfrotate{<deg>}}{<text>}`.

\secc Ovals, circles
%%%%%%%%%%%%%%%%%%%%

\new
The \^`\inoval{<text>}` creates a box like this: \inoval{text}.
Multiline text can be put in an oval by the command \^`\inoval{\vbox{<text>}}`.
Local settings can be set by
\^`\inoval[<settings>]{<text>}` or you can re-declare global settings by
\^`\ovalparams={<settings>}`. The default settings are:

\begtt
\ovalparams={\roundness=2pt           % diameter of circles in the corners
             \fcolor=\Yellow          % color used for filling oval
             \lcolor=\Red             % line color used in the border
             \lwidth=0.5bp            % line width in the border
             \shadow=N                % use a shadow effect
             \overlapmargins=N        % ignore margins by surrounding text
             \hhkern=0pt \vvkern=0pt} % left-righ margin, top-bottom margin
\endtt
The total distance from text to oval boundary is `\hhkern+\roundness` at the left and right
sides and
`\vvkern+\roundness` at the top and bottom sides of the text.

If you need to set a parameters for the <text> (color, size, font etc.),
put such setting right in front of the <text>:
\^`\inoval{<text settings><text>}`.

\new
The \^`\incircle[\ratio=1.8]{<text>}` creates a box like this \incircle[\ratio=1.8]{text}.
The \^`\ratio` parameter means width/height. The usage is analogical like for oval.
The default parameters are

\begtt
\circleparams={\ratio=1 \fcolor=\Yellow \lcolor=\Red \lwidth=0.5bp
               \shadow=N \overlapmargins=N \hhkern=2pt \vvkern=2pt}
\endtt

\new
The macros \^`\clipinoval` `<x> <y> <width> <height> {<text>}`
and \^`\clipincircle` (with the same parameters)
print the `<text>` when a clipping path (oval or cirle with given
`<with>` and `<height>` shifted its center by `<x>` to right and by `<y>` to up)
is used.
The `\roundness=5mm` is default for \^`\clipinoval` and user can change it.
Example:

\begtt
\clipincircle 3cm 3.5cm 6cm 7cm {\picw=6cm \inspic{myphoto.jpg}}
\endtt

\secc Putting images and texts wherever

\new
The \^`\puttext` `<x> <y> {<text>}` puts the `<text>` shifted by `<x>` right and by
`<y>` up from the current point of typesetting and does not change the
position of the current point. Assume a coordinate system with origin in the
current point. Then \^`\puttext` `<x> <y> {<text>}` puts the text at the
coordinates `<x>`, `<y>`. More exactly the left edge of its baseline is at that
position.

\new
The \^`\putpic` `<x> <y> <width> <height> {<image-file>}` puts an image
given by `<image-file>` (including extension) of given
`<width>` and `<height>` at given position (its left-bottom corner).
You can write \^`\nospec` instead `<width>` or `<height>` if this parameter
is not specified.

\sec Others
%%%%%%%%%%%

\secc[lang] Using more languages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\OpTeX/ prepares hyphenation patterns for all languages if such patterns are
available in your \TeX/ system.
\new
Only USenglish patterns (original from Plain \TeX/) are preloaded.
Hyphenation patterns of all other languages are loaded on demand when you first use
the `\<lang-id>lang` command in your document.
For example \^`\delang` for German, \^`\cslang` for
Czech, \^`\pllang` for Polish. The <lang-id> is a shortcut
of the language (mostly from ISO 639-1).
You can list all available languages including their <lang-id>'s by the
\^`\langlist` macro. It prints now:

\medskip
{\typosize[8.5/11.5]\emergencystretch=4em \hbadness=4000
\noindent \langlist
\par}
\medskip

\new
For compatibility with e-plain macros, there is the command
\^`\uselanguage{<language>}`. The parameter <language> is long-form of
language name, i.e.\ \^`\uselanguage{Czech}` works the same as \^`\cslang`.
The \^`\uselanguage` parameter is case insensitive.

For compatibility with \csplain/, there are macros \^`\ehyph`, \^`\chyph`,
\^`\shyph` which are equivalent to \^`\enlang`, \^`\cslang` and \^`\sklang`.

You can switch between language patterns by `\<iso-code>lang` commands mentioned
above. Default is \^`\enlang`.

\OpTeX/ generates three phrases used for captions and titles in technical
articles or books: \"Chapter", \"Table" and \"Figure". These phrases need to be known
in used language and it depends on the previously used language selectors
`\<iso-code>lang`. \OpTeX/ declares these words only for few languages:
\new
Czech, German, Spanish, French, Greek, Italian, Polish, Russian, Slovak, Hebrew
and English, If you need to use these words in other languages or you want to
auto-generate more words in your macros, then you can declare it by
\~`\sdef` or \^`\_langw` commands as shown in section~\ref[langphrases].

The \~`\makeindex` command needs to know the sorting rules used in your language.
\OpTeX/ defines only a few language rules for sorting: Czech,
Slovak and English. How to declare sorting rules for more languages are
described in the section~\ref[makeindex].

If you declare `\<iso-code>quotes`, then the control sequences `\"` and `\'`
should be used like this: `\"<quoted text>"` or `\'<quoted text>'`
(note that the terminating character is the same but it isn't escaped).
This prints language-dependent normal or alternative quotes around
<quoted text>. The language is specified by <iso-code>. \OpTeX/ declares
quotes only for Czech, German, Spanish, French, Greek, Italian, Polish,
Russian, Slovak and English (\^`\csquotes`, \^`\dequotes`, \dots, \^`\enquotes`).
You can simply define your own quotes as shown in section~\ref[langphrases].
The `\"` is used for quotes visually more similar to the `"` character which
can be primary quotes or secondary quotes depending on the language rules.
Maybe you want to alternate the meaning of these two types of quotes. Use
`\<isocode>quotes\altquotes` in such case.

\secc[styles] Pre-defined styles
%%%%%%%%%%%%%%%%%%%%%%%

\OpTeX/ defines three style-declaration macros \~`\report`, \~`\letter` and
\~`\slides`. You can use them at the beginning of your document if you are
preparing these types of documents and you don't need to create your own
macros.

The \^`\report` declaration is intended to create reports. It
sets default font size to 11\,pt and `\parindent` (paragraph indentation) to 1.2\,em.
The `\tit` macro uses smaller font because we assume that \"chapter level"
will be not used in reports. The first page has no page number, but the next pages
are numbered (from number~2). Footnotes are numbered from one in the whole
document. The macro `\author <authors><end-line>` can be used when
\^`\report` is declared. It prints `<authors>` in italics at the center of the
line. You can separate authors by `\nl` to more lines.

The \^`\letter` declaration is intended to create letters.
See the files `op-letter-*.tex` for examples.
The \^`\letter` style sets default
font size to 11\,pt and `\parindent` to 0\,pt. It sets half-line space
between paragraphs. The page numbers are not printed. The \^`\subject` macro
can be used, it prints the word \"Subject:" or \"Věc" (or something else
depending on current language) in bold. Moreover, the \^`\address` macro
can be used when \^`\letter` is declared. The usage of the \^`\address` macro
looks like:

\begtt \catcode`\<=13
\address
  <first line of address>
  <second line of address>
  <etc.>
  <empty line>
\endtt

It means that you need not use any special mark at the end of lines: the ends
of lines in the source file are the same as in printed output. The
\^`\address` macro creates `\vtop` with address lines. The width of such
`\vtop` is equal to the widest line used in it. So, you can use
`\hfill\address...` to put the address box to the right side of the
document. Or you can use `<prefixed text>\address...` to put
`<prefixed text>` before the first line of the address.

The \^`\slides` style creates a simple presentation slides. See an example
in the file `op-slides.tex`. Run `optex op-slides.tex` and see the documentation of
\^`\slides` style in the file `op-slides.pdf`.

Analogical declaration macro `\book` is not prepared. Each book needs
individual typographical care. You need to create specific macros for
design.

\secc Loading other macro packages
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

You can load more macro packages by `\input{<file-name>}` or by
\^`\load[<file-names>]`. The first case (`\input`) is \TeX/ primitive command, it can be
used in the alternative old syntax `\input <filename><space>` too. The
second case (\^`\load`) allows specifying a comma-separated list of included files.
Moreover, it loads each macro file only once, it sets
temporarily standard category codes during loading and it tries to
load `<filename>.opm` or `<filename>.tex` or `<filename>`, the first occurence
wins. Example:
\begtt
\load [qrcode, scanbase]
\endtt
%
does `\input qrcode.opm` \,and \,and `\input scanbase.tex`.
It saves local information about the fact that these file names
(`qrcode`, `scanbase`) were loaded, i.e.\ next \^`\load` will skip them.

It is strongly recommended to use the `\load` macro for loading external
macros if you need them. On the other hand, if your source document is structured
to more files (with individual chapters or sections), use simply the `\input` primitive.

The macro packages intended to \OpTeX/ have the name `*.opm`.
The list of packages supported by \OpTeX/ follows. Most of them are directly part of \OpTeX/:
\begitems \typosize[9/11]
* \ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf]{\tt math.opm}
  provides usable features for math typesetting and shows
  \ulink[https://petr.olsak.net/ftp/olsak/optex/math-doc.pdf\#ref:pkgtemplate]
  {how to create new packages}.
* `qrcode.opm` enables to create QR codes.
* `tikz.opm` does `\input tikz.tex`, i.e.\ loads Ti{\it k\/}Z. It adds \OpTeX/-specific code.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/mte-doc.pdf]{\tt mte.opm}
  includes settings for microtypographic extensions (protrusions+expanding fonts).
* `vlna.opm` enables to protect of one-letter prepositions and more things automatically.
* `emoji.opm` defines `\emoji{<name>}` command for colored emoticons.
* \ulink[https://github.com/vlasakm/optex-minim]{\tt minim-mp.opm} enables
  `\directmetapost` using \ulink[https://ctan.org/pkg/minim-mp]{\tt minim-mp}
  and \ulink[https://ctan.org/pkg/minim]{\tt minim} packages.
* \ulink[https://ctan.org/tex-archive/macros/luatex/generic/pdfextra/pdfextra-doc.pdf]{\tt pdfextra.opm}
  allows the use of many extra features from PDF standard (by M. Vlasák).
\enditems
See these files in `optex/pkg/` or `optex/<pkgname>` for more information about
them. The packages may have their documentation, try `texdoc <pkgname>`.

\secc Lorem ipsum dolor sit
%%%%%%%%%%%%%%%%%%%%%%%%%%%

\new
A designer needs to concentrate on the design of the output and maybe he/she
needs material for testing macros. There is the possibility to generate a
neutral text for such experiments. Use \^`\lorem[<number>]` or
\^`\lorem[<from>-<to>]`. It prints a paragraph (or paragraphs) with neutral
text. The numbers <number> or <from>, <to> must be in the range 1 to 150
because there are 150 paragraphs with neutral text prepared for you.
The \^`\lipsum` macro is equivalent to \^`\lorem`. Example: \^`\lipsum[1-150]`
prints all prepared paragraphs.

If the dot follows the argument before closing `]` (for example \^`\lipsum[3.]`
or \^`\lipsum[3.1]`)
then only first sentence from given paragraph is printed.

\secc Logos
%%%%%%%%%%

\new
The control sequences for typical logos can be terminated by optional `/`
which is ignored when printing. This makes logos more legible in the source file:

\begtt
We are using \TeX/ because it is cool. \OpTeX/ is better than \LaTeX.
\endtt

\secc The last page
%%%%%%%%%%%%%%%%%%%

The number of the last page (it may be different from the number of pages) is
expanded by \^`\lastpage` macro. It expands to `?` in first \TeX/ run and to
the last page in next \TeX/ runs.

There is an example for footlines in the format \"current page / last page":

\begtt
\footline={\hss \fixedrm \folio/\lastpage \hss}
\endtt

\new
The \^`\lastpage` expands to the last \^`\folio` which is a decimal
number or Roman numeral (when \^`\pageno` is negative). If you need to know
the total pages used in the document, use \^`\totalpages` macro. It expands to
zero (in first \TeX/ run) or to the number of all pages in the document
(in next \TeX/ runs).

\secc Use \OpTeX/
%%%%%%%%%%%%%%%%%

\new
The command \^`\useOpTeX` (or \^`\useoptex`) does nothing in \OpTeX/ but it causes
an error (undefined control sequence) when another format is used. You can
put it as the first command in your document:

\begtt
\useOpTeX % we are using OpTeX format, no LaTeX :)
\endtt

\secc \OpTeX/ tricks
%%%%%%%%%%%%%%%%%%

The page \ulink[https://petr.olsak.net/optex/optex-tricks.html]{\OpTeX/ tricks}
shows many other features of \OpTeX/. They are of different nature and they
are typically implemented by short chunks of macro code presented at the
page.

Selected macros defined as an \OpTeX/ trick can be used directly from your
document without copying the code chunks into your macros.
It is because these macros are \"registered" in \OpTeX/ (by \^`\_regtrick`
internaly) and if you use such a macro then \OpTeX/ automatically loads the
appropriate code chunk from an external file. These macros are listed here. More
information about them are accesible via the external links.

{\typosize[9/11]
\def\oturl{https://petr.olsak.net/optex/optex-tricks.html}
\def\tpg[#1]{\edef\tpgurl{\oturl\##1}}
\def\t#1{\ea\tA\ea{\string#1}\edef\tmp{\csstring#1}\iindex{\tmp}\dest[cs:\tmp]}
\def\tA#1{\ea\ulink\ea[\tpgurl]{#1}}

\medskip
\tpg[algol]\t\algol\ enables to create pseudocode listings.

\tpg[beglua]\t\beglua, \t\begLUA, \t\logginglua\ writing LUA codes as LUA codes.

\tpg[cancel]\t\cancel\ prints a given text and the line/cross line over the text.

\tpg[begfile]\t\createfile, \t\begfile, \t\endfile\
writes a code from the document to the given file.

\tpg[colortab]\t\colortab\
colored cells in the table.

\tpg[correctvsize]\t\correctvsize\
sets `\vsize` to fit lines exactly to pages.

\tpg[booktabs]\t\crtop, \t\crmid, \t\crbot\
specific design of tables: only horozontal rules with different thickness.

\tpg[colorlin]\t\crx\
alternating colored lines in tables.

\tpg[directchar]\t\directchar\
prints the character directly, bypasses the ligature processing.

\tpg[directoutput]\t\directoutput\
puts boxes to standalone pages adatped to the box dimesions.

\tpg[easylist]\t\easylist\
the depth of list is given by the number of `*`.

\tpg[fullcite]\t\fcread, \t\fullcite\
citations by full bibliographic records.

\tpg[greyblock]\t\framedblocks\
redefines \^`\begblock`, \^`\endblock` to create blocks in frames splittable to pages.

\tpg[ignoreinspic]\t\ignoreinspic\
the \^`\inspic` commands stop loading images, they are replaced by gray frames.

\tpg[import]\t\import\
allows to have subsets of document input files in separate directories.

\tpg[ispageodd]\t\ispageodd\
tests, if the current point is at odd page regardless of asynchronous processing.

\tpg[perpage]\t\incrpp. \t\thepp, \t\thepplast, \t\truepage\
does per-page counting of objects.

\tpg[keystrokes]\t\keystroke\
prints given text in a keystroke-like frame.

\tpg[longtable]\t\longtable\
alows to break a table to more pages and repeates header.

\tpg[lot]\t\makeLOF, \t\makeLOT, \t\captionF, \t\captionT\
create list of tables and list of figures similar to \^`\maketoc`.

\tpg[onlyifnew]\t\onlyifnew\
only define a macro if it is not already defined.

\tpg[pgforeground]\t\pgforeground\
adds material to the foreground of each page.

\tpg[linnum]\t\pstart, \t\pend\
dispalys line numbers of the marked text in the margin.

\tpg[rebox]\t\rebox\
modifies the vbox: its width will be equal to the wider line.

\tpg[replmacro]\t\replmacro\
enables to patch existing macros using regular expression rules.

\tpg[roundframe]\t\roundframe\
colored frames with rounded corners and many options.

\tpg[runsystem]\t\runsystem\
runs the given external system command.

\tpg[shadedframe]\t\shadedframe\
colored rectangular frames with simple shadows.

\tpg[scaleto]\t\scaleto, \t\scaletof\
text font size changed to the desired width.

\tpg[seccc]\t\seccc, \t\iniseccc\
implements new level of subsubsections.

\tpg[shownodes]\t\shownodes\
prints the list of nodes to the terminal.

\tpg[dayw]\t\sethours, \t\setminutes, \t\setseconds, \t\setweekday\
printing time, date, and day of week.

\tpg[multilist]\ea\ulink\ea[\oturl\#multilist]{\string\style\space m}, \t\keepstyle\
creates lists with items numbered like subsections.

\tpg[tabs]\t\settabs, \t\tabs\
macros emulate tabulators of old typewriters.

\tpg[pglists]\t\showpglists\
shows good organized list of nodes of given pages to the log file.

\tpg[tdnum]\t\tdnum\
expands to the three-digits-group format of the given number.

\tpg[tnodes]\t\tabnodes\
positions of table items are nodes, they can be used for drawing. 

\tpg[tnote]\t\tnote\
creates notes for table data printed just after the table.

\tpg[ttlineref]\t\ttlineref\
verbatim lines referenced in text.

\tpg[tablevcent]\t\vcent, \t\vbot\ 
prints paragraphs in tables verticaly centered or placed at bottom.

\tpg[thedimen]\t\thedimen\
prints dimen value using selected unit.

\tpg[twoblocks]\t\twoblocks\
allows printing bilingual texts in two columns veritically aligned.

\tpg[xreplstring]\t\xreplstring\
behaves like \~`\replstring` but is expandable and adds more features.

}

\sec Summary
%%%%%%%%%%%%

\def\ttref#1'{\ea\~\ea`\csname#1\endcsname`}

\begtt \typosize[9/11]\adef&{\kern.25em}\adef~#1'{\ea\~\ea`\csname#1\endcsname`}
~tit' Title (terminated by end of line)
~chap' Chapter Title (terminated by end of line)
~sec' Section Title (terminated by end of line)
~secc' Subsection Title (terminated by end of line)

~maketoc'         % table of contents generation
~ii' item1,item2  % insertion the items to the index
~makeindex'       % the index is generated

~label' [labname]  % link target location
~ref' [labname]    % link to the chapter, section, subsection, equation
~pgref' [labname]  % link to the page of the chapter, section, ...

~caption'/t  % a numbered table caption
~caption'/f  % a numbered caption for the picture
~eqmark'     % a numbered equation

~begitems'       % start a list of the items
~enditems'       % end of list of the items
~begblock'       % start a block of text
~endblock'       % end of block of text
~begtt'          % start a verbatim text
~endtt'          % end verbatim text
~verbchar' X     % initialization character X for in-text verbatim
~code'           % another alternative for in-text verbatim
~verbinput'      % verbatim extract from the external file
~begmulti' num   % start multicolumn text (num columns)
~endmulti'       % end multicolumn text

~cite' [labnames]  % refers to the item in the lits of references
~rcite' [labnames] % similar to \cite but [] are not printed.
~sortcitations' ~shortcitations' ~nonumcitations' % cite format
~bib' [labname]  % an item in the list of references
~usebib'/? (style) bib-base % direct using of .bib file, ? in {s,c}

~load' [filenames]     % loadaing macro files
~fontfam' [FamilyName] % selection of font family
~typosize' [font-size/baselineskip] % size setting of typesetting
~typoscale' [factor-font/factor-baselineskip] % size scaling
~thefontsize' [size] ~thefontscale' [factor]   % current font size

~inspic' file.ext    % insert a picture, extensions: jpg, png, pdf
~table' {rule}{data} % macro for the tables like in LaTeX
~fnote' {text}   % footnote (local numbering on each page)
~mnote' {text}   % note in the margin (left or right by page number)

~hyperlinks' {color-in}{color-out} % PDF links activate as clickable
~outlines' {level}   % PDF will have a table of contents in the left tab
~magscale'[factor]  % resize typesetting, line/page breaking unchanged
~margins'/pg format (left, right, top, bottom)unit % margins setting
~report' ~letter' ~slides'  % style declaration macros
\endtt

\sec API for macro writers
%%%%%%%%%%%%%%%%%%%%%%%%%%

All \TeX/ primitives and almost all \OpTeX/ macros are accesible by two
names: `\foo` (public or user namespace) and `\_foo` (private name space).
For example `\hbox` and `\_hbox` means the same \TeX/ primitive. More about
it is documented in section~\ref[namespaces].

If this manual refers `\foo` then `\_foo` equivalent exists too. For example,
we mention the `\addto` macro below. The `\_addto` equivalent exists too, but it
is not explicitly mentioned here. If we refer only `\_foo` then its public
equivalent does not exist. For example, we mention the `\_codedecl` macro below, so
this macro is not available as `\codedecl`.

If you are writing a document or macros specific for the document, then use
simply public namespace (`\foo`). If you are writing more general macros,
then you should declare your own namespace
by \~`\_namespace` macro and you have to follow the naming discipline described in
sections~\ref[namespaces] and \ref[pkg-namespace].

The alphabetically sorted list of macros typically usable for macro writers follows.
More information about such macros can be found in the technical documentation.
You can use hyperlinks here in order to go to the appropriate place of the technical
documentation.

\bgroup \medskip \noindent \typosize[9/11]
\^`\addto` `\macro{<text>}` adds <text> at the end of `\macro` body,
\^`\aheadto` `\macro{<text>}` puts <text> at the begin.\nl
\^`\adef` `<char>{<body>}` defines <char> active character with meaning <body>.\nl
\^`\afterfi` `{<text>}<ignored>\fi` expands to `\fi<text>`.\nl
\^`\basefilename` \^`\currfile` returns the name of the file currently read.\nl
\^`\bp`` {<dimen expression>}` expands \TeX/ dimension to decimal number in `bp` without unit.\nl
\^`\casesof` `<token> <list of cases>` expands to a given case by the given `<token>`.
   See also \^`\qcasesof`, \^`\xcasesof`.\nl
\~`\_codedecl`` <sequence> {<info>}` is used at beginning of macro files.\nl
\~`\colordef`` \macro {<mix of colors>}` declares `\macro` as color switch.\nl
\^`\cs` `{<string>}` expands `\<string>`.\nl
\^`\cstochar` `<sequence>` converts <sequence> to <character> if there was `\let<sequence>=<character>`.\nl
\~`\_doc` `...` \~`\_cod` encloses documenation text in the macro code.\nl
\^`\eoldef`` \macro #1{<body>}` defines `\macro` with parameter separated to end of line.\nl
\~`\_endcode` closes the part of macro code in macro files.\nl
\~`\_endnamespace` closes name space declared by \~`\_namespace`.\nl
\~`\eqbox`` [<label>]{<text>}` creates `\hbox{<text>}` with common width across whole document.\nl
\^`\expr`` {<expression>}` expands to result of the <expression> with decimal numbers.\nl
\~`\fontdef`` \f {<font spec.>}` declares `\f` as font switch.\nl
\~`\fontlet` `\fa=\fb <sizespec.>` declares `\fa` as the same font switch
   like `\fb` at given <sizespec.>.\nl
\^`\foreach` `<list>\do <parameters>{<what>}` is exapandable loop over <list>.\nl
\^`\foreachdef` `\macro <parameters>{<what>}` declares expandable `\macro` as loop over <list>.\nl
\^`\fornum` `<from>..<to>\do {<what>}` is expanadable loop with numeric variable.\nl
\^`\incr` `<counter>` increases and \^`\decr` `<counter>` decreases `<counter>` by one globally.\nl
\^`\ignoreit` `<one>`, \^`\ignoresecond` `<one><two>` ignores given parameter.\nl
`\expandafter` \^`\ignorept` `\the<dimen>` expands to decimal number <dimen> without `pt`.\nl
\~`\isempty`, \~`\istoksempty`, \~`\isequal`, \~`\ismacro`, \~`\isdefined`, \~`\isinlist`
\~`\isfile`, \~`\isfont` do various tests.\nl
   Example: \~`\isinlist\list{<text>}\iftrue` does `\iftrue` if <text> is in `\list`.\nl
\^`\isnextchar`` <char>{<text1>}{<text2>}` performs <text1> if next
   character is <char>, else <text2>.\nl
\~`\kv` `{<key>}` expands to a value given by key=value.
   See also \~`\trykv`, \~`\iskv`, \~`\readkv`, \~`\kvx`, \~`\nokvx`.\nl
\^`\loop` `...` \^`\repeat` is classical Plain \TeX/ loop.\nl
\^`\mathstyles`` {<math list>}` enables to create macros dependent on current math style.\nl
\~`\_namespace`` {<pkg>}` declares name space used by package writers.\nl
\^`\newcount`, \^`\newdimen` etc. are classical Plain \TeX/ allocators.\nl
\^`\newif` `\iffoo` declares boolean `\iffoo` as in Plain \TeX/.\nl
\^`\_newifi` `\_iffoo` declares boolean `\_iffoo`.\nl
\^`\nospaceafter``\macro`, \^`\nospacefuturelet`: they ignore the following optional space.\nl
\^`\opinput`` {<filename>}` reads file like `\input` but with standard catcodes.\nl
\^`\optdef`` \macro [<opt-default>] <parameters>{<body>}` defines `\macro` with [opt.parameter].\nl
\^`\opwarning` `{<text>}` prints <text> to the terminal and .log file as warning.\nl
\~`\posx``[<label>]`, \~`\posy``[<label>]`, \~`\pospg``[<label>]`
   provide coordinates of absolute position of the \~`\setpos``[<label>]`.
\~`\private`` <sequence> <sequence> ... ;` declares <sequence>s for private name space.\nl
\~`\public`` <sequence> <sequence> ... ;` declares <sequence>s for public name space.\nl
\^`\replstring`` \macro{<stringA>}{<stringB>}` replaces all <stringA> to <stringB> in `\macro`.\nl
\^`\sdef` `{<string>}<parameters>{<body>}` behaves like `\def\<string><parameters>{<body>}`.\nl
\^`\setctable` and \^`\restorectable` manipulate with stack of catcode tables.\nl
\^`\slet` `{<stringA>}{<stringB>}` behaves like `\let\<stringA>=\<stringB>`\nl
\^`\sxdef` `{<string>}<parameters>{<body>}` behaves like `\xdef\<string><parameters>{<body>}`.\nl
\^`\trycs`` {<string>}{<text>}` expands `\<string>` if it is defined else expands <text>.\nl
\^`\useit` `<one>`, \^`\usesecond` `<one><two>` uses given parameter.\nl
\^`\wlog`` {<text>}` writes <text> to .log file.\nl
\^`\wterm`` {<text>}` writes <text> to the terminal and .log file.\nl
\^`\xargs`` <what> <token> <token> ... ;` repeats <what><token> for each <token>.\nl
\unpenalty\unskip \par \egroup

\sec Compatibility with Plain \TeX/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

All macros of Plain \TeX/ are re-written in \OpTeX/. Common macros should
work in the same sense as in original Plain \TeX. Internal control sequences
like `\f@@t` are removed and mostly replaced by control sequences
prefixed by `_` (like `\_this`). Only a basic set of old Plain
\TeX/ control sequences like `\p@`, `\z@`, `\dimen@` are provided
but not recommended for new macros.

All primitives and common macros have two
control sequences with the same meaning: in prefixed and unprefixed form.
For example `\hbox` is equal to `\_hbox`.
Internal macros of \OpTeX/ have and use only prefixed form. User should use
unprefixed forms, but prefixed forms are accessible too because the `_` is
set as a letter category code globally (in macro files and users document too). Users
should re-define unprefixed forms of control sequences without worries that
something internal will be broken.

\new
The Latin Modern 8bit fonts instead Computer Modern 7bit fonts are
preloaded in the format, but only a few ones. The full family set is ready to
use after the command \~`\fontfam[LMfonts]` which reads the fonts in OTF
format.

\new
Plain \TeX/ defines `\newcount`, `\bye` etc. as `\outer` macros. \OpTeX/
doesn't set any macro as `\outer`. Macros like `\TeX`, `\rm` are defined as
`\protected`.

\new
The text accents macros `\"`, `\'`, `\v`, `\u`, `\=`, `\^`, `\.`, `\H`,
`\~`, \code{\\`}, `\t`   are undefined\fnote
{The math accents macros like `\acute`, `\bar`, `\dot`, `\hat` still work.}
in \OpTeX/. Use real
letters like á, ř, ž in your source document instead of these old accents macros.
If you really want to use them, you can initialize them by the \^`\oldaccents`
command. But we don't recommend it.

\new
The default paper size is not set as the letter with 1\,in margins but as A4 with
2.5\,cm margins. You can change it, for example by
\^`\margins/1 letter (1,1,1,1)in`. This example sets the classical Plain \TeX/
page layout.

\new
The origin for the typographical area is not at the top left 1\,in 1\,in coordinates
but at the top left paper corner exactly. For example, `\hoffset` includes directly left
margin.

The tabbing macros `\settabs` and `\+` (from Plain \TeX/)
are not defined in \OpTeX/ because they are obsolete. But you can use the
\ulink[http://petr.olsak.net/optex/optex-tricks.html\#tabs]{\OpTeX/ trick 0021}
if you really need such feature.

The `\sec` macro is reserved for sections but original Plain \TeX/ declares this
control sequence for math secant\fnote{Use \code{$\\secant(x)$} to get $\secant(x)$.}.

\sec Related documents

\begitems
* \ulink[http://petr.olsak.net/ftp/olsak/optex/optex-math.pdf]
  {Typesetting math with \OpTeX} --
  More details about math typesetting.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/tex-nutshell.pdf]
  {\TeX/ in a Nutshell} --
  Summary about \TeX/ principles, \TeX/ primitive commands etc.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/op-catalog.pdf]
  {\OpTeX/ catalog} --
  All fonts collected to `\fontfam` families are shown here.
* \ulink[http://petr.olsak.net/ftp/olsak/optex/omls.pdf]
  {OMLS} --
  \OpTeX/ Markup Language Standard.
* \ulink[http://petr.olsak.net/optex/optex-tricks.html]
  {\OpTeX/ - tips, tricks, howto} --
  Tips of macro codes for various purposes.

\enditems

\enddocument


\sec Dependencies
%%%%%%%%%%%%%%%%%

When `optex.fmt` is created then the following must be installed

\begitems
* The `\luatex` program.
* Latin moder font metrics
  `ec-lmr10.tfm`, `ec-lmbx10.tfm`, `ec-lmri10.tfm`,
  `ec-lmbxi10.tfm`, `ec-lmtt10.tfm` (for basic text font initializing).
* Computer rmodern font metrics
  `cmr10.tfm`, `cmmi10.tfm`, `cmsy10.tfm`, `cmex10.tfm` (for basic math
  initializing). If there are more Computer Modern fonts then they are read
  too.
* The file `hyphen.tex` form plain \TeX.
\enditems

When `\fontfam` is used  then the ability of Unicode fonts reading
is initialized using Lua scripts: `ltluatex.lua` (from \LaTeX/ package),
`luaotfload-main.lua` and more 20 similar `.lua` files (from `luaotfload`
package).

When a font family is needed using `\fontfam` then such font family must be
installed in the OTF format otherwise, the `\fontfam` command is ignored
(only warning about no-existent font family is printed).

When `\cslang`, `\delang` etc. commands are used in the document
then the hyphenation patterns of relevant languages must be installed.
Moreover the Lua script `luatex-hyphen.lua` (from `hyph-utf8` package)
and data file `language-dat.lua` (from `hyphen-base` package)
must be installed.

When `\usebib` command is used then `librarian.tex` file
(from the `librarian` macro package) must be installed.

When `\morecolors` command is used then `x11nam.def` file
(from the `xcolor` package) must be installed.

When `\lorem` command is used then `lipsum.ltd.tex` file
(from the `lipsum` package) must be installed.

