Texmacs Manual - en
Texmacs Manual - en
Table of contents
1. Getting started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.1. Conventions for this manual ........ . . . . . . . . . . . . . . . . . . . . . . . . . 13
Menu entries . . . . ........ . . . . . . . . . . . . . . . . . . . . . . . . . 13
Keyboard modiers ........ . . . . . . . . . . . . . . . . . . . . . . . . . 13
Keyboard shortcuts ....... . . . . . . . . . . . . . . . . . . . . . . . . . 13
Special keys . . . . ........ . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2. Conguring TEXMACS . . . . ........ . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3. Creating, saving and loading documents . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4. Printing documents . . . . . ........ . . . . . . . . . . . . . . . . . . . . . . . . . 15
3. Mathematical formulas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
3.1. Incorporating mathematical formulas into documents . . . . . . . . . . . . . . . . . 27
3.2. Typing mathematical symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.3. Main mathematical constructs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.4. Typing large delimiters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
3.5. Typing big operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6. Wide mathematical accents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.7. Semantic editing facilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.8. Common errors and syntax correction . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.9. Semantics of mathematical symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.10. Customized mathematical semantics . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
4. Tabular material . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.1. Creating tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.2. The formatting mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3. Specifying the cell and table alignment . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.4. Specifying the cell and table size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.5. Borders, padding and background color . . . . . . . . . . . . . . . . . . . . . . . . . 39
5
6 Table of contents
8. Editing tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.1. Cut and paste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
8.2. Search and replace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
8.3. Spell checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.4. Undo and redo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
8.5. Structured editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8.6. Structured cursor movement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Structured traversal of the document . . . . . . . . . . . . . . . . . . . . . 59
Traversal of tags that are similar to the innermost tag . . . . . . . . . . 59
Movements inside the innermost tag . . . . . . . . . . . . . . . . . . . . . . 59
8.7. Structured variants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
8.8. Positioning and resizing objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.9. Versioning tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Comparing two versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Table of contents 7
9. Laptop presentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.1. Beamer styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.2. Traversal of a presentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
9.3. Overlays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
9.4. Decorations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
9.5. Animations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
9.6. Exporting beamer presentations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Chapter 1
Getting started
Menu entries.
Throughout the TEXMACS manual, menu entries will be typeset using a sans serif font, like
in Document, File!Load or Format!Font shape!Italic.
Keyboard modiers.
TEXMACS makes use of the following keyboard modiers:
For instance, ⌘⇧X stands for the action which consists of simultaneously pressing the three
keys ⌘ , ⇧ and X .
The actual keyboard modier keys depend on your system as indicated in the following
table
⌃ ⌥ ⌘
Windows or Linux/Unix
Ctrl left Alt (y) (y)
with Windows keyboard
Apple ⌘ Command ⌥ Option (y) Ctrl
Keyboard shortcuts.
Keyboard shortcuts are obtained by pressing several keys or modied keys in succession.
For instance, the shortcut - > corresponds on rst pressing the - key and then the key > .
Inside mathematical formulas, this shortcut inserts the arrow !. Similarly, the shortcut
⌃X ⌃F consists of rst pressing the keys ⌃ and X together, and next pressing the keys ⌃ and
F again together. In the Emacs look and feel, this shortcut enables you to open a new le.
13
14 Getting started
Some common keyboard prexes are detailed in the section on general keyboard rules. In
cases when TEXMACS keyboard shortcuts are superseded by shortcuts from the operating
system, equivalents for the keyboard modiers can be obtained using the ⎋ key. For
instance, ⎋ is equivalent to ⌘ and ⎋ ⎋ is equivalent to ⌥ .
Notice that the TEXMACS menus and keyboard behavior are contextual , i.e. they depend on
the current mode (i.e. text mode or math mode), the current language and the position
of the cursor inside your document. For instance, inside math mode, you have special
keyboard shortcuts which are handy for typing mathematical formulas, but which are
useless in text mode.
Special keys.
On some platforms, some special keys such as the Return key are depicted by short glyphs.
Below follows the table with all such special keys and there meaning.
It is also recommended to specify the global settings for your document when necessary.
First of all, you may specify a document style like article, book or seminar using Docu-
ment!Style. If you write documents in several languages, then you may want to specify
the language of your document using Document!Language. Similarly, you may specify a
paper type using Document!Page!Size.
For newly started documents, the style and page size can also be specied in the Focus menu
or buttons on the focus toolbar . In general, the focus menu and toolbar are useful for editing
structured documents, and their contents will be highly dependent on the current context.
After modifying your document, you may save it using File!Save. Old documents can be
retrieved using File!Load. Notice that you can edit several documents in the same window
using TEXMACS; you can switch between dierent buers using Go.
You can print the current le using File!Print!Print all. By default, TEXMACS assumes
that you have a 600dpi printer for a4 paper. These default settings can be changed in
Edit!Preferences!Printer. You can also print to a postscript le using File!Print!Print
all to le (in which case the default printer settings are used for creating the output) or
File!Export!Postscript (in which case the printer settings are ignored).
You may export to PDF using File!Export!Pdf. Notice that you should set Edit!Prefer-
ences!Printer!Font type!Type 1 if you want the produced Postscript or PDF le to use
Type 1 fonts. However, only the CM fonts admit Type 1 versions. These CM fonts are of
a slightly inferior quality to the EC fonts, mainly for accented characters. Consequently,
you might prefer to use the EC fonts as long as you do not need a PDF le which looks
nice in Acrobat Reader.
When adequately conguring TEXMACS, the editor is guaranteed to be wysiwyg: the result
after printing out is exactly what you see on your screen. In order to obtain full wysiwyg-
ness, you should in particular select Document!Page!Type!Paper and Document!Page!
Screen layout!Margins as on paper. You should also make sure that the characters on your
screen use the same number of dots per inch as your printer. This rendering precision of
the characters may be changed using Document!Font!Dpi. Currently, minor typesetting
changes may occur when changing the dpi, which may globally aect the document through
line and page breaking. In a future release this drawback should be removed.
Chapter 2
Writing simple documents
The usual English characters and punctuation symbols can easily be obtained on most
keyboards. Most modern system also implement standard shortcuts in order to obtain
accented characters and other special symbols. If necessary, accented characters can also
be obtained using the ⌘ prex. For instance, é is obtained by typing ⌘' E . Similarly, we
obtain à via ⌘` A and so on.
Long words at borders of successive lines are automatically hyphenated. In order to
hyphenate foreign languages correctly, you should specify the language of the document
in the menu Document!Language.
At the left hand side of the footer, you see the document style, the text properties at the
current cursor position. Initially, it displays generic text roman 10, which means that you
type in text mode using a 10 point roman font and the generic document style. You can
change the text properties (font, font size, color, language) in the Format menu. You can
also change the text properties of the text you have already typed by selecting a region
and then using the Format menu. Some text properties can also be changed for all the
document with the Document menu.
At the right hand side of the footer, the character or object (like a change in the text
properties) just before the cursor is displayed. We also display all environments which are
active at the cursor position. This information should help you to orient yourself in the
document.
Usually, long documents have a structure: they are organized in chapters, sections and
subsections, they contain dierent types of text, such as regular text, citations, footnotes,
theorems, etc. After selecting a document style in Document!Style, TEXMACS takes care of
specic layout issues, such as numbering of sections, pages, theorems, typesetting citations
and footnotes in a nice way and so on.
Currently, several standard document styles have been implemented: generic, article,
book, letter, exam, beamer, seminar, source. For instance, the article style can be used
for writing articles. Besides, there are styles for common journals and special purposes,
such as the TEXMACS documentation.
As soon as you have selected a document style, you can organize your text into sections
(see Insert!Section) and use specic environments (also called tags). Examples of environ-
ments are theorem, proposition, remark and so on (see Insert!Enunciation). Other examples
are lists of items (see Insert!Itemize) or numbered lists (see Insert!Enumerate). Further
examples of frequently used tags are strong (for writing important text), name (for writing
names of persons), etc.
17
18 Writing simple documents
When you get more acquainted with TEXMACS, it is possible to add your own new envi-
ronments in your own style le. Assume for instance that you often make citations and
that you want those to appear in italic, with left and right margins of 1cm. Instead of
manually changing the text and paragraph properties each time you make a citation, it is
better to create a citation environment. Not only it will be faster to create a new citation
when doing so, but it is also possible to systematically change the layout of your citations
throughout the document just by changing the denition of the citation environment. The
latter situation occurs for instance if you discover a posteriori that you prefer the citations
to appear in a smaller font.
There are a few general editing principles which make it easy to manipulate structured
documents using TEXMACS. One major concept is the current focus, which is best illustrated
on an example. Assume that we are in the process of entering a classical theorem:
The following theorem is due to Euler:
Theorem 2.1. epi = ¡1j.
At the position of the cursor, the grey and cyan boxes indicate the active tags: in this case,
the cursor is both inside a theorem and a formula. The innermost active tag (the formula
epi = ¡1 in our example) is surrounded by a cyan box and called the current focus.
The contents of the Focus menu and focus toolbar (the lowest toolbar) are highly context
dependent and determined as a function of the current focus. In our example, the focus
toolbar contains a popup menu button Formula; when selecting Equation in this menu, the
text will change into
The following theorem is due to Euler:
Theorem 2.2.
epi = ¡1j:
Similarly, the arrow buttons on the left hand side of the focus toolbar allow you to jump to
similar tags. In this case, they will allow you to quickly traverse all formulas and equations
in your document. For more information on structured editing operations we refer to the
chapter on editing tools.
A second important concept is the current editing mode. Currently, there are ve major
modes: text mode, mathematics mode, program mode, graphics mode and source mode.
In principle, the current mode can be determined from the current focus, but the mode
is likely to change less often than the focus. The mode dependent toolbar above the focus
toolbar contains several buttons which are useful in the current mode. The contents of the
Insert and Format menus are also mode dependent.
2.4. Lists
Using Insert!Itemize you may start an unnumbered list. You may either select a particular
tag like (bullets), ¡ (dashes) or ! (arrows) to indicate entries in the list or the default
tag. Lists may be nested inside other tags, like in the following list:
First item.
A subitem.
Another one.
A nal item.
The default tag is rendered in a dierent way depending on the level of nesting. At the
outermost level, we used the tag, at the second level , and so on. When you are inside
a list, notice that pressing ↩ automatically starts a new item. If you need items which are
several paragraphs long, then you may always use ⇧↩ in order to start a new paragraph.
Enumerate environments, which are started using Insert!Enumerate, behave in a similar
way as itemize, except that the items are numbered. Here follows an example of an enu-
meration which was started using Insert!Enumerate!Roman:
I. A rst item.
The last type of lists are descriptive lists. They are started using Insert!Description and
allow you to describe a list of concepts:
2.5. Environments
In a similar way as content-based tags, environments are used to mark portions of text
with a special meaning. However, while content-based tags usually enclose small portions
of text, environments often enclose portions that are several paragraphs long. Frequently
used environments in mathematics are theorem and proof, like in the example below:
Theorem 2.3. There exist no positive integers a, b, c and n with n > 3, such that an + bn =
c n.
You may enter environments using Insert!Environment. Other environments with a similar
rendering as theorems are proposition, lemma, corollary, axiom, denition. You may use the
dueto macro (entered using \ D U E T O ↩ ) in order to specify the person(s) to which the
theorem is due, like in
Other frequently used environments with a similar rendering as theorems, but which do
not emphasize the enclosed text, are remark, note, example, warning, exercise and problem.
The remaining environments verbatim, code, quote, quotation and verse can be used in order
to enter multiparagraph text or code, quotations or poetry.
As a general rule, TEXMACS takes care of the layout of your text. Therefore, although we
did not want to forbid this possibility, we do not encourage you to typeset your document
visually. For instance, you should not insert spaces or blank lines as substitutes for hor-
izontal and vertical spaces between words and lines; instead, additional space should be
inserted explicitly using Insert!Space. This will make your text more robust in the sense
that you will not have to reconsider the layout when performing some minor changes, which
aect line or page breaking, or major changes, such as changing the document style.
Several types of explicit spacing commands have been implemented. First of all, you can
insert rigid spaces of given widths and heights. Horizontal spaces do not have a height
and are either stretchable or not. The length of a stretchable spaces depends on the way
a paragraph is hyphenated. Furthermore, it is possible to insert tabular spaces. Vertical
spaces may be inserted either at the start or the end of a paragraph: the additional vertical
space between two paragraphs is the maximum of the vertical space after the rst one and
the vertical space before the second one (contrary to TEX, this prevents from superuous
space between two consecutive theorems).
As to the paragraph layout, the user may specify the paragraph style (justied, left ragged,
centered or right ragged), the paragraph margins and the left (resp. right) indentation
of the rst (resp. last) line of a paragraph. The user also controls the spaces between
paragraphs and successive lines in paragraphs.
2.7 The font selection system 21
You can specify the page layout in the Document!Page menu. First of all, you can specify
the way pages are displayed on the screen: when selecting paper as page type in Doc-
ument!Page!Type, you explicitly see the page breaks. By default, the page type is
papyrus, which avoids page breaking during the preparation of your document. The
automatic page type assumes that your paper size is exactly the size of your window.
The page margins and text width are specied in Document!Page!Layout. Often, it
is convenient to reduce the page margins for usage on the screen; this can be done in
Document!Page!Screen layout.
In TEXMACS, the global document font can be specied using Document!Font. It is also pos-
sible to locally use another font using Format!Font. Both Document!Font and Format!
Font open the TEXMACS font browser. Fonts have three main characteristics:
Family. Fonts are grouped together into families with a similar design.
Shape. Inside the same font family, individual fonts have dierent shapes, such as
bold, italic, small capitals, etc.
The user may directly specify these three characteristics in the font browser, which also
displays some sample text for the selected font.
The font browser also provides a way to quickly select fonts based on desirable font prop-
erties. For instance, by ltering on a bold weight and sans serif, one may nd a bold
sans serif font which mixes as well as possible with the main font. TEXMACS allows you to
lter on the following criteria:
Stretch. This property determines the horizontal width for a xed vertical height:
Condensed Unextended Wide
Serif. This feature corresponds to the projecting features called serifs at the end of
strokes:
Serif Sans Serif
Proportional Monospaced
Each of the above properties really constitutes a hint on how the kind of font which should
be used. If no suitable font can be found on your particular system, then setting these
properties may have no eect. Whenever you apply one or more lters, the font browser
indicates which fonts match the selected properties. It also indicates the closest match
for the current font in use. When pressing the Ok button without selecting any particular
matching font, then the selected font properties will be inserted as TEXMACS markup and
used as rendering hints. In that case, the rendering may change when selecting another
global document font (for instance).
It should be noticed that TEXMACS comes with a limited number of preinstalled fonts,
such as the Stix fonts and several fonts prexed by TeXmacs. Documents which only
use these fonts will be rendered the same on dierent systems (assuming the same version
of TEXMACS). When your documents contain other fonts as well, then these fonts may
be replaced by closest matches when opening your document under a dierent operating
system.
We recall that the section on general conventions contains explanations on the way key-
board shortcuts are printed in this manual. It may also be useful to take a look at the
section on keyboard conguration.
Since there are many keyboard shortcuts, it is important to have some ways of classifying
them in several categories, in order to make it easier to memorize them. As a general rule,
keyboard shortcuts which fall in the same category are identied by a common prex. The
active prexes heavily depend on the selected look and feel in Edit!Preferences. In the
current look and feel of your TEXMACS system, the main common prexes are as follows:
⌃. Standard shortcuts, which are similar to shortcuts used by other applications (for
the selected look and feel). For instance, ⌃Y can be used for pasting text on your
system.
⌥. TEXMACS shortcuts, which often rely on the current editing mode. For instance, ⌥S
p
produces strong text in text mode and a square root in math mode.
2.8 Mastering the keyboard 23
⌘. Compound TEXMACS shortcuts. Usually, these shortcuts rst indicate the kind of
markup to which the command will apply and then specify the specic command.
For instance, the ⌘E prex is used for inserting executable markup, which is useful
for writing style les. One example is the shortcut ⌘E + for the insertion of an
addition.
⌘. This prex is used in combination with arrow keys and certain other special keys
for positioning and resizing objects
⌘⌥ . This prex is used in combination with arrow keys and some other special keys for
structured cursor movements.
⌘⌃ . This prex is occasionally used in combination with letters and punctuation sym-
bols for creating some additional easy to remind shortcuts.
⇧F5 . This prex can be used in combination with normal letters for the insertion of
special symbols. For instance, ⇧F5 S yields ÿ and ⇧F5 A yields q. The ⇧F5 prex
is also used for the insertion of literal characters. For instance, ⇧F5 \ will always
produce the \ character, whereas the \ key is used for entering hybrid commands.
Shortcuts
⇧F5 A æ ⇧F5 ⇧A Æ ⇧F5 A E æ ⇧F5 ⇧A ⇧E Æ
⇧F5 O ø ⇧F5 ⇧O Ø ⇧F5 O E ÷ ⇧F5 ⇧O ⇧E ×
⇧F5 S ÿ ⇧F5 ⇧S ß
⇧F5 ! ½ ⇧F5 ? ¾ ⇧F5 P ⇧F5 ⇧P ¿
Table 2.3. Typing special characters.
24 Writing simple documents
When you press the " key, an appropriate quote will be inserted. The quote character is
chosen according to the current language and the surrounding text. If the chosen quoting
style is not appropriate, you can change it in Edit!Preferences!Keyboard!Automatic
quotes. You can also insert raw quotes:
Shortcuts
⇧F5 " " ,,
<⇥ >⇥
<< >>
Table 2.4. Typing raw quotes.
English quotes are considered ligatures of two successive backticks or apostrophes. They
can be created with ` ` and ' ' but these are not actual keyboard commands: the result
is two characters displayed specially, not a special single character.
Some shortcuts are available in specic language contexts. You can set the text language
for the whole document with Document!Language or only locally with Format!Language
(see generalities for typing text).
Language-specic shortcuts override generic shortcuts; for example, you cannot easily type
ø in hungarian context.
TEXMACS allows you to enter LATEX commands directly from the keyboard as follows. You
rst hit the \ -key in order to enter the hybrid LATEX/TEXMACS command mode. Next you
type the command you wish to execute. As soon as you nished typing your command,
the left footer displays something like
<return>: action to be undertaken
When you hit the ↩ -key at this stage, your command will be executed. For instance, in
math-mode, you may create a fraction by typing \ F R A C ↩ .
2.8 Mastering the keyboard 25
If the command you have typed is not a (recognized) LATEX command, then we rst look
whether the command is an existing TEXMACS macro, function or environment (provided by
the style le). If so, the corresponding macro expansion, function application or environ-
ment application is created (with the right number of arguments). Otherwise, it is assumed
that your command corresponds to an environment variable and we ask for its value. The
\ -key is always equivalent to one of the commands ⌘I L , ⌘I E , ⌘I A , ⌘I # or ⌘I V .
To insert a literal \ (backslash) character, you can use the ⇧F5 \ sequence.
hlabeljpythagorasi
Figure 2.1. Inactive label
When you nished typing the relevant information for your dynamic object, you may type
↩ in order to activate the object. An active dynamic object may be deactivated by placing
your cursor just behind the object and hitting ⌫ .
Shortcut Action
⌃⌫ Remove the containing object or environment.
␣⇥ Insert a non breaking space.
␣⇥⇥ Insert a quad space.
⌘␣ Insert a small space.
⌘⇧␣ Insert a small negative space.
? Insert a tab
⌘< Go to the start of the document.
⌘> Go to the end of the document.
⌘: Insert a line break.
⌘⇧R Insert a rigid piece of text, which cannot be line-broken.
Table 2.6. Various useful keyboard shortcuts
Chapter 3
Mathematical formulas
One of the main purposes of TEXMACS is to edit mathematical formulas. If the cursor
is inside a formula (i.e. inside math mode), then the mode sensitive menus and tool-
bars provide buttons for entering common mathematical constructs. Similarly, as will be
detailed in this section, the bahaviour of the keyboard changes so as to allow for the rapid
typing of mathematical symbols. For instance, typing - > inserts the arrow !.
Starting with version 1.0.7.10, TEXMACS also incorporates several features for the semantic
editing of mathematical formulas, which will be described at the end of this section. When
used appropriately, this allows you to write documents in which all formulas are at least
correct from a syntactical point of view. A syntax corrector is included to assist you with
this task. Documents with more semantics are for instance useful when using formulas
as inputs for a computer algebra system. Such documents are also less likely to contain
typos. Other interesting features, such as semantic search and replace, should be devel-
oped in the future.
TEXMACS provides three main ways in order to enter a mathematical formulas into the main
text:
Insert!Mathematics!Inline formula or $ .
This entry corresponds to small inline formulas like a2 + b2 = c2 inside a textual
paragraph. Note that formulas are typeset specially so they do not take too much
vertical space. For example, limits are always displayed on the right. Limits can
be displayed below in formulas with Format!Display style!on. In formulas, display
style is o by default.
Insert!Mathematics!Displayed formula or ⌥$ .
This entry is used for entering bigger displayed equations, like
x n + y n = z n;
which are typeset in a paragraph of their own. You may use the shortcut ⌃# in order
to give the equation a number (or to remove the number of an equation). Also, ⌃⇥
allows you to switch between inline formulas and displayed equations.
27
28 Mathematical formulas
This entry allows you to create an eqnarray*, a three columns wide table-like envi-
ronment (see creating tables). This environment is typically used for lists of multiple
relations like
x+0 = x
x + (¡x) = 0
x+ y = y+x
(x + y) + z = x + (y + z)
The rst column is centered to the right, the second one at the middle and the last
one at the left. Another typical use of the eqnarray* environment is a step by step
computation
⇥. is the main key for obtaining variants. For instance, > = yields >, but > = ⇥ yields .
Similarly, < ⇥ ⇥ yields , < ⇥ ⇥ = yields and < ⇥ ⇥ = ⇥ yields j. Also, ⇧P ⇥ yields }
and E ⇥ yields the constant e = exp(1).
@. is used for putting symbols into circles or boxes. For instance, @ + yields and @ X
yields
. Similarly, @ ⇥ + yields .
/. / and < = / yields 6. Notice that
is used for negations. For instance, = / yields =
< = ⇥ ⇥ / yields , while < = ⇥ ⇥ / ⇥ yields .
!. is used after arrows in order to force scripts to be placed above or below the arrow.
x
For instance, - - > ^ X yields ¡!x , but - - > ! ^ X yields ¡!.
The logical relations ^ and _ are obtained using & and % . The operators \ and [ are
natural variants & ⇥ and % ⇥ . Various miscellaneous symbols can be obtained using the ⇧F5
prex.
3.4 Typing large delimiters 29
Notice that certain symbols with a dierent mathematical meaning are sometimes denoted
in a similar way; such symbols are called homoglyphs. For instance, the vertical bar j can
be used as a separator for dening sets R> = fx 2 Rjx > 0g, but also as the binary relation
divides 11 j 1001. Often, but not always, homoglyphs admit a dierent spacing. The most
annoying ambiguity is between invisible multiplication x y and function application sin x,
which are entered using the shortcuts * resp. ␣ .
In order to facilitate certain automated treatments of your documents, such as mathemat-
ical syntax checking, we incite authors to pay attention to the homoglyph problem when
entering formulas. For more information on this issue and how TEXMACS can assist you to
use the appropriate notations, we refer to our section on the semantics of mathematical
symbols.
The main mathematical objects are created using the ⌥ prex as follows:
_ Subscripts xn or xi3
x
^ Superscripts x2, x2n or ee
⌥L _ Left subscripts 2x
⌥L ^ Left superscripts x or He
Some important mathematical constructs are actually tabular constructs and are docu-
mented separately.
Brackets inside mathematical formulas should always match: as soon as you enter an
opening bracket (, TEXMACS will automatically insert the matching closing bracket ).
You may disable this feature using Edit!Preferences!Keyboard!Automatic brackets!Dis-
able. Attention (see also below): brackets in old documents will be automatically upgraded
to matching brackets.
30 Mathematical formulas
Sometimes, you do not want the closing bracket, or you may want to replace it by another
closing bracket. No problem: if your cursor is just before the closing bracket inside (a; bj),
then pressing ] will turn the expression into (a; b]j. Alternatively, deletion of a bracket will
actually turn it into an invisible bracket, after which you can replace it by an arbitrary
opening or closing bracket.
By default, the sizes of the brackets are adjusted to the expression between the brackets.
Small delimiters, which are created using the ⌥ -prex, keep their sizes independently of
the enclosed expression. Alternatively, you may use ⌃* in order to toggle between large
and small delimiters.
For some delimiters, such as j, the opening and closing delimiters coincide. For instance,
entering a vertical bar | will produce an absolute value. The (small) bar-separator j is
obtained using F5 | , or as a variant using | ⇥ . The big bar-separator is entered using ⌥M | .
In TEX and LATEX, such large separators do not exist; they are used for producing the
vertical bars in formulas like
a p a
:
b + c q + r b + c
There may be as many middle delimiters between a left and a right delimiter as one wishes.
Notice that there are still another number of variants of vertical bars. For instance, the
binary relation divides is entered using F5 | ⇥ ⇥ or | ⇥ ⇥ ⇥ ⇥ .
In TEXMACS, large delimiters may either be left delimiters, right delimiters or middle
delimiters. By default, (; [; f and h are left delimiters, );];g and i are right delimiters. But
there status can be changed using the ⌥L , ⌥R and ⌥M key combinations. For instance, ⌥L )
produces ), considered as a large left delimiter.
Sometimes you may want large delimiters of a particular size, instead of self-adjusting ones.
This can be achieved by resizing the expression in between the brackets using the items in
Format!Adjust.
Notice that it is possible to insert a pair of invisible brackets using ? . This is for instance
useful in computational contexts, in which formulas should admit a precise, not merely
visual semantics. Alternatively, one may put the formula inside a rigid box using ⌘⇧R ,
which additionally prevents the formula from being hyphenated.
The scopes of big operators are indicated visually, through the light cyan boxes around
the tags which contain the cursor.
The big integral signs admit two variants, depending on where you want to place subscripts
and superscripts. By default, the scripts are placed as follows:
Z 1
dx
:
0 1 + x2
Z1
dx
:
1 + x2
0
H
is obtained using ⇧F5 ⇧L ⇧I . Similarly, you may type ⇧F5 ⇧L ⇧O in order to obtain with
limits.
The table below shows how to type mathematical accents above symbols or entire formulas.
Indeed, some of these accents automatically become as wide as the formulas below them.
The same accents may be inserted below the expressions using the ⌥U prex. For instance,
⌥U ⇧B X + Y can be used in order to enter x + y.
Starting with version 1.0.7.10, TEXMACS incorporates several features for the semantic
editing of mathematical formulas. When used appropriately, this allows you to write doc-
uments in which all formulas are at least correct from a syntactical point of view. For
instance, in the formulas a + b, the computer will understand that + is an operator which
applies to the arguments a and b. Notice that our semantics does not go any further:
TEXMACS is unaware of the mathematical nature of addition.
32 Mathematical formulas
Semantic editing does require additional eorts from the user, at least a little adaptation.
For instance, it is the user's job to enter multiplications using the shortcut * and function
applications using ␣ . Indeed, from the graphical point of view, these operations cannot be
distinguished, since they are both printed as invisible whitespace. However, the semantics
of these operations is clearly very dierent.
Although semantically correct documents are usually not very dierent from informal
presentation-oriented documents as far as typesetting is concerned, the additional user
eort may pay o for several reasons:
Documents with more semantics are for instance useful when using formulas as
inputs for a computer algebra system.
Syntactically correct documents are less likely to contain typos or more intricate
mathematical errors.
For certain editing operations, such as cut and paste, one may directly select sub-
formulas which are meaningful from the syntactical point of view.
It reduces the risk of using non standard notations, which will be dicult to under-
stand for potential readers of your work.
Furthermore, other semantic facilities might be integrated in the future, such as semantic
search and replace, or semantic search on the web.
In order to activate the semantic editing facilities, please toggle Edit!Preferences!Math-
ematics!Semantic editing. In the semantic editing mode, several of the structured editing
features of TEXMACS apply to the syntactic structure of the formula, rather than the visual
structure of the document. For instance, the semantic focus is usually a subformula of the
current focus. Similarly, only syntactically meaningful subformulas can be selected when
making a selection.
The semantic focus is useful for several reasons. First of all, it is displayed in green if the
formula is syntactically correct and in red if you made an error. This allows to quickly notice
any typos while entering a formula. Secondly, if you have any doubt on the precedence of
a mathematical operator or relation, then the semantic focus will inform you on the default
interpretation: by putting your cursor right next to your operator, the subexpression to
which the operator applies will be highlighted. In the case of an addition, or a more general
associative operator, all summands are highlighted.
By default, the semantic editing mode understands most classical mathematical nota-
tions. This is achieved through the use of a carefully designed grammar for mainstream
mathematics. Obviously, the use of a xed grammar may cause the following problems:
Mathematical formulas frequently contain ad hoc notations. For instance, the for-
mulas might contain some text or meaningful whitespace. Another example of an ad
hoc notation is the sign sequence ++¡+¡+. In such cases, the user should explicitly
annotate the appropriate parts of the formula in order to make them semantically
meaningful.
3.8 Common errors and syntax correction 33
The TEXMACS grammar used for the interpretation of mathematical formulas may
be incomplete or inadequate for certain situations. It is possible to customize or
extend the grammar using the standard TEXMACS macro mechanism. Notations for
specic areas may be grouped together in dedicated style packages.
Besides these intrinsically hard to avoid problems, the following common and easy-to-
make mistakes are a further source of trouble for associating semantics to mathematical
formulas:
Since TEXMACS is a wysiwyg editor, some of the structure of the document is invisible
for the user. For instance, the presence of a mathematical formula x + y is indicated
through the use of an italic slant and special spacing. However, in the formula f (x)
it is easy to type the closing bracket outside the formula, with no visual dierence.
It could be that a text was originally written in LATEX or an old version of TEXMACS.
In that case, the document contains no special indication on matching brackets or
the scopes of big operators. For instance, in the formula [x; y[, should we interpret
the second bracket as a closing bracket? This is indeed the standard french nota-
tion for an interval with an open right end. More generally, all problems that we
have mentioned so far tend to be present simultaneously when trying to associate
semantics to existing documents.
After activation of the semantic editing mode, you may check whether a formula is correct
by positioning your cursor inside it and looking at the color of the bounding box of the
semantic focus: a green color corresponds to a correct formula and a red color indicates an
error in the formula. Alternatively, assuming that the focus is on a mathematical formula,
you may select Focus!Preferences!Highlight incorrect formulas, in which all incorrect for-
mulas are highlighted inside red boxes.
For the second kind of easy-to-make errors, TEXMACS includes an automatic syntax cor-
rector. Assuming that your cursor is inside a formula, you may use Edit!Correct!Correct
all for the correction of all formulas in your document, or the correction of the current selec-
tion. If the versioning tool is activated, then you may use Edit!Correct!Correct manually
to show the dierences between the original and the corrected versions. You may then use
the versioning tool to go through these dierences and select the preferred versions.
The precise algorithms which are used for the correction may be enabled or disabled from
Edit!Preferences!Mathematics!Manual correction:
Remove superuous invisible operators. This algorithm is used in order to remove any
superuous function applications or multiplications. For instance, users who are
accustomed to editing ASCII les often type spaces around binary inxes such as
addition. Such function applications will be removed by this algorithm.
34 Mathematical formulas
Homoglyph substitutions. This algorithm may perform some other useful substitutions
of symbols by visually similar, but semantically distinct symbols. For instance, the
backslash symbol n is replaced by the binary set dierences inx (as in X n Y ),
whenever appropriate.
The mathematical symbols in TEXMACS all come with a certain number of properties which
correspond to their intended meaning. For instance, TEXMACS is aware that + is an inx
operator, whereas ! is rather a postx, and , a separator.
TEXMACS has special symbols e = 2.71828, p = 3.14159 and i for important mathematical
constants, which display dierently from the mere characters e, and i, and which can
be entered using the shortcuts E ⇥ ⇥ , P ⇥ ⇥ and I ⇥ ⇥ . We recommend to systematically use
these shortcuts.
Inversely, semantically distinct symbols may display in a similar way. For instance, the
comma separator, as in f (x; y), is dierent from the decimal comma, as in 3,14159.
Notice that the two symbols admit dierent spacing rules. Semantically distinct symbols
which are rendered by the same glyph are called homoglyphs. Notice that our semantics is
purely syntactic: for instance, the + inx is commonly used for addition, but sometimes also
for the concatenation of strings. Nevertheless, these two uses do not dier from a syntactical
point of view, since the + symbol remains a binary inx with the same precedence with
respect to other symbols.
The most confusing homoglyphs are the various invisible symbols supported by TEXMACS:
An invisible bracket (mainly for internal use). A matching pair of invisible brackets
is entered using ( ⇥ .
3.10 Customized mathematical semantics 35
Again it is recommended that authors carefully enter these various invisible symbols when
appropriate. It is particularly important to distinguish between multiplication and function
application, since there is no 100% safe automatic way to make this distinction (we already
mentioned the formulas a(b + c) and f (x + y) before).
TEXMACS supports two quite general schemes for entering homoglyphs. On the one hand, we
often rely on the standard variant system. For instance, and are obtained using * ⇥ and
* ⇥ ⇥ . In table 3.5 we have given the complete list of homoglyphs supported by TEXMACS.
We have done our best to support most of the classical mathematical notations. Never-
theless, the user may sometimes want to dene notations with a non standard semantics.
Certain areas may also require special notations which are not supported by default.
TEXMACS provides a very simple syntax primitive, which allows the user to manually over-
ride the default syntactical semantics of a formula. Assuming that semantic editing was
activated, you may insert the syntax primitive using ⌥X X or Insert!Semantics!Other. The
rst argument contains the formula as it should be displayed, whereas the second argument
contains the formula as it should be interpreted.
36 Mathematical formulas
For instance, if we enter R as the rst argument and < as the second one, then the R will
be interpreted as a binary relation, exactly in the same way as <. Moreover, the spacing
around R will be adapted, so as to mimic the spacing around <. In this particular example,
we might have obtained the same result by using the math-relation primitive, which is
equivalent to syntax with < as its second argument. Most standard operator types are
available from Insert!Semantics, or using the ⌥X keyboard prex. In particular, you may
use ⌥X ␣ to simply ignore a formula and ⌥X O in order to make the formula behave as an
ordinary symbol (such as the letter o).
The syntax primitive is especially powerful when used in combination
H with the TEXMACS
macro language. For instance, consider the formula C = 1/2 p i f (z) dz. It is likely that
the intended interpretation of 1/2 p i is 1/(2 p i) and not (1/2) p i. Therefore, if we often
use the constant 2 p i, then we might want to dene a macro twopii by
Such macros may be grouped together into a style package with the user's favourite
notations. Future versions of TEXMACS might also provide style packages with notations
dedicated to specic areas.
Let us nally notice that there are usually several ways for redening the semantics of a
formula. For instance, an alternative way to dene the macro twopii is using
hassignjtwopiijhmacroj2 p iii
we may either select the whole formula and give it the semantics of an ordinary symbol,
by pressing ⌥X O . However, a nicer solution is to only select the subformula , and
give it the semantics of an ordinary symbol. Yet another example is the sign sequence
++¡+¡+ mentioned earlier. This sequence can be interpreted correctly by inserting
invisible separators between the dierent signs using the , ␣ shortcut.
Chapter 4
Tabular material
Tables oer a general way to align markup in complex manners. They can be useful for
the presentation of data, but also for typesetting computer programs or the design of web
sites. TEXMACS provides a wide variety of parameters to control the precise layout of tables
and its cells.
In order to create a table, you may either use Insert!Table or one of the following keyboard
shorthands:
⌘T ⇧N M . Create a matrix.
⌘T ⇧N D . Create a determinant.
Examples of a plain table, a centered block and a matrix are shown below. Notice that
the environments with the explanatory text below the tables were created using Insert!
Table!Small table. The use of small tables allows you to put several tables besides each
other on the same line. For a single large table, one may use Insert!Table!Big table.
There are several other table-like environments and new ones may be created by the user.
For instance, using Insert!Mathematics!Equations or ⌥& , you may insert an eqnarray*
environment, which allows mathematically oriented users to align a list of equations which
span over entire lines. An example of such a list of equations is
37
38 Tabular material
When starting a new table, its size is minimal (usually 1 1) and its cells are empty. New
rows and columns are inserted using the ⌥← , ⌥→ , ⌥↑ and ⌥↓ shorthands. For instance, ⌥→
creates a new column at the right of the current cursor position, as illustrated in the gure
below. You may also start a new row below the current cursor position by hitting ↩ .
aj b a j b
¡!
c d c d
Figure 4.1. Example of the insertion of a new column in a matrix. Assuming that the cursor is
at the position indicated in the left-hand matrix, insertion of a new column using ⌥→ results in
the right-hand matrix.
In TEXMACS, arbitrary blocks of cells in the table may be formatted in particular ways.
For instance, you may give individual cells a background color, but you may also decide
an entire column to be horizontally centered. By default, formatting commands operate
on individual cells, but this may be changed via Table!Cell operation mode. The following
operation modes are available:
⌘T M H . Operate on rows.
⌘T M V . Operate on columns.
It is also possible to select a block of cells using the mouse and perform a single operation
on that rectangle.
The most frequent formatting operation is the horizontal or vertical alignment of a block
of cells. You may use the ? , ? , ? and ? keystrokes to quickly align more to the left, right,
top or bottom.
A specic alignment can also be selected in the Table!Horizontal cell alignment and Table!
Vertical cell alignment menus. Alternatively, you may use keyboard shorthands of the types
⌘T H x and ⌘T V x for horizontal resp. vertical alignment.
Similarly, you may specify how the table itself should be aligned with respect to the
surrounding text. This is either done via the Table!Horizontal table alignment and Table!
Vertical table alignment submenus, or using keyboard shorthands of the form ⌘T ⇧H x or
⌘T ⇧V x . Here x represents L for left, C for centered, R for right, B for bottom and T
for top.
4.6 Advanced table features 39
Using Table!Cell width!Set width resp. Table!Cell height!Set height you may specify the
width or height of a cell. In fact, the specied width (or height) may be taken into account
in three dierent ways:
Minimum mode. The actual width of the cell will be the minimum of the specied
width and the width of the box inside the cell.
Exact mode. The width of the cell will be precisely the specied one.
Maximum mode. The actual width of the cell will be the maximum of the specied
width and the width of the box inside the cell.
The border width and the cell padding (to be explained below) are taken into account in
the size of the box inside the cell.
You may also specify the width and the height of the entire table in Table!Special table
properties. In particular, you may specify the table to run over the entire width of a
paragraph. When specifying a width (or height) for the entire table, you may specify how
the unused space is distributed over the cells using Table!Special cell properties!Distribute
unused space. By default, the unused space is equally distributed.
You may specify the border widths and padding spaces of a cell in all possible four direc-
tions: on the left, on the right, at the bottom and at the top (see Table!Cell border). You
have keyboard shorthands of the forms ⌘T B x and ⌘T P x in order to specify border widths
and cell padding.
The default border width for cells in the block environment is 1ln, i.e. the standard line
width in the current font (like the width of a fraction bar). This width occurs at the right
and the bottom of each cell (except when the cell is on the rst row or column). The default
horizontal cell padding is 1spc: the width of a white space in the current font. The default
vertical cell padding is 1sep: the standard minimal separation between two close boxes.
Cells may be given a background color via Table!Cell background color.
The entire table may also be given a border and a table padding in Table!Special table
properties!Border. In this case, the padding occurs outside the border.
In the menus, you also nd some other more special features for tables. Very briey, these
include the following:
Change the span of a cell and let it run over its neighbouring cells on its right and
below.
Correction of the depth and height of text, in order to let the baselines match.
40 Tabular material
Horizontal hyphenation of cell contents and vertical hyphenation of the entire table.
Gluing several rows and/or columns together, so that the glued cells become part
of the borders of the remaining cells.
Setting the extension center of a table. From now on, the formatting properties
of this cell will be used for new cells created around this center.
Specication of the minimal and maximum size of a table, which will be respected
during further editing. (this is mainly useful when creating table macros).
Currently, all tables come inside an environment like tabular, block, matrix, etc. When
creating your own table macros, you may use Table!Special table properties!Extract format
to extract the format from a given table.
Chapter 5
Links and automatically generated content
You may create a new inactive label using ⌘! or Insert!Link!Label and a reference to this
label using ⌘? or Insert!Link!Reference. After typing the name of the label or reference,
remember to hit ↩ in order to activate it. You may also type the rst characters of the
name of a reference and use the ⇥ key in order to automatically complete it.
You should be careful to put the label at a point where its number will be correct. When
labeling sections, the recommended place is just after the sectional tag. When labeling
single equations (created using Insert!Mathematics!Equation), the recommended place is
at the start inside the equation. When labeling multiple equations (created using Insert!
Mathematics!Equations), you must put the labels just behind the equation numbers. Recall
that you may use ⌃# in order to transform an unnumbered environment or equation into
a numbered one, and vice versa.
It is possible to create hyperlinks to other documents using ⌘I > or Insert!Link!Hyperlink.
The rst eld of the hyperlink is the associated text, which is displayed in blue when
activated. The second eld contains the name of a document, which may be on the web. As
is usual for hyperlinks, a link of the form #label points to a label in the same document
and a link of the form url #label points to a label in the document located at url.
In a similar fashion, an action may be associated to a piece of text or graphics using ⌘I *
or Insert!Link!Action. The second eld now contains a Guile/Scheme script command,
which is executed whenever you double click on the text, after its activation. For security
reasons, such scripts are not always accepted. By default, you are prompted for acceptation;
this default behaviour may be changed in Options!Security. Notice that the Guile/Scheme
command
(system "shell-command")
evaluates shell-command as a shell command.
Finally, you may directly include other documents inside a given document using ⌘I I or
Insert!Link!Include. This allows you for instance to include the listing of a program in
your text in such a way that your modications in your program are automatically reected
in your text.
You can include images in the text using the menu Insert!Image. Currently, TEXMACS
recognizes the ps, eps, tif, pdf, pdm, gif, ppm, xpm and fig le formats. Here, gs (i.e.
Ghostscript) is used to render postscript images. If Ghostscript has not yet been
installed on your system, you can download this package from
www.cs.wisc.edu/~ghost/index.html
41
42 Links and automatically generated content
Currently, the other file formats are converted into postscript files using the scripts tiff2ps,
pdf2ps, pnmtops, giftopnm, ppmtogif, xpmtoppm. If these scripts are not available on
your system, please contact your system administrator.
By default, images are displayed at their design sizes and aligned at their bottom lines.
Alternative widths, heights and alignment osets may be specied in the image chooser
dialogue window.
When specifying a new width, but no height at the prompt (or vice versa), the
image is resized so as to preserve the aspect ration. For instance, entering a width
of 1par will make the image span over the entire paragraph width and adjust the
height proportionally.
You may use w and h as special lengths for the default width and height of the
image. For instance, specifying 2w and 2h for the width and the height, the image
will be displayed at twice its default size.
When specifying an alternative alignment, you may use the w and h lengths for the
displayed width and height (i.e. w and h no longer stand for the default width and
height). For instance, using -0.5h for the y-oset will vertically align the image at
its center.
We also included a script to convert Xfig pictures, with optional LATEX formulas in it,
into encapsulated postscript. In order to include a LATEX formula in an xfig picture, we
recall you should enter the formula as text, while selecting a LATEX font and setting the
special ag in the text ags.
It is very easy to generate a table of contents for your document. Just put your cursor at
the place where you want your table of contents and click on Insert!Automatic!Table of
contents.
In order to generate the table of contents, you should be in a mode where page breaks
are visible (select paper in Document!Page!Type), so that the appropriate references
to page numbers can be computed. Next, use Document!Update!Table of contents or
Document!Update!All to generate the table of contents. You may have to do this several
times, until the document does not change anymore. Indeed, the page numbers may change
as a result of modications in the table of contents!
TEXMACS uses the BibTEX model for its bibliographies. Manuals about BibTEX can easily
be found at various places on the web. BibTEX les can either be entered and edited using
TEXMACS itself or using an external tool. Some external tools oer possibilities to search
and retrieve bibliographic entries on the web, which can be a reason to prefer such tools
from time to time. TEXMACS implements good converters for BibTEX les, so several editors
can easily be used in conjunction.
5.5 Generating an index 43
The built-in editor for BibTEX les is automatically used for les with the .bib extension.
New items can easily be added using Insert!Database entry. When creating a new entry,
required elds appear in dark blue, alternative elds in dark green and optional elds in
light blue. The special eld inside the header of your entry is the name of your entry,
which will be used later for references to this entry. When editing a eld, you may use ↩
to conrm it and jump to the next one (blank optional elds will automatically be removed
when doing this). When the cursor is inside a bibliographic entry, additional elds may
also be added using Focus!Insert above and Focus!Insert below.
BibTEX contains a few unnatural conventions for entering names of authors and managing
capitalization inside titles. When editing BibTEX les using TEXMACS, these conventions
are replaced by the following more user friendly conventions:
When entering authors (inside Author or Editor elds), use the name tag for
specifying last names (using Insert!Last name or ⇧F6 ) For instance, Albert Ein-
stein should be entered as Albert Einstein or as A. Einstein. Special particles
such as von can be entered using Insert!Particle. Title suces such as Jr. can
be entered similarly using Insert!Title sux.
When entering titles, do not capitalize, except for the rst character and names or
concepts that always must be. For instance, use Riemannian geometry instead
of Riemannian Geometry and Dierential Galois theory instead of Dierential
Galois Theory.
Assuming that you have created a .bib le with your bibliographic references, the mech-
anism to automatically compile a bibliography is the following:
Notice that additional BiBTEX styles should be put in the directory ~/.TeXmacs/system/
bib.
For the generation of an index, you rst have to put index entries in your document using
Insert!Link!Index entry. At a second stage, you must put your cursor at the place where
you want your index to be generated and click on Insert!Automatic!Index. The index is
than generated in a similar way as the table of contents.
44 Links and automatically generated content
In the Insert!Link!Index entry menu, you nd several types of index entries. The simplest
are main, sub, subsub, which are macros with one, two and three arguments respec-
tively. Entries of the form sub and subsub may be used to subordinate index entries
with respect to other ones.
A complex index entry takes four arguments. The rst one is a key how the entry has to
be sorted and it must be a tuple (created using ⌘I < ) whose rst component is the main
category, the second a subcategory, etc. The second argument of a complex index entry
is either blank or strong, in which case the page number of your entry will appear in a
bold typeface. The third argument is usually blank, but if you create two index entries
with the same non-blank third argument, then this will create a range of page numbers.
The fourth argument, which is again a tuple, is the entry itself.
It is also possible to create an index line without a page number using interject in
Insert!Link!Index entry. The rst argument of this macro is a key for how to sort the
index line. The second argument contains the actual text. This construct may be useful
for creating dierent sections A, B, etc. in your index.
Glossaries are compiled in a similar way as indexes, but the entries are not sorted. A
regular glossary entry just contains some text and a page number will be generated for
it. An explained glossary entry contains a second argument, which explains the notation.
A duplicate entry may be used to create a page number for the second occurrence of an
entry. A glossary line creates an entry without a page number.
TEXMACS allows users to create multiple bibliographies, tables of contents, indexes, etc.
inside the same document. Let us explain how to do this for bibliographies; the procedure
is similar for other types of automatically generated content.
First of all, every separate bibliography is identied by a name. The default name of the
bibliography is bib. Using Insert!Link!Alternate!Bibliography, it is possible to specify a
dierent bibliography (than the default one) for a certain region of text.
For instance, to specify that a given citation should appear in a second bibliography with
name bib2, you should proceed as follows:
If needed, the with-bib tag can be made to span over a large portion of text. All citations
inside this span will be be put into the bibliography with name bib2.
The bibliography bib2 itself should be created in a similar way: rst click on Insert!Link!
Alternate!Bibliography and enter bib2 on the prompt. Next insert the bibliography as
usual, via Insert!Automatic!Bibliography. Now do Document!Update!All as many times
as need in order to generate the bibliography and get all links right.
5.8 Books and multifile documents 45
When a document gets really large, you may want to subdivide it into smaller pieces. This
both makes the individual pieces more easily reusable in other works and it improves the
editor's responsiveness. An entire le can be inserted into another one using Insert!Link!
Include. In order to speed up the treatment of included documents, they are being buered.
In order to update all included documents, you should use Tools!Update!Inclusions.
When writing a book, one usually puts the individual chapters in les c1.tm, c2.tm until
cn.tm. One next creates one le book.tm for the whole book, in which the les c1.tm, c2.tm
until cn.tm are included using the above mechanism. The table of contents, bibliography,
etc. are usually put into book.tm.
In order to see cross references to other chapters when editing a particular chapter ci.tm,
one may specify book.tm as a master le for the les c1.tm to cn.tm using Tools!
Project!Attach master.... Currently, the chapter numbers themselves are not dealt with by
this mechanism, so you may want to manually assign the environment variable chapter-nr
at the start of each chapter le in order to get the numbering right when editing.
Chapter 6
Creating technical pictures
Besides the possibility to include pictures which were created using other programs,
TEXMACS includes a rudimentary tool for creating your own drawings. Although this tool
has less features than several most special purpose graphical editors, it does have the
advantage that it is fully integrated with TEXMACS. In particular, it is easy to insert
text, mathematics and hyperlinks inside your pictures. Moreover, pictures which are cre-
ated in this way often look nicer, because they use the same fonts and default line width
as the surrounding text.
47
48 Creating technical pictures
Splines and closed splines. Spline mode is selected using or Insert!Spline. This
mode is similar to line mode, except that we now draw a smooth curve through
the specied points. Again, this mode admits a closed variant ( or Insert!Closed
spline).
Arcs and circles. Arc mode is selected using or Insert!Arc. In this mode, you may
insert arcs going through three points specied through left mouse clicks. Similarly,
you may use circle mode ( or Insert!Circle) for drawing circles.
Text and mathematics. When selecting text mode ( or Insert!Text) or mathe-
matics mode ( or Insert!Mathematics), you may enter text (or mathematics) at
an arbitrary position in the picture, again using the left mouse button.
Typical examples of these basic objects are shown in the gures below:
Figure 6.4. Splines. Figure 6.5. Closed splines. Figure 6.6. Arcs.
Hello
epi = ¡1
Inserting new control points. For objects with an arbitrary number of control
points, such as broken lines, polygons, splines and closed splines, it is possible
to insert new points on existing edges. In order to do so, move the mouse pointer
on the edge where you want to insert a new point; the two neighbouring con-
trol points should be highlighted. Then insert a new point drag and move it around
using drag and drop for the rst mouse button.
Removing control points. Using the middle mouse button, it is possible to remove
control points (and eventually the object itself).
Removing the entire object. Using the middle mouse button while simultaneously
pressing the shift key ⇧ removes the entire object which is currently highlighted.
While editing, it should also be noticed that TEXMACS attempts to automatically snap
the mouse pointer to control points or edges of existing objects, as well as to intersection
points of two curves and points on the grid. This makes it possible to quickly draw complex
pictures which are exact, and not merely exact up to one or more pixels (and ugly when
magnied or printed). Around boxes with text or mathematical formulas, there are also
eight invisible control points to which TEXMACS will attempt to snap the mouse pointer.
This makes it easier to draw diagrams as in gure 6.10 below.
Graphical objects are drawn in a specic stacking order which has the eect that certain
objects may be hidden by other objects. Using ⌃⇞ and ⌃⇟ , you may move the currently
highlighted object closer to or farther away from the eye for this stacking order. In a similar
vein, certain control points may become unaccessible, because hidden by closer control
points. In that case, you may use ⇥ to cycle through all possibilities for the current cursor
position.
A B X
C D Y
Figure 6.10. Example of a diagram which was drawn by using snapping to the eight control
points around each box with a mathematical formula. Notice also that we cropped the graphics
to its actual size.
Figure 6.11. Examples of a few closed splines with dierent colors and ll colors.
50 Creating technical pictures
Opacity. This property also applies to any of the graphical object types and species
an opacity between 0% and 100%. The default is 100% and lower opacities will make the
object more transparent.
Figure 6.12. Examples of the same object with increasing opacities on top of another object.
Point style. A few dierent point styles are supported for displaying points: solid disks,
round circles and squares.
Figure 6.13. The dierent point styles for black color and red ll color.
Line width. The line width property applies to all curves (that is, to broken lines,
polygons, splines, closed splines, arcs and circles). By default it is 1ln, the width of the
fraction bar in mathematical formulas, but any TEXMACS length unit can be used instead.
0.5ln
1ln
2ln
5ln
Line dashes. Various dash styles are available for curves in Focus!Line dashes.
Line arrows. Various arrows at the ends of curves are supported in Focus!Line arrows.
6.5 Editing groups of objects 51
Figure 6.16. The same segment using dierent types of arrows at the extremities.
Text alignment. For textual and mathematical boxes, its is possible to specify the
horizontal and vertical alignment properties, as indicated in the gure below:
Left
Right
7.1. Flows
Complex documents often contain footnotes or oating objects, which appear dierently on
pages as the main text. In fact, the content of such complex documents use several ows,
one for the main text, one for the footnotes, one for oats, and still another one for two
column text. The dierent ows are broken across pages in a quite independent way.
In order to insert a footnote, you may use Format!Page insertion!Footnote. The number
of columns of the text may be changed in Paragraph!Number of columns.
Floating objects are allowed to move on the page independently from the main text.
Usually they contain gures or tables which are too large to nicely t into the main text.
A oating object may be inserted using Insert!Note!Floating object.
You may also create a oating object and directly insert a gure or table inside it using
Insert!Note!Floating gure resp. Insert!Note!Floating table. However, sometimes you
might want to insert several smaller gures or tables inside one oating object. You may
do this using Insert!Image!Small gure resp. Insert!Table!Small table.
After creating a oating object, you may control its position using Focus!Allowed positions
(when inside the oat). You may specify whether you allow the oating object to appear
at the top of the page, at the bottom, directly in the text, or on the next page. By default,
the oat may appear everywhere. However, a oating object will never appear inside the
main text at less than three lines from the bottom or the top of a page.
The page breaking may be controlled very precisely by the user inside Document!Page!
Breaking. In the submenu Algorithm, you may specify the algorithm being used. Professional
page breaking is best in print, but may slow down the editing when being used interactively
in paper mode. Sloppy page breaking is fastest and medium is professional except for
multicolumn material, for which the professional algorithm is signicantly slower.
You may also allow the page breaking algorithm to enlarge or reduce the length of pages
in exceptional cases in the submenu Limits. The stretchability of vertical space between
paragraphs and so may be specied in Flexibility. The factor 1 is default; a smaller factor
enforces a more rigid spacing, but the quality of the breaks may decrease.
53
Chapter 8
Editing tools
In this chapter, we discuss some of the general editing facilities that are implemented in
TEXMACS. Of course, this includes basic operations that can also be found in other editors:
cut and paste, search and replace, etc. But, more interestingly, some of these facilities
take advantage of the additional structure of TEXMACS documents. Typical examples of
structured editing features are structured cursor movement and structured variants.
Traditional operations such as search and replace also attempt to exploit the document
structure. For instance, when searching x in math mode, you will only nd matches that
are also in math mode.
You can select text and formulas by maintaining the left mouse button. In order to delete
the selected region, use Edit!Cut or ⌃W . In order to copy the selected region, rst click
on Edit!Copy or hit ⌘W . Next, paste it as many times as you want to the location of your
cursor, using Edit!Paste or ⌃Y . Alternatively, you may copy a selected region using the
middle mouse button.
It is also possible to change the text properties of a selected region. For instance, in order
to transform some black text in red, you select it using the left mouse button and click
on Format!Color! . Similarly, if you select a formula and you click on Insert!Fraction,
then the formula becomes the numerator of the newly created fraction.
When using the copy and paste mechanism to communicate with other applications, text
is copied and pasted using the TEXMACS data format. You may specify other import and
export formats using Tools!Miscellaneous!Import selections as resp. Tools!Miscellaneous!
Export selections as. Alternatively, you may directly copy to or paste from an external
format using the rst group of entries in the Edit!Copy to and Edit!Paste from submenus.
For instance, a LATEX formula can be pasted inside a TEXMACS formula using Edit!Paste
from!LaTeX.
By default, copying and pasting uses the primary clipboard. Using the remaining entries
in the Edit!Copy to and Edit!Paste from menus, you may specify as many other clipboards
as you like. This allows you to keep multiple selections in memory, ready to be pasted.
There are two ways to make selections using the keyboard. When using the cursor keys ← ,
→ , etc. while holding down the ⇧ button, you may select text while moving around the
cursor. Alternatively, you may press ⌃␣ once to x a starting position. When moving
around using the cursor keys, the text between the starting position and the current
position keeps being selected. The selection gets cleared by pressing ⌃G .
Notice that the ⌃␣ shortcut also allows you to make structured selections. You may select
the current word you are in by pressing ⌃␣ twice. Each additional time you press ⌃␣ results
in the selection of the smallest structure that englobes the current selection. Ultimately,
when the entire document gets selected, pressing ⌃␣ once more clears the selection.
55
56 Editing tools
You can start searching text by pressing ⌃S or Edit!Search. Doing this, a new special
search toolbar will appear below the main text, just above the footer. When typing text
in the search eld of the toolbar, all occurrences of this text will be highlighted in the main
document. Moreover, one principal occurrence will be highlighted in red and you may
navigate through all occurrences using ⇞ and ⇟ (or ↑ and ↓ , or ↩ ). Using ↖ and ↘ , you may
jump to the rst and last occurrences respectively. As soon as you press the escape key ⌘ ,
the search toolbar will be closed, searching stops and focus returns to the main document.
During a search, TEXMACS only looks for text in the same mode and language as at the
position where you started your search. In other words, when searching an x in math-
mode, you will not nd any x's in the ordinary text. As a current limitation, the search
string on the search toolbar can only contain ordinary text and no math-symbols or more
complicated structured text. More complex searches will be discussed below.
In order to replace text, you should use Edit!Replace or press ⌃= . This will cause a special
replace toolbar to appear below the main text, just above the footer. You are prompted
for the string that is to be replaced and the string by which to replace. Again, you may
use the ⇞ and ⇟ keys in order to navigate through the occurrences of the search string.
When pressing ⇥ or ↩ in the search eld, focus will be moved to the replace eld. You
may still use the ⇞ and ⇟ keys in order to navigate through the occurrences of the search
string. In addition, pressing ↩ will replace the principal occurrence of the search string
by the replace string. Using ⇧↩ , you may undo the last replacement. You may replace
all remaining occurrences by pressing ⌃↩ . Like in the case of searching, the query-replace
command is mode and language sensitive.
The search and replace toolbars are quite rudimentary in the sense that they only allow
for searching and replacing plain text. By pressing the icon on either of these toolbars,
you may expand the toolbar into a full blown widget with larger search and replace elds
that may contain arbitrary markup. Searching and replacing can be done using more or
less the same keyboard shortcuts as in the case of the toolbars, but you may now search
and replace arbitrary content.
When searching non textual content, the conditions for having a hit are somewhat released.
For instance, assume that you are just starting a new search with an empty search eld.
Then typing F6 inserts the strong tag with no text inside yet. Instead of looking only for
strong empty strings, TEXMACS will rather look for all strong markup in your document.
If you next enter the letter a, then TEXMACS will look for all strong text that contains the
x
letter a. In a similar way, when searching for the formula , TEXMACS will highlight all
fractions in which the numerator contains the variable x. Yet another example: a search for
p will highlight all formulas in which the denominator contains a square root that contains
x p
a+b x+ y
the variable x. For instance, the fraction p
c+ x+ y
will be highlighted, but not p .
a+ y
When using the structured text and replace widgets, TEXMACS also implements a few
additional special tags for enhancing structured searching. First of all, it can happen that
you would like to search for certain content inside a special context. For instance, you might
want to search for all occurrences of the letter a inside a strong tag. When searching for
a, as above, TEXMACS will highlight all strong tags that contain the letter a. In order to
highlight the letters a themselves, you should rst enter the strong tag inside an empty
search eld using F6 . You next enter a special select-region tag using ⌃? , and nally insert
the letter a inside this tag. Other special markup that can be used inside search elds
are the wildcards x, y and z, which are entered using ⌃1 , ⌃2 and ⌃3 .
8.4 Undo and redo 57
As soon as you start using the structured text and replace widgets instead of the toolbars,
this will be remembered as a user preference: any subsequent searches or replacements will
again use the widgets. In order to switch back to the less intrusive toolbar methods for
searching and replacing, you should press the icon.
If the program ispell has been installed on your system, then you may use it to check
your text for misspelled words by pressing ? or Edit!Spell. Notice that you might have to
verify that the dictionaries corresponding to the languages in which your texts have been
written have been installed on your system; this is usually the case for English.
When you launch the spell checker (either on the whole text or on a selected region), you
will be prompted at each misspelled word and the footer displays the available options:
a). Accepts the misspelled word and all its future occurrences in the text.
r). Replace the misspelled word by a correction that you have to enter.
i). Indicate that the misspelled word is actually correct and that it has to be inserted
in your personal dictionary.
Notice that ispell just checks for misspelled words. No grammatical faults will be detected.
When starting the spell checker, it will use the dictionary of the language that is active at
the current cursor position (or the start of a selection). Only text in that language will be
checked. If your document contains text in several languages, then you will have to launch
the spell checker once for each language being used.
It is possible to gradually undo the changes you made in a document from the moment
that you launched TEXMACS. This can be done via Edit!Undo or using the keystroke ⌘[ .
Undone changes can be redone using Edit!Redo or ⌘] . TEXMACS maintains the entire
history tree of all your edits. Sometimes, after multiple undo and redo actions, this means
that there can be several ways to redo some modication; in that case, Edit!Redo becomes
a menu in which you can select the appropriate branch.
We notice that only changes in the document itself are taken into account by the undo
system. In particular, modications of most of the global document properties can not be
undone. This includes modications of the document style, the page size, the main font,
etc. The same remark applies to any modications outside TEXMACS that were triggered by
your actions. For instance, in a computer algebra session, you can undo your edits inside
TEXMACS, but not the computations in the external computer algebra system.
58 Editing tools
0 1 0 1
a b c j
a bj c a b j c a j b c @ A @ a b c A
j
d e f d e f d e f
d e f d e f
Figure 8.1. Assume that the cursor is at the position of | inside the left-most matrix. Then the
four other matrices respectively correspond to the insertion of a new column at the left ( ⌥←) or
right ( ⌥→), resp. a new row above ( ⌥↑ ) or below ( ⌥↓).
a a a a a
b c| d b | c d b c | d b | d b c d
c |
Figure 8.2. Assume that the cursor is at the position of | inside the left-most tree. Then the
four other trees respectively correspond to the insertion of a new node at the left ( ⌥← ), at the
right ( ⌥→), above ( ⌥↑) or below ( ⌥↓ ).
Similarly, still in the case of matrices, the keys ⌥↖ , ⌥↘ , ⌥⇞ and ⌥⇟ can be used for inserting
a new rst or last column, resp. a new rst or last row. The keys ⌥⌫ and ⌥⌦ are mapped
to the commands for backward resp. forward structured deletion. For matrices, this will
result in the removal of the column before or after the cursor (see gure 8.3). In order to
remove the enclosing environment you may use ⌃⌫ or ⌃⌫ .
a bj c bj c a jc
bj
d e f e f d f
Figure 8.3. Assume that the cursor is at the position of |inside the left-most matrix. Then pressing
the keys ⌥⌫ and ⌥⌦ respectively result in the next two matrices. Pressing either ⌃⌫ or ⌃⌫ replaces
the matrix by the content of the cell in which you are, leaving you with the b at the right-hand side.
8.7 Structured variants 59
Most keyboard shortcuts for structured cursor movements can be used in combination with
the ⇧ -key so as to simultaneously select text while moving around.
In the case of mathematical formulas, the ⌃⇥ shortcut allows you to change an inline
formula such as a2 + b2 = c 2 into the displayed formula
a2 + b 2 = c 2
The ⌘ prex may be used for positioning and resizing objects. For instance, inside a cell
of a table, you may use ⌘→ to align the cell more to the right. Behind a space introduced
via Format!Space, the same key allows you to increase the width of space. More generally,
the following shortcuts are implemented:
⌘⌃⇥ , ⌘⌃⇧⇥ . Circulate among the available length units for specifying the geometry.
8.9 Versioning tools 61
⌘⌃[ , ⌘⌃] . Decrease or increase the step size when positioning or resizing.
Spaces. Both horizontal and vertical spaces from the Format!Space menu. You should
put the cursor just after the space tag for the shortcuts to apply.
Box modiers. The tags move, shift, resize, extend, clipped, smashed, swell from the
Format!Adjust menu.
When writing documents in collaboration with other authors, it frequently arises that
one wants to go through changes made by the other authors, and either accept, discard
or further correct them. After enabling the versioning tool through Edit!Preferences!
Utilities!Versioning tool, a special menu Version appears in the main menu bar, which makes
this process automatic. Below, we will describe in more detail how this tool works.
In addition, there exist many stand-alone programs for maintaining several versions of
a same le, such as Subversion, Git, Darcs, GNU Arch, just to mention a few of
them. TEXMACS currently provides a rudimentary support for Subversion and Git, but
interfaces for the other systems could easily be added.
It often occurs that we want to go through the changes between two versions and pro-
gressively retain either one or the other version for each individual dierence. Assuming
that the cursor is inside a given dierence, this can be done from entries in the submenu
Version!Retain. Alternatively, one may use the shortcuts ⌃1 , ⌃2 and ⌃↩ to retain the old,
new and currently displayed version, respectively. If both versions are displayed, then ⌃↩
retains the new version. After retaining one of the versions, we automatically jump to the
next dierence, which can then be processed.
If you selected some text, then any of the above action will retain the appropriate version
for each of the dierences in the selection. This applies in particular to the case when you
select the entire document. A convenient alternative way to process all dierences is to use
⌃↑ and ⌃↓ to go through the dierences, use ⌃← and ⌃→ to select the preferred version. As
soon as all dierences have been processed, you select the entire document and click on
Version!Retain!Current version.
Grain control and reactualizing the dierences.
The entries in the submenu Version!Grain allow you to control the grain with which
dierences between versions are computed. By default, we use the nest grain Detailed.
It is also possible to compute dierences on a paragraph-based level, using Block. In that
case, the entire paragraphs in which a change occurs will be highlighted. The roughest
grain Rough will highlight the entire text, if a change occurs somewhere inside.
The grain is used when comparing two documents using Version!File!Compare, but it is
also possible to change the grain for a selected portion of text: simply select the text and
choose the new grain in the submenu Version!Grain. This can in particular be applied on
the entire buer. Similarly, if you change the grain inside a dierence, then the dierence
will be recomputed using the new grain.
Notice that you may also change the grain to the current grain. This has the eect of
reactualizing the dierences of a selected portion or of the current dierence at the cursor
position. This may be useful, if you made some changes to one of the versions. For instance,
assume that the old version contained a theorem and that we changed it into a lemma in
the new version and also modied part of its inside text. When visualizing the changes,
the whole theorem will be highlighted, since there is no appropriate markup to indicate
that we just changed from a theorem to a lemma. Nevertheless, if we want to compare the
inside texts, we may turn the old theorem into a lemma and then reactualize.
Using external programs such as Subversion for version control.
If the le you are editing belongs to a directory that is under version control (only Sub-
version and Git is currently supported, although other systems might follow), then the
rst part of the Version menu will contain some clickable entries.
First of all, if the current buer is under version control, then you may take a look at its
history using Version!History. The history contains a list of hyperlinks to older revisions,
together with short information about who changed what and when. Older revisions cannot
be saved, but you may compare them to the current user version (on disk or being edited)
using Version!Compare!With current user version.
After making some changes to a le under version control, the version inside the editor
or on disk no longer corresponds to the version in the repository. Using Version!Commit,
the current user's version can be committed to the repository. When doing so, you will
be prompted for a small explanatory message about the changes that you have made. A
le that is not yet under version control can be added to the version control system using
Version!Register. Registering a le does not commit it to the repository: you still have to
use Version!Commit in order to do so.
8.9 Versioning tools 63
If, while you were editing, changes to the le were made in the repository, then you may
merge the result with your current version using Version!Update. At the moment, no
conict resolution has been implemented yet, although this is planned for the future.
Chapter 9
Laptop presentations
TEXMACS features a presentation mode, for making presentations from a laptop. The
presentation mode is activated/deactivated using View!Presentation mode or ⌃F9 . In this
chapter, we describe several dedicated style packages and markup elements which can be
used for making slick presentations.
Several types of remote controllers are supported for laptop presentations. Some of them
(such as Apple infrared controllers) should work out of the box (at least for the Qt version).
Others map the buttons on the remote controller to certain keys on your keyboard, and you
will need to toggle View!Remote control in order to remap these keys to the right actions
during presentations. If necessary, the appropriate mappings may be specied in Edit!
Preferences!Keyboard!Remote control. By activating the debugging tool Tools!Debugging
tool and Debug!keyboard, you may nd out the particular mappings used by your remote
control.
In order to start writing a laptop presentation, you should rst select the beamer style
using Document!Style!beamer. There are several main themes for presentations, such as
Bluish, Ice, Metal, Reddish, Ridged paper, which can be selected from the Document!Beamer
theme menu.
The presentation style includes the alt-colors style package, which features the use
of colors for mathematical formulas, enunciations, etc. Additional customizations of the
presentation style are available in the Focus!Preferences menus for the various tags to
which they apply. For instance, the rendering of slide titles and theorems can be further
customized.
One major family of markup tags for presentations concerns the traversal of the document
during a presentation. The keys F10 and F11 are used respectively for going back and
forth in the presentation. The keys F9 and F12 are used to go to the start resp. end of the
presentation. When using the beamer style or when enabling the presentation tool in the
Tools menu, a Dynamic menu and additional icons will appear, which can also be used for
the traversal of your presentation.
The most basic traversal tag is called a switch, and allows the user to show dierent pieces
of text in successive and mutually exclusive manner. The entire presentation itself usually
consists of a screens switch, where the pieces are the successive slides of the presentation.
After selection of the beamer style, this switch can be inserted using Focus!Screens or
Insert!Fold!Switch!Screens. You may jump from one screen to another one using ⇞ and
⇟.
65
66 Laptop presentations
Inside a switch, new branches can be inserted after or before the currently visible branch
using Focus!Insert argument after or Focus!Insert argument before. Besides the screens
switch, you may use Insert!Fold!Switch!Standard to insert paragraph-wide switches,
and Insert!Fold!Switch!Standard to insert inline switches (similarly to displayed and
inline formulas).
Another popular way to traverse is presentation is to progressively unroll content. This can
be done by inserting an unroll tag using Insert!Fold!Unroll. Using a hack this tag can be
combined with the itemize and enumerate tags: rst create the list environment, but remove
the rst (automatically inserted) item tag. Next insert the unroll tag. When pressing enter
inside the unroll tag, new items are created; you still have to use Focus!Insert argument
after for inserting new branches to the unroll structure (in particular, several items could
be unrolled at once).
A variant of unrolling is unfolding. This is basically an unroll tag with exactly two branches,
but dierent variants are available in Insert!Fold!Folded depending on the desired ren-
dering. In particular, some of the renderings display a button which may be pushed in
order to fold or unfold some content. The input-output elds inside computer algebra
sessions are also foldable. Similarly, the tags in Insert!Fold!Summarize are switches with
two branches, again with dierent kinds of rendering.
When using TEXMACS in combination with an external plug-in, such as a computer algebra
system, you will notice that all input-output elds in sessions are foldable. In addition, you
can create so called executable switches using the items in the Insert!Fold!Executable
submenu. This allows you to switch back and forth between a given input to the system
and the corresponding output.
All markup for the traversal of presentations may be nested in a natural way. In the Insert!
Fold!Traversal menu, you may specify whether unrolled and folded structures should be
folded back after traversal.
9.3. Overlays
The standard fold, unroll and switch tags implement the most frequent kinds of tra-
versal of a slideshow. However, there are cases in which more complex successions are
needed.
For instance, imagine that we are given a slide, and that we wish to highlight all occurrences
of some variable x in red on the next slide (see gure 9.1). This could be achieved by using
a switch tag: we just copy the whole slide both in the rst and in the second branch of the
switch, and next color all instances of x red in the second branch. However, this solution
has the disadvantage that any a posteriori modication on the slide has to be made both
in the rst and in the second branch.
9.4 Decorations 67
TEXMACS provides a so called overlay mechanism for this kind of more complex successions
of slides. You may insert a pile of overlays using Insert!Fold!Overlays!Standard. At the
start, the pile contains a unique overlay, but new overlays can then be added using the
standard keyboard shortcuts ⌥→ and ⌥← for structured insertion. When applied to overlays,
the standard keys F10 and F11 for traversing the presentation have the eect of going up
and down in the pile of overlays.
By default, all text which is typed by the user will be visible on all overlays. But, using
the lters in the menu Insert!Fold!Overlay, it is also possible to create text which is only
visible on specied overlays of the pile. There are four basic types of lters:
Visible from here on. Text that will be visible on this and all subsequent overlays.
Visible until here. Text that will be visible on this and all previous overlays.
Visible only here. Text that will be visible only on this overlay.
Visible except here. Text that will be visible on all but the current overlays.
In a similar way, TEXMACS provides tags for alternate views: depending on whether a
certain predicate is met, we show the main content on certain overlays and the alternate
content on the remaining overlays. We use the same four types of predicates:
Alternate from here on. The alternate text will be used on this and all subsequent
overlays.
Alternate until here. The alternate text will be used on this and all previous overlays.
Alternate only here. The alternate text will only be used on this overlay.
Alternate except here. The alternate text will be used on all but the current overlays.
TEXMACS nally provides a means of customizing the way that hidden and shown content
should be rendered: user determined coloring schemes can be used using the alter-colors tag
which can be inserted from Insert!Fold!Overlay!Specify color alternation. For instance, in
order to achieve the eect mentioned in the example from Figure 9.1, you may specify a
black to red color alternation, and then use a Visible from here on type of overlay.
9.4. Decorations
In order to decorate your laptop presentations, TEXMACS provides a few extra markup
elements: granite, manila-paper, metal, pine, ridged-paper and rough-paper. These tags will put
your content on a nice, natural background, as illustrated in the gure below. You may
also use the tit tag for giving individual slides a title.
9.5. Animations
TEXMACS provides some rudimentary support for animations inside laptop presentations.
This support is likely to be further improved in future TEXMACS distributions.
The simplest animations are available from the menus Insert!Animation!Translate and
Insert!Animation!Progressive. Using the rst menu, it is possible to create moving content:
you rst specify a duration for the full animation and then enter the content which has to
be moved. The dierent kinds of moving content are illustrated in gure 9.3. Similarly,
using the second menu, it is possible to create content which only progressively appears
on the screen. The various kinds of progressive content are illustrated in gure 9.4. The
duration of the animations can be modied a posteriori by putting your cursor inside them
and using the shortcuts ⌘← and ⌘→ .
Other basic animations are animated gif pictures, which can be inserted from Insert!
Animation!Animation, and sounds, which can be inserted from Insert!Animation!Sound.
Support for movies should be added later.
It is also possible to combine animation, so as to form larger animations. For instance,
using Insert!Animation!Compose you can play several animations one after another. Often
the individual elements of a composed animations are xed animation of a given duration,
which can be inserted using Insert!Animation!Fixed. Of course, you may also use moving
or progressive content or even composed animations as building blocks. An animation
can be repeated indenitely using Insert!Animation!Repeat. This may for instance be
used to create a blinking eect. Some examples of the various possibilities can be found
in gure 9.5.
2. Unexpanded means that the PDF le will have as many pages as steps your presen-
tation, which depending on your use of fold, switch, overlay, etc. will typically result
in many more pages.
You can select which of these methods will be used with Preferences!Converters!TeXmacs-
>Pdf/Postscript!Expand beamer slides.
Chapter 10
Using GNU TEXMACS as an interface
An important feature of TEXMACS is it's ability to communicate with extern systems. For
computer algebra systems or other scientic computation systems, this is typically done in
shell-like sessions, in which it is possible to evaluate commands and display the results in
a nice, graphical way. Some systems can also be used more in the background as scripting
languages.
See Help!Plug-ins for a list of existing plug-ins and more documentation on these systems.
71
72 Using GNU TEXMACS as an interface
Some facilities for editing input, output and text elds are available in the Session!Field
menu. Keyboard shortcuts for inserting elds are ⌥↑ (insert above) and ⌥↓ . Keyboard
shortcuts for removing matching text/input/output elds are ⌥⌫ (remove backwards) and
⌥⌦ (remove current elds).
Example 10.1. A typical Maxima session is given below. If Maxima is present on your
system, then you may put your cursor in one of the inputs, perform some edits, and try
to reexecute it.
Maxima 5.25.1 http://maxima.sourceforge.net
using Lisp SBCL 1.0.51
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
(%i1) diff (x^x^x, x)
x
(%o1) xx (xx log (x) (log (x) + 1) + xx¡1)
(%i2) integrate (%o1, x)
xlog (x)
log(x)
(%o2) ee
(%i3) integrate (x^5 / (x^2 - x + 17), x)
2x¡1
239 log (x ¡ x + 17)
2 1361 arctan p
3 x4 + 4 x3 ¡ 96 x2 ¡ 396 x
67
(%o3) + p +
2 67 12
By default, TEXMACS will attempt to evaluate the input eld when pressing ↩ . Multiline
input can be created using ⇧↩ . Alternatively, when selecting the multiline input mode
using Session!Input mode!Multiline input, the ↩ key will behave as usual and ⇧↩ may be
used in order to evaluate the input eld. Notice nally that certain systems admit built-in
heuristics for testing whether the input has been completed; if not, then the ↩ may behave
as usual.
10.4 Plug-ins as scripting languages 73
Certain applications allow you to type the mathematical input in a graphical, two dimen-
sional form. This feature can be used by selecting Session!Input mode!Mathematical input.
If this feature is available, then it is usually also possible to copy and paste output back
into the input. However, it depends on the particular application how well this works.
Keep in mind that some key combinations may be used by the Mathematical input mode: for
instance the key $ is usually redened inside math mode, so if you want to input it you'll
have to type ⇧F5 $ . You can read more about the prex key ⇧F5 in Keyboard shortcuts
for text mode.
Example 10.2. Below, you will nd the previous example session, but now using math-
ematical input:
Maxima 5.25.1 http://maxima.sourceforge.net
using Lisp SBCL 1.0.51
Distributed under the GNU Public License. See the file COPYING.
Dedicated to the memory of William Schelter.
The function bug_report() provides bug reporting information.
x
(%i1) di(xx ; x)
x
(%o1) xx (xx log (x) (log (x) + 1) + xx¡1)
Z
(%i2) %o1 dx
xlog (x)
log(x)
(%o2) ee
Z
x5
(%i3) dx
x ¡ x + 17
2
2x¡1
239 log (x2 ¡ x + 17) 1361 arctan p
3 x4 + 4 x3 ¡ 96 x2 ¡ 396 x
67
(%o3) + p +
2 67 12
TEXMACS provides a few other kinds of additional interfaces to external systems in addition
to shell-like interfaces. First of all, it is possible to insert a so called executable switch
anywhere in the document using Insert!Fold!Executable.
For instance, if Maxima is installed on your system, then Insert!Fold!Executable!Maxima
should yield something like Maxima . You may enter a Maxima expression in the yellow
part of this markup, say Maxima diff(x^x,x) . Using ↩ , you may now switch back and
forth between the unevaluated input and the evaluated output xx (log (x) + 1). Using
⇧↩ , you enable multi-line input. This kind of executable switches are very useful for plug-
ins such as DraTEX, Eukleides, Feynmf, etc., which are mainly used for the e-
cient computation and insertion of special graphics inside TEXMACS documents.
Some plug-ins such as Maxima can even be selected as a scripting language using Docu-
ment!Scripts!Maxima. When doing so, a special Maxima menu will appear, which allows
for many useful operations directly on formulas. For instance, when putting the cursor
inside the formula 1 + 1 and pressing ? or Evaluate, the formula gets evaluated automatically
to yield 2.
74 Using GNU TEXMACS as an interface
Example 10.3. The executable input elds may for instance be nice in pedagogic doc-
uments in which parts of the document may be modied and recomputed by the reader.
For instance, evaluation of the input fragment
The derivative of xx equals di(function,x).
The second derivative is given by di(derivative,x).
yields
The derivative of xx equals xx (log (x) + 1).
The second derivative is given by xx (log (x) + 1)2 + xx¡1.
Of course, if the reader changes the input function xx into something else and presses ↩ ,
then the rst and second derivatives will be updated automatically.
10.5. Spreadsheets
TEXMACS provides rudimentary spreadsheet-like facilities with the advantage that the com-
putations can be carried out using any of the plug-ins that can be used as a scripting
language. In order to use the spreadsheet facilities, you should therefore start with the
selection of a scripting language in the menu Document!Scripts.
As soon as you have selecting a scripting language, such as Maxima, then you may enter
a new spreadsheet using Insert!Table!Textual spreadsheet or Insert!Table!Numeric spread-
sheet. You may edit the spreadsheet as an ordinary table, except that the ↩ key will attempt
to reevaluate the cells of the table.
In addition, when preceding the contents of a cell by =, then cell will be considered as an
input-output switch. More precisely, the input is a formula which will be evaluated using
the current scripting language. After the evaluation, only the result of the evaluation is
shown in the cell. After pressing ↩ a second time in the cell, it will be possible switch back
and edit the input. In the formulas, one may refer to the others using names such as c5
for the third row and the fth column.
Example 10.4. On the left-hand side of the gure below, we have displayed a simple table
with formulas for evaluating the sums of the rst two items of each row. On the right-hand
side, we have shown the result after evaluation.
10.6 Remote plug-ins 75
1 10 =a1+b1 1 10 11
100 1000 =a2+b2 100 1000 1100
Example 10.5. The cells may contain mathematical formulas and the spreadsheet may
take advantage of any of the capacities of the scripting language. For instance, the gure
below demonstrates another possible use of Maxima.
sin(x2) sin(x2)
=di(a1,x) 2 x cos (x2)
=di(a2,x) 2 cos (x2) ¡ 4 x2 sin (x2)
=di(a3,x) ¡12 x sin (x2) ¡ 8 x3 cos (x2)
TEXMACS supports a few special notations for applying operations on all cells in a subtable.
For instance, as in Excel, one may use the notation c3:d5 for indicating all cells c3, c4,
c5, d3, d4, d5 in the block from c3 to d5. An alternative notation ; :::; for : can be entered
by typing , , . In a similar way, one may enter the special notation + + by typing + + .
For instance, c3+ + d5 stands for the sum of all cells between c3 and d5.
Example 10.6. The gure below shows an example on how to use taking sums of cells.
Notice that empty cells count for zero.
Notice that copying and pasting of subtables works in the same way as for ordinary tables,
with the additional features that the names of the cells and references to cells in the
formulas are renumbered automatically. Similarly, automatic renumbering is used when
inserting new columns or rows, or when removing existing columns or rows.
We also notice that eld references can be used inside spreadsheet cells in order to refer to
some computational markup outside the table. Inversely, each spreadsheet also carries an
invisible Ref eld which can be edited by deactivating the spreadsheet or from the focus bar
(when selecting the entire spreadsheet). The Ref eld of the spreadsheet is used as a prex
for referring to the contents of cells outside the table or from within other spreadsheets.
For instance, if Ref equals sheet, then sheet-c4 will refer to the eld c4 inside the spreadsheet.
It sometimes happens that certain plug-ins are only installed on a remote computer. In
many cases, it will still be possible to use such a plug-in inside TEXMACS over an SSH
connection.
76 Using GNU TEXMACS as an interface
In order to make this work, you rst have to make sure that SSH is installed on both
computers and that connecting by SSH to the remote machine can be done automatically,
without having to type a password. This can be done by copying your public identity
on the local server to the remote server into the le ~/.ssh/authorized_keys; see the
documentation on SSH for more information.
As the next step, you have to make sure that TEXMACS has been installed on both com-
puters. The remote TEXMACS installation will mainly be used in order to detect which plug-
ins can be used on the remote computer.
When everything has been set up correctly in this way, select Insert!Session!Remote in
order to open the remote plug-in selector. Add the name of the remote server by typing
its name or IP address and clicking on Add. After a small pause, the remote server should
appear in the list together with the remote plug-ins which are supported. You may now
simply select the plug-in you want to use from the list. Notice that remote plug-ins may
take a few seconds in order to boot. Please be patient while booting is in progress.
Servers which have been added to the list of remote plug-in servers will be remembered
at the next time when you start TEXMACS. You may use the buttons Remove and Update
in order to remove a server from the list and to redetermine the list of supported remote
plug-ins.
Chapter 11
Writing TEXMACS style files
One of the fundamental strengths of TEXMACS is the possibility to write your own style
les and packages. The purpose of style les is multiple:
They allow the abstraction of repetitive elements in texts, like sections, theorems,
enumerations, etc.
They form a mechanism which allow you to structure your text. For instance, you
may indicate that a given portion of your text is an abbreviation, a quotation or
important.
The user may select a major style from the Document!Style menu. The major style usually
reects the kind of document you want to produce (like a letter, an article or a book) or
a particular layout policy (like publishing an article in a given journal).
Style packages, which are selected from the Document!Style menu, are used for further
customization of the major style. For instance, the number-europe package enables Euro-
pean-style theorem numbering and the maxima package contains macros for customizing
the layout of sessions of the Maxima computer algebra system. Several packages may be
used together.
When you want to add your own markup to TEXMACS or personalize the layout, then you
have to choose between writing a principal style le or a style package. In most cases, you
will probably prefer to write a style package, since this will allow you to combine it arbitrary
other styles. However, in some cases you may prefer to create a new principal style, usually
by personalizing an existing style. This is usually the case if you want to mimic the layout
policy of some journal. In this chapter, we will both explain how to write your own style
packages and how to customize the standard styles.
Let us explain on an example how to write a simple style package. First of all, you have to
create a new buer using File!New and select the source document style using Document!
Style!source. Now save your empty style package in your personal style package directory
$HOME/.TeXmacs/packages
Notice that the button Texts in the le browser corresponds to the directory
$HOME/.TeXmacs/texts
Consequently, you can go to the style package directory from there, by double clicking on
.. and next on packages. Similarly, the directory
77
78 Writing TEXMACS style files
$HOME/.TeXmacs/styles
contains your personal style les. After saving your empty style package, it should auto-
matically appear in the Document!Package menu. Notice that style les must be saved
using the .ts le extension. If you save the style le in a subdirectory of $HOME/.TeXmacs/
packages, then it will automatically appear in the corresponding submenu of Document!
Package.
Let us now create a simple macro hi which displays Hello world. First type ⌘⌃= , so as to
create an assignment. You should see something like
hassignjji
Now enter hi as the rst argument and type ⌘⌃M inside the second argument in order to
create a macro. You should now see something like
hassignjhijhmacrojii
Finally, type the text Hello world in the body of the macro. Your document should now
consist of the following line:
hassignjhijhmacrojHello worldii
After saving your style package, opening a new document and selecting your package in the
Document!Use package menu, you may now use the macro hi in your document by typing
\ H I and hitting ↩ .
In a similar way, you may create macros with arguments. For instance, assume that we
started entering a macro hello in a similar way as above. Instead of typing Hello world,
we rst type ⌥← inside the macro body so as to create an additional argument on the left
hand side of the cursor. We next enter the name of the argument, say name. You should
now see something like below:
hassignjhellojhmacrojnamejii
In the second argument of the body, we now type Hello , ⌘⌃# , name, → and , how are
you today?. After this you should see
The ⌘⌃# shortcut is used to retrieve the macro argument name. Instead of typing ⌘⌃# ,
name and → , you may also use the hybrid \ -key and type \ N A M E followed by ↩ . After
saving your style package, you may again use the macro in any document which uses your
package by typing \ H E L L O and hitting ↩ .
From the internal point of view, all macro denitions are stored in the environment of the
TEXMACS typesetter. Besides macros, the environment also contains normal environment
variables, such as section counters or the font size. The environment variables can either
be globally changed using the assign primitive, or locally, using the with primitive. For
instance, when including the line
hassignjsection-nr j-1i
11.2 Rendering of style files and packages 79
in your package, and using article as your major style, then the rst section will be
numbered 0. Similarly, the variant
hassignjhellojhmacrojnamejHello hwithjfont-shapejsmall-capsjnamei!ii
of the hello macro displays the name of the person in Small Capitals. Notice that the
with primitive can also be used to locally redene a macro. This is for instance used in the
denitions of the standard list environments, where the macro which renders list icons is
changed inside the body of the list. Yet another variant of the hello macro relies on the
standard person macro:
hassignjhellojhmacrojnamejHello hpersonjnamei!ii
In order to produce the macro application hperson j namei, you rst have to start a com-
pound tag using ⌘⌃C , type the name person, insert an argument ⌥→ , and enter the
argument name as before. When you are done, you may press ↩ in order to change the
compound tag into a person tag. Alternatively, you may type \ , person, ⌥→ and name.
By combining the above constructs, an ordinary user should already be able to produce
style packages for all frequently used notations. An interesting technique for writing macros
which involve complex formulas with some subformulas which may change goes as follows:
hassignjn-tuplejhmacrojajii
3. Copy the formula and paste it into the body of your macro:
hassignjn-tuplejhmacrojaj(ahrsubj1i,:::,ahrsubjni)ii
hassignjn-tuplejhmacrojaj(ahrsubj1i,:::,ahrsubjni)ii
5. You may now use the macro in documents which use your package:
In TEXMACS we have chosen to implement the second option. More precisely, any document
can be edited in source mode, which is merely a mode for rendering the document in a
way which makes its tree structure particularly apparent. It may be instructive to take
an arbitrary document of yours and to take a look at it in source mode by enabling
Document!Source!Edit source tree.
The choice between ASCII-based editing and tree-based editing is non-trivial, because
TEXMACS style les and packages have a double nature: they may be seen as programs which
specify how to render macros, but these programs naturally contain ordinary content.
There are several reasons why users often prefer to edit source code in an ASCII-based
format:
3. Standard editors like Emacs provide tools for automatic highlighting, indentation,
etc.
if (cond) hop = 2;
else holala= 3;
Clearly, the user had a particular formatting policy when writing this code. However,
this policy does not appear in the document: manual intervention will be necessary if the
variable cond is renamed c, or if the variable holala is renamed hola.
At the moment, TEXMACS provides no tools for dealing with the above example in an
automatic way, but a few tools are already provided. For instance, the user is given a great
amount of control on how to indent source code and reasonable defaults are provided as
a function of the structure. We also provide high level environments for comments and
structured highlighting. Further tools will be developed later and we are open for any
suggestions from our users.
Angular Scheme
(assign quick-theorem
hassignjquick-theoremj
(macro body
hmacrojbody j
(surround (no-indent)Theorem.
hsurroundjhno-indentiTheorem. jj
bodyiii
(arg body ))))
Functional LATEX
assignfquick-theorem gf
assign (quick-theorem ,
macrofbody gf
macro (body ,
surroundfno-indentTheorem. gfg
surround (no-indentTheorem. , ,
f
body)))
bodyggg
Figure 11.1. Dierent styles for rendering the same source tree.
Secondly, you may wish to reserve a special treatment to certain tags like concat and
document. In the menu Document!Source!Special you may specify to which extent you
want to treat such tags in a special way:
Formatting. Only the formatting tags concat and document are represented as usual.
Normal. In addition to the formatting tags, a few other tags like compound, value and
arg are represented in a special way.
Maximal. At the moment, this option is not yet implemented. The intention is to
allow the user to write his own customizations and to allow for special rendering of
basic operations like plus.
None Formatting
hassignjquick-theoremj
hmacrojbody j hassignjquick-theorem j
hdocumentj hmacrojbody j
hsurround jhconcat jhno-indentij hsurroundjhno-indentiTheorem. jj
Theorem. ijj hargjbody iiii
hargjbody iiiii
Normal Maximal
hassignjquick-theoremj hassignjquick-theorem j
hmacrojbody j hmacrojbody j
hsurroundjhno-indentiTheorem. jj hsurroundjhno-indentiTheorem. jj
bodyiii bodyiii
Another thing which may be controlled by the user is whether the presentation of tags
should be compact or stretched out across several lines. Several levels of compactication
may be specied in the Document!Source!Compactication menu:
Minimal. The tags are all stretched out across several lines.
82 Writing TEXMACS style files
Only inline tags. All non-inline tags are stretched out across several lines.
Normal. All inline arguments at the start of the tag are represented in a compact
way. As soon as we encounter a block argument, the remainder of the arguments
are stretched out across several lines.
Inline arguments. All inline arguments are represented in a compact way and only
block tags are stretched out across several lines.
The normal and inline arguments options rarely dier. The visual eect of the dierent
options is illustrated below:
Normal Maximal
hassignjquick-theoremj
hmacrojbody j hassign j quick-theorem j hmacro j body j hdoc-
hsurround j hno-indentiTheorem. ument j hsurround j hno-indentiTheorem. j j
jj body iiii
bodyiii
Finally, the user may specify the way closing tags should be rendered when the tag is
stretched out across several lines. The rendering may either be minimalistic, compact, long,
or recall the matching opening tag. The dierent options are illustrated below:
Minimal Compact
assign quick-theorem hassignjquick-theorem j
macro body hmacrojbody j
surround hno-indentiTheorem. j hsurroundjhno-indentiTheorem. jj
body bodyiii
Stretched Repeat
hassignjquick-theoremj hnassignjquick-theorem i
hmacrojbody j hnmacrojbody i
hsurroundjhno-indentiTheorem. jj hnsurroundjhno-indentiTheorem. ji
body body
i h/surroundi
i h/macroi
i h/assigni
In the section about writing a simple style package we already gave you a rst impression
about the style-sheet language of TEXMACS. In this section, we will give a more complete
survey of the available features. For more detailed descriptions, we refer to the chapter
about the TEXMACS primitives.
The style-sheet primitives can be obtained from the Source menu when you are in source
mode. In all other modes, the Source menu becomes visible after enabling the Source macros
tool in the Tools menu. Alternatively, you may use the ⌥ and ⌘E keyboard prexes in source
mode and the ⌘I and ⌘E prexes otherwise. Furthermore, we recall that the hybrid \ -
key may be used for creating macro-applications or arguments, depending on the context.
Finally, the ⌥→ and ⌥← keys are used for inserting arguments.
11.3.1. Assignments
All user dened TEXMACS macros and style variables are stored in the current typesetting
environment. This environment associates a tree value to each string variable. Variables
whose values are macros correspond to new primitives. The others are ordinary envi-
ronment variables. The primitives for operating on the environment are available from
Source!Dene.
You may permanently change the value of an environment variable using the assign prim-
itive, as in the example
hassignjhijhmacrojHi there!ii
You may also locally change the values of one or several environment variables using the
with primitive:
The value of an environment variable may be retrieved using the value primitive. This may
for instance be used in order to increase a counter:
Finally, you may associate logical properties to environment variables using the drd-props
primitive. This is explained in more detail in the section about macro primitives.
hassignjmy-macrojhmacrojx1 jjxnjbodyii
11.3 The style-sheet language 85
After such an assignment, my-macro becomes a new primitive with n arguments, which
may be called using
hmy-macrojy1jjyni
Inside the body of the macro, the arg primitive may be used to retrieve the values of the
arguments to the macro.
It is possible to call a macro with less or more arguments than the expected number. Super-
uous arguments are simply ignored. Missing arguments take the nullary uninit primitive
as value:
hassignjheyj
hmacrojrstjsecondj
hifj
hequaljsecondj?ij
Hey rst, you look lonely today...j
Hey rst and second, you form a nice couple!iii
We nally notice that you are allowed to compute with macros, in a similar way as in
functional programming, except that our macros are not closures (yet). For instance:
hassignjmy-macro-copyjmy-macroi
The compound tag may be used to apply macros which are the result of a computation:
hassignjoverloaded-hij
hmacrojnamej
hcompoundj
hif jhnice-weather ijhappy-hijsad-hiij
nameiii
hassignjmy-theoremj
hmacrojbodyj
hsurroundjhno-indentihwithjfont-seriesjboldjTheorem. ijhright-ushij
bodyiii
86 Writing TEXMACS style files
In this example, we surrounded the body of the theorem with the bold text Theorem.
at the left hand side and a right-ush at the right-hand side. Flushing to the right is
important in order to make the blue visual border hints look nice when you are inside the
environment.
In most cases, TEXMACS does a good job in determining which tags are inline and which
ones are not. However, you sometimes may wish to force a tag to be a block environment.
For instance, the tag very-important dened by
hassignjvery-importantjhmacrojbodyjhwithjfont-seriesjboldjcolor jredjbodyiii
may both be used as an inline tag and a block environment. When placing your cursor
just before the with-tag and hitting ↩ followed by ⌫ , you obtain
hassignjvery-importantj
hmacrojbodyj
hwithjfont-seriesjboldjcolor jredjbodyiii
Since the body of the macro is now a block, your tag very-important will automatically
become a block environment too. In the future, the drd-props primitive will give you even
more control over which tags and arguments are inline and which ones are block.
Another important property of tags is whether they contain normal textual content or
tabular content. For instance, consider the denition of the standard eqnarray* tag (with
a bit of presentation markup suppressed):
hassignjeqnarray* j
hmacrojbodyj
hwithjpar-modejcenterjmodejmathjmath-displayjtruejpar-sepj0.45fnj
hsurroundjhno-page-break*ihvspace*j0.5fnijhvspacej0.5fnihno-indent*ij
htformatj
htwithjtable-hyphenjyij
htwithjtable-widthj1parij
htwithjtable-min-colsj3ij
htwithjtable-max-colsj3ij
hcwithj1j-1j1j1jcell-hpartj1ij
hcwithj1j-1j-1j-1jcell-hpartj1ij
bodyiiiii
The use of surround indicates that eqnarray* is a block environment and the use of tformat
species that it is also a tabular environment. Moreover, the twith and cwith are used
to specify further formatting information: since we are a block environment, we enable
hyphenation and let the table span over the whole paragraph (unused space being equally
distributed over the rst and last columns). Furthermore, we have specied that the table
contains exactly three columns.
Finally, it is important to bear in mind that style-sheets do not merely specify the nal
presentation of a document, but that they may also contain information for the authoring
phase. Above, we have already mentioned the use of the right-ush tag in order to improve
the rendering of visual border hints. Similarly, visual hints on invisible arguments may
be given in the form of ags:
11.3 The style-sheet language 87
hassignjlabeled-theoremj
hmacrojidjbodyj
hsurroundj
hconcatj
hno-indentij
hagjId: idjbluejidij
hwithjfont-seriesjboldjTheorem. iij
hright-ushij
bodyiii
More generally, the specic tag with rst argument screen may be used to display visual
hints, which are removed when printing the document.
The Source!Evaluation menu contains several primitives to control the way expressions in
the style-sheet language are evaluated. The most frequent use of these primitives is when
you want to write a meta-macro like new-theorem which is used for dening or computing
on other macros. For instance:
hassignjnew-theoremj
hmacrojnamejtextj
hquasij
hassignjhunquote jnameij
hmacrojbodyj
hsurroundjhno-indentihstrongjhunquotejtexti. ijhright-ushij
bodyiiiiii
hassignjtheoremj
hmacrojbodyj
hsurroundjhno-indentihstrongjTheorem. ijhright-ushij
bodyiii
In Scheme, the bodies of Scheme macros are evaluated twice, whereas the arguments of
functions are evaluated. On the other hand, when retrieving a variable (whether it is an
argument or an environment variable), the value is not evaluated. Consequently, a TEXMACS
macro
(define-macro (foo x)
`(let ((x (lambda () ,x)))
(blah (x) (x)))
Here the primitives quote-arg and quote-value are used to retrieve the value of an argument
resp. an environment variable. The TEXMACS primitives eval, quote, quasiquote and unquote
behave in the same way as their Scheme analogues. The quasi primitive is a shortcut for
quasi-quotation followed by evaluation.
hassignjappendix j
hmacrojtitlejbodyj
hcompoundj
hif jhlong-document ijchapter-appendix jsection-appendix ij
titlej
bodyiii
In this example, appendix is a block environment consisting of a title and a body, and which
is rendered as a chapter for long documents and as a section for short ones. Notice that
the following implementation would have been incorrect, since the if primitive currently
only works for inline content:
11.4 Customizing the standard TEXMACS styles 89
hassignjappendix j
hmacrojtitlejbodyj
hifj
hlong-documentij
hchapter-appendixjtitlejbodyij
hsection-appendixjtitlejbodyiiii
hassignjheyj
hmacrojrstjsecondj
hifj
hequaljsecondj?ij
Hey rst, you look lonely today...j
Hey rst and second, you form a nice couple!iii
However, TEXMACS is not clever enough to detect which arguments are optional and which
arguments are accessible (i.e. which arguments can be edited by the user). Therefore, you
will have to manually give this information using the drd-props primitive. The case, while
and for-each primitives are explained in more detail in the corresponding section on the
TEXMACS primitives.
Here we use the merge primitive in order to concatenate two strings. The dierent computa-
tional primitives are described in more detail in the corresponding section on the TEXMACS
primitives.
Each standard TEXMACS style le or package is based on a potentially nite number of
subpackages. From an abstract point of view, this organization may be represented by a
labeled tree. For instance, the tree which corresponds to the article style is represented
below:
article
Most of the style packages correspond to a d.t.d. (data type denition) which contains the
abstract interface of the package, i.e. the exported tags. For instance, the package std-
markup corresponds to the d.t.d. std-markup. Sometimes however, several style packages
match the same d.t.d.. For instance, both header-article and header-book match the
d.t.d. header, since they merely implement dierent ways to render the same tags.
When building your own style les or packages, you may use the use-package primitive in
order to include other packages. For instance, the article style essentially consists of the
line
huse-packagejstdjenvjtitle-genericjheader-articlejsection-articlei
More precisely, the use-package package sequentially includes the style packages corre-
sponding to its arguments. The packages should be in $TEXMACS_PACKAGE_PATH, which
contains ., ~/.TeXmacs/packages and $TEXMACS_PATH/packages by default. Furthermore
rendering information for the source code like style-with tags are discarded before evaluation
of the les.
Remark 11.1. We strongly recommend the user to take a look at some of the standard
style les and packages which can be found in
$TEXMACS_PATH/styles
$TEXMACS_PATH/packages
When loading using ⌃X ⌃F , these paths are in the standard load path. For instance, if you
want to take a look at the std-markup package, then it suces to type ⌃X ⌃F , followed by
the le name std-markup.ts and ↩ .
11.4 Customizing the standard TEXMACS styles 91
Remark 11.2. It is also possible to customize the presentation of the source code of the
style les and packages themselves, by using other packages in addition to source or by
using another major style le based on source. In that case, the extra markup provided
by such packages may be used for presentation purposes of the source code, but it is not
exported when using your package in another le.
Environment variables.
Customizable macros.
Furthermore, they may dene some tags for intern implementation purposes, which will
not be documented in this manual. They may also specify some logical properties of tags
using the drd-props primitive.
Environment variables are almost always attributes for controlling the rendering of content,
or counters for sections, equations, etc.. Although several simple tags for the end-user
like strong may be redened in your own style les, this practice is not recommended for
more complex tags like section. Indeed, the section tag involves many things like resetting
subcounters, entering the title into the table of contents and so on. Therefore, special
additional macros are provided the customization of such tags, like section-title, section-
clean and section-toc.
hassignjpage-typejletteri
hassignjpage-oddj2ini
hassignjpage-evenj2ini
hassignjpage-rightj2ini
It should be noticed that the environment variables for page layout are quite dierent in
TEXMACS and TEX/LATEX. In order to make it easier to adapt LATEX style les to TEXMACS,
we have therefore provided the std-latex package, which emulates the environment vari-
ables from TEX/LATEX. Typically, this allows you determine the global layout by lines like
hassignjtex-odd-side-marginjhmacroj20ptii
hassignjtex-even-side-marginjhmacroj20ptii
hassignjtex-text-widthjhmacroj33pcii
92 Writing TEXMACS style files
We notice that macros which return lengths are considered as lengths themselves. In the
case of the TEX/LATEX emulation package, we actually require all lengths to be macros.
The page headers and footers are usually not determined by global environment variables
or macros, since they may change when a new chapter or section is started. Instead,
TEXMACS provides the call-back macros header-title, header-author, header-primary and header-
secondary. These macros are called when the document title or author are specied or when
a new primary or secondary section is started (primary sections are typically chapters in
books, or sections in articles). For instance, the following redenition makes the principal
section name appear on even pages, together with the current page number and a wide
underline.
hassignjheader-primaryj
hmacrojtitlejnr jtypej
hassignjpage-even-header j
hquasiquotej
hwide-std-underlinedj
hconcatj
hpage-the-pageij
hhtabj5mmij
hunquotejtitleiiiiiii
hassignjrender-listj
hmacrojbodyj
hsurroundj
hno-page-break*ihvspace*j0.5fnij
hright-ushihvspacej0.5fnihno-indent*ij
hwithjpar-leftjhplusjpar-leftj3fnijpar-rightjhplusjpar-rightj3fnijbodyiiii
This redenition aects the rendering of all list environments (itemize, enumerate, etc.) by
reducing the right margin with a length of 3fn:
This text, which has been made so long that it does not t on a single line,
is indented on the right hand side by 3fn.
Once again: this text, which has been made so long that it does not t on a
single line, is indented on the right hand side by 3fn.
11.4 Customizing the standard TEXMACS styles 93
In a similar way, you may customize the rendering of list items by redening the macros
aligned-item and compact-item. These macros both take one argument with the text of the
item and render it either in a right-aligned way (such that subsequent text is left aligned)
or in a left-aligned way (such that subsequent text may not be aligned). For instance,
consider the following redenition of aligned-item:
hassignjaligned-itemj
hmacrojx j
hconcatj
hvspace*j0.5fnij
hwithjpar-rstj-3fnjhyes-indentiij
hresizejhwithjcolor jredjx ijhminusj1rj2.5fnijjhplusj1rj0.5fnijiiii
Then items inside all list environments with compact items will appear in red:
Remark 11.3. The macros aligned-item and compact-item are required to produce inline
content, so that they may be used in order to surround blocks. In particular, several other
internal macros (aligned-space-item, long-compact-strong-dot-item, etc.) are based on aligned-
item and compact-item, and used for the rendering of the dierent types of lists (itemize-
arrow, description-long, etc.). In the future, we also plan to extend item and item* with a
compulsory body argument. When customizing the list environments, it is important to
keep that in mind, so as to make your style-sheets upward compatible.
The std-list d.t.d. also provides a macro new-list to dene new lists. Its syntax is hnew-listj
namejitem-render jitem-transformi, where name is the name of the new list environment,
item-render an (inline) macro for rendering the item and item-transform an additional
transformation which is applied on the item text. For instance, the enumerate-roman envi-
ronment is dened by
hnew-theoremjexperimentjExperimenti
When available in the TEXMACS dictionaries, the text Experiment will be automatically
translated when your document is written in a foreign language. In the section about how
to dene new environments, it is also explained how to dene other numbered textual
environments (besides theorems, remarks and exercises).
hassignjrender-theoremj
hmacrojwhichjbodyj
hpadded-normalj1fnj1fnj
hsurroundjhtheorem-namejwhichhtheorem-sepiijj
hwithjfont-shapejslantedjpar-leftjhplusjpar-leftj1.5fnijbodyiiiii
Theorem 11.4. This is a theorem which has been typeset in a slanted font.
By default, the theorems are rendered as remarks with the only dierence that their bodies
are typeset in an italic font. Hence, redening the render-remark macro will also aect the
rendering of theorems. The default render-proof macro is also based on render-remark.
Instead of redening the entire rendering, the user might just wish to customize the way
names of theorems are rendered or redene the separator between the name and the body.
As the user may have noticed by examining the above redenition of render-theorem, these
aspects are controlled by the macros theorem-name and theorem-sep. For instance, consider
the following redenitions:
hquasij
hassignj
inc-theoremj
hmacrojhcompoundjhunquote jinc-theoremiihreset-corollaryiiii
Notice the trick with quasi and unquote in order to take into account additional action
which might have been undertaken by the previous value of the macro inc-theorem.
The following code from number-long-article.ts is used in order to prex all standard
environments with the number of the current section:
hassignjsection-cleanjhmacrojhreset-subsectionihreset-std-enviii
hassignjdisplay-std-env jhmacrojnr jhsection-prexinr ii
Remark 11.6. Currently, the sectional tags take one argument, the section title, but a
second argument with the body of the section is planned to be inserted in the future (see
the experimental structured-section package). For this reason (among others), style les
should never redene the main sectional tags, but rather customize special macros which
have been provided to this eect.
hassignjsectional-sepjhmacroj ii
The x-title and x-numbered-title macros respectively specify how to render unnumbered and
numbered section titles. Usually, the user only needs to modify x-title, since x-numbered-
title is based on x-title. However, if the numbers have to be rendered in a particular way,
then it may be necessary to redene x-numbered-title. For instance, consider the redenition
hassignjsubsection-numbered-titlej
hmacrojnamej
hsectional-normalj
hwithjfont-seriesjboldjhthe-subsectioni. inameiii
Notice that the section-base package provides several useful helper macros like sectional-
normal.
Remark 11.7. Sectional titles can either be rendered in a short or in the long fashion.
By default, paragraphs and subparagraphs use the short rendering, for which the body
starts immediately at the right of the title:
All other sectional tags use the long rendering, in which case the section title takes a
separate line on its own:
My section
Blah, blah, and more blahs...
Besides their rendering, several other aspects of sectional tags can be customized:
The call-back macro x-clean can be used for cleaning some counters when a new
section is started. For instance, in order to prex all standard environments by the
section counter, you may use the following lines:
hassignjsection-cleanjhmacrojhreset-subsectionihreset-std-enviii
hassignjdisplay-std-env jhmacrojnr jhsection-prexinr ii
The call-back macro x-header should be used in order to modify page headers and
footers when a new section is started. Typically, this macro should call header-
primary, or header-secondary, or do nothing.
The call-back macro x-toc should be used in order to customize the way new sections
appear in the table of contents.
11.4 Customizing the standard TEXMACS styles 97
TEXMACS uses the doc-data tag in order to specify global data for the document. These data
are treated in two stages by the doc-data macro. First, the document data are separated
into several categories, according to whether the data should be rendered as a part of the
main title or in footnotes or the abstract. Secondly, the data in each category are rendered
using suitable macros.
Each child of the doc-data is a tag with some specic information about the document.
Currently implemented tags are doc-title, doc-subtitle, doc-author, doc-date, doc-running-
title, doc-running-author, doc-keywords, doc-msc and doc-note. The doc-author tag may occur
several times. The author-data tag is used in order to specify structured data for each of
the authors of the document. Each child of the author-data tag is a tag with information
about the corresponding author. Currently implemented tags with author information are
author-name, author-aliation, author-email, author-homepage and author-note.
Most of the tags listed above also correspond to macros for rendering the corresponding
information as part of the main title. For instance, if the date should appear in bold italic
at a distance of at least 1fn from the other title elds, then you may redene doc-date as
hassignjdoc-datej
hmacrojbodyj
hconcatj
hvspace*j1fnij
hdoc-title-blockjhwithjfont-shapejitalicjfont-seriesjboldjbodyiij
hvspacej1fniiii
The title-block macro is used in order to make the text span appropriately over the width
of the title. The doc-title and author-name are special in the sense that they also render
possible references to footnotes. For this reason, you should rather customize the doc-render-
title and author-render-name macros in order to customize the rendering of the title and the
name themselves.
Notice also that the doc-running-title and author-running-author macros do not render any-
thing, but rather call the header-title and header-author call-backs for setting the appropriate
global page headers and footers. By default, the running title and author are extracted
from the usual title and author names.
In addition to the rendering macros which are present in the document, the main title
(including author information, the date, etc.) is rendered using the doc-make-title macro.
The author information, as part of the main title, is rendered using render-doc-author or
render-doc-authors, depending on whether the document has one or more authors. Footnotes
to the title or to one of the authors are rendered using doc-title-note resp. doc-author-note.
These footnote macros always expect a document tag on input, because they may compress
it into a horizontal concatenation.
The rst stage of processing the document data is more complex and the reader is invited
to take a look at the short descriptions of the macros which are involved in this process.
It is also good to study the denitions of these macros in the package itself. In order to
indicate the way things work, we nish with an example on how the email address and
homepage of an author can be rendered in a footnote instead of the main title:
98 Writing TEXMACS style files
hassignjdoc-author-mainj
hmacrojdataj
hquasij
hunquote*jhselectjhquote-argjdataijauthor-nameii
hunquote*jhselectjhquote-argjdataijauthor-aliationiiiii
hassignjdoc-author-data-notej
hxmacrojdataj
hquasij
hunquote*jhselectjhquote-argjdataijauthor-emailii
hunquote*jhselectjhquote-argjdataijauthor-homepageii
hunquote*jhselectjhquote-argjdataijauthor-notejdocumentjhpat-anyiiiiii
Imagine that you want to change the rendering of a given tag, like lemma. As a general
rule, TEXMACS provides a set of well-chosen macros which can be customized by the user so
as to obtain the desired eect. For instance, as we have seen above, you should use modify
one of the macros render-theorem, theorem-name or theorem-sep in order to customize the
rendering of lemma and all other theorem-like environments.
However, in some cases, it may not be clear which well-chosen macro to customize. If
we just wanted to change the presentation of lemmas and not of any other theorem-like
environments, then we clearly cannot modify render-theorem, theorem-name or theorem-sep.
In other cases, the user may not want to invest his time in completely understanding the
macro hierarchy of TEXMACS, and nd out about the existence of render-theorem, theorem-
name and theorem-sep.
So imagine that you want all lemmas to appear in red. One thing you can always do is
copy the original denition of lemmas in a safe place and redene the lemma macro on top
of the original denition:
hassignjorig-lemmajlemmai
hassignjlemmajhmacrojbodyjhwithjcolor jredjhorig-lemmajbodyiiii
Alternatively, if only the text inside the lemma should be rendered in red, then you may do:
hassignjorig-lemmajlemmai
hassignjlemmajhmacrojbodyjhorig-lemmajhwithjcolor jredjbodyiiii
Of course, you have to be careful that the name orig-lemma is not already in use.
Another frequent situation is that you only want to modify the rendering of a tag when it
is used inside another one. On the web, the Cascading Style Sheet language (CSS) provides
a mechanism for doing this. In TEXMACS, you may simulate this behaviour by redening
macros inside a with. For instance, imagine that we want the inter-paragraph space inside
lists inside theorem-like environments to vanish. Then we may use:
11.5 Further notes and tips 99
hassignjorig-render-theoremjrender-theoremi
hassignjrender-theoremj
hmacrojnamejbodyj
hwithjorig-render-listjrender-listj
hwithjrender-listjhmacrojx jhorig-render-listjx iij
horig-render-theoremj
namej
bodyiiiii
On the one hand side, this mechanism is a bit more complex than CSS, where it suces
to respecify the par-par-sep attribute of lists inside theorems. On the other hand, it is also
more powerful, since the render-theorem macro applies to all theorem-like environments at
once. Furthermore, if the above mechanism is to be used frequently, then real hackers may
simplify the notations using further macro magic.
Writing block environments which span over the entire paragraph width. Notice that
the title-base package provides some additional macros for wide section titles.
Writing wide block environments which are underlined, overlined or in a frame box.
Recursive indentation.
Localization of text.
It is good practice to use these standard macros whenever possible when writing style les.
Indeed, the low-level TEXMACS internals may be subject to minor changes. When building
upon standard macros with a clear intention, you increase the upward compatibility of
your style-sheets.
Chapter 12
Customizing TEXMACS
One major feature of TEXMACS is that it can be highly customized. First of all, the most
important aspects of the program can be congured in Edit!Preferences. Most other parts
of TEXMACS can be entirely adapted or reprogrammed using the Guile/Scheme extension
language. In the sequel, we give a short overview of how this works in simple cases.
Like Emacs, TEXMACS comes with a Lisp-like extension language, namely the Guile
Scheme dialect from the GNU project. For documentation about Guile Scheme, we
refer to
http://www.gnu.org/software/guile/guile.html
Scheme has the advantage that it may be extended with extern C and C++ types and
routines. In our case, we have extended Scheme with routines which you can use to create
your own menus and key-combinations, and even to write your own extensions to TEXMACS.
If you have downloaded the source les of TEXMACS, then it may be interesting for you to
take a look at the les
Guile/Glue/build-glue-basic.scm
Guile/Glue/build-glue-editor.scm
Guile/Glue/build-glue-server.scm
These three glue les contain the C++ routines, which are visible within Scheme. In
what follows, we will discuss some of the most important routines. We plan to write a more
complete reference guide later. You may also take a look at the scheme .scm les in the
directory $TEXMACS_PATH/progs.
101
102 Customizing TEXMACS
if it exists.
Example 12.1. Suppose you want to add a style package CustomStyle.ts of your own to
every new document you create. You can add the following lines to $TEXMACS_HOME_PATH/
progs/my-init-buffer.scm:
First we check whether the current-buffer has been newly created in order not to apply
the style to existing les when we open them. Then we add the new package (instead of
changing it with init-style) using set-style-list and nally we call buffer-pretend-
saved to prevent TEXMACS from thinking the buer has been modied by the change of
style, or it would always prompt asking for conrmation before closing an empty buer.
or
Here def is a program which represents the entries of the menu. In particular, you may
take a look at the les in the directory
$TEXMACS_PATH/progs/menu
in order to see how the standard TEXMACS menus are dened. In the case of tm-menu, it is
possible to specify additional arguments, which makes it possible to dynamically construct
more complex menus which depend on parameters.
More precisely, the program def in menu-bind or tm-menu is a list of entries of one of the
following forms:
The constructors => and -> are used to create pulldown or pullright menus and menu-
definition should contain a program which creates the submenu. In the main (or system)
menu bar all root items are pulldown menus and all submenus of these are pullright. Both
pulldown and pullright may be used in toolbars or other widgets.
12.4 Creating your own keyboard shortcuts 103
The constructor ("entry" action) creates an ordinary entry, where action will be com-
piled and executed when you click on entry. Items of a menu may be separated using -
--. The constructor if is used for inserting menu items only if a certain condition is
satised (for instance, if we are in math mode), whereas while always inserts the item but
deactivates (e.g. greying it out) it condition is not met.
If you declared a menu name, then you may use this menu indirectly using the link
constructor, thus one may link any such indirect submenu to as many menus as desired.
Finally, new items may be added to any given menu a posteriori using former, as in the
following example:
(tm-menu (tools-menu)
(former)
---
("New item" (noop)))
texmacs-menu: contains the root entries of the main menu bar at the top of the
window (or desktop under MacOS). It uses link to display file-menu, edit-menu,
insert-menu, text-menu, paragraph-menu, document-menu and help-menu among
others.
texmacs-mode-icons: contains the icons which depend on the current editing mode,
that is: mathematics, text, code, etc.
texmacs-focus-icons: these icons change with the cursor. One should install here
any icons that are specic to a particular tag or context.
(kbd-map . keymaps)
Optionally, you may specify conditions which must be satised for the keymap to be valid
using the :mode option. For instance, the command
species a list of keyboard shortcuts which will only be valid in math-mode. Each item in
keymaps is of one of the following forms:
In the rst case, the action_i are Scheme commands associated to the string key-
combination. In the second and third case, result is a string which is to be inserted in
the text when the key-combination has been completed. An optional help-message may
be displayed when the key-combination is nished.
There are many ways in which TEXMACS can be customized or extended: users may dene
their own style les, customize the user interface, or write links with extern programs. The
plug-in system provides a universal mechanism to combine one or several such extensions
in a single package. Plug-ins are both easy to install by other users and easy to write and
maintain.
Remark 13.1. If you did not install TEXMACS yourself, or if you do not have write access to
$TEXMACS_PATH, then you may also unpack the tarball in $TEXMACS_HOME_PATH/plugins.
Here we recall that $TEXMACS_HOME_PATH defaults to $HOME/.TeXmacs. When starting
TEXMACS, your plug-in should again be automatically recognized.
Remark 13.2. If the plug-in is distributed as a source tarball like myplugin -version-
src.tar.gz, then you should rst compile the source code before relaunching TEXMACS.
Depending on the plug-in (read the instructions), this is usually done using
cd myplugin ; make
or
cd myplugin ; ./configure; make
Remark 13.3. In order to upgrade a plug-in, just remove the old version in $TEXMACS_PATH/
plugins or $TEXMACS_HOME_PATH/plugins using
rm -rf myplugin
and reinstall as explained above.
105
106 The TEXMACS plug-in system
$TEXMACS_HOME_PATH/plugins/myplugin
where to put all your les (recall that $TEXMACS_HOME_PATH defaults to $HOME/.TeXmacs).
In addition, you may create the following subdirectories (when needed):
l i b For libraries.
As a general rule, les which are present in these subdirectories will be automatically
recognized by TEXMACS at startup. For instance, if you provide a bin subdirectory, then
$TEXMACS_HOME_PATH/plugins/myplugin /bin
will be automatically added to the PATH environment variable at startup. Notice that
the subdirectory structure of a plug-in is very similar to the subdirectory structure of
$TEXMACS_PATH.
Example 13.4. The easiest type of plug-in only consists of data les, such as a collection
of style les and packages. In order to create such a plug-in, it suces to create directories
$TEXMACS_HOME_PATH/plugins/myplugin
$TEXMACS_HOME_PATH/plugins/myplugin /styles
$TEXMACS_HOME_PATH/plugins/myplugin /packages
and to put your style files and packages in the last two directories. After restarting TEXMACS,
your style les and packages will automatically appear in the Document!Style and Doc-
ument!Use package menus.
For more complex plug-ins, such as plug-ins with additional Scheme or C++ code, one
usually has to provide a Scheme conguration le
$TEXMACS_HOME_PATH/plugins/myplugin /progs/init-myplugin .scm
This conguration le should contain an instruction of the following form
(plugin-configure myplugin
configuration-options)
Here the configuration-options describe the principal actions which have to be under-
taken at startup, including sanity checks for the plug-in. In the next sections, we will
describe some simple examples of plug-ins and their conguration. Many other examples
can be found in the directories
13.4 Example of a plug-in with C++ code 107
$TEXMACS_PATH/examples/plugins
$TEXMACS_PATH/plugins
Some of these are described in more detail in the chapter about writing new interfaces.
The w o r l d plug-in.
Consider the world plug-in in the directory
$TEXMACS_PATH/examples/plugins
This plug-in shows how to extend TEXMACS with some additional Scheme code in the le
world/progs/init-world.scm
In order to test the world plug-in, you should recursively copy the directory
$TEXMACS_PATH/examples/plugins/world
to $TEXMACS_PATH/plugins or $TEXMACS_HOME_PATH/plugins. When relaunching TEXMACS,
the plug-in should now be automatically recognized (a World menu should appear in the
menu bar).
How it works.
The le init-world.scm essentially contains the following code:
(plugin-configure world
(:require #t))
(when (supports-world?)
(display* "Using world plug-in!\n"))
The conguration option :require species a condition which needs to be satised for the
plug-in to be detected by TEXMACS (later on, this will for instance allow us to check whether
certain programs exist on the system). The conguration is aborted if the requirement is
not fullled.
Assuming that the conguration succeeds, the supports-world? predicate will evaluate
to #t. In our example, the body of the when statement corresponds to some further ini-
tialization code, which just sends a message to the standard output that we are using our
plug-in. In general, this kind of initialization code should be very short and rather load a
module which takes care of the real initialization. Indeed, keeping the init-myplugin .scm
les simple will reduce the startup time of TEXMACS.
The m i n i m a l plug-in.
Consider the example of the minimal plug-in in the directory
$TEXMACS_PATH/examples/plugins
It consists of the following les:
108 The TEXMACS plug-in system
minimal/Makefile
minimal/progs/init-minimal.scm
minimal/src/minimal.cpp
In order to try the plug-in, you rst have to recursively copy the directory
$TEXMACS_PATH/examples/plugins/minimal
to $TEXMACS_PATH/progs or $TEXMACS_HOME_PATH/progs. Next, running the Makefile
using
make
will compile the program minimal.cpp and create a binary
minimal/bin/minimal.bin
When relaunching TEXMACS, the plug-in should now be automatically recognized.
How it works.
The minimal plug-in demonstrates a minimal interface between TEXMACS and an extern
program; the program minimal.cpp is explained in more detail in the chapter about writing
interfaces. The initialization le init-minimal.scm essentially contains the following code:
(plugin-configure minimal
(:require (url-exists-in-path? "minimal.bin"))
(:launch "minimal.bin")
(:session "Minimal"))
The :require option checks whether minimal.bin indeed exists in the path (so this will
fail if you forgot to run the Makefile). The :launch option species how to launch the
extern program. The :session option indicates that it will be possible to create sessions
for the minimal plug-in using Insert!Session!Minimal.
(plugin-configure myplugin
configuration-options)
(:setup cmd ) This command is only executed when the version of the plug-in
changed from one execution of TEXMACS to another one. This occurs mainly when
installing new versions of TEXMACS or helper applications.
(:launch shell-cmd ) This option species that the plug-in is able to evaluate
expressions over a pipe, using a helper application which is launched using the shell-
command shell-cmd.
(:session menu-name ) This option indicates that the plug-in supports an eval-
uator for interactive shell sessions. An item menu-item will be inserted to the
Insert!Session menu in order to launch such sessions.
(:tab-completion #t) This command indicates that the plug-in supports tab-com-
pletion.
(:test-input-done #t) This command indicates that the plug-in provides a rou-
tine for testing whether the input is complete.
It should be noticed that the conguration of the plug-in myplugin automatically creates
a few predicates:
All TEXMACS documents or document fragments can be thought of as trees. For instance,
the tree
with
x + y + frac + sqrt
1 2 y+z
1 p
x+y+ + y+z (14.1)
2
Lengths. Floating point numbers followed by a length unit, like 29.7cm or 2fn.
111
112 The TEXMACS format
Whereas TEXMACS document fragments can be general TEXMACS trees, TEXMACS documents
are trees of a special form which we will describe now. The root of a TEXMACS document is
necessarily a document tag. The children of this tag are necessarily of one of the following
forms:
hTeXmacsjversioni (TEXMACS version)
This mandatory tag species the version of TEXMACS which was used to save the doc-
ument.
hstylejversioni
hstylejhtuplejstylejpack-1 jjpack-nii (style and packages)
An optional style and additional packages for the document.
hreferencesjtablei (references)
An optional list of all valid references to labels in the document. Even though this
information can be automatically recovered by the typesetter, this recovery requires
several passes. In order to make the behaviour of the editor more natural when loading
les, references are therefore stored along with the document.
14.3 Default serialization 113
The table is of a similar form as above. In this case a tuple is associated to each label.
This tuple is either of the form htuplejcontent jpage-nr i or htuplejcontent jpage-nr jlei.
The content corresponds to the displayed text when referring to the label, page-nr to
the corresponding page number, and the optional le to the le where the label was
dened (this is only used when the le is part of a project).
hauxiliaryjtablei (auxiliary data attached to the le)
This optional tag species all auxiliary data attached to the document. Usually, such
auxiliary data can be recomputed automatically from the document, but such recompu-
tations may be expensive and even require tools which are not necessarily installed on
your system. The table, which is specied in a similar way as above, associates auxiliary
content to a key. Standard keys include bib, toc, idx, gly, etc.
Example 14.1. An article with the simple text hello world! is represented as
document
hello world!
<with|mode|math|x+y+<frac|1|2>+<sqrt|y+z>>
On the other hand, TEXMACS syntax makes style les dicult to read and is not designed
to be hand-edited: whitespace has complex semantics and some internal structures are not
obviously presented. Do not edit documents (and especially style les) in the TEXMACS
syntax unless you know what you are doing.
Main serialization principle.
The TEXMACS format uses the special characters <, |, >, \ and / in order to serialize trees.
By default, a tree like
f (14.2)
x1 xn
is serialized as
<f|x1|...|xn>
If one of the arguments x1; :::; xn is a multi-paragraph tree (which means in this context
that it contains a document tag or a collection tag), then an alternative long form is used
for the serialization. If f takes only multi-paragraph arguments, then the tree would be
serialized as
114 The TEXMACS format
<\f>
x1
<|f>
...
<|f>
xn
</f>
In general, arguments which are not multi-paragraph are serialized using the short form.
For instance, if n=5 and x3 and x5 are multi-paragraph, but not x1, x2 and x4, then (14.2)
is serialized as
<\f|x1|x2>
x3
<|f|x4>
x5
</f>
The escape sequences \<less\>, \|, \<gtr\> and \ may be used to represent the characters
<, |, > and \. For instance, + is serialized as \<alpha\>+\<beta\>.
Formatting and whitespace.
The document and concat primitives are serialized in a special way. The concat primitive is
serialized as usual concatenation. For instance, the text an important note is serialized as
an <em|important> note
Notice that whitespace at the beginning and end of paragraphs is ignored. Inside para-
graphs, any amount of whitespace is considered as a single space. Similarly, more than two
newline characters are equivalent to two newline characters. For instance, the quotation
might have been stored on disk as
<\quote-env>
Ik ben de blauwbilgorgel.
The space character may be explicitly represented through the escape sequence \ . Empty
paragraphs are represented using the escape sequence \;.
14.4 XML serialization 115
Raw data.
The raw-data primitive is used inside TEXMACS for the representation of binary data, like
image les included into the document. Such binary data is serialized as
<#binary-data >
<sqrt>y+z</sqrt>
1
whereas the fraction 2
is represented as
<frac>
<tm-arg>1</tm-arg>
<tm-arg>2</tm-arg>
</frac>
In the above example, the whitespace is ignored. Whitespace may be preserved by setting
the standard xml:space attribute to preserve.
Special tags.
Some tags are represented in a special way in XML. The concat tag is simply represented
1 p
by a textual concatenation. For instance, 2 + x + y is represented as
The document tag is not explicitly exported. Instead, each paragraph argument is enclosed
within a tm-par tag. For instance, the quotation
Ik ben de blauwbilgorgel.
Als ik niet wok of worgel,
is represented as
<quote-env>
<tm-par>
Ik ben de blauwbilgorgel.
</tm-par>
<tm-par>
Als ik niet wok of worgel,
</tm-par>
</quote-env>
A with tag with only string attributes and values is represented using the standard XML
attribute notation. For instance, some blue text would be represented as
Conversely, TEXMACS provides the attr primitive in order to represent attributes of XML
tags. For instance, the XML fragment
would be imported as some hmy-tag j hattr j beast j hearyi j speciali text. This will make it
possible, in principle, to use TEXMACS as an editor of general XML les.
(with "mode" "math" (concat "x+y+" (frac "1" "2") "+" (sqrt "y+z")))
The Scheme representation may also be useful in order to represent complex macros with
a lot of programatic content. Finally, Scheme is the safest format when incorporating
TEXMACS snippets into emails. Indeed, both the standard TEXMACS format and the XML
serialization may be quite sensitive to white-space.
In order to save or load a document in Scheme format, you may use File!Export!Scheme
resp. File!Import!Scheme. Files saved in Scheme format can easily be processed by
external Scheme programs, in the same way as les saved in XML format can easily be
processed by tools for processing XML, like XSLT.
In order to copy a document fragment to an email in Scheme format, you may use Edit!
Copy to!Scheme. Similarly, you may paste external Scheme fragments into TEXMACS using
Edit!Paste from!Scheme. The Scheme format may also used interactively inside Scheme
sessions or interactive commands. For instance, typing ⌘X followed by the interactive
command
14.6 The typesetting process 117
is a shortcut in order to produce sequences like a1; :::; an. When macros perform simple
rewritings like in this example, the children var , from and to of the seq tag remain accessible
from within the editor. In other words, you can position the cursor inside them and modify
them. User dened macros also have a synthetic or computational aspect. For instance,
the dots of a seq tag as above cannot be edited by the user. Similarly, the macro
serves an exclusively computational purpose. As a general rule, synthetic macros are some-
times easier to write, but the more accessibility is preserved, the more natural it becomes
for the user to edit the markup.
It should be noticed that TEXMACS also produces some auxiliary data as a byproduct of
the typesetting product. For instance, the correct values of references and page numbers,
as well as tables of contents, indexes, etc. are determined during the typesetting stage and
memorized at a special place. Even though auxiliary data may be determined automatically
from the document, it may be expensive to do so (one typically has to retypeset the
document). When the auxiliary data are computed by an external plug-in, then it may
even be impossible to perform the recomputations on certain systems. For these reasons,
auxiliary data are carefully memorized and stored on disk when you save your work.
118 The TEXMACS format
The above information is used (among others) for the following applications:
Automatic insertion of document or table tags when creating block or tabular envi-
ronments.
hassignjhijhmacrojnamejHello name!ii
A simple TEXMACS length is a number followed by a length unit, like 1cm or 1.5mm. TEXMACS
supports three main types of units:
User dened units. Any nullary macro, whose name contains only lower case roman
letters followed by -length, and which returns a length, can be used as a unit itself.
For instance, the following macro denes the dm length:
hassignjdm-lengthjhmacroj10cmii
120 The TEXMACS format
c m . One centimeter.
m m . One millimeter.
i n . One inch.
f s . The font size. When using a 12pt font, 1fs corresponds to 12pt.
f b s . The base font size. Typically, when selecting 10 as the font size for your document
and when typing large text, the base font size is 10pt and the font size 12pt.
l n . The width of a nicely looking fraction bar for the current font.
s e p . A typical separation between text and graphics for the current font, so as to keep
the text readable. For instance, the numerator in a fraction is shifted up by 1sep.
y f r a c . The height of the fraction bar for the current font (approximately 0.5ex).
f n . This is a stretchable variant of 1quad. The default length of 1fn is 1quad. When
stretched, 1fn may be reduced to 0.5fn and extended to 1.5fn.
b l s . The base line skip is the sum of 1quad and par-sep. It corresponds to the
distance between successive lines of normal text.
14.8 TEXMACS lengths 121
Typically, the baselines of successive lines are separated by a distance of 1fn (in
TEXMACS and LATEX a slightly larger space is used though so as to allow for sub-
scripts and superscripts and avoid a too densely looking text. When stretched, 1fn
may be reduced to 0.5fn and extended to 1.5fn.
s p c . The (stretchable) width of space character in the current font.
x s p c . The additional (stretchable) width of a space character after a period.
Box lengths.
Box length units can only be used within some special markup elements, such as move, shift,
resize, clipped and image. The principal body of this content (e.g. the content being moved
in the case of move) is typeset as a box. The following lengths units then correspond to
the size and the extents of the box.
w . The width of the box.
h . The height of the box.
l . The logical left x-coordinate of the box.
r . The logical right x-coordinate of the box.
b . The logical bottom y-coordinate of the box.
t . The logical top y-coordinate of the box.
For instance, the code
hmovejHello therejjhplusj-0.5bj-0.5tii
1. A weirdly
4. numbered list...
henumeratej
hitemiA weirdly
hassignjitem-nr j3ihiteminumbered list...i
The typesetting language uses dynamic scoping of variables. That means that macros can
access and modify variables in their calling context. In the previous example, the enumerate
macro locally initializes item-nr to 0 (uses with) and the item macro increments it by one
and shows its value. Since enumerate locally redenes item-nr , the original value of item-
nr is restored on exit.
Each document comes with an initial environment with the initial values of environment
values, i.e. their values just before we typeset the document. If an environment variable
does not occur in the initial environment, then its initial value defaults to its value after
typesetting the document style and possible additional packages. The initial environment
before typesetting the style les and packages is built-in into the editor.
Some variables, like header and footer variables, must be set inside the document, their
initial environment value is ignored. Generally, they should be set by header and sectioning
markup.
123
124 Built-in environment variables
Some other environment variables (mainly the language and the font) also depend on
the current mode (in this context, the source mode always behaves in a similar way as
the text mode). During copy&paste and search&replace operations, TEXMACS tries to
preserve the mode.
language := english
math-language := texmath
prog-language := scheme (language)
A second major environment variable is the current language. In fact, there are three
such environment variables: one for each mode. The language in which content is
written is responsible for associating a precise semantics to the content. This semantics
is used for dierent purposes:
The language may specify rules for typesetting content. For instance, the text
language species punctuation and hyphenation rules. Similarly the mathemat-
ical language containns spacing information for mathematical operators.
The language controls (among other parameters like the mode and the document
format) the way content is being converted from one context to another.
Currently, no real language-dependent conversions have been implemented yet.
But in the future one may imagine that copying a piece of English text to a
document written in French will perform an automatic translation. Similarly, a
mathematical document might be converted from inx to postx notation.
At the moment, the current language is mainly used as a hint for indicating the seman-
tics of text: it is not required that a text written in English contains no spelling errors,
or that a formula written in a mathematical language is mathematically or even syn-
tactically correct. Nevertheless, the editor is intended to enforce correctness more and
more, especially for mathematics.
15.1 General environment variables 125
The language may be specied globally for the whole document in Document!Language
and locally for a piece of text in Format!Language.
magnication := 1 (magnication)
This variable determines the magnication which is applied to all content. Magni-
cations bigger than one are typically useful for presentations (from slides or from a
laptop):
The magnication should not be confused with the font size: contrary to the magni-
cation, the font size may also aect the shapes of the glyphs. The magnication is
usually specied for the entire document in Document!Magnication.
In this section, we describe the environment variables which control the rendering of fonts.
Font properties may be controlled globally for the whole document in Document!Font and
locally for document fragments in Format!Font.
From an abstract point of view, a font is dened to be a graphically consistent
P way of
rendering strings. Fonts are usually made up from glyphs like x, , , , etc. When
rendering a string, the string is decomposed into glyphs so as to take into account ligatures
(like , , , , ). Next, the individual glyphs are positioned while taking into account
kerning information (in xo the o character is slightly shifted to the left so as to take
prot out of the hole in the x). In the case of mathematical fonts, TEXMACS also provides
a coherent rendering for resizable characters, like the large brackets in
¡
(()) :
Similarly, a font family is a family of fonts with dierent characteristics (like font weight,
slant, etc.), but with a globally consistent rendering. One also says that the fonts in a font
family mix well together. For instance, the standard computer modern roman font and
its bold and italic variants mix well together, but the computer modern roman font and
the Avant Garde font do not.
Remark 15.1. In versions of TEXMACS prior to 1.99.1, the fonts for the mathematical
and programming modes could be controlled independently using the environment vari-
ables math-font, math-font-family, math-font-series, math-font-shape, prog-font, prog-font-
family, prog-font-series, prog-font-shape. In more recent versions of TEXMACS, the environ-
ment variables font, font-family, font-series and font-shape directly control the font for
all modes.
Roman: a2 + b2 = c 2
Adobe: a 2 + b 2 = c 2
New roman: a2 + b2 = c2
+ =
Concrete: a2 b2 c2
Most fonts only implement a subset of all Unicode glyphs. Sometimes, the user might
wish to combine several fonts to cover a larger subset. For instance, when specifying
roman,IPAMincho or cjk=IPAMincho,roman as the font name, ordinary text and math-
ematics will be typeset using the default roman font, whereas Chinese text will use
the IPAMincho font. Similarly, when specifying math=Stix,roman as the font name,
ordinary text will be typeset using the default roman font, but mathematical formulas
using the Stix font.
15.2 Specifying the current font 127
medium, bold
upright, slanted, italic, left slanted, Small Capitals, proportional typewriter, bold
condensed, at sans serif, long
From apmathematical point of view, the multipliers are in a geometric progression with
factor 4 2 . Notice that the font size is also aected by the index level.
128 Built-in environment variables
remain readable. The index level may be manually changed in Format!Index level, so
as to produce formulas like
z
xy
xhrsupjhwithjmath-level j0jyhrsupjziii
n 1 1
= + +
H(1; :::; n) 1 n
n 1
are usually typeset in display style, contrary to inline formulas like H(1; :::; n)
= + +
1
1
n
.As you notice, formulas in display style are rendered using a wider spacing. The
display style is disabled in several mathematical constructs such as scripts, fractions,
binomial coecients, and so on. As a result, the double numerators in the formula
n
H(1; :::; n) = 1 1
1
+ +
n
are typeset in a smaller font. You may override the default settings using Format!
Display style.
15.4 Paragraph layout 129
In this example, the grouping is necessary in order to let the dierent vertical positions
take eect on each a2i . Indeed, the vertical position is uniform for each horizontal
concatenation.
par-left := 0cm
par-right := 0cm (left and right margins)
These environment variables specify absolute left and right margins for the paragraph,
with respect to the default left and right margins (which are determined as a function
of the page layout). For instance:
Environments like itemize and quote-env which maybe nested usually compute new
margins as a function of the old values by adding or subtracting some space:
15.4 Paragraph layout 131
hassignjquote-envj
hmacrojbodyj
hsurroundj
hvspace*j0.5fnij
hright-ushihvspacej0.5fnij
hwithjpar-left jhplusjpar-left j3fnijpar-right jhplusjpar-right j3fnijpar-rst j0fnj
par-par-sepj0.25fnjbodyiiii
A double interline space corresponds to par-sep := 1fn. Double interline spaces are
often used by lazy people who want to pretend that they have written many pages.
They generally do not care about tropical rain forests.
In the case when two successive lines use dierent base line skips, then the maximal
value is used in order to compute the ideal distance between their baselines. This allows
for a reasonable spacing when the font size is changed from one paragraph to another:
Normal text.
Some very large text.
And back to normal.
As soon as the horizontal distance between two large boxes is less than par-hor-sep,
then they are considered to be in collision. In that case, the vertical distance between
them must be at least par-ver-sep. Also, the amount of showing never exceeds 1ex.
When using an interline space of 1.5 or 2, the default value of par-ver-sep allows the
user to type larger formulas in the text while preserving a uniform layout. When using a
small par-sep and a large par-ver-sep, the distance between two successive lines remains
small, except when their contents are horizontally close. This may for instance be used
to reduce the space between a short like followed by a centered equation.
par-fnote-sep := 0.2fn (minimal space between dierent footnotes)
This parameter controls the amount of vertical space between successive footnotes.
par-columns := 1 (number of columns)
This environment variable species the number of columns into which the text is being
typeset. Dierent numbers of columns may be used successively in the same document.
par-columns-sep := 2fn (distance between columns)
This environment variable species the amount of horizontal whitespace which sepa-
rates dierent columns in multi-column mode.
hassignjpage-the-pagejhmacrojhplusjpage-nr j122iii
p a p e r . Page breaks are visually indicated on the screen. This mode is useful
for ajusting the nal version of a document before printing or sending it to
a publisher. However, the use of this mode slows down the editor since every
modication in the document triggers the page-breaking algorithm.
Notice also that the mere selection of this mode does not imply the screen
margins and page decorations to be as on paper. In order to previsualize a
document in a fully realistic way, you should also set Document!Page!Screen
margins!Show header and footer and Document!Page!Screen margins!Margins
as on paper.
page-screen-left := 5mm
page-screen-right := 5mm
page-screen-top := 15mm
page-screen-bot := 15mm (left margin on screen)
When page-screen-margin is true, then these environment variables determine the
margins which are to be used for rendering on the screen.
The parameters for page margins are represented schematically at the left hand side in
gure 15.1. One may either specify the paragraph width as a function of the left and right
margins, or vice versa. The left and right margins may depend on whether the page number
is odd or even.
page-width-margin := false
page-height-margin := false (compute margins from main text dimensions?)
When page-width-margin is set to false, then the paragraph width par-width is deter-
mined automatically from the page size and the left and right margins. When set to
true, the left and right margins are determined as a function of the page size, the para-
graph width, page-odd-shift and page-even-shift. For compatability with TEX/LATEX, it
is also possible to set page-width-margin to tex, in which case the horizontal margins are
determined from page-odd, page-even and par-width. The page-height-margin variable
plays a similar role for the vertical margins.
page-width := auto
page-height := auto (page width)
By default, the width and height of a page are automatically determined from the page
type. When page-type is set to user, then the user may manually specify the page size
using page-width and page-height.
page-odd := auto
page-even := auto (left margin)
If page-width-margin is set to false, then page-odd and page-even specify the left
margins for odd and even pages. If page-width-margin is true, then these values are
computed as a function of the page size, the paragraph width, page-odd-shift and page-
even-shift. When page-odd and page-even are set to auto, then a nice default left
margin is determined as a function of the specied page type.
page-right+page-even¡page-odd
If page-width-margin is true or when page-right is set to auto, then the right margin
is determined in a similar way as the left margin.
page-odd-shift := 0mm
page-even-shift := 0mm (margin shifts)
If page-width-margin is set to true, then the left margins for odd and even pages
are determined from the page size, paragraph width and the margin shifts using the
formulas
page-width¡par-width
page-even = + page-odd-shift
2
page-width¡par-width
page-odd = + page-even-shift
2
The right margin is always taken to be such that the paragraph width and the left and
right margins sum up to the page width.
136 Built-in environment variables
h
w
r m
l
w l
d
Figure 15.1. Schematic representation of the layout of pages. On the left hand
side, the parameters l, r, t and b respectively correspond to the left, right, top and
bottom margins, and w corresponds to the paragraph width. On the right hand
side, h, f , d and m correspond to the header, footer, footnote and marginal note
separations, w to the width of marginal notes, and l to the length of the footnote
bar.
Page decorations.
page-odd-header :=
page-odd-footer :=
page-even-header :=
page-even-footer := (header for odd pages)
These environment variables contain the header and footer texts for odd and even pages.
page-head-sep := 8mm
page-foot-sep := 8mm (separation between headers/fotters and text)
These parameters determine the space between the main text and page headers and
footers. They correspond to the h and f distances at the right hand side of gure 15.1.
The environment variables for tables can be subdivided in variables (prexed by table-)
which apply to the whole table and those (prexed by cell-) which apply to individual cells.
Whereas usual environment variables are set with assign and with, the tabular environment
variables are rather set with the tformat primitive. This makes it possible to apply certain
settings to any rectangular subtable of the entire table and in particular to rows or columns.
For more details, see the documentation of the twith and cwith primitives.
table-hmode :=
table-vmode := (determination of table dimensions)
These parameters specify how to determine the dimensions of the table. At the moment,
the values of table-hmode and table-vmode are actually ignored and table-width and
table-height are interpreted as the minimal width and height of the table.
table-halign := l
table-valign := f (alignment inside text)
These parameters determine how the table should be aligned in the surrounding text.
Possible values for table-halign are l (left), c (center) and r (right), and possible
values for table-valign are t (top), f (centered at fraction bar height), c (center) and
b (bottom).
In addition to the above values, the alignment can take place with respect to the
baselines of particular cells. Such values for table-halign are L (align w.r.t. the left
column), C (align w.r.t. the middle column), R (align w.r.t. the right column) and O
(align w.r.t. the priviledged origin column table-col-origin). Similarly, table-halign may
take the additional values T (align w.r.t. the top row), C (align w.r.t. the middle row),
B (align w.r.t. the bottom row) and O (align w.r.t. the priviledged origin row table-row-
origin).
table-row-origin := 0
table-col-origin := 0 (priviledged cell)
Table coordinates of an priviledged origin cell which may be used for aligning the
table in the surrounding text (see above).
table-lsep := 0fn
table-rsep := 0fn
table-bsep := 0fn
table-tsep := 0fn (padding around table)
Padding around the table (in addition to the padding of individual cells).
table-lborder := 0ln
table-rborder := 0ln
table-bborder := 0ln
138 Built-in environment variables
table-min-rows :=
table-min-cols :=
table-max-rows :=
table-max-cols := (constraints on the table's size)
It is possible to specify a minimal and maximal numbers of rows or columns for the
table. Such settings constraint the behaviour of the editor for operations which may
modify the size of the table (like the insertion and deletion of rows and columns). This
is particularly useful for tabular macros. For instance, table-min-columns and table-
max-columns are both set to 3 for the eqnarray* environment.
cell-width :=
cell-height := (hint for cell dimensions)
Hints for the width and the height of the cell. The real width and height also depend
on the modes cell-hmode and cell-vmode, possible lling (see cell-hpart and cell-vpart
below), and, of course, on the dimensions of other cells in the same row or column.
cell-hpart :=
cell-vpart := (ll part of unused space)
When the sum s of the widths of all columns in a table is smaller than the width w
of the table itself, then it should be specied what should be done with the unused
space. The cell-hpart parameter species a part in the unusued space which will be
taken by a particular cell. The horizontal part taken by a column is the maximum of
the horizontal parts of its composing cells. Now let pi the so determined part for each
column (i 2 f1; :::; ng). Then the extra horizontal space which will be distributed to
this column is pi (w ¡ s)/(p1 + + pn). A similar computation determines the extra
vertical space which is distributed to each row.
cell-hmode := exact
cell-vmode := exact (determination of cell dimensions)
These parameters specify how to determine the width and the height of the cell. If cell-
hmode is exact, then the width is given by cell-width. If cell-hmode is min or max, then
the width is the minimul resp. maximum of cell-width and the width of the content.
The height is determined similarly.
15.6 Table layout 139
cell-halign := l
cell-valign := B (cell alignment)
These parameters determine the horizontal and vertical alignment of the cell. Possible
values of cell-halign are l (left), c (center), r (right), . (decimal dot), , (decimal
comma) and R (vertical baseline). Possible values of cell-valign are t (top), c (center),
b (bottom) and B (baseline).
cell-lsep := 0fn
cell-rsep := 0fn
cell-bsep := 0fn
cell-tsep := 0fn (cell padding)
The amount of padding around the cell (at the left, right, bottom and top).
cell-lborder := 0ln
cell-rborder := 0ln
cell-bborder := 0ln
cell-tborder := 0ln (cell borders)
The borders of the cell (at the left, right, bottom and top). The displayed border
between cells Ti;j and Ti;j+1 at positions (i; j) and (i; j + 1) is the maximum of the
borders between the right border of Ti;j and the left border of Ti;j+1. Similarly, the
displayed border between cells Ti;j and Ti+1;j is the maximum of the bottom border of
Ti;j and the top border of Ti+1;j .
cell-vcorrect := a (vertical correction of text)
As described above, the dimensions and the alignment of a cell may depend on the
dimensions of its content. When cells contain text boxes, the vertical bounding boxes
of such text may vary as a function of the text (the letter k resp. y ascends resp.
descends further than x). Such dierences sometimes leads to unwanted, non-uniform
results. The vertical cell correction allows for a more uniform treatment of text of the
same font, by descending and/or ascending the bounding boxes to a level which only
depends on the font. Possible values for cell-vcorrect are n (no vertical correction),
b (vertical correction of the bottom), t (vertical correction of the top), a (vertical
correction of bottom and the top).
cell-hyphen := n (allow for hyphenation inside cells)
By default, the cells contain inline content which is not hyphenated. By selecting
Table!Special cell properties!Hyphenation!Multi-paragraph, the cell contents becomes
multi-paragraph. In that case, cell-hyphen determines how this content is hyphenated.
Possible values are n (disable line breaking) and b, c and t (enable line breaking and
align at the bottom, center resp. top line).
cell-row-span := 1
cell-col-span := 1 (span of a cell)
Certain cells in a table are allowed to span over other cells at their right or below them.
The cell-row-span and cell-col-span specify the row span and column span of the cell.
cell-decoration := (decorating table for cell)
This environment variable may contain a decorating table for the cell. Such a decoration
enlarges the table with extra columns and cells. The tmarker primitive determines the
location of the original decorated cell and its surroundings in the enlarged table are
lled up with the decorations. Cell decorations are not really used at present and may
disappear in future versions of TEXMACS.
140 Built-in environment variables
In this chapter, we describe those built-in TEXMACS primitives which are intended to be
used in normal documents. The additional primitives which are used for writing style les
are described in a separate chapter.
A simple document.
Made of several paragraphs. The second paragraph is very long, so that it is hyphen-
ated across several line.
hdocumentj
A simple document.j
Made of several paragraphs. The second paragraph is very long, so that it is
hyphenated across several line.i
From the visual point of view, dierent paragraphs are often separated by some ver-
tical whitespace. Alternatively, new paragraphs are indicated through the use of an
additional indentation. The root of a TEXMACS document is usually a document node.
The document tag is also used for marking multi-paragraph content inside other tags,
such lists or theorem-like environments. Environments which require the use of a doc-
ument tag for at least one argument are called block environments.
141
142 Built-in TEXMACS primitives
The concat operator is essential to put compound structures in trees taking multiple
parameters. For example, let us place the previous fragment in a multi-paragraph
context:
Multiple paragraphs.
Some emphasized text.
In this example, we need the concat tag in order to indicate that Some emphasized
text. corresponds to a single paragraph:
hdocumentj
A simple document.j
hconcatjSome jhemjemphasizedij text.ii
Notice that block tags like document may contain inline tags such as concat as its
children, but not vice versa. In order to typeset line content before or after block
content, one has to use the surround tag below.
hsurroundj jj
htheoremj
Given P 2 TfF g and f < g 2 T with P (f ) P (g) < 0, there exists an h 2 T with
P (h) = 0.ii
produces
Theorem 16.1. Given P 2 TfF g and f < g 2 T with P (f ) P (g) < 0, there exists
an h 2 T with P (h) = 0.
In general, the surround is mainly used in style les, but it occasionally turns out to be
useful in regular documents as well.
hvspace*jleni
hvspace*jlenjminjmax i (vertical space before)
This primitive is similar to vspace, except that the vertical space is inserted before the
current paragraph. The actual vertical space between two consecutive paragraphs is the
maximum, not the sum, of the vertical spaces specied by the the vspace and vspace*
tags in the surrounding paragraphs.
hspacejleni
hspacejlenjbotjtopi (rigid horizontal space)
This primitive inserts an empty box whose width is len, and whose bottom and top
sides are at distances bot and top from the baseline.
If bot and top are not specied, then an empty box is inserted whose bottom is on the
baseline and whose height is the same as the lowercase letter x in the current font.
Notice that operands are not evaluated, so they must be literal strings.
hhspacejleni
hhspacejlenjminjmax i (stretchable horizontal space)
This primitive inserts a stretchable horizontal space of nominal width len, which must
be a length value. The min and max arguments specify bounds to horizontal stretching
for line breaking and lling. If min and max are not specied, then they are determined
implicitly from the length unit of len.
Notice that operands are not evaluated, so they must be literal strings.
hhtabjmini
hhtabjminjweighti (horizontal spring)
Springs are horizontal spaces which extend so the containing paragraph takes all the
available horizontal space. When a paragraph is line wrapped, split in several visual
lines, only springs in the last line are extended.
A spring has a minimal width and a weight. If the weight is 0, the spring is weak,
otherwise it is strong. If a line contains mixed weak and strong springs, only the strong
springs extend.
The fraction of the available horizontal space taken up by each strong spring is propor-
tional to its weight. If there are only weak springs, they share the available space evenly.
hhtabjmini inserts a strong spring of minimal width min and of weight unity. The
min operand must be a length value.
144 Built-in TEXMACS primitives
A simple document is a sequence of logical paragraphs, one for each subtree of a document
or paragraph node. Paragraphs whose width exceed the available horizontal space are broken
into physical lines by the hyphenation algorithm. By default, hyphenated lines are justied:
horizontal spaces can be shrunk or extended in order to produce a good-looking layout.
hnew-linei (start a new paragraph)
This is a deprecated tag in order to split a logical paragraph into several logical para-
graphs without creating explicit subtrees for all paragraphs.
We recall that logical paragraphs are important structures for the typesetting process.
Many primitives and environment variables (vertical spacing, paragraph style, inden-
tation, page breaking, etc.) operate on whole paragraphs or at the boundaries of the
enclosing paragraph.
typically produces
This is a long paragraph which demonstrates the disabling indentation using the no-
indent primitive.
This is a long paragraph which demonstrates enabling indentation using the yes-
indent primitive.
hno-indent*i
hyes-indent*i
Disable or enable indentation for the next paragraph. For instance,
A rst paragraph.hyes-indent*i
A second paragraph.
typically produces
A rst paragraph.
A second paragraph.
Notice that no-indent and yes-indent override no-indent* and yes-indent* directives in the
previous paragraph.
Currently, the no-indent* and yes-indent* tags are mainly used in order to control the
indentation after section titles or environments like equation which usually correspond
to paragraph units. In the future, when sectional tags will take the section bodies as
arguments, and when the paragraph tag will be correctly implemented, the no-indent*
and yes-indent* will become deprecated.
When several new page and page break directives apply to the same point in the
document, only the rst one is eective. Any new-page or page-break after the rst one in a
line is ignored. Any new-page or page-break in a line overrides any new-page* or page-break*
in the following line. Any new-page* or page-break* after the rst one in a line is ignored.
(hresizejHopsajhminusj1lj5mmijjhplusj1rj5mmiji)
( Hopsa )
hdatomsjfoojcontenti
hdlinesjfoojcontenti
hdpagesjfoojcontenti (decorations)
These primitives are used to decorate a posteriori the lines of a paragraph, the lines of
a page, or the pages of a document. Currently, only decorations of atoms on lines of a
paragraph have been implemented.
The rst argument foo is a macro which will be applied to all boxes in the line and the
second argument content is the part of the paragraph to which the decoration will be
applied. For instance, the construction
hdatomsj
hmacrojx j x ij
bodyi
When used in combination with the repeat primitive, one may for instance produce the
dotted lines in tables of contents using the macro
148 Built-in TEXMACS primitives
hassignj
toc-dotsj
hmacroj
hdatomsj
hmacrojx jhrepeatjx jhspacej0.2fni.hspacej0.2fniiij
hhtabj5mmiiii
Notice that the datoms primitive is quite fragile, because the foo macro has no access
to the environment in which content is typeset.
hleftjlarge-delimiter i
hleftjlarge-delimiter jsizei
hleftjlarge-delimiter jbottomjtopi
hmidjlarge-delimiter ji
hrightjlarge-delimiter ji (large delimiters)
These primitives are used for producing large delimiters, like in the formula
1 1 1
:
a1 a2 an
Matching left and right delimiters are automatically sized so as contain the enclosed
expression. Between matching left and right delimiters, the formula may contain an
arbitrary number of middle delimiters, which are sized in a similar way. Contrary
to TEX, the depth of a large delimiter is not necessarily equal to its height, so as to
correctly render formulas like
0 1
1
f@ 1 A
x+ 1
y+ z
The user may override the automatically determined size by specifying additional length
parameters size or bottom and top. For instance,
fhleftj(j-8mmj4mmixhmidj|j8mmiyhrightj)j-4mmj8mmi
is rendered as
f x y
The size may also be a number n, in which case the n-th available size for the delimiter
is taken. For instance,
ghleftj(j0ihleftj(j1ihleftj(j2ihleftj(j3izhrightj)j3ihrightj)j2ihrightj)j1ihrightj)j0i
is rendered as
g((((z))))
16.3 Mathematical primitives 149
The size of the operator depends on whether the formula is rendered in display style
or not. Formulas in separate equations, like (16.1), are said to
P be rendered in display
style, contrary to formulas which occur in the main text, like 1 a
i=0 i z i. The user may
hbigjsumihrsubji=0ihrsupj1iahrsubjii*zhrsupjiihbigj.i
The invisible big operator hbigj.i is used to indicate the end of the scope of hbigjsumi.
hfracjnumjdeni (fractions)
x
The frac primitive is used in order to render fractions like y
.
In display style, the
numerator num and denominator den are rendered in the normal size, but display style
is turned of when typesetting num and den. When the display style is turned of, then
the arguments are rendered in script size. For instance, the content
hfracj1jahrsubj0i+hfracj1jahrsubj1i+hfracj1jahrsubj2i+iii
hsqrtjcontenti
hsqrtjcontentjni (roots)
p p
The sqrt primitive is used in order to render square roots like x or n-th roots like 3 x .
The root symbol is automatically sized so as to encapsulate the content:
r
i+j f (x)
y2 + z2
hlsubjscripti
hlsupjscripti
hrsubjscripti
hrsupjscripti (scripts)
These primitives are used in order to attach a script to the preceding box in a horizontal
concatenation (in the case of right scripts) or the next one (in the case of left scripts).
When there is no such box, then the script is attached to an empty box. Moreover,
when both a subscript and a superscript are specied on the same side, then they are
merged together. For instance, the expression
hrsubjaihrsupjbi+hlsubj1ihlsupj2ixhrsubj3ihrsupj4i=yhrsubj1i+hlsubjci
150 Built-in TEXMACS primitives
is rendered as
b 2 4
a+1x3 = y1 + c
When a right script is attached to an operator (or symbol) which accepts limits, then
it is rendered below or above instead of beside the operator:
lim an
n!1
hlprimejprime-symbolsi
hrprimejprime-symbolsi (primes)
Left and right primes are similar to left and right superscripts, except that they behave
in a dierent way when being edited. For instance, when your cursor is behind the prime
symbol in f 0 and you press backspace, then the prime is removed. If you are behind f n
and you press backspace several times, then you rst enter the superscript, next remove
n and nally remove the superscript. Notice also that prime-symbols is necessarily a
string of concatenated prime symbols. For instance, f 0y is represented by fhrprimej'yi.
hbelowjcontentjscripti
habovejcontentjscripti (scripts above and below)
The below and above tags are used to explicitly attach a script below or above a given
content. Both can be mixed in order to produce content with both a script below and
above:
1
xor xi
i=1
can be produced using
habovejhbelowjxorji=1ij1i xhrsubjii
hwidejcontentjwide-symbol i
hwide*jcontentjwide-symbol i (wide symbols)
These primitives can be used in order to produce wide accents above or below some
mathematical content. For instance x + y corresponds to the markup hwidejx+yji.
hnegjcontenti (negations)
This primitive is mainly used for producing negated symbols or expressions, such as
or a.
x y
2 y z
16.4 Table primitives 151
htreej+jxjyjhtreejj2jyjzii
In the future, we plan to provide further style parameters in order to control the
rendering.
Tables are always present in documents inside evaluable tags which take a tformat operand.
All fundamental table structures have inaccessible borders. The basic top-level table tag
is tabular.
htformatjwith-1 jjwith-njtablei (table formatting container)
Every tabular structure in a document contains a tformat tag.
htformatjtablei means the table and cell variables dened in the top-level table tag are
not modied. The table argument may be a table or a nested tformat tag, the latter
does not appear in documents but is produced by the evaluation of the top-level tag.
htformat j with-1 j j with-n j tablei is used when the table contains specic formatting
information. The with-1 to with-n arguments must all be twith or cwith tags.
hlabeljtherei
hreferencejtherei
The reference is typeset as the value of the variable the-label at the point of the target
label. The the-label variable is set by many numbered structures: sections, gures,
numbered equations, etc.
A reference reacts to mouse clicks as an hyperlink.
hpagerefjtherei
The pageref is typeset as the number of the page containing the target label. Note that
page numbers are only computed when the document is typeset with page-breaking,
that is not in automatic or papyrus page type.
A pageref reacts to mouse clicks as an hyperlink.
hhlinkjsame documentj../devel/format/regular/#therei
hhlinkjsame directoryj../devel/format/regular/file.tm#therei
hhlinkjon the webjhttp://example.org/#therei
If the document is not editable, the hyperlink is traversed by a simple click, if the
document is editable, a double-click is required.
When clicking on actions, the user is usually prompted for conrmation, so as to avoid
security problems. The user may control the desired level of security in Edit!Prefer-
ences!Security. Programmers may also declare certain Scheme routines to be secure.
Scheme programs which only use secure routines are executed without conrmation
from the user.
154 Built-in TEXMACS primitives
The current environment both denes all style parameters which aect the typesetting
process and all additional macros provided by the user and the current style. The primitives
in this section are used to access and modify environment variables.
hassignjvar jvali (variable mutation)
This primitive sets the environment variable named var (string value) to the value of the
val expression. This primitive is used to make non-scoped changes to the environment,
like dening markup or increasing counters.
This primitive aects the evaluation process through value, provides, and macro def-
initions and the typesetting process through special typesetter variables.
hassignjpage-mediumjpaperi
hassignjchapter-nr j2i
The operand must be a literal string and is interpreted as a le name. The content of
this le is typeset in place of the include tag, which must be placed in block context.
155
156 Primitives for writing style files
Macros can be used to dene new tags and to build procedural abstractions in style les.
Older versions of TEXMACS used to make a distinction between macros (all children acces-
sible) and functions (no accessible child). In modern TEXMACS there are only macros: the
accessibility of children is determined heuristically and can be controlled with drd-props.
hmacrojvar-1 jjvar-njbodyi (macro of xed arity)
This primitive returns a macro (the TEXMACS analogue of a -expression) with n argu-
ments, named after the literal strings var-1 until var-n.
New tags are dened by storing macros in the environment. Most of the time, macros
are stored without scope with assign, but it is sometimes useful to redene a tag locally
within the scope of a with. For example, itemized and enumerated environment redene
item locally.
Storing a macro in the environment denes a tag whose arity is xed to the number of
arguments taken by the macro.
The argument namespace is distinct from the environment, hargjvar i and hvaluej
var i will generally evaluate to dierent values (although you should not rely on
this).
17.2 Macro primitives 157
The value of arg retains the position of the macro argument in the document
tree, that makes it possible to edit the arguments of a macro-dened tag while
it is active.
When more than one argument is specied, hargjvar jindex-1 jjindex-ni expands to a
subtree of the argument var . The value of the named argument must be a compound
tree (not a string). The operands var until index-n must all evaluate to positive integers
and give the path to the subtree of the macro argument.
hmap-argsjfoojrootjvar i
hmap-argsjfoojrootjvar jrsti
hmap-argsjfoojrootjvar jrstjlasti (map a tag on subtrees of an argument)
This primitive evaluates to a tree whose root is labeled by root and whose children are
the result of applying the macro foo to the children of the macro argument with name
var .
By default, the macro foo is applied to all children. If rst has been specied, then
we rather start at the i-th child of var , where i is the result of evaluating rst. If last
has been specied too, then we stop at the j-th child of var (the j-th child not being
included), where j is the result of evaluating last. In this last case, the arity of the
returned tree is therefore j ¡ i.
Stated otherwise, map-args applies foo to all subtrees of the macro argument var (or a
range of subtrees if rst and last are specied) and collects the result in a tree with label
root. In addition, the second argument to foo gives its position of the rst argument
in the expansion of var .
The map-args is analogue to the Scheme function map. Since TEXMACS use labeled trees,
the label of the mapping list must also be specied.
hassignjcomma-extrajhmacrojx j, x ii
hassignjcomma-separatedj
hxmacrojargsj
hconcatj
hargjargsj0ij
hmap-argsjcomma-extrajconcatjargsj1iiii
hassignjlter j
hmacrojpredjtj
hifj
hequaljhlengthjtij0ij
htupleij
hmergej
hifj
hcompoundjpredjhlook-upjtj0iij
htuplejhlook-upjtj0iij
htupleiij
hlterjpredjhrangejtj1jhlengthjtiiiiiii
(arity, n) Sets the arity to the given xed value n (literal integer).
(accessible, all) Make it impossible to deactivate the tag with normal editor
actions. Inaccessible children become eectively uneditable.
(accessible, none) Make it impossible to position the caret within the tag when
it is active, so children can only be edited when the tag is inactive.
Remark 17.6. It should be noticed that the use of conditional markup can be a bit
tricky due to the fact that the accessibility of arguments cannot necessarily be checked
beforehand. For instance, in the macro denition
hmacrojx jhifjhvisibility-agijx ii
the macro argument x is accessible if and only if hvisibility-agi evaluates to true. This
condition cannot necessarily be checked a priori. For certain editing operations, like
searches or spell checking, the incorrect determination of the accessibility may lead
to the positioning of the cursor at unaccessible places, or to the ignorance of certain
markup. In the future, we plan to improve this aspect of the editor, but it is better to
avoid conditional markup whenever another solution can be found.
Remark 17.7. The conditional constructs are only fully implemented for inline markup.
In the case when you need conditional markup for block structures you currently have
to write macros for the if-case and the else-case and use the compound tag. For instance:
hassignjcountj
hmacrojfromjtoj
hwithjijfromj
hconcatj
hwhilejhlessjijtoiji, hassignjijhplusjij1iiij
toiiii
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
160 Primitives for writing style files
hassignjhellojhquasiquotejhmacrojnamejhunquotejhlocalizejHelloii name.iii
may be used to dene a macro hello whose value is localized for the current language.
In a French document, the declaration would typically be equivalent to
hassignjhellojhmacrojnamejBonjour name.ii
Notice however that it is usually better not to use the quasiquote primitive for such
applications. When dening
hassignjhellojhmacrojnamejhlocalizejHelloi name.ii
the typesetting of hhello j Namei would naturally adapt itself to the current language,
while the above version would always use the language at the moment of the denition
of the macro. Nevertheless, the rst form does have the advantage that the localization
of the word Hello only has to be computed once, when the macro is dened. Therefore,
the quasiquote primitive may sometimes be used in order to improve performance.
hassignjfunj
hxmacrojx j
hquasij
htreejdupjhunquote*jhquote-argjx iijhunquote*jhquote-argjx iiiiii
17.5 Functional operators 161
a b c a b c
hquasijexpr i (substitution)
This tag is a shortcut for heval jhquasiquote jexpr ii. This primitive is often used in the
TEXMACS style les in order to write macros which dene sets of other macros. For
instance, the macro
hassignjnew-theoremj
hmacrojnamejtextj
hquasij
hassignjhunquote jnameij
hmacrojbodyj
hsurroundjhno-indentihstrongjhunquotejtexti. ijhright-ushij
bodyiiiiii
hdatei
hdatejformati
hdatejformatjlanguagei (obtain the current date)
Returns the current date in a specied format (which defaults to a standard language-
specic format when empty) and a specied language (which defaults to English). The
format is similar to the one used by the Unix date command. For instance, hdatei
evaluates to June 1, 2019, hdatejjfrenchi to 1 juin 2019 and hdatej%d %B om %k:%Mj
dutchi to 01 June om 11:51.
hdivjexpr-1 jexpr-2 i
hmodjexpr-1 jexpr-2 i (division with remainder)
Compute the result of the division of an integer expr-1 by an integer expr-2 , or its
remainder. For instance, hdivj18j7i=2 and hmodj18j7i=4.
hequaljexpr-1 jexpr-2 i
hunequaljexpr-1 jexpr-2 i
hlessjexpr-1 jexpr-2 i
hlesseqjexpr-1 jexpr-2 i
hgreaterjexpr-1 jexpr-2 i
hgreatereqjexpr-1 jexpr-2 i (comparing numbers or lengths)
Return the result of the comparison between two numbers or lengths. For instance,
hlessj123j45i yields false and hlessj123mmj45cmi yields true.
hxorjexpr-1 jexpr-2 i
Returns the exclusive or of two expressions expr-1 and expr-2 , i.e. hxorjtruejtruei yields
false.
hnotjexpr i
Returns the negation of expr .
hopen-tagjnamejarg-1 jjarg-ni
hmiddle-tagjnamejarg-1 jjarg-ni
17.6 Transient markup 165
hopen-tagjtheoremi
hindentjThe weather should be nice today.i
hclose-tagjtheoremi
is rendered by default as
htheoremj
The weather should be nice today.
i
hstyle-onlyjhfoojcontentii
hstyle-only*jhfoojcontentii (content for use in style les only)
This tag may be used in order to render an inactive tags as whether we applied the
macro foo on it. When importing a style le, each style-only/style-only* tag is replaced
by its content. In the case of style-only, the modied rendering is only applied to the
root tag of the content. In the case of style-only*, the rendering is modied for the entire
content.
hsymboljsymbol i
hlatexjcmdi
hhybridjcmdi
hhybridjcmdjargi (auxiliary tags for entering special content)
These tags are used only temporarily when entering special content.
When pressing ⌃Q , a symbol tag is created. After entering the name of the symbol, or
the ASCII-code of the symbol and pressing return, the symbol tag is replaced by the
corresponding symbol (usually a string enclosed in <>).
When pressing \ , a hybrid tag is created. After entering a string and pressing return, it
is determined whether the string corresponds to a LATEX command, a macro argument,
a macro or an environment variable (in this order). If so, then the hybrid tag is replaced
by the appropriate content. When pressing \ while a selection is active, then the
selection automatically becomes the argument of the hybrid command (or the hybrid
command itself, when recognized).
166 Primitives for writing style files
The latex tag behaves similarly as the hybrid tag except that it only recognizes LATEX
commands.
The rendering macros for source trees are built-in into TEXMACS. They should not really
be considered as primitives, but they are not part of any style le either.
hindentjbodyi (indent some content)
Typeset the body using some indentation.
hsrc-macrojmacro-namei
hsrc-varjvariable-namei
hsrc-argjargument-namei
hsrc-ttjverbatim-contenti
hsrc-integerjinterger i
hsrc-lengthjlengthi
hsrc-errorjmessagei (syntactic highlighting on purpose)
These macros are used for the syntactic highlighting of source trees. They determine
how to render subtrees which correspond to macro names, variable names, argument
names, verbatim content, integers, lengths and error messages.
hsrc-titlejtitlei
hsrc-style-lejnamejversioni
hsrc-packagejnamejversioni
hsrc-package-dtdjnamejversionjdtdjdtd-versioni (style and package administration)
These macros are used for the identication of style les and packages and their corre-
sponding D.T.D.s. The src-title is a container for src-style-le, src-package, src-package-
dtd as well as src-license and src-copyright macros.
The src-style-le tag species the name and version of a style le and sets the environ-
ment variable with name-style to version. The src-package-dtd species the name and
version of a package, as well as the corresponding dtd and its version dtd-version. It
sets the environment variable name-package to version and dtd-dtd to dtd-version. The
src-package tag is a shorthand for src-package-dtd when the name of the D.T.D. coincides
with the name of the package.
hassignjinc-divj
hmacrojx jyj
hexternj
(lambda (x y) `(frac ,x (concat "1+" ,y)))j
hquote-argjx ij
hquote-argjyiiii
It has been foreseen that the accessibility of the macro arguments x and y is preserved
for this kind of denitions. However, since TEXMACS does not heuristically analyze your
Scheme code, you will have to manually set the D.R.D. properties using drd-props.
Notice also that the Scheme function scheme-foo should only rely on secure scheme
functions (and not on functions like system which may erase your hard disk). User
implemented Scheme functions in plug-ins may be dened to be secure using the
:secure option. Alternatively, the user may dene all Scheme routines to be secure
in Edit!Preferences!Security!Accept all scripts.
hagjcontentjcolor i
hagjcontentjcolor jvar i (display an informative ag)
This tag is used to in order to inform the user about information which is present in the
document, but not visible when printed out. TEXMACS displays such informative ags for
labels, formatting directives such as page breaks, and so on. In Document!Informative
ags, the user may specify how the informative ags should be rendered.
The two-argument variant displays an informative ag with a given content and color .
The content is only rendered when selecting Document!Informative ags!Detailed. For
instance, hag jwarningjredi is rendered as . The optional var argument may be used
in order to specify that the ag should only be visible if the macro argument var
corresponds to an accessible part of the document. For instance, TEXMACS automatically
generates labels for section titles (so as to include them in the table of contents), but
it is undesirable to display informative ags for such labels.
The primitives in this section are merely for internal use by TEXMACS only. They are
documented for the sake of completeness, but you should only use them if you really know
what you are doing.
huniniti (unknown content or uninitialized data)
This primitive is mainly used for default uninitialized value of environment variables;
the main advantage of this tag is to be distinct from the empty string.
hcollectionjbinding-1 jjbinding-ni
hassociatejkeyjvaluei (collections of bindings)
The collection tag is used to represent hash tables with bindings binding-1 until binding-
n. Each binding is of the form hassociatejkeyjvaluei, with a key and an associated value.
htagjcontentjannotationi
hmeaningjcontentjannotationi (associate a meaning to some content)
Associate a special meaning to some content. Currently, no real use has been made of
these tags.
hnew-dpagei
hnew-dpage*i (new double page)
Yet to be implemented primitives for starting a new double page.
17.8 Internal primitives 169
In addition to these primitives for internal use only, there are also quite a few obsolete
primitives, which are no longer being used by TEXMACS, but whose names should be avoided
when creating your own macros. The full list of obsolete primitives is: format, line-sep, with-
limits, split, old-matrix, old-table, old-mosaic, old-mosaic-item, set, reset, expand, expand*, hide-
expand, apply, begin, end, func, env, authorize.
Chapter 18
The standard TEXMACS styles
The user may select a major style from the Document!Style menu. The major style usually
reects the kind of document you want to produce (like a letter, an article or a book) or
a particular layout policy (like publishing an article in a given journal).
The user may further customize the main style, by selecting one or more additional style
packages. Some of these packages are available in the menu Document!Style!Add package.
Other style packages mainly customize specic tags, and they can be selected from the
Focus!Preferences!Style options menu group, whenever available. For instance, inside a
theorem, you may use Focus!Preferences!European numbering to enable European style
numbering for theorem-like environments (that is, theorems, propositions, lemmas, etc. are
all numbered using their own individual counters).
In this chapter, we will survey the standard document styles and packages provided by
TEXMACS. Most style les and packages have an abstract interface, the d.t.d. (data domain
denition), which species which macros are exported by the style or package, and how to
use them. Distinct styles or packages (like header-article and header-book) may share
the same abstract interface, but dier in the way macros are rendered. For this reason,
we will mainly be concerned with the description of the standard d.t.d.s, except when we
focus on the rendering. Users may customize standard styles by dening new ones which
match the same abstract interface (see the chapter on writing TEXMACS style les).
article
This style may be used for writing short scientic articles, which are subdivided into
sections. The numbering of environments like theorems, remarks, etc. is relative to the
entire document. If you use the number-long-article package, then the numbers are
prexed by the section number.
beamer
This style may be used for the creation of highly interactive laptop presentations. By
default, we use a bluish theme similar to the LATEX beamer package, but other themes
can be selected from the menus.
171
172 The standard TEXMACS styles
book
This is the basic style for writing books. Books are assumed to be subdivided into
chapters and numbers of environments are prexed by the chapter number. In general,
it is also comfortable to store each chapter in a separate le, so that they can be edited
more eciently. This issue is explained in more detail in the section about books and
multile documents.
seminar
Documents based on this style are typically printed on slides for presentations using
an overhead projector. You may also want to use it when making presentation directly
from your laptop, after selecting View!Presentation mode. Notice however, that slides
correspond to real pages, whereas you rather should use switches in presentation
mode.
source
This is the privileged style for editing style les and packages. It enables source mode,
so that documents are rendered in a way which makes the structure fully apparent. For
more details, we refer to the section on the rendering of style les.
The article style admits several variants, so as to make the layout correspond to the policy
of specic journals. Currently, we have implemented TEXMACS analogues of the common
LATEX styles amsart, acmconf, elsart, ieeeconf, aip, aps, svjour, etc. Similarly, we are
developing styles tmarticle and tmbook which provide an alternative layout for articles
and books.
In addition to variants of the article and book styles, TEXMACS provides also a few other
styles, which are based on the main styles, but which provide some additional markup.
letter
This style is based on the informal generic style, but it provides additional markup
for writing letters. The additional macros are mainly used for headers and endings of
letters.
exam
This style, which is again based on generic, provides some additional markup for
headers of exams. It also customizes the rendering of exercises.
tmdoc
This style is used for writing the TEXMACS documentation. It contains several tags for
special types of content and extensions for linking, indexing, document traversal, etc..
Some aspects of this style are still under heavy development.
number-europe
By default, TEXMACS uses American style numbering. This means that the same
counter is used for numbering similar environments like theorem and proposition. In
other words, a remark following Theorem 3 will be numbered Remark 4. If you want
each environment to have its individual counter, then you should enable European
style numbering, by selecting the number-europe package.
number-us
This package may be used in order to switch back to American style numbering in the
case when a third parties style le enforces European style numbering.
structured-list
This is an experimental package. By default, items in unnumbered lists or enumer-
ations take no arguments and items in descriptions one argument. When using the
structured-list package, they take an optional additional argument with the body
of the item.
structured-section
This is an experimental package. By default, sectional tags only take a title argument.
When using the structured-section package, they take an optional additional argu-
ment with the body of the section. Moreover, the environment rsection for recursive
sections is provided.
framed-session
This package may be used in order to obtain an alternative rendering of interactive
sessions. The rendering is designed to be nice for interactive use, although less adequate
for printing.
In addition to these packages, and the many packages for internal use, TEXMACS also
provides a few personal example style packages allouche, bpr and vdh and several style
packages for use in combination with external plug-ins (axiom, giac, macaulay2, etc.).
The std d.t.d. contains the markup which is common to virtually all styles. It is subdivided
into the following parts:
hemjcontenti
Emphasizes a region of text like in the real thing. This tag corresponds to the menu
entry Insert!Content tag!Emphasize.
174 The standard TEXMACS styles
hdfnjcontenti
For denitions like a gnu is a horny beast. This tag corresponds to Insert!Content
tag!Denition.
hsampjcontenti
A sequence of literal characters like the ae ligature æ. You can get this tag via Insert!
Content tag!Sample.
hnamejcontenti
The name of a particular thing or concept like the Linux system. This tag is obtained
using Insert!Content tag!Name.
hpersonjcontenti
The name of a person like Joris. This tag corresponds to Insert!Content tag!Person.
hcite*jcontenti
A bibliographic citation like a book or magazine. Example: Melville's Moby Dick. This
tag, which is obtained using Insert!Content tag!Cite, should not be confused with cite.
The latter tag is also used for citations, but where the argument refers to an entry in
a database with bibliographic references.
habbrjcontenti
An abbreviation. Example: I work at the C.N.R.S. An abbreviation is created using
Insert!Content tag!Abbreviation or the ⌥A keyboard shortcut.
hacronymjcontenti
An acronym is an abbreviation formed from the rst letter of each word in a name or
a phrase, such as HTML or IBM. In particular, the letters are not separated by dots.
You may enter an acronym using Insert!Content tag!Acronym.
hverbatimjcontenti
Verbatim text like output from a computer program. Example: the program said hello.
You may enter verbatim text via Insert!Content tag!Verbatim. The tag may also be
used as an environment for multi-paragraph text.
hkbdjcontenti
Text which should be entered on a keyboard. Example: please type return. This tag
corresponds to the menu entry Insert!Content tag!Keyboard.
hcode*jcontenti
Code of a computer program like in cout << 1+1; yields 2. This is entered using
Insert!Content tag!Code. For longer pieces of code, you should use the code environ-
ment.
hvarjcontenti
Variables in a computer program like in cp src-file dest-file . This tag corresponds
to the menu entry Insert!Content tag!Variable.
18.2 The common base for most styles 175
hmathjcontenti
This tag is used for mathematics inside regular text. Example: the formula sin2 x +
cos2 x = 1 is well-known.
hopjcontenti
This is a tag which can be used inside mathematics for specifying that an operator
should be considered on itself, without any arguments. Example: the operation + is a
function from R2 to R. This tag may become depreciated.
httjcontenti
This is a physical tag for typewriter phase. It is used for compatibility with HTML,
but we do not recommend its use.
Most of the following logical size tags can be found in Insert!Size tag (or Insert!Size tag):
hreally-tinyjcontenti, htinyjcontenti
hreally-smalljcontenti, hvery-smalljcontenti, hsmallerjcontenti, hsmalljcontenti
hnormal-sizejcontenti
hlargejcontenti, hlargerjcontenti, hvery-largejcontenti, hreally-largejcontenti
hhugejcontenti, hreally-hugejcontenti
These logical size tags should be used by preference when typesetting parts of your
document in a larger or smaller font. Environments like footnotes or captions of tables
may also be based on logical size tags. Document styles from professional publishers
often assign very precise font settings to each of the logical size tags. By default, the
size tags are rendered as follows:
Really tiny
Tiny
Really small
Very small
Smaller
Small
Normal size
Large
Larger
Very large
Really large
Huge
Really huge
The following are standard environments:
hverbatimjbodyi
Described above.
hcodejbodyi
Similar to code*, but for pieces of code of several lines.
176 The standard TEXMACS styles
hquote-envjbodyi
Environment for short (one paragraph) quotations.
hquotationjbodyi
Environment for long (multi-paragraph) quotations.
hversejbodyi
Environment for poetry.
hcenterjbodyi
This is a physical tag for centering one or several lines of text. It is used for compatibility
with HTML, but we do not recommend its use.
hblockjtablei
Left aligned tables with a border of standard 1ln width.
hblock*jtablei
Centered tables with a border of standard 1ln width.
The following tags are used to adjust the typesetting of content whenever necessary:
hsmashjbodyi
hsmash-topjbodyi, hsmash-bottomjbodyi (smash vertical size to the size of an 'x')
These macros can be used to adjust the vertical extents of the body to those of the
character 'x'. In the case of smash-top and smash-bottom, only the top resp. bottom are
changed.
hswelljbodyi
hswell-top j bodyi, hswell-bottom j bodyi (increase vertical size to the largest character in
font)
These macros can be used to increase the vertical extents of the body to those of the
largest character in the current font. In the case of swell-top and swell-bottom, only the
top resp. bottom are changed. This kind of adjustments may for instance be used in
order to ensure that 2 2 matrices with simple textual contents always have the same
size:
f 0 a x f 0
; versus ; a x
0 a
0 f 0 a 0 f
In fact, for a more uniform appearance, swelling is activated by default inside matrices.
hTeXmacsi
The TEXMACS logo.
hTeXmacs-versioni
The current version of TEXMACS (1.99.9).
hmade-by-TeXmacsi
A macro which may be used to indicate that your document was written using TEXMACS.
hTeXi
The TEX logo.
hLaTeXi
The LATEX logo.
hhrulei
A horizontal rule like the one you see below:
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hoverlinejcontenti
For overlined text, which can be wrapped across several lines.
hunderlinejcontenti
For underlined text, which can be wrapped across several lines.
hfoldedjsummaryjbodyi
The summary is displayed and the body ignored: the macro corresponds to the folded
presentation of a piece of content associated to a short title or abstract. The second
argument can be made visible using Insert!Switch!Unfold.
hunfoldedjsummaryjbodyi
Unfolded presentation of a piece of content body associated to a short title or abstract
summary. The second argument can be made invisible using Insert!Switch!Fold.
hswitchjcurrentjalternativesi
Content which admits a nite number of alternative representation among which the
user can switch using the function keys F9 , F10 , F11 and F12 . This may for instance
be used in interactive presentations. The argument current correspond to the currently
visible presentation and alternative to the set of alternatives.
As soon as the font support will be further improved, this d.t.d. should become obsolete.
hchoosejamongjnr i
Alternative name for binom, but depreciated.
hshrink-inlinejamongjnr i
A macro which switches to scriptsize text when you are not in display style. This macro
is mainly used by developers. For instance, the binom macro uses it.
hdetjtablei
For determinants = 13 2
4
.
hchoicejtablei
¡x; if x 6 0
For choice lists jxj = x; if x > 0
.
The standard TEXMACS lists are dened in std-list. The unnumbered lists environments
are:
hitemizejbodyi
The tag before each item depends on the nesting depth.
hitemize-minusjbodyi
Uses ¡ for the tag.
hitemize-dotjbodyi
Uses for the tag.
hitemize-arrowjbodyi
Uses ! for the tag.
henumerate-numericjbodyi
Number the items by 1, 2, 3, etc.
henumerate-romanjbodyi
Number the items by i, ii, iii, etc.
henumerate-Romanjbodyi
Number the items by I, II, III, etc.
henumerate-alphajbodyi
Number the items by a), b), c), etc.
henumerate-Alphajbodyi
Number the items by A), B), C), etc.
hdescription-compactjbodyi
Align the left hand sides of the items in the list and put their descriptions shortly behind
it.
hdescription-dashjbodyi
Similar to description-compact, but use a to separate each item from its description.
hdescription-alignjbodyi
Align the left hand sides of the descriptions, while aligning the items to the right.
hdescription-longjbodyi
Put the items and their descriptions on distinct lines.
New items in a list are indicated through the item tag or the item* tag in the case of
descriptions. The item tag takes no arguments and the item* tag one argument. When
using the experimental structured-list package, these tags may take an optional body
argument. In the future, all list items should become structured.
By default, items in sublists are numbered in the same way as usual lists. Each list envi-
ronment list admits a variant list* whose items are prexed by the last item in the parent
list. Of course, this feature can be used recursively.
The std-list provides the following redenable macros for customizing the rendering of
lists and items in lists:
hrender-listjbodyi
This block environment is used to render the body of the list. Usually, the macro indents
the body and puts some vertical space around it.
180 The standard TEXMACS styles
haligned-itemjitem-texti
This inline macro is used to render the item-text in a right-aligned way. As a conse-
quence, text after such items will appear in a left-aligned way.
hcompact-itemjitem-texti
This inline macro is used to render the item-text in a left-aligned way. As a consequence,
text after such items may be indented by the width of the item-text (except when the
text is rendered on a dierent paragraph).
18.2.5.1. Bibliographies
The following macros may be used in the main text for citations to entries in a bibliographic
database.
hcitejref-1 jjref-ni
Each argument ref-i is a citation corresponding to an item in a BiB-TEX le. The
citations are displayed in the same way as they are referenced in the bibliography and
they also provide hyperlinks to the corresponding references. The citations are displayed
as question marks if you did not generate the bibliography. Once you've added a
bibliography le, pressing ⇥ inside the arguments will auto-complete with the cite-keys
in your le.
hnocitejref-1 jjref-ni
Similar as cite, but the citations are not displayed in the main text.
hcite-detailjref jinfoi
A bibliographic reference ref like cite and nocite, but with some additional information
info, like a chapter or a page number.
The following macros may be redened if you want to customize the rendering of citations
or entries in the generated bibliography:
hrender-citejref i
Macro for rendering a citation ref at the place where the citation is made using cite.
The content may be a single reference, like TM98, or a list of references, like Euler1,
Gauss2.
hrender-cite-detailjref jinfoi
Similar to render-cite, but for detailed citations made with cite-detail.
hrender-bibitemjcontenti
18.2 The common base for most styles 181
htransform-bibitemjcontenti
At the moment, bibliographies are generated by BibTEX and imported into TEXMACS.
The produced bibliography is a list of bibliographic items with are based on special
LATEX-specic macros (bibitem, block, protect, etc.). These macros are all dened inter-
nally in TEXMACS and eventually boil down to calls of the render-bibitem, which behaves
in a similar way as item*, and which may be redened by the user.
The transform-bibitem is used to decorate the content. For instance, transform-bibitem
may put angular brackets and a space around content.
hbib-listjlargestjbodyi
The individual bibitems are enclosed in a bib-list, which behaves in a similar way as
the description environment, except that we provide an extra parameter largest which
contains a good indication about the largest width of an item in the list.
The following macros may be used in the main text for adding entries to the table of
contents. They are automatically called by most sectional macros, but it is sometimes
desirable to manually add additional entries.
htoc-main-1jentryi
htoc-main-2jentryi
Create an important entry in the table of contents. The macro toc-main-1 is intended
to be used only for very important entries, such as parts of a book; it usually has to be
added manually. The macro toc-main-2 is intended to be used for chapter or sections.
Important entries are usually displayed in a strong font.
htoc-normal-1jentryi
htoc-normal-2jentryi
htoc-normal-3jentryi
Add a normal entry to the table of contents, of dierent levels of importance. Usually,
toc-normal-1 corresponds to sections, toc-normal-2 to subsections and toc-normal-3 to
subsubsections.
htoc-small-1jentryi
htoc-small-2jentryi
Add an unimportant entry to the table of contents, like a paragraph. Since such entries
are not very important, some styles may simply ignore the toc-small-1 and toc-small-2
tags.
htoc-1jcontentjwherei
htoc-2jcontentjwherei
htoc-3jcontentjwherei
182 The standard TEXMACS styles
htoc-4jcontentjwherei
htoc-5jcontentjwherei
Used for rendering table of contents entries created using toc-normal-1, toc-normal-2,
toc-normal-3, toc-small-1 resp. toc-small-2.
htoc-dotsi
The separation between an entry in the table of contents and the corresponding page
number. By default, we use horizontal dots.
18.2.5.3. Indexes
The following macros may be used in the main text for inserting entries into the index.
hindexjprimaryi
Insert primary as a primary entry in the index.
hsubindexjprimaryjsecondaryi
Insert secondary in the index as a subentry of primary.
hsubsubindexjprimaryjsecondaryjternaryi
Similar to subindex but for subsubentries ternary.
hindex-complexjkeyjhowjrangejentryi
Insert complex entries into the index. This feature is documented in detail in the section
about index generation.
hindex-linejkeyjentryi
Adds entry to the index, by sorting it according to key.
The following macros may be redened if you want to customize the rendering of the index:
hindex-1jentryjwherei
hindex-2jentryjwherei
hindex-3jentryjwherei
hindex-4jentryjwherei
hindex-5jentryjwherei
Macro for rendering an entry in the index on page(s) where. The macro index-1 corre-
sponds to principal entries, the macro index-2 to secondary entries, and so on.
hindex-1*jentryi
hindex-2*jentryi
hindex-3*jentryi
hindex-4*jentryi
hindex-5*jentryi
Similar to index-1 until index-5, but without the page number(s).
hindex-dotsi
Macro for producing the dots between an index entry and the corresponding page
number(s).
18.2 The common base for most styles 183
18.2.5.4. Glossaries
The following macros may be used in the main text for inserting glossary entries.
hglossaryjentryi
Insert entry into the glossary.
hglossary-dupjentryi
For creating an additional page number for an entry which was already inserted before.
hglossary-explainjentryjexplanationi
A function for inserting a glossary entry with its explanation.
hglossary-linejentryi
Insert a glossary entry without a page number.
The following macros can be redened if you want to customize the rendering of the
glossary:
hglossary-1jentryjwherei
Macro for rendering a glossary entry and its corresponding page number(s).
hglossary-2jentryjexplanationjwherei
Macro for rendering a glossary entry, its explanation, and its page number.
hglossary-dotsi
Macro for producing the dots between a glossary entry and the corresponding page
number(s).
hwide-normaljbodyi
hwide-centeredjbodyi
These tags are used to make the body span over the entire paragraph width. The text is
left-aligned in the case of wide-normal and centered in the case of wide-centered. Making
a body span over the entire paragraph width does not change the rendering on paper,
but it facilitates the editing on the document. Indeed, on the one hand, the box which
indicates that you are inside the environment will span over the entire paragraph width.
On the other hand, when clicking suciently close to the text inside this box, it becomes
easier to position your cursor at the start or at the end inside the environment. You
may check this by clicking on one of the texts below:
184 The standard TEXMACS styles
hpadded-normaljspace-abovejspace-belowjbodyi
hpadded-centeredjspace-abovejspace-belowjbodyi
These tags are variants of hwide-normaljbodyi and hwide-centeredjbodyi, which put some
vertical white space space-above and space-below above and below the body.
hwide-framedjborder-widthjhsepjvsepjbodyi
hwide-std-framedjbodyi
hwide-framed-coloredjborder-color jbody-color jborder-widthjhsepjvsepjbodyi
hwide-std-framed-coloredjborder-color jbody-color jbodyi
These tags put the body inside a frame box which spans over the whole paragraph.
The user may specify a border-width, horizontal and vertical separations hsep and
vsep between the border and the text, and colors border-color and body-color for the
border and the background. For instance, hwide-std-framed-coloredjbrownjpastel greenj
Hi there!i yields
Hi there!
hindent-leftjleft-amountjbodyi
hindent-rightjright-amountjbodyi
hindent-bothjleft-amountjright-amountjbodyi
These environments may be used in order to increase the current left and/or right
indentation by the amounts left-amount and/or right-amount.
hmargin-rst-otherjrst-marginjother-marginjbodyi
This environment allows to set the margin rst-margin for the rst lines of paragraphs
in the body, as well as the margin other-margin for the other lines. This environment
is for instance useful for glossaries, indexes, etc., in which case other-margin is often
larger than rst-margin. Notice that this environment enables indentation for the rst
line of body.
18.2 The common base for most styles 185
The following macros may be used in order to set headers and footers:
hset-headerjheader-texti
A macro for permanently changing the header. Notice that certain tags in the style
le, like sectional tags, may override such manual changes.
hset-footerjfooter-texti
A macro for permanently changing the footer. Again, certain tags in the style le may
override such manual changes.
hblanc-pagei
Remove all headers and footers from this page.
hsimple-pagei
Remove the header of this page and set the footer to the current page number (cen-
tered). This macro is often called for title pages or at the start of new chapters.
hmapjfunjtuplei
This macro applies the macro fun to each of the entries in a tuple (or the children of
an arbitrary TEXMACS tag) and returns the result as a tuple. For instance, hmapjhmacroj
x j hem j x ii jhtuple j1j2j3ii yields hquote jhtuple j1 j2 j 3 ii (the quote only appears when
rendering the result, not when performing further computations with it).
hreset-x i
Reset the counter to 0.
186 The standard TEXMACS styles
hinc-x i
Increase the counter. This macro may also be customized by the user so as to reset
other counters (even though this is not the way things are done in the standard
style les).
hnext-x i
Increase the counter, display the counter and set the current label.
For the purpose of customization, the new-counter macro also denes the following
macros:
hdisplay-x jnr i
This is the macro which is used for transforming the numerical value of the counter
into the value which is displayed on the screen.
hcounter-x jx i
This internal macro is used in order to retrieve the name of the environment variable
which contains the counter. By default, this macro returns nr-x, but it may be
redened if the counter belongs to a group.
As noticed in the introduction, TEXMACS uses counter groups in order to make it possible
to treat similar counters in a uniform way. For instance the counter group theorem-env
regroups the counters theorem, proposition, lemma, etc. New counter groups are dened
using:
hnew-counter-groupjgi
Create a new counter group with name g. This results in the creation of the following
macros:
hdisplay-in-g jx jnr i
hcounter-in-g jx i
These macros are similar to the macros display-x and counter-x from above, but
relative to the counter group. The name x of the counter in consideration is passed
as an argument.
At any moment, you may decide whether the counters of a group share a common group
counter, or whether they all use their individual counters. This feature is used for instance
in order to switch between American style numbering and European style numbering:
hgroup-common-counterjgi
Use a common counter for the group (which is stored in the environment variable g-nr ).
18.2 The common base for most styles 187
hgroup-individual-countersjgi
Use an individual counter for each member of the group (this is the default).
We notice that group counters may recursively belong to super-groups. For instance, the
following declarations are from env-base.ts:
hnew-counter-groupjstd-envi
hnew-counter-groupjtheorem-envi
hadd-to-counter-groupjtheorem-envjstd-envi
hgroup-common-counterjtheorem-envi
The program d.t.d. provides markup for the layout of computer programs. However, these
tags should be considered as very unstable, since we plan to replace them by a set of more
detailed tags:
halgorithmjnamejbodyi
The name of the algorithm and its body, which includes its possible specication.
hbodyjbodyi
The real body of the algorithm.
hindentjcontenti
For indenting part of an algorithm.
The session d.t.d. provides the following environments for computer algebra sessions:
hsessionjbodyi
Environment for marking a session. All macros below are only for use inside sessions.
hinputjpromptjbodyi
An input eld with a prompt and the actual input.
houtputjbodyi
An output eld.
htextputjbodyi
Fields with ordinary text. These may for instance be used for comments and explana-
tions.
herrputjbodyi
This macro is used inside output elds for displaying error messages.
188 The standard TEXMACS styles
In fact, these environments are based on environments of the form lan-session, lan-input,
lan-output, lan-textput and lan-errput for every individual language lan.
If language-specic environments do not exist, then generic-session, generic-input, generic-
output, generic-textput and generic-errput are taken instead. It is recommended to base the
language-specic environments on the generic ones, which may have dierent implemen-
tations according to the style (e.g. the framed-session package). For this purpose, we
also provide the generic-output* environment, which is similar to generic-output, except that
margins remain unaltered.
The env d.t.d. contains the standard environments which are available in most styles. It
is subdivided into the following parts:
hnew-remarkjenv-namejdisplay-namei
Similar as new-theorem, but for remarks.
hnew-exercisejenv-namejdisplay-namei
Similar as new-theorem, but for exercises.
hnew-gurejenv-namejdisplay-namei
Similar as new-theorem, but for gures. When dening a new type of gure, like pic-
ture, the new-gure macro denes both the inline environment small-picture and the
block-environment big-picture, as well as the unnumbered variants small-picture* and big-
picture*.
std-env
hassign j new-theorem j hmacro j env j name j hnew-env j env j name j theorem-env j render-
theoremiii
We recall that you may add new counters or counter-groups to the theorem-env counter-
group using the new-counter-group and add-to-counter-group macros, as described in the
section about counters.
hequation*jbodyi
An unnumbered equation.
hequation-labjbodyjlabi
An equation with an arbitrary text label to be displayed in references (e.g. reference or
eqref). Notice that the label tag is not created automatically.
heqnarrayjtablei
An array of numbered equations (not yet implemented).
190 The standard TEXMACS styles
heqnarray*jtablei
An array of unnumbered equations. You can use the eq-number tag in order to number
the equation.
Warning 18.1. The numbering of equations inside tables is not yet as it should be. In
particular, the eqnarray tag is equivalent to eqnarray* at the moment. Later on, when the
eqnarray tag will be implemented correctly, you will also have a no-number tag in order to
suppress the number of an equation, and a style package for numbering equations at the
left hand side.
Warning 18.2. There is no option for numbering equations at the left hand side available
yet. Nevertheless, you may use the manual tag leq-number for this. You also have a tag
next-number which directly display the next number and increases the equation counter.
Warning 18.3. We do not encourage the use of the AMS-TEX environments align,
gather and split. Nevertheless, they are available under the names align, gather, eqsplit
together with their variants align*, gather* and eqsplit*. In the future, we plan to provide
more powerful environments.
The env-theorem d.t.d. contains the default theorem-like and other textual environments,
which are available through Insert!Environment. They are subdivided into three main
categories:
Variants of remarks. The following ones are available via Insert!Environment: remark,
example, note, warning, convention.
Variants of exercises. Two such environments are provided by default and available
via Insert!Environment: exercise and problem.
The environments are all available in unnumbered versions theorem*, proposition*, etc. as
well. You may use ⌃# in order to switch between the unnumbered and numbered version.
The following tags are also provided:
hproofjbodyi
For proofs of theorems.
hduetojwhoi
An environment which can be used to specify the inventors of a theorem. It should be
used at the start inside the body of a theorem, like in
The following customizable macros are used for the rendering of textual environments:
hrender-enunciationjnamejbodyi
This macro is used for displaying a theorem-like and remark-like environments. The rst
argument name species the name of the theorem, like Theorem 1.2 and the second
argument body contains the body of the theorem.
hrender-theoremjnamejbodyi
This macro, based on render-enunciation, is used for displaying a theorem-like environ-
ments, and used for environments dened by new-theorem.
hrender-remarkjnamejbodyi
This macro, based on render-enunciation, is used for displaying a remark-like environ-
ments, and used for environments dened by new-remark.
hrender-exercisejnamejbodyi
Similar to render-enunciation, but for exercise-like environments.
hrender-proofjnamejbodyi
Similar to render-enunciation, but for proofs. This environment is mainly used for cus-
tomizing the name of a proof, like in End of the proof of theorem 1.2.
Notice that you may also use these macros if you want an environment which is rendered
in a similar way as a theorem, but with another name (like Corollary of Theorem 7).
The following tags can be used for further customization of the rendering:
henunciation-namejnamei
This macro controls the appearance of the names of theorem-like, remark-like and
exercise-like environments. Most styles use bold face or small capitals.
htheorem-namejnamei
hremark-namejnamei
hexercise-namejnamei
These macros default to enunciation-name, but can be customized individually.
henunciation-sepi
The separator between the name of a theorem-like, remark-like or exercise-like environ-
ment and its main body. By default, this is a period followed by a space.
htheorem-sepi
hremark-sepi
hexercise-sepi
These macros default to enunciation-sep, but can be customized individually.
Each standard environment x also comes with a customizable macro x-text which renders
the localized name of the environment. For instance, hwithjlanguagejdutchjhtheorem-textii
yields Stelling.
192 The standard TEXMACS styles
The env-float d.t.d. provides the following environments for oating objects:
hsmall-gurejbodyjcaptioni
This macro produces an inline gure with body as its main body and caption as a
caption. Inline gures may for instance be used to typeset several small gures side by
side inside a oating object.
hbig-gurejbodyjcaptioni
This macro produces a big gure with body as its main body and caption as a caption.
Big gures span over the whole paragraph width.
hsmall-tablejbodyjcaptioni
Similar to small-gure, but for tables.
hbig-tablejbodyjcaptioni
Similar to big-gure, but for tables.
hfootnotejbodyi
Produces a footnote.
The gure-like environments also admit unnumbered versions small-gure*, big-gure*, etc.,
which are obtained using ⌃# .
The following macros can be used for customizing the rendering of gure-like environments:
hrender-small-gurejaux jnamejbodyjcaptioni
This macro is used for rendering small gure-like environments. The rst argument aux
species an auxiliary channel (like gure or table) which is used for inserting the
caption inside the list of gures. The second argument name species the name of the
gure (like Figure 2.3 or Table 5). The last arguments body and caption correspond
to the gure itself and a caption.
hrender-big-gurejaux jnamejbodyjcaptioni
Similar to render-small-gure, but for displaying a big gure-like environments.
The following tags can be used for customizing the appearance the text around gures,
tables and footnotes:
hgure-namejnamei
This macro controls the appearance of the text Figure. By default, we use bold face.
hgure-sepi
This macro produces the separator between the gure and its number and the caption.
By default, it produces a period followed by a space.
18.4 Headers and footers 193
hfootnote-sepi
This macro produces the separator between the number of the footnote and the text.
By default, it produces a period followed by a space.
The header-title d.t.d. provides tags for entering information about the entire document.
The two top-level tags are
hdoc-datajdata-1 jjdata-ni
Specify data attached to your document (title, authors, etc.; see below) and render the
title.
habstractjbodyi
The abstract for your paper.
When creating a doc-data tag using Insert!Title!Insert title, TEXMACS automatically inserts
a doc-title tag as its rst arguments. New data may be inserted from the Insert!Title menu.
Each child data-1 , :::, data-n of the doc-data tag is of one of the following forms:
hdoc-titlejtitlei
Specify the title of the document.
hdoc-subtitlejsubtitlei
Specify the subtitle of the document.
hdoc-authorjdata-1 jjdata-ni
Specify datas for one of the authors of the document (name, aliation, etc.; see below).
hdoc-datejdatei
The creation date of the document. In particular you may take hdatei for the value of
date for the current date.
hdoc-running-titlejtitlei
Specify a running title for your document which may be used in page headers.
hdoc-running-authorjauthor i
Specify a running author for your document which may be used in page headers.
hdoc-keywordsjkw-1 jjkw-ni
Specify keywords kw-1 until kw-n for your document.
hdoc-mscjnr-1 jjnr-ni
Specify A.M.S. subject classication numbers nr-1 until nr-n for your document.
194 The standard TEXMACS styles
hdoc-notejnotei
A note about your document. In particular, you may take hwith-TeXmacs-texti for the
value of note in order to indicate that your document has been written using TEXMACS.
hauthor-datajdata-1 jjdata-ni
Specify structured datas for one of the authors of the document (name, aliation, etc.;
see below).
hauthor-aliationjaliationi
The aliation of the author.
hauthor-emailjemaili
An email address for the author.
hauthor-homepagejhomepagei
The homepage of the author.
hauthor-notejnotei
A miscellaneous note attached to the author, like a thank-word.
As a general rule, the use of any of the subtags of doc-data or author-data is optional. An
individual subtag may also be specied several times. This is useful for documents with
several authors, or authors with several addresses. The rendering of title information is
very style-dependent: some styles render addresses in a single line or even as a footnote,
where other styles use a more widely spaced presentation. Often, some information like
keywords or AMS subject classication numbers are only rendered as a part of the abstract.
Depending on the kind of attributes, complex titles often use several rendering styles in a
simultaneous version. More precisely, a title usually consists of the following parts:
An potentially invisible part, with information like running titles and authors.
Similarly, individual authors may also contain a main part, which is rendered as part of
the title, and an additional part, which is rendered as a footnote. Moreover, the layout
often changes if the paper has more than one author.
18.4 Headers and footers 195
The TEXMACS mechanism for rendering titles therefore relies on several macros which
extract the information corresponding to each of the above parts. This process may also
involve some sorting, like putting the authors before the date or vice versa. At a second
stage, each extracted part of the title is passed to the appropriate rendering macro. The
following macros are used for extracting title information:
hdoc-data-mainjdata-1 jjdata-ni
hdoc-data-main*jdata-1 jjdata-ni
This macro only keeps and sorts the data which should be displayed in the main title.
The doc-data-main* variant is used in the case when the document has more than one
author.
hdoc-data-notejdata-1 jjdata-ni
This macro only keeps and sorts the data which should be displayed as a footnote.
hdoc-data-abstractjdata-1 jjdata-ni
This macro only keeps and sorts the data which should be displayed in the abstract.
hdoc-data-hiddenjdata-1 jjdata-ni
This macro only keeps and sorts the data which might or should not be displayed at all.
In a similar fashion, the following macros are used for extracting author information:
hdoc-author-mainjhauthor-datajdata-1 jjdata-nii
This macro only keeps and sorts the data which should be displayed inside the main
title.
hdoc-author-notejdata-1 jjdata-ni
This macro only keeps and sorts the data which should be displayed as a footnote.
It should be noticed that each of the above macros should return a document tag with the
selected data as its children. For instance,
hdoc-author-mainj
hauthor-aliationjSomewhere in Africaij
hauthor-namejThe big GNUij
hauthor-notejVery hairy indeed!ii
hdocumentj
hauthor-aliationjSomewhere in Africaij
hauthor-namejThe big GNUii
The only exception to this rule is doc-data-hidden which should return a concat tag instead.
Both title information and author information is rendered as a vertical stack of title blocks
and author blocks. The following macros may be used to customize the global rendering
of such blocks:
196 The standard TEXMACS styles
hdoc-title-blockjcontenti
hdoc-author-blockjcontenti
Macros for rendering one component of the title or author information.
The following macros may be used to customize the rendering of title information; notice
that they are usually built on top of doc-title-block.
hdoc-make-titlejcontenti
This macro is used for the rendering of the main title information. Usually, it contains
at least the title itself, as well as one or several authors.
hdoc-render-titlejtitlei
This macro is used for rendering the title of the document. The doc-title macro also
takes care of rendering references to potential footnotes.
hdoc-subtitlejtitlei
This macro is used for rendering the subtitle of the document.
hrender-doc-authorjcontenti
In the case when the document has a single author, then this macro is used for rendering
the content information about him or her.
hrender-doc-authorsjcontenti
In the case when the document has several authors, then this macros is used for ren-
dering all author-related content which is part of the main title.
hdoc-datejdatei
This macro is used for rendering the creation date of the document.
The following macros may be used to customize the rendering of author information; notice
that they are usually built on top of doc-author-block.
hauthor-render-namejnamei
Renders the name of the author.The author-name macro also takes care of rendering
references to potential footnotes.
hauthor-byjnamei
A macro which may put the text by in front of the name of an author.
hauthor-aliationjaliationi
Renders the aliation of the author.
hauthor-emailjemaili
Renders the email address of the author.
hauthor-homepagejemail i
Renders the homepage of the author.
The following macros are used for information which is usually not rendered as a part of
the main title, but rather as a footnote or part of the abstract.
18.5 LATEX style sections 197
hdoc-title-notejnotei
hdoc-author-notejnotei
A macro for rendering a note attached to the document or one of its authors. The note
will usually appear as part of a footnote. By default, notes that consist of several lines
are compressed into a single paragraph.
hdoc-keywordsjkw-1 jjkw-ni
A macro for displaying a list of keywords.
hdoc-mscjnr-1 jjnr-ni
A macro for displaying a list of A.M.S. subject classication numbers.
hheader-authorjauthor i
This macro is called when specifying the author (s) of a document.
hheader-primaryjsection-titlejsection-nr jsection-typei
This macro is called at the start of each new primary section (e.g. chapter for book style,
or section for article style). The section-type is a literal text like Chapter or Section.
hheader-secondaryjsection-titlejsection-nr jsection-typei
This macro is called at the start of each new secondary section (e.g. section for book
style, or subsection for article style). The section-type is a literal text like Section
or Paragraph.
In style les, page headers and footers are usually set by the above call-back macros, and
not manually. You may directly modify headers and footers by setting the corresponding
environment variables or using several helper macros supplied by std-utils.
happendixjtitlei
The intention of these macros is to produce a numbered title for a part (resp. chapter,
section, subsection, etc.). The numbering is not required, but merely an intention: the
paragraph and subparagraph tags are usually not numbered and some styles may not
produce numbers at all.
The tags part*, chapter*, section*, subsection*, subsubsection*, paragraph*, subparagraph* and
appendix* can be used for producing the unnumbered variants of the above tags.
By default, all sectional only produce the section title. When using the experimental
package structured-section, all sectional tags are enriched, so that they take the body
of the section as an optional argument. Moreover, an additional tag rsection is provided in
order to produce recursively embedded sections. For instance, an rsection inside a section
behaves like a subsection. In the future, all list items should become structured.
The section-base d.t.d. also provides the following sectional environments with automat-
ically generated content
hbibliographyjaux jstylejle-namejbodyi
This macro is used for producing bibliographies. The rst argument aux species the
auxiliary channel with the data for generating the bibliography (bib, by default). The
arguments style and le-name contain the bibliography style and the le with the
bibliographic database. The body argument corresponds to the automatically generated
content.
htable-of-contentsjaux jbodyi
This macro is used for producing tables of contents. The rst argument aux species
the auxiliary channel with the data for generating the bibliography (toc, by default).
The body argument corresponds to the automatically generated content.
hthe-indexjaux jbodyi
Similar to table-of-contents but for indices and default channel idx.
hthe-glossaryjaux jbodyi
hlist-of-guresjaux jbodyi
hlist-of-tablesjaux jbodyi
Similar to table-of-contents but for glossaries (default channel gly), lists of figures
(default channel figure) and lists of tables (default channel table).
The above tags also admit the variants bibliography*, table-of-contents*, the-index* and the-
glossary* with an additional argument name before body, which species the name of the
section. For instance, the the-glossary* was formerly used for lists of gures and lists of
tables.
hsectional-short-stylei
A predicate which tells whether documents for this style are intended to be short or
long. When sectional-short-style evaluates to true, then appendices, bibliographies, etc.
are supposed to be special types of sections. Otherwise, they will be special types of
chapters.
For each sectional tag x , the following tags are provided for customization:
hx-texti
A macro which displays the (localized) name of the sectional environment. For instance,
hwithjlanguagejfrenchjhappendix-textii produces Annexe.
hx-titlejtitlei
A macro for displaying the unnumbered section title.
hx-numbered-titlejtitlei
A macro for displaying the numbered section title.
hx-display-numbersi
A predicate which species whether numbers will really be displayed. For instance,
in the case of paragraph, this macro evaluates to false. Consequently, even though x-
numbered-title does display the paragraph number, the main macro x will call x-title and
not x-numbered-title, so that paragraph titles are not numbered.
hx-sepi
A macro for customizing the separator between the number of a section and its title.
By default, we call sectional-sep.
hx-cleani
A hook for resetting all subcounters of the section.
hx-headerjnamei
A hook for changing the page headers.
hx-tocjnamei
A hook for putting the section title into the table of contents.
hsectional-short-italicjbodyi
hsectional-short-boldjbodyi
These macros should be used for rendering short section titles, for which the section
body starts immediately at the right of the title. Usually, titles of paragraphs and
subparagraphs are rendered in a short fashion, while the other section titles span over
the entire width of a paragraph.
hsectional-normaljbodyi
hsectional-normal-italicjbodyi
hsectional-normal-boldjbodyi
These macros should be used for rendering normal left-aligned section titles. Such
titles span over the entire paragraph width.
hsectional-centeredjbodyi
hsectional-centered-italicjbodyi
hsectional-centered-boldjbodyi
These macros should be used for rendering normal centered section titles. Such titles
span over the entire paragraph width.
Chapter 19
Compatibility with other formats
TEXMACS documents can be saved without loss of information in three formats: the native
TEXMACS format, Xml and as a Scheme expression. TEXMACS documents can be converted
in a wysiwyg (what-you-see-is-what-you-get) way to either Postscript or Pdf, which are
used as the primary formats for printing documents. TEXMACS nally provides converters
for LATEX, Html and MathML.
TEXMACS documents can be converted to other formats using the dierent items in the
File!Export menu. Similarly, the File!Import menu contains all formats which can be
imported into TEXMACS. Besides exporting or importing entire documents, it is also pos-
sible to copy and paste document fragments using Edit!Copy to and Edit!Paste from.
The default formats for copy and pasting can be specied in Tools!Miscellaneous!Export
selections as and Tools!Miscellaneous!Import selections as.
19.1.1. Introduction
TEXMACS oers high quality converters to and from LATEX. For simple documents, it suf-
ces to use File!Export!LaTeX resp. File!Import!LaTeX. However, in order to take fully
advantage out of the converts, it is necessary to understand some particularities of LATEX.
First of all, it should be emphasized that TEX/LATEX is not a data format. Indeed, TEX is
a programming language for which no real standardization process has taken place: valid
TEX programs are dened as those which are recognized by the TEX program. In particular,
there exists no formal specication of the language and it is not even clear what should
be considered to be a valid TEX document. As a consequence of this, a converter from
LATEX to TEXMACS can only be designed to be 100% reliable for a (substantial) subset of
the TEX/LATEX language.
A second important point is that publishers usually impose additional constraints on the
kind of LATEX documents which they accept for submissions. For instance, certain journals
provide additional macros for title information, theorems, specic layout features, etc.
Other journals forbid for the denition of new macros in the preamble. Since TEXMACS
is not a TEX/LATEX front-end, it is dicult for us to write specic code for each possible
journal. Nevertheless, some general principles do hold, and we will describe below how to
customize the converter so as to make the conversion process as simple and automatic as
possible.
Another point which should be stressed is that TEXMACS aims to provide a strict superset
of TEX/LATEX. This not completely the case yet, but it is already true that many features
in TEXMACS admit no direct analogues in TEX/LATEX or one of its packages. This is for
instance the case for computer algebra sessions, folding, actions, graphics and presenta-
tions, but also for certain typesetting constructs, like vertical alignment and background
lling in tables. When using such additional features, you should be prepared that they
will not be converted correctly to LATEX.
201
202 Compatibility with other formats
Finally, when preparing journal papers with TEXMACS, please consider submitting them in
TEXMACS format. The editors of the journal will probably force you to convert your paper
to LATEX, but repeated submissions in TEXMACS format will put pressure upon them to
accept this new format.
Utf-8 with inputenc. This will generate utf-8 document with the package
inputenc loaded. If for any reason you don't want to rely on inputenc, you
should consider other options.
Cork with catcodes. Keeps accented characters as is. This can be achieved
by allowing TEXMACS to put additional catcode definitions into your preamble.
This provides a good trade-off between readability (accented characters
are kept in an 8 bit charset) and simplicity (you don't need the inputenc
package).
Ascii. This will generate pure ascii characters, using plain TEX sequences to
compose non-ascii symbols.
Sometimes, the converter does not produce a satisfactory LATEX le even after some tin-
kering with the above preferences. The most frequent problem concerns bad line breaks.
Occasionally, certain document fragments are also better converted by hand. In order
to minimize the need for corrections in the generated LATEX le (which would be lost
when re-exporting the TEXMACS source le after some modications), TEXMACS provides
a mechanism to specify manual conversions to LATEX in the TEXMACS source le: using
Format!Specic!Texmacs and Format!Specic!Latex, you may force certain document
fragments to appear only in the source le or the LATEX target.
For instance, assume that the word blauwbilgorgel is hyphenated correctly in the TEXMACS
source, but not in the LATEX conversion. Then you may proceed as follows:
1. Select blauwbilgorgel.
204 Compatibility with other formats
3. Click on Format!Specic!Latex.
In a similar fashion, you may insert LATEX-specic line breaks, page breaks, vertical space,
style parameter modications, etc. You may also force arbitrary content to be exported as
an image using Format!Specic!Image.
Left primes.
Trees.
Certain features of tables (background color, cell span, vertical alignment, etc.).
Most types of interactive content: hyperlinks, actions, sessions, tags for the presen-
tation mode, animations and sounds, etc.
Style parameters.
Of course, there are also dierences between the typesetting algorithms used by TEXMACS
and TEX/LATEX, so the TEXMACS to LATEX is not intended to be wysiwyg.
Html generation.
TEXMACS supports reasonably good converters to Html and MathML. A document can
be exported to Html using File!Export!Html. TEXMACS makes moderate use of Css in
order to improve the presentation of the generated Html.
By default, TEXMACS does its best in order to render formulas using existing Html/Css
primitives. When selecting Edit!Preferences!Converters!TeXmacs->Html!Use MathML,
all formulas will be exported as MathML. Notice that this requires you to save the
generated documents using the .xhtml extension.
Similarly, the user may force TEXMACS to export all mathematical formulas as images
using Edit!Preferences!Converters!TeXmacs->Html!Export formulas as images. If your
destination le is called name.html, then the images are stored in the same directory in
les name-1.png, name-2.png and so on. Even when formulas are not exported as images,
notice that all graphics drawn using TEXMACS are exported in this way. In particular, the
exportation of a TEXMACS le with pictures may give rise to the creation of additional
image les. You may also force arbitrary content to be exported as an image using Format!
Specic!Image.
TEXMACS also provides a facility for the creation of entire websites. For this, you just have to
regroup the les for your website into a single directory. Using Tools!Web!Create website
you may now convert all TEXMACS les in this directory to Html les in a new directory.
The conversion procedure recursively traverses all subdirectories and all non-TEXMACS les
are simply copied.
hhtml-stylejstylejbodyi
hhtml-div-stylejclassjbodyi
Associate a CSS style to the content body, optionally inside a separate div tag.
hhtml-javascript-srcjsrci
Execute a Javascript script from the le src.
19.2 Converters for Html and MathML 207
hhtml-javascriptjcodei
Execute the Javascript script code.
In addition, given a macro my-tag, you may customize the rendering of the tag when
exporting to Html by dening a macro tmhtml-my-tag with the same number of arguments.
For instance, by putting the declaration
hassignjtmhtml-strongjhmacrojbodyjhwithjcolor jredjfont-seriesjboldjbodyiii
inside your style le, all strong text will be exported to Html using a bold red font.
Html importation.
TEXMACS also contains a rudimentary input converter for Html in File!Import!Html.
Most of HTML 2.0 and parts of HTML 3.0 are currently supported. However, no browsing
facilities have been added yet. The converter also contains a reasonably complete input
converter for embedded MathML fragments.
When importing HTML documents, les whose names start with http: or ftp: will be
downloaded from the web using wget. If you compiled TEXMACS yourself, then you can
download wget from
ftp://ftp.gnu.org/pub/gnu/wget/
In the binary distributions, we have included wget.
Using the Guile/Scheme extension language, it is possible to add new data formats and
converters to TEXMACS in a modular way. Usually, the additional formats and converters
are declared in your personal ~/.TeXmacs/progs/my-init-texmacs.scm or a dedicated
plug-in. Some examples may be found in the directory $TEXMACS_PATH/progs/convert,
like init-html.scm.
(define-format format
(:name format-name)
options)
Here format is a symbol which stands for the format and format-name a string which
can be used in menus. In fact, a data format usually comes in several variants: a format
format -file for les, a format format-document for entire documents, a format format-
snippet for snippets, like selections, and format -object for the preferred internal scheme
representation for doing conversions (i.e. the parsed variant of the format). Converters
from format -file to format -document and vice versa are provided automatically.
The user may specify additional options for the automatic recognition of formats by their
le sux and contents. The possible suxes for a format, with the default one listed rst,
may be specied using
A (heuristic) routine for recognizing whether a given document matches the format can be
specied using either one of the following:
(:recognize predicate)
(:must-recognize predicate)
In the rst case, sux recognition takes precedence over document recognition and in the
second case, the heuristic recognition is entirely determined by the document recognition
predicate.
A format can be removed from menus using the following:
(:hidden)
(converter from to
options)
The actual converter is specied using either one of the following options:
(:function converter)
(:function-with-options converter-with-options)
(:shell prog prog-pre-args from progs-infix-args to prog-post-args)
In the rst case, the converter is a routine which takes an object of the from format and
returns a routine of the to format. In the second case, the converter takes an additional
association list as its second argument with options for the converter. In the last case, a
shell command is specied in order to convert between two le formats. The converter is
activated only then, when prog is indeed found in the path. Also, auxiliary les may be
created and destroyed automatically.
TEXMACS automatically computes the transitive closure of all converters using a shortest
path algorithm. In other words, if you have a converter from x to y and a converter from
y to z, then you will automatically have a converter from x to z. A distance between two
formats via a given converter may be specied using
(:penalty floating-point-distance)
(:require cond)
(:option option default-value)
The rst option species a condition which must be satised for this converter to be used.
This option should be specied as the rst or second option and always after the :penalty
option. The :option option species an option for the converter with its default value.
This option automatically become a user preference and it will be passed to all converters
with options.
Appendix A
Configuration of TEXMACS
For an optimal typing experience, you may wish to congure TEXMACS in a way which
suits your needs best. This can be done from within the Edit!Preferences menu. Most
importantly, you should choose a look and feel in Edit!Preferences!Look and feel. This
will enable you for instance to let the keyboard shortcuts used by TEXMACS be similar to
what you are used to in other applications.
The following user preferences are available:
Look and feel. This preference controls the general look and feel of TEXMACS, and
mainly aects the behaviour of the keyboard. The default look and feel depends
on your system (Gnome, KDE or Emacs under Linux, Mac OS under Mac OS, and
Windows under Windows). The Emacs look and feel can be used as an alternative
on all systems; it has been the default for all TEXMACS versions prior to 1.0.7.6.
More details on the keyboard conguration on dierent systems can be found below.
Interactive questions. This preference species how the user will be prompted for input
when required. Questions may either be displayed in separate windows or on the
status bar of TEXMACS.
Details in menus. This preference specify the level of detail in the menus. The less
frequently used features will be left out when selecting Simplied menus.
View. The preference corresponds to the same viewing options as in the top-level
View menu.
Keyboard. In addition to the general look and feel, a few additional settings determine
the behaviour of the keyboard:
The Cyrillic input method species how to type text in Cyrillic languages.
Security. In theory, TEXMACS documents may embed macros or hyperlinks which give
rise to the execution of arbitrary commands (as specied by the author). In practice,
this feature may involve a security risk,. Therefore, the Security preference allows
the user to specify what should be done with untrusted executable code.
209
210 Configuration of TEXMACS
Converters. The behaviour of converters between TEXMACS various other data formats
may be congured from this menu. For more details, we refer to the chapter on
compatibility with other formats.
Tools. TEXMACS features a few additional tools which the user may wish to work under
certain circumstances:
Autosave. This preference species how often documents will be autosaved. Any edits
to a le which was not autosaved will be lost on undesired termination of TEXMACS.
This typically occurs after an erroneous manipulations by the user, certain bugs in
TEXMACS, or a power problem.
Bibtex command. The user may specify an alternative to bibtex for the compilation
of bibliographies using BibTEX. Notice that recent versions of TEXMACS integrate
a native alternative tool for the compilation of bibliographies.
The Look and feel determines the main rules for keyboard shortcuts and attempts to
make the behaviour as close as possible to the standards for the selected look and
feel.
We will now detail specic issues related to the keyboard conguration on various systems.
Please refer to the section on general conventions for explanations on the way keyboard
shortcuts are printed in this manual. For more information on keyboard shortcuts, we refer
to the general section on how the master the keyboard.
Standard conformance.
TEXMACS attempts to be as standard-conformant regarding the various look and feels.
However, there are a few general situations in which TEXMACS reserves some keyboard
shortcuts for the sake of user-friendliness:
Most standards admit a principal modier key for forming keyboard shortcuts
( ⌃ for your look and feel) and sometimes another modier key for other shortcuts
(e.g. the Windows key under Windows and ⌥ under Mac OS). The remaining free
modier ( ⌥ for your look and feel) is reserved for TEXMACS.
A.2 Keyboard configuration 211
TEXMACS contains many keyboard macros involving one or more modier keys and
the special keys ← , → , ↑ , ↓ , ↖ , ↘ , ⇞ , ⇟ , ⌫ , ⌦ , ␣ , ⇥ and ↩ . The behaviour of shortcuts
of this kind is occasionally non standard.
Potential conicts.
The TEXMACS-specic shortcuts are rarely in conict with standard conventions. Never-
theless, in table A.1, we have displayed some more or less standard shortcuts, which might
work in other applications, but which will usually not work inside TEXMACS.
One solution to the above problems is to change the problematic global shortcuts in the
responsible applications. For instance, Spaces can be congured to use ⌘⌥⌃ as a prex
instead of ⌃ (click on the popup menu behind To switch between spaces and simultane-
ously press ⌘ , ⌥ and ⌃ ). Notice that fn is another key which is not used by TEXMACS.
212 Configuration of TEXMACS
If you cannot or do not want to change the system-wide shortcuts, then you may use the
⎋ -key in order to produce equivalents for the modier keys ⌘ , ⌥ and ⌃ . For instance, under
Mac OS, ⌃ is equivalent to ⎋ ⎋ . Hence, the TEXMACS shortcut ⌃→ can also be obtained by
typing ⎋ ⎋ → , which may coexist with the Spaces shortcut ⌃→ . Table A.2 shows the modier
key combinations which can be obtained using ⎋ .
Table A.2. Keyboard shortcuts for modier keys or modier key combinations.
User-dened shortcuts.
If, for some reason, the standard TEXMACS shortcuts are not sucient or suitable for you,
then you may dene your own shortcuts.
In order to type Russian (and similarly for other Cyrillic languages) text, you have several
options:
If your X server uses the Xkb extension, and is instructed to switch between the Latin and
Russian keyboard modes, you need not do anything special. Just switch your keyboard to
the Russian mode, and go ahead. All the software needed for this is included in modern
Linux distributions, and the Xkb extension is enabled by default in XF86Config. With
the Xkb extension, keysyms are 2-byte, and Russian letters are at 0x6??. The keyboard
is congured by setxkbmap. When X starts, it issues this command with the system-wide
Xkbmap le (usually living in /etc/X11/xinit), if it exists; and then with the user's ~/
.Xkbmap, if it exists. A typical ~/.Xkbmap may look like
ru basic grp:shift_toggle
This means that the keyboard mode is toggled by l-shift r-shift . Other popular choices
are ⌃⇧ or ⌥⌃ , see /usr/X11R6/lib/X11/xkb/ for more details. This is the preferred key-
board setup for modern Linux systems, if you plan to use Russian often.
A.3 Notes for users of Cyrillic languages 213
In older Linux systems, the Xkb extension is often disabled. Keysyms are 1-byte, and
are congured by xmodmap. When X starts, it issues this command with the system-wide
Xmodmap (usually living in /etc/X11/xinit), if it exists; and then with the user's ~/
.Xmodmap, if it exists. You can congure the mode toggling key combination, and use a 1-
byte Russian encoding (such as koi8-r) in the Russian mode. It is easier to download the
package xruskb, and just run
xrus jcuken-koi8
at the beginning of your X session. This sets the layout jcuken (see below) and the
encoding koi8-r for your keyboard in the Russian mode. If you use such keyboard setup,
you should select Options ! international keyboard ! russian ! koi8-r.
It is also possible to use the Windows cp1251 encoding instead of koi8-r, though this is
rarely done in UNIX. If you do use xrus jcuken-cp1251, select cp1251 instead of koi8-r.
All the methods described above require some special actions to russify the keyboard.
This is not dicult, see the Cyrillic-HOWTO or, better, its updated version
http://www.inp.nsk.su/~baldin/Cyrillic-HOWTO-russian/Cyrillic-HOWTO-
russian.html
Also, all of the above methods globally aect all X applications: text editors (Emacs,
Nedit, Kedit...), xterms, TEXMACS etc.
If you need to type Russian only once, or very rarely, a proper keyboard setup may be more
trouble than it's worth. For the benet of such occasional users, TEXMACS has methods
of Russian input which require no preliminary work. Naturally, such methods aect only
TEXMACS, and no other application.
The simplest way to type some Russian on the standard US-style keyboard with no software
setup is to select Edit!Preferences!Keyboard!Cyrillic input method!translit. Then, typing
a Latin letter will produce the most similar Russian one. In order to get some Russian
letters, you have to type 2- or 3-letter combinations:
If you want to get, e.g., ñõ, and not ø, you have to type S / H . Of course, the choice of
optimal mapping of Latin letters to Russian ones in not unique. You can investigate the
mapping supplied with TEXMACS and, if you don't like something, override it in your ~/
.TeXmacs/progs/my-init-texmacs.scm.
214 Configuration of TEXMACS
If you select jcuken instead of translit, you get the ocial Russian typewriter layout. It
is so called because the keys qwerty produce éöóêåí. This input method is most useful
when you have a Russian-made keyboard, which has additional Russian letters written on
the key caps in red, in the jcuken layout (a similar eect can be achieved by attaching
transparent stickers with red Russian letters to caps of a US-style keyboard). It is also
useful if you are an experienced Russian typist, and your ngers remember this layout.
Those who have no Russian letters indicated at the key caps often prefer the yawerty
layout, where the keys qwerty produce ÿâåðòû. Each Latin letter is mapped into a
similar Russian one; some additional Russian letters are produced by ⇧ -digits. TEXMACS
comes with a slightly modied yawerty layout, because it does not redene the keys $ , ¿ ,
\ , which are important for TEXMACS, are not redened. The corresponding Russian letters
are produced by some ⇧ -digit combinations instead.
In order to type oriental languages, you rst have to start a conversion server which
can be used in combination with the X input method and set the environment variables
accordingly. For instance, in the case of Japanese, one typically has to execute the following
shell commands:
kinput2 &
export LANG="ja_JP.eucJP"
export LC_ALL="ja_JP.eucJP"
export XMODIFIERS="@im=kinput2"
You also have to install Japanese fonts. For instance, you may download the Ipag fonts
ipam.ttf, ipag.ttf, ipamp.ttf, ipagm.ttf and ipagui.ttf and copy them to
~/.TeXmacs/fonts/truetype
After doing this, you may launch TEXMACS using
texmacs --delete-font-cache
and select Japanese from the icon on the rst icon bar. If everything went allright, the
menus should now show up in Japanese and the current document is also in Japanese.
Notice that you may also select Japanese as your default language in Edit!Preferences!
Language!Japanese. It is also possible to select Japanese for a portion of text in a document
using Format!Language!Japanese.
Inside a Japanese portion of text, and depending on your input method, you usually have
to type ⇧␣ in order to start Kana to Kanji conversion. A small window shows up where you
can type phonetic characters and use ␣ in order to start conversion to Kanji characters.
When pressing ↩ , the text is inserted into the main TEXMACS window. Pressing ⇧␣ once
again returns to the classical TEXMACS input method.
Appendix B
About GNU TEXMACS-1.99.9
B.1. Summary
GNU TEXMACS
Installed version 1.99.9
Supported systems Most GNU/Linux systems
Copyright © 19982017 by Joris van der Hoeven
License GNU General Public License
Web sites http://www.texmacs.org
http://www.gnu.org/software/texmacs
Contact [email protected]
Regular mail Prof. dr. Joris van der Hoeven
Laboratoire d'informatique de l'École polytechnique
LIX, UMR 7161 CNRS
Campus de l'École polytechnique
1, rue Honoré d'Estienne d'Orves
Bâtiment Alan Turing, CS35003
91120 Palaiseau, France
Table B.1. Summary of the principal information about GNU TEXMACS .
Disclaimers.
TEXMACS includes the LibAes library with the following copyright notice:
Copyright (c) 1998-2013, Brian Gladman, Worcester, UK. All rights reserved.
215
216 About GNU TEXMACS -1.99.9
The software includes a text editor with support for mathematical formulas, a small tech-
nical picture editor and a tool for making presentations from a laptop. Moreover, TEXMACS
can be used as an interface for many external systems for computer algebra, numerical
analysis, statistics, etc. New presentation styles can be written by the user and new features
can be added to the editor using the Scheme extension language. A native spreadsheet
and tools for collaborative authoring are planned for later.
TEXMACS runs on all major Unix platforms and Windows. Documents can be saved in
TEXMACS, Xml or Scheme format and printed as Postscript or Pdf les. Although
TEXMACS is not based on TEX/LATEX, high quality converters exist for LATEX. Documents
can also be exported to Html/Mathml for publication on the web.
However, it is strange, and a shame, that the main mathematical programs which are
currently being used are proprietary. The main reason for this is that mathematicians often
do not consider programming as a full scientic activity. Consequently, the development
of useful software is delegated to engineers and the resulting programs are used as black
boxes.
This subdivision of scientic activity is very articial: it is often very important from a
scientic point of view to know what there is in the black box. Inversely, deep scientic
understanding usually leads to the production of better software. Consequently, I think
that scientists should advocate the development of software as a full scientic activity,
comparable to writing articles. Then it is clear too that such software should be diused
in a way which is compatible with the requirements of science: public availability, repro-
ducibility and free usability.
The GNU TEXMACS system, which is part of the GNU project, was designed and written
by Joris van der Hoeven. The system was inspired both by the TEX system, written by D.
Knuth, and by Emacs, written by R. Stallman. Special thanks goes to them, as well as
to the C.N.R.S. (the French national institute for scientic research), which employs me
and authorized me to freely distribute this program. Further thanks go to the contributors
below.
B.3 The authors of TEXMACS 217
Massimiliano Gubinelli is responsible for the Qt port and several improvements for
the MacOS X platform.
Andrey Grozin has constantly helped us with many issues: interfaces to several
computer algebra systems, support for Cyrillic, tools for the manipulation of dic-
tionaries, etc.
François Poulain has made signicant improvements in the LATEX import and export
converters and has contributed numerous other patches.
David Allouche replaced the gencc preprocessor by the more standard C++ tem-
plate system. He also made many other patches, bug reports and he did a lot of the
administration of TEXMACS.
Denis Raux maintains the website, the mailing lists and the Windows version. He
also works on TEXMACS packages for various platforms.
Grégoire Lecerf helped us with many issues: document encryption, Pdf export,
extensive testing, bug reports and xes, etc.
Miguel de Benito Delgado works on the Qt port, the usage of TEXMACS to develop
and browse its Scheme code and general improvements to the user experience.
Henri Lesourd developed a native mode for drawing technical pictures inside
TEXMACS. He also xed a bug in the presentation mode.
Philippe Joyez provided help concerning the support of various image formats and
the compatability with Inkscape.
Darcy Shen is the main translator for Chinese. He also helped with the CJK support,
contributed various patches, and provided a lot of community work.
David Michel provided help concerning the Qt-based Windows port and several
portability issues.
Andreas Seidl has been helping with documentation, a Cygwin package and several
other things.
Karim Belabas designed and developed with me the rst protocol for interfacing
TEXMACS with scientic computation or computer algebra systems. He also imple-
mented the interface with the Pari system.
Felix Breuer helped with the support of Unicode and other character encodings. He
also made a donation to the project.
Josef Weidendorfer made several patches for improving the performance of TEXMACS.
Basile Audoly contributed a series of detailed bug descriptions and suggestions for
improvements.
Sam Liddicott for several patches, including hyperlink support for Pdf les.
Zou Hu for his help on CJK support and the Windows port.
Johann Dréo for the new TEXMACS icon and many other graphics.
Bill Page and David Mentré for the support of the free version of Axiom.
Chu-Ching Huang for writing CAS documentation and making a Knoppix CD for
TEXMACS.
Kai Krüger xed several details for the new Maple interface.
Mickael Floc'hlay and Arnaud Ébalard for their work on searching for help.
Igor V. Kovalenko and Teemu Ikonen for their help on debugging TeXmacs and a
few patches.
Rob Clark made a patch which improves the system time support.
B.3 The authors of TEXMACS 219
Bruno Haible helped coining the name TEXMACS, thereby acknowledging some initial
inspiration from both TEX and Emacs.
Axiom Andrey Grozin, Bill Page, David Mentré and Tim Daly.
R Michael Lachmann.
Rennes Métropôle and the C.N.R.S. for nancially supporting the development of
TEXMACS.
Christoph Benzmueller and his team for nancially supporting the development of
TEXMACS.
Springer-Verlag for their nancial support for making a better Windows version.
Jean-Claude Fernandez, Fabien Salvi and the other persons from the CRI host and
administrate the TEXMACS website.
Marciano Siniscalchi ported TEXMACS to Cygwin. His work was further perfected
by Loïc Pottier. Andreas Seidl made a the standard Cygwin package.
Ralf Treinen and others has been ensuring the portability of TEXMACS to all archi-
tectures supported by Debian Gnu/Linux.
Bruno Haible and Gregory Wright helped with porting TEXMACS to the SUN system
and maintaining it.
Philipp Tomsich and Chuck Sites for their help with the IRIX port.
B.3 The authors of TEXMACS 221
Christophe Merlet and Bo Forslund helped with making a portable RPM package.
Jean Pierre Demailly and Yves Potin made TEXMACS part of the CNDP project to
support free software.
German. Dietmar Jung, Hans Dembinski, Jan Ulrich Hasecke, Christoph Strobel,
Joris van der Hoeven, Thomas Langen, Ralf Treinen.
Italian. Andrea Centomo, Lucia Gecchelin, Xav and Daniele Pighin, Gian Luigi Grag-
nani.
Spanish. Álvaro Cantero Tejero, Pablo Ruiz Múzquiz, David Moriano Garcia, Oray
Vladimir Luna Cárdenas.
222 About GNU TEXMACS -1.99.9
Neel Krishnaswami, Friedrich Laher, Winter Laite, Anthony Lander, Russell Lang, David
Latreyte, Christopher Lee, Milan Lehocky, Torsten Leidig, Patrick Lenz, Kalle Lertola,
Tristan Ley, Joerg Lippmann, Marc Longo, Pierre Lorenzon, Ralph Lõvi, V. S. Lugovsky,
Gregory Lussiana, Bud Maddock, Duraid Madina, Camm Maguire, Yael Maguire, Paul
Magwene, Jeremiah Mahler, Vincent Maillot, Giacomo Mallucci, Lionel Elie Mamane,
Sourav K. Mandal, Andy P. Manners, Yun Mao, Chris Marcellin, Sylvain Marchand,
Bernd Markgraf, Eric Marsden, Chris Marston, Evan Martin, Carlos Dehesa Martínez,
Paulo Jorge de Oliveira Cantante de Matos, Tom McArdell, Alisdair McDiarmid, Bob
McElrath, Robert Medeiros, Phil Mendelsohn, Sébastien de Menten, Jean-Michel Mermet,
Jon Merriman, Herve le Meur, Ingolf Meyer, Amir Michail, Franck Michel, Arkadiusz
Mi±kiewicz, Sasha Mitelman, Dirk Moebius, Jack Mott, Jan David Mol, Klaus-Dieter
Möller, Harvey Monder, Juan Fresneda Montano, André Moreau, Guillaume Morin, Julian
Morrison, Bernard Mourrain, Stephan Mucha, Toby Muhlhofer, Vijayendra Munikoti,
Nathan Myers, Norbert Nemec, Thomas Neumann, Thien-Thi Nguyen, Han-Wen Nienhuys,
Nix N. Nix, Eduardo Nogueira, Immanuel Normann, Jean-Baptiste Note, Ralf Nuetzel,
Kostas Oikonomou, Ondrej Pacovsky, Bill Page, Santtu Pajukanta, Pierre Pansu, Ilya Papi-
ashvili, Bernard Parisse, Frédéric Parrenin, André Pascual, Fernández Pascual, Yannick
Patois, Alen L. Peacock, François Pellegrini, Antonio Costa Pereira, Enrique Perez-Terron,
Jacob Perkins, Bernard Perrot, Jan Peters, Jean Peyratout, Jacques Peyriere, Valery
Pipin, Dimitri Pissarenko, Yves Pocchiola, Benjamin Podszun, Martin Pollet, Benjamin
Poussin, Isaías V. Prestes, Rui Prior, Julien Puydt, Nguyen-Dai Quy, Manoj Rajagopalan,
Ramakrishnan, Adrien Ramparison, Nicolas Ratier, Olivier Ravard, Leo Razoumov, Ken-
neth Reinhardt, Cesar A. Rendon, Christian Requena, Diego Restrepo, Chris Retford,
Robert Ribnitz, Thomas CLive Richards, Staffan Ringbom, Eric Ringeisen, Christian
Ritter, William G. Ritter, Will Robinson, Juan Pablo Romero, Pascal Romon, Juergen
Rose, Mike Rosellini, Mike Rosing, Bernard Rousseau, Eyal Rozenberg, Olivier Ruatta,
Filippo Rusconi, Gaetan Ryckeboer, Philippe Sam-Long, John Sandeman, Duncan Sands,
Breton Saunders, Claire Sausset, David Sauzin, Gilles Schaeer, Guido Schimmels, Rainer
Schöpf, David Schweikert, Stefan Schwertheim, Rui Miguel Seabra, Chung-Tsun Shieh,
Sami Sieranoja, Vasco Alexandre da Silva Costa, Marciano Siniscalchi, Daniel Skarda,
Murray Smigel, Václav milauer, Dale P. Smith, Luke Snow, René Snyders, Pekka Sor-
jonen, Kasper Souren, Rodney Sparapani, Bas Spitters, Ivan Stanisavljevic, Starseeker,
Harvey J. Stein, Peter Sties, Bernard Stloup, Peter Stoehr, Thierry Stoehr, James Su, Prze-
myslaw Sulek, Ben Sussman, Roman Svetlov, Milan Svoboda, Dan Synek, Pan Tadeusz,
Luca Tagliacozzo, Sam Tannous, John Tapsell, Dung TaQuang, Gerald Teschl, Laurent
Thery, Eric Thiébaut, Nicolas Thiery, Helfer Thomas, Reuben Thomas, Dylan Thurston,
Kurt Ting, Janus N. Tøndering, Philippe Trébuchet, Marco Trevisani, Boris Tschirschwitz,
Elias Tsigaridas, Michael M. Tung, Andreas Umbach, Miguel A. Valle, Rémi Vanicat,
Harro Verkouter, Jacques Vernin, Sawan Vithlani, Philip A. Viton, Marius Vollmer, Guy
Wallet, Adam Warner, Thomas Wawrzinek, Maarten Wegewijs, Duke Whang, Lars Willert,
Grayson Williams, Barton Willis, Claus-Peter Wirth, Ben Wise, Wiebe van der Worp,
Pengcheng Wu, Damien Wyart, Wang Yin, Lukas Zapletal, Volker Zell, Oleg Zhirov, Vadim
V. Zhytnikov, Richard Zidlicky, Sascha Ziemann, Reinhard Zierke, Paul Zimmermann.
B.3.8. Contacting us
You can either contact us by email at
[email protected]
or by regular mail at
224 About GNU TEXMACS -1.99.9
Below, we briey describe the most important changes which have occurred in TEXMACS
since version 0.3.3.15. We also maintain a more detailed change log.
In general, when upgrading to a new version, we recommend you to make backups of your
old TEXMACS les before opening them with the newer version of TEXMACS. In the unlikely
case when your old le does not open in the correct way, please send a bug report to
[email protected]
and send your old document as an attached le. Do not forget to mention your version of
TEXMACS and the system you are using.
Moreover, functions have systematically been replaced by macros. The few built-in func-
tions which may take an arbitrary number of arguments have been rewritten using the new
xmacro construct. If you ever wrote such a function yourself, then you will need to rewrite
it too.
The new approach favorites a uniform treatment of macros and functions and makes the
internal representation match with the corresponding Scheme representation. More and
more information about tags will gradually be stored in the D.R.D. (Data Relation De-
nition). This information is mostly determined automatically using heuristics.
Notice that some perverse errors might arise because of the above changes. Please keep
copies of your old les and report any suspicious behaviour to us.
⌘ is equivalent to ⌘ and ⌘ - ⌘ to ⌥ .
Mode dependent commands are now prexed by ⌥ . In particular, accents are typed
using ⌥ instead of E- .
Variants are now obtained using ⇥ instead of * and you can circle back using ⇧⇥ .
Greek characters are now typed using ⌥⌃ , ⇧F7 , or the hyper modier, which can be
congured in Edit!Preferences. You may also obtain Greek characters as variants
of Latin characters. For instance, P ⇥ yields .
The signication of the cursor keys in combination with control, alt and meta has
changed.
You may choose between several look and feels for the keyboard behaviour in Edit!
Preferences!Look and feel. The default is Emacs, but you may choose Old style if you want
to keep the behaviour to which you may be used now.
The Insert menu has been split up into the menus Insert, Text and Mathematics.
The Text and Paragraph menus have been merged together in one Format menu.
Options has been spread out across Document, View, Tools and Edit!Preferences.
One of the best ways to contribute to GNU TEXMACS is by using it a lot, talk about it
to friends and colleagues, and to report me about bugs or other unnatural behaviour.
Please mention the fact that you wrote articles using TEXMACS when submitting them.
You can do this by putting the made-by-TeXmacs tag somewhere inside your title using
Insert!Title!TeXmacs notice.
Besides these general (but very important) ways to contribute, your help on the more
specic subjects below would be appreciated. Don't hesitate to contact us if you want
to contribute to these or any other issues. In the Help menu you can nd documentation
about the source code of TEXMACS, its document format, how to write interfaces with other
formats, and so on.
229
230 Contributing to GNU TEXMACS
R o u t i n g N u m b e r : 124071889
A c c o u n t N u m b e r : 1296789
Don't forget to note on your check or e-mail for wire transfers that the money should be
spent on the TeXmacs projet. In addition you may specify a more specic purpose on
which you would like us to spend the money. You may also contact us for a more detailed
discussion on this issue.
Important notes.
Let the SPI Treasurer ([email protected]) know if you have problems. When you
have completed the electronic wire, please send a copy of the receipt to the above address
so there is a copy of your donation. The copy you send to the treasurer is important. You
may also want to contact the TeXmacs team in order to make sure that the money arrived
on the TeXmacs account.
Note: The SPI address and account numbers may change from time to time. Please do
not copy the address and account numbers, but rather point to the page http://www.spi-
inc.org/donations to ensure that donors will always see the most current information.
Donations in Europe can be done through our partner in Germany, s e.V. If you are
interested in using their bank account (to save international money transfer costs), please
check the instructions on http://www.ffis.de/Verein/spi-en.html.
There is a high need for good documentation on TEXMACS as well as people who are willing
to translate the existing documentation into other languages. The aim of this site is to
provide high quality documentation. Therefore, you should carefully read the guide-lines
on how to write such documentation.
High quality documentation is both a matter of content and structure. The content itself
has to be as pedagogic as possible for the targeted group of readers. In order to achieve
this, you should not hesitate to provide enough examples and illustrative screen shots
whenever adequate. Although the documentation is not necessarily meant to be complete,
we do aim at providing relatively stable documentation. In particular, you should have
checked your text against spelling errors.
It is also important that you give your documentation as much structure as possible,
using special markup from the tmdoc style le. This structure can be used in order to
automatically compile printable books from your documentation, to make it suitable for
dierent ways of viewing, or to make it possible to eciently search a certain type of
information in the documentation. In particular, you should always provide copyright and
license information, as well as indications on how to traverse your documentation, if it
contains many les.
When selecting the tmdoc document style, the top level Manual menu will appear automat-
ically, together with some additional icons. The most important tags for documentation
purposes can be found in this menu.
C.3 Contribute to the GNU TEXMACS documentation 231
Warning C.1. Don't forget to select Document!Language!Your language for each trans-
lated le. This will cause some content to be translated automatically, like the menus
or some names of keys. Also, we recommend to run the TEXMACS spell checker on each
translated document; this also requires the prior selection of the right document language.
about. Various information about the TEXMACS system (authors, changes, etc.).
Please try to keep the number of entries per directory reasonably small.
File names in the main directory should be of the form type-name.language.tm. In the
other directories, they are of the form name.language.tm. Here type is a major indication
for the type of documentation; it should be one of the following:
You should try to keep the documentation on the same topic together, regardless of the
type. Indeed, this allows you to nd more easily all existing documentation on a particular
topic. Also, it may happen that you want to include some documentation which was
initially meant for the tutorial in the manual. The language in which is the documen-
tation has been written should be a two letter code like en, fr, etc. The main name of
your le should be the same for the translations in other languages. For instance, man-
keyboard.en.tm should not be translated as man-clavier.fr.tm.
All TEXMACS documentation falls under the GNU Free Documentation License. If you
want your documentation to be included in TEXMACS, then you have to agree that it will
be distributed under this license too. The license information
should be specied at the end of each le. This can be done by clicking on Manual!Meta
data!GNU FDL.
In a similar manner, you may add a copyright notice by clicking on Manual!Meta data!
Copyright. You keep (part of) the copyright of any documentation that you will write for
TEXMACS. When you or others make additions to (or modications in, or translations of)
the document, then you should add your own name (at an appropriate place, usually at
the end) to the existing copyright information. The rst argument of the tmdoc-copyright
macro contains a year or a period of years. Each remaining argument indicates one of the
copyright holders. When combining (pieces of) several documents into another one, you
should merge the copyright holders. For cover information (on a printed book for instance),
you are allowed to list only the principal authors, but a complete list should be given at a
clearly indicated place.
As a general rule, you should avoid the use of sectioning commands inside the TEXMACS
documentation and try to write small help pages on well identied topics. At a second
stage, you should write recursive meta help les which indicate how to traverse the
documentation in an automatic way. This allows the reuse of a help page for dierent
purposes (a printed manual, a web-oriented tutorial, etc.).
The tmdoc style provides three markup macros for indicating how to traverse documenta-
tion. The traverse macro is used to encapsulate regions with traversal information. It can
be inserted using the Traverse entry in the Manual!Traversal or menu. The branch and
extra-branch macros indicate help pages which should be considered as a subsection and
an appendix respectively, whereas the continue macro indicates a follow-up page. Each of
these macros should be used inside a traverse environment and each of these macros takes
two arguments. The rst argument describes the link and the second argument gives the
physical relative address of the linked le.
Typically, at the end of a meta help le you will nd several branch or continue macros,
inside one traverse macro. At the top of the document, you should also specify a title for
your document using the tmdoc-title macro, as described before. When generating a printed
manual from the documentation, a chapter-section-subsection structure will automatically
be generated from this information and the document titles. Alternatively, one might
automatically generate additional buttons for navigating inside the documentation using
a browser.
C.3 Contribute to the GNU TEXMACS documentation 233
The main environment which is used for explanations of macros, environment variables,
Scheme functions, etc. is inserted using the Explanatory item entry of the Manual!Explain
and menus. The environment comes with two arguments: the rst argument consists of
the concept or concepts to be explained, and the second one contains the actual explana-
tion. A typical example would be the following:
hdemo-tagjbodyi
hdemo-tagjextrasjbodyi (short and long versions of a demo tag)
The demo-tag is used for demonstration purposes and decorates the body argument. An
optional argument extras can be given with details on the way to decorate the body.
In this example, we notice that all Scheme code was encapsulated into scm tags (see
Insert!Program!Inline code!Scheme) and arguments were tagged using scm-arg.
The following markup elements can be used in order to describe various graphical user
interface elements, such as keyboard shortcuts, menus or icons.
shortcut
This macro is used to indicate a keyboard shortcut for a Scheme command. For
instance, the shortcut for (new-buffer) is ? .
key
This unary macro is used for explicit keyboard input. For instance, when giving
A C-b return as argument, the result is ⇧A ⌃B ↩ .
menu
This function with an arbitrary number of arguments indicates a menu like File or
Document!Language. Menu entries are automatically translated by this function.
234 Contributing to GNU TEXMACS
submenu
Consider the following sentence:
You may use the Load and Save entries of the File menu in order to load
and save les.
In this example, the menu entries Load and Save were marked using the submenu tag,
which takes the implicit File menu as its rst invisible argument. This invisible argument
is still taken into account when building the index (for instance). In a similar way, we
provide subsubmenu and subsubsubmenu tags.
icon
Can be used in order to specify one of the TEXMACS icons, such as and . The macro
takes one argument with the le name of the icon (the full path is not needed).
screenshot
Similar to the icon tag, but for screenshots.
cursor
This macro can be used to indicate a cursor position, as in a2 + b2j = c2.
small-focus, small-envbox
This macro can be used for indicating the visual aids around the current focus and the
b
further outer context (e.g. a + c ), in the case of inline elements.
big-focus, big-envbox
Block versions of small-focus and small-envbox.
Notice that the contents of none of the above tags should be translated into foreign lan-
guages. Indeed, for menu tags, the translations are done automatically, so as to keep the
translations synchronized with the translations of the actual TEXMACS menus. In the cases
of markup, styles, packages and d.t.d.s, it is important to keep the original name, because
it often corresponds to a le name.
The Manual!Annotate and menus contain the following useful macros for common
annotations. You should use them whenever appropriate.
markup
This macro is used in order to indicate a macro or a function like section.
src-arg
This macro should be used in order to indicate macro arguments such as body.
src-var
This macro is used for the indication of environment variables such as font-size.
C.4 Internationalization 235
src-length
This macro is used in order to indicate a length such as 12em.
tmstyle
This macro indicates the name of a TEXMACS style le or package like article.
tmpackage
This macro indicates the name of a TEXMACS package like std-markup.
tmdtd
This macro indicates the name of a TEXMACS d.t.d. like number-env.
hassignjred-textjhmacrojbodyjhwithjcolor jredjbodyiii
In this example, we used the keyboard shortcut ⌘- in order to deactivate the source
code inside an active outer document.
descriptive-table
For descriptive tables; such tables can be used to document lists of keyboard shortcuts,
dierent types of markup, etc.
C.4. Internationalization
You tell me about any special typographical rules in your language and handy
keystrokes for producing special characters.
I take care of the hyphenation and typographical issues, but you test them.
236 Contributing to GNU TEXMACS
If you have enough time, you may also consider the translation of (part of) the
existing documentation.
Of course, the support for languages get out of date each time that new features are added
to TEXMACS. For this reason, we also maintain a le miss-english-yourlanguage .dic
with all missing translation for your language, once that it has been added. Please do not
hesitate to send inclomplete versions of english-yourlanguage .dic or miss-english-
yourlanguage .dic; someone else may be willing to complete them.
If you are familiar with TEX, LATEX, Html, Xml, Sgml, Mathml, Pdf, Rtf, or any other
frequently used data format, please consider contributing to writing good converters for one
or more of these formats. In Help!Source code!Data format you will nd details about the
TEXMACS data format and in Help!Source code!Data conversion we give some suggestions
which might be helpful for these projects.
Ports to PDAs, rst of all those which run Linux. It should be noticed that, with
the current support for Freetype, TEXMACS no longer depends on TEX/LATEX for
its fonts. We expect it to be possible to obtain a reasonable ports for TEXMACS on
PDAs with 32Mb and at least 100MHz clock-speed. Of course, one also needs to
customize the menus and/or icon bars, but this should not be hard.
TEXMACS ports to PDAs would be particularly interesting in combination with the
available plug-ins for doing scientic computations.
It is quite easy to write interfaces between TEXMACS and computer algebra systems or other
scientic programs with structured output. Please consider writing interfaces between
TEXMACS and your favorite system(s). TEXMACS has already been interfaced with several
other free systems, like Giac, Macaulay 2, Maxima, GNU Octave, Pari, Qcl, gTybalt, Yacas.
Detailed documentation on how to add new interfaces is available in the Help!Interfacing
menu.
It should be quite easy to write a plug-in for TEXMACS for doing instant messenging or live-
conferencing. We are very interested in people who would like to help with this. The same
techniques might be used for collaborative authoring and educational purposes.
C.9 Become a TEXMACS developer 237
Besides live conferencing, we are also interested by people who are willing to program better
integration of TEXMACS with the web. As a rst step, this would require an internal C++
plug-in based on Wget or Curl for accessing web-pages, which supports cookies, security,
etc. At a second stage, these features should be exploited by the Html converters. At the
last stage, one might develop more general web-based services.
Apart from the kind of contributions which have been described in more detail above,
there are many more issues where your help would be appreciated. Please take a look at
our plans for the future for more details. Of course, you should feel free to come up with
your own ideas and share them with us on the [email protected] mailing list!
Appendix D
Interfacing TEXMACS with other programs
D.1. Introduction
In this chapter we describe how to interface TEXMACS with an extern application. Such
interfaces should be distributed in the form of plugins. The plug-in may either contain the
extern application, or provide the glue between TEXMACS and the application. Usually,
interfaces are used interactively in shell sessions (see Insert!Session). But they may also
be designed for background tasks, such as spell checking or typesetting.
The communication between TEXMACS and the application takes place using a customizable
input format and the special TEXMACS meta-format for output from the plug-in. The meta-
format enables you to send structured output to TEXMACS, using any common format like
verbatim, LATEX, Postscript, HTML, or TEXMACS itself. This is useful when adding a
TEXMACS interface to an existing system, since LATEX or Postscript output routines are
often already implemented. It will then suce to put the appropriate markers in order to
make a rst interface with TEXMACS.
As soon as basic communication between your application and TEXMACS is working, you
may improve the interface in many ways. Inside shell sessions, there is support for prompts,
default inputs, tab-completion, mathematical and multi-line input, etc. In general, your
application may take control of TEXMACS and modify the user interface (menus, keyboard,
etc.) or add new Scheme routines to TEXMACS. Your application may even extend the
typesetter.
In the directory $TEXMACS_PATH/examples/plugins, you can nd many examples of simple
plug-ins. In the next sections, we will give a more detailed explanation of the interfacing
features of TEXMACS on the hand of these examples. In order to try one of these examples,
we recall that you just have to copy it to either one of the directories
$TEXMACS_PATH/plugins
$TEXMACS_HOME_PATH/plugins
and run the Makefile (if there is one).
The conguration and the compilation of the minimal plug-in is described in the chapter
about plug-ins. We will now study the source le minimal/src/minimal.cpp. Essentially,
the main routine is given by
239
240 Interfacing TEXMACS with other programs
int
main () {
display-startup-banner
while (true) {
read-input
display-output
}
return 0;
}
By default, TEXMACS just send a '\n'-terminated string to the application as the input.
Consequently, the code for read-input is given by
char buffer[100];
cin.getline (buffer, 100, '\n');
The output part is more complicated, since TEXMACS needs to have a secure way for
knowing whether the output has nished. This is accomplished by encapsulating each piece
of output (in our case both the display banner and the interactive output) inside a block
of the form
The DATA_ESCAPE is used for producing the DATA_BEGIN and DATA_END characters in the
message using the rewriting rules
The format species the format of the message. For instance, in our example, the code
of display-startup-banner is given by
Remark D.1. For synchronization purposes, TEXMACS will assume that the output is
nished as soon as it encounters the DATA_END which closes the initial DATA_BEGIN . So all
output has to be inside one single outer DATA_BEGIN - DATA_END block: if you send more blocks,
then TEXMACS will retake control before reading all your output. For certain formats (such
as verbatim), it is possible to nest DATA_BEGIN - DATA_END blocks though, as we will see below.
Remark D.2. In our example, the C++ code for the application is included in the plug-in.
In the case when you are writing a TEXMACS interface for an existing application myapp , the
convention is to create a --texmacs option for this program. Then it is no longer necessary
to have myapp/src and myapp /bin directories for your plug-in and it suces to congure
the plug-in by putting something like the following in myapp/progs/init-myapp.scm:
(plugin-configure myapp
(:require (url-exists-in-path? "myapp"))
(:launch "myapp --texmacs")
(:session "Myapp"))
In the case when you do not have the possibility to modify the source code of myapp, you
typically have to write an input/output lter tm_myapp for performing the appropriate
rewritings. By looking at the standard plug-ins distributed with TEXMACS in
$TEXMACS_PATH/plugins
you can nd several examples of how this can be done.
In the previous section, we have seen that output from applications is encapsulated in
blocks of the form
Currently implemented formats include verbatim, latex, html, ps, and scheme. Certain
formats, such as verbatim, allow the message to recursively contain blocks of the same
form. The scheme format is used for sending TEXMACS trees in the form of Scheme expres-
sions.
The f o r m u l a plug-in.
The formula plug-in demonstrates the use of LATEX as the output format. It consists of
the les
formula/Makefile
formula/progs/init-formula.scm
formula/src/formula.cpp
The body of the main loop of formula.cpp is given by
242 Interfacing TEXMACS with other programs
int i, nr;
cin >> nr;
cout << DATA_BEGIN << "latex:";
cout << "$";
for (i=1; i<nr; i++)
cout << "x_{" << i << "}+";
cout << "x_{" << i << "}$";
cout << DATA_END;
cout.flush ();
Similarly, the use of nested output blocks is demonstrated by the nested plug-in; see in
particular the source le nested/src/nested.cpp.
The m a r k u p plug-in.
It is important to remind that structured output can be combined with the power of
TEXMACS as a structured editor. For instance, the markup plug-in demonstrates the deni-
tion of an additional tag foo, which is used as an additional primitive in the output of the
application. More precisely, the markup plug-in consists of the following les:
markup/Makefile
markup/packages/session/markup.ts
markup/progs/init-markup.scm
markup/src/markup.cpp
The style package markup.ts contains the following denition for foo:
The foo tag is used in the following way in the body of the main loop of markup.cpp:
D.4 Output channels, prompts and default input 243
char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN << "latex:";
cout << "$\foo{" << buffer << "}$";
cout << DATA_END;
cout.flush ();
Notice that the style package markup.ts also denes the markup-output environment:
hassignjmarkup-outputjhmacrojbodyjhgeneric-outputjhwithjpar-modejcenterjbodyiiii
This has the eect of centering the output in sessions started using Insert!Session!Markup.
the TEXMACS meta-format also allows you to use blocks of the form
Here channel species an output channel to which the body message has to be sent.
The default output channel is output, but we also provide channels prompt and input for
specifying the prompt and a default input for the next input in a session. Default inputs
may be useful for instance be useful for demo modes of computer algebra systems. In the
future, we also plan to support error and status channels.
The p r o m p t plug-in.
The prompt plug-in shows how to use prompts. It consists of the les
prompt/Makefile
prompt/progs/init-prompt.scm
prompt/src/prompt.cpp
The routine for displaying the next prompt is given by
void
next_input () {
counter++;
cout << DATA_BEGIN << "prompt#";
cout << "Input " << counter << "] ";
cout << DATA_END;
}
char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN << "verbatim:";
cout << DATA_BEGIN;
cout << "latex:$" << buffer << "$";
cout << DATA_END;
next_input ();
cout << DATA_END;
cout.flush ();
The application may use command as a very particular output format in order to send
Scheme commands to TEXMACS. In other words, the block
will send the command cmd to TEXMACS. Such commands are executed immediately after
reception of DATA_END . We also recall that such command blocks may be incorporated
recursively in larger DATA_BEGIN - DATA_END blocks.
The m e n u s plug-in.
The nested plug-in shows how an application can modify the TEXMACS menus in an inter-
active way. The plug-in consists of the les
menus/Makefile
menus/progs/init-menus.scm
menus/src/menus.cpp
The body of the main loop of menus.cpp simply contains
char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN << "verbatim:";
cout << DATA_BEGIN << "command:(menus-add ""
<< buffer << "")" << DATA_END;
cout << "Added " << buffer << " to menu";
cout << DATA_END;
cout.flush ();
(tm-menu (menus-menu)
(for (entry menu-items)
((eval entry) (insert entry))))
(plugin-configure menus
(:require (url-exists-in-path? "menus.bin"))
(:launch "menus.bin")
(:session "Menus"))
(menu-bind plugin-menu
(:require (in-menus?))
(=> "Menus" (link menus-menu)))
(plugin-configure menus
(:require (url-exists-in-path? "menus.bin"))
(:launch "menus.bin")
(:session "Menus"))
Until now, we have always considered interfaces between TEXMACS and applications which
are intended to be used interactively in shell sessions. But there also exists a Scheme
command
for evaluating an expression using the application. Here plugin is the name of the plug-in,
session the name of the session and expression a Scheme expression which represents
a TEXMACS tree.
The s u b s t i t u t e plug-in.
Background evaluations may for instance be used in order to provide a feature which
allows the user to select an expression and replace it by its evaluation. For instance,
the substitute plug-in converts mathematical LATEX expressions into TEXMACS, and it
provides the ? keyboard shortcut for replacing a selected text by its conversion. The plug-
in consists of the following les
substitute/Makefile
substitute/progs/init-substitute.scm
substitute/src/substitute.cpp
The main evaluation loop of substitute.cpp simply consists of
246 Interfacing TEXMACS with other programs
char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN;
cout << "latex:$" << buffer << "$";
cout << DATA_END;
cout.flush ();
Moreover, the conguration le init-substitute.scm contains the following code for
replacing a selected region by its evaluation
(define (substitute-substitute)
(import-from (texmacs plugin plugin-cmd))
(if (selection-active-any?)
(let* ((t (tree->stree (the-selection)))
(u (plugin-eval "substitute" "default" t)))
(clipboard-cut "primary")
(insert (stree->tree u)))))
(kbd-map
("C-F12" (substitute-substitute)))
Notice that these routines should really be dened in a separate module for larger plug-ins.
The s e c u r e plug-in.
Another example of using an interface in the background is the secure plug-in which
consists of the les
secure/Makefile
secure/packages/secure.ts
secure/progs/init-secure.scm
secure/progs/secure-secure.scm
secure/src/secure.cpp
Just as substitute.cpp above, the main program secure.cpp just converts mathemat-
ical LATEX expressions to TEXMACS. The secure-secure.scm module contains the secure
Scheme routine latexer:
(tm-define (latexer s)
(:type (tree -> object))
(:synopsis "convert LaTeX string to TeXmacs tree using plugin")
(:secure #t)
(plugin-eval "secure" "default" (tree->string s)))
It is important to dene latexer as being secure, so that it can be used in order to dene
additional markup using the extern primitive. This is done in the style le secure.ts:
The TEXMACS meta-format allows application output to contain structured text like math-
ematical formulas. In a similar way, you may use general TEXMACS content as the input
for your application. By default, only the text part of such content is kept and sent to the
application as a string. Moreover, all characters in the range 031 are ignored, except for
'\t' and '\n' which are transformed into spaces. There are two methods to customize
the way input is sent to your application. First of all, the conguration option
(:serializer ,routine)
species a scheme function for converting TEXMACS trees to string input for your applica-
tion, thereby overriding the default method. This method allows you for instance to treat
multi-line input in a particular way or the perform transformations on the TEXMACS tree.
The :serialize option is a very powerful, but also a very abstract way to customize input:
it forces you to write a complete input transformation function. In many circumstances,
the user really wants to rewrite two dimensional mathematical input to a more standard
a
form, like rewriting b to ((a)/(b)). Therefore, a second way for customizing the input is
to use the command
(plugin-input-converters myplugin
rules)
This command species input conversion rules for myplugin for mathematical input and
reasonable defaults are provided by TEXMACS. Each rule is of one of the following two forms:
(symbol conversion)
(tag routine)
species that routine will be used as the conversion routine for tag . This routine
should just write a string to the standard output. The Scheme function plugin-
input may be used for the recursive transformation of the arguments of the tag.
The i n p u t plug-in.
248 Interfacing TEXMACS with other programs
The input plug-in demonstrates the use of customized mathematical input. It consists of
the les
input/Makefile
input/packages/session/input.ts
input/progs/init-input.scm
input/progs/input-input.scm
input/src/input.cpp
The Scheme conguration code in init-input.scm is given by
(plugin-configure input
(:require (url-exists-in-path? "input.bin"))
(:launch "input.bin")
(:session "Input"))
(when (supports-initialize?)
(lazy-input-converter (input-input) input))
The predicate supports-initialize? tests whether the plug-in is indeed operational (that
is, whether input.bin exists in the path). The conversion rules in the module (input
input) are added in a lazy manner. In other words, the le input-input.scm will only be
loaded when we explicitly request to make a conversion. The conversion rules in input-
input.scm are given by
(plugin-input-converters input
(frac input-input-frac)
(special input-input-special)
("<vee>" "||")
("<wedge>" "&&"))
a
This will cause _ and ^ to be rewritten as || and && respectively. Fractions b
are rewritten
as ((a):(b)) using the routine
(define (input-input-frac t)
(display "((")
(plugin-input (car t))
(display "):(")
(plugin-input (cadr t))
(display "))"))
In the additional style le input.ts we also dened some additional markup special:
hassignjspecial j
hmacrojbodyj
hblockj
htformatj
hcwithj1j1j1j1jcell-backgroundjpastel greenij
htablej
hrowjhcelljbodyiiiiiii
D.8 Tab-completion 249
(define (input-input-special t)
(display "[[[SPECIAL:")
(plugin-input (car t))
(display "]]]"))
As to the C++ code in input.cpp, the startup banner automatically puts the shell session
in mathematical input mode:
In the main loop, we content ourselves the reproduce the input as output:
char buffer[100];
cin.getline (buffer, 100, '\n');
cout << DATA_BEGIN << "verbatim:";
cout << buffer;
cout << DATA_END;
cout.flush ();
D.8. Tab-completion
By default, TEXMACS looks into your document for possible tab-completions. Inside sessions
for your application, you might wish to customize this behaviour, so as to complete built-
in commands. In order to do this, you have to specify the conguration option
(:tab-completion #t)
in your init-myplugin .scm le, so that TEXMACS will send special tab-completion requests
to your application whenever you press ⇥ inside a session. These commands are of the form
Here DATA_COMMAND stands for the special character '\20' (ASCII 16). The input-string
is the complete string in which the ⇥ occurred and the cursor-position is an integer
which species the position of the cursor when you pressed ⇥ . TEXMACS expects your
application to return a tuple with all possible tab-completions of the form
Here root corresponds to a substring before the cursor for which completions could be
found. The strings completion-1 until completion-n are the list of completions as they
might be inserted at the current cursor position. If no completions could be found, then
you may also return the empty string.
Remark D.4. In principle, the tab-completion mechanism should still work in mathe-
matical input mode. In that case, the input-string will correspond to the serialization
of the TEXMACS input.
Remark D.5. The way TEXMACS sends commands to your application can be customized
in a similar way as for the input: we provide a :commander conguration option for this,
which works in a similar way as the :serializer option.
The c o m p l e t e plug-in.
A very rudimentary example of how the tab-completion mechanism works is given by the
complete plug-in, which consists of the following les:
complete/Makefile
complete/progs/init-complete.scm
complete/src/complete.cpp
The startup banner in complete.cpp takes care of part of the conguration:
void
format_plugin () {
// The configuration of a plugin can be completed at startup time.
// This may be interesting for adding tab-completion a posteriori.
cout << DATA_BEGIN << "command:";
cout << "(plugin-configure complete (:tab-completion #t))";
cout << DATA_END;
}
char buffer[100];
cin.getline (buffer, 100, '\n');
if (buffer[0] != DATA_COMMAND) {
cout << DATA_BEGIN << "verbatim:";
cout << "You typed " << buffer;
cout << DATA_END;
}
We next treat the case when a tab-completion command is sent to the application:
D.9 Dynamic libraries 251
else {
cout << DATA_BEGIN << "scheme:";
cout << "(tuple "h" "ello" "i there" "ola" "opsakee")";
cout << DATA_END;
}
cout.flush ();
As you notice, the actual command is ignored, so our example is really very rudimentary.
Instead of connecting your system to TEXMACS using a pipe, it is also possible to connect
it as a dynamically linked library. Although communication through pipes is usually easier
to implement, more robust and compatible with gradual output, the second option is faster.
In order to dynamically link your application to TEXMACS, you should follow the TEXMACS
communication protocol, which is specied in the following header le:
$TEXMACS_PATH/include/TeXmacs.h
In this le it is specied that your application should export a data structure
which contains an installation routine for your application, as well as an evaluation routine
for further input (for more information, see the header le). TEXMACS will on its turn export
a structure
It is assumed that each application takes care of its own memory management. Hence,
strings created by TEXMACS will be destroyed by TEXMACS and strings created by the
application need to be destroyed by the application.
The string version_protocol should contain "TeXmacs communication protocol 1" and
the string version_package the version of your package. The routine install will be
called once by TEXMACS in order to initialize your system with options options. It com-
municates the routines exported by TEXMACS to your system in the form of a pointer
to a structure of type TeXmacs_exports_1. The routine should return a status message like
"yourcas-version successfully linked to TeXmacs"
If installation failed, then you should return NULL and *errors should contain an error
message.
252 Interfacing TEXMACS with other programs
The routine evaluate is used to evaluate the expression what inside a TEXMACS-session
with name session. It should return the evaluation of what or NULL if an error occurred.
*errors either contains one or more warning messages or an error message, if the evalua-
tion failed. The formats being used obey the same rules as in the case of communication
by pipes.
Finally, the conguration le of your plug-in should contain something as follows:
(plugin-configure myplugin
(:require (url-exists? (url "$LD_LIBRARY_PATH" "libmyplugin.so")))
(:link "libmyplugin.so" "myplugin_exports" "")
further-configuration)
Remark D.6. It is possible that the communication protocol changes in the future. In that
case, the data structures TeXmacs_exports_1 and package_exports_1 will be replaced by
data structures TeXmacs_exports_n and package_exports_n, where n is the version of the
protocol. These structures will always have the abstract data structures TeXmacs_exports
and package_exports in common, with information about the versions of the protocol,
TEXMACS and your package.
The d y n l i n k plug-in.
The dynlink plug-in gives an example of how to write dynamically linked libraries. It
consists of the following les:
dynlink/Makefile
dynlink/progs/init-dynlink.scm
dynlink/src/dynlink.cpp
The Makefile contains
tmsrc = /home/vdhoeven/texmacs/src/TeXmacs
CXX = g++
LD = g++
lib/libtmdynlink.so: src/dynlink.cpp
$(CXX) -I$(tmsrc)/include -c src/dynlink.cpp -o src/
dynlink.o
$(LD) -shared -o lib/libtmdynlink.so src/dynlink.o
(plugin-configure dynlink
(:require (url-exists? (url "$LD_LIBRARY_PATH"
"libtmdynlink.so")))
(:link "libtmdynlink.so" "dynlink_exports" "")
(:session "Dynlink"))
char*
dynlink_install (TeXmacs_exports_1* TM, char* opts, char** errs) {
output= (char*) malloc (50);
strcpy (output, "\2verbatim:Started dynamic link\5");
return output;
}
char*
dynlink_eval (char* what, char* session, char** errors) {
free (output);
output= (char*) malloc (50 + strlen (what));
strcpy (output, "\2verbatim:You typed ");
strcat (output, what);
strcat (output, "\5");
return output;
}
package_exports_1 dynlink_exports= {
"TeXmacs communication protocol 1",
"Dynlink 1",
dynlink_install,
dynlink_eval
};
Notice that the application takes care of the memory allocation and deallocation of output.
Several other features are supported in order to write interfaces between TEXMACS and
extern applications. Some of these are very hairy or quite specic. Let us briey describe
a few miscellaneous features:
Interrupts.
The stop icon can be used in order to interrupt the evaluation of some input. When
pressing this button, TEXMACS will just send a SIGINT signal to your application. It expects
your application to nish the output as usual. In particular, you should close all open
DATA_BEGIN -blocks.
254 Interfacing TEXMACS with other programs
(:test-input-done #t)
As soon as you will press ↩ in your input, TEXMACS will then send the command
where done is either #t or #f. The multiline plug-in provides an example of this mech-
anism (see in particular the le multiline/src/multiline.cpp).
255
256 Index
Versioning tool . . . . . . . . . . .
61 LaTeX . . . . . . . . . . . . . . . . . 201
Redo . . . . . . . . . . . . . . . . . . . .
57 Latex . . . . . . . . . . . . . . . . . . 204
Replace . . . . . . . . . . . . . . . . . .
56 Scheme . . . . . . . . . . . . . . . . 116
Search . . . . . . . . . . . . . . . . . . .
56 XML . . . . . . . . . . . . . . . . . . 115
Spell . . . . . . . . . . . . . . . . . . . .
57 Load . . . . . . . . . . . . . . . . 13, 15, 234
Undo . . . . . . . . . . . . . . . . . . . .
57 New . . . . . . . . . . . . . . . . . . 14, 77
elsart . . . . . . . . . . . . . . . . . . . .
172 Print
em . . . . . . . . . . . . . . . . . . . . . . .
173 Print all . . . . . . . . . . . . . . . . 15
Emacs . . . . . . . . . . . . . . . . . . . . .
209 Print all to le . . . . . . . . . . . . . 15
enumerate . . . . . . . . . . . . . . . . . . .
178 Save . . . . . . . . . . . . . . . . . . 15, 234
enumerate-alpha . . . . . . . . . . . . . . . .
179 Save as . . . . . . . . . . . . . . . . . . 14
enumerate-Alpha . . . . . . . . . . . . . . . .
179 lter . . . . . . . . . . . . . . . . . . . . . . 158
enumerate-numeric . . . . . . . . . . . . . .
179 ag . . . . . . . . . . . . . . . . . . . . . . 167
enumerate-roman . . . . . . . . . . . . . . .
179 Flexibility . . . . . . . . . . . . . . . . . . . 53
enumerate-Roman . . . . . . . . . . . . . . .
179 oat . . . . . . . . . . . . . . . . . . . . . . 154
enunciation-name . . . . . . . . . . . . . . .
191 Focus . . . . . . . . . . . . . . . . . 15, 18, 225
enunciation-sep . . . . . . . . . . . . . . . .
191 Allowed positions . . . . . . . . . . . . . 53
env . . . . . . . . . . . . . . . . . . . . . .
90 Insert above . . . . . . . . . . . . . . . . 43
env . . . . . . . . . . . . . . . . . . . . . .
188 Insert argument after . . . . . . . . . . . . 66
env-base . . . . . . . . . . . . . . . . . . .
90 Insert argument before . . . . . . . . . . . 66
env-base . . . . . . . . . . . . . . . . . . .
188 Insert below . . . . . . . . . . . . . . . . 43
env-float . . . . . . . . . . . . . . . . . .
90 Line arrows . . . . . . . . . . . . . . . . 50
env-float . . . . . . . . . . . . . . . . . .
192 Line dashes . . . . . . . . . . . . . . . . 50
env-math . . . . . . . . . . . . . . . . . . .
90 Preferences . . . . . . . . . . . . . . . . 65
env-math . . . . . . . . . . . . . . . . . . .
189 European numbering . . . . . . . . . . 171
env-theorem . . . . . . . . . . . . . . . . .
90 Highlight incorrect formulas . . . . . . 33
env-theorem . . . . . . . . . . . . . . . . .
190 Style options . . . . . . . . . . . . . . 171
environments . . . . . . . . . . . . . . . . .
17 Screens . . . . . . . . . . . . . . . . . . 65
eqnarray . . . . . . . . . . . . . . . . . . . .
189 folded . . . . . . . . . . . . . . . . . . . . . 177
eqnarray* . . . . . . . . . . . . . . . . . . .
190 foo . . . . . . . . . . . . . . . . . . . . . . 165
equal . . . . . . . . . . . . . . . . . . . . .
163 footnote . . . . . . . . . . . . . . . . . . . . 192
Equation . . . . . . . . . . . . . . . . . . . .
18 footnote-sep . . . . . . . . . . . . . . . . . . 193
equation . . . . . . . . . . . . . . . . . . . .
189 Format . . . . . . . . . . . . . . . . 1718, 225
equation* . . . . . . . . . . . . . . . . . . .
189 Adjust . . . . . . . . . . . . . . . . . 30, 61
equation-lab . . . . . . . . . . . . . . . . . .
189 Color . . . . . . . . . . . . . . . . . . . . 125
error . . . . . . . . . . . . . . . . . . . . . .
168 Condensed . . . . . . . . . . . . . . . . . 129
errput . . . . . . . . . . . . . . . . . . . . .
187 Display style . . . . . . . . . . . . . 128, 149
eval . . . . . . . . . . . . . . . . . . . 160161 on . . . . . . . . . . . . . . . . . . . 27
eval-args . . . . . . . . . . . . . . . . . . . . 157 Font . . . . . . . . . . . . . . . . . . 21, 126
Evaluate . . . . . . . . . . . . . . . . . . . . 73 Font shape
evens . . . . . . . . . . . . . . . . . . . . . 158 Italic . . . . . . . . . . . . . . . . . . 13
exam . . . . . . . . . . . . . . . . . . . . 17, 172 Index level . . . . . . . . . . . . . . . . . 128
exercise-name . . . . . . . . . . . . . . . . . 191 Language . . . . . . . . . . . . . . . 24, 125
exercise-sep . . . . . . . . . . . . . . . . . . 191 Japanese . . . . . . . . . . . . . . . . 214
Expand user-dened macros . . . . . . . . . . 202 Russian . . . . . . . . . . . . . . . . . 212
Export bibliographies as links . . . . . . . . . 203 Page insertion
extend . . . . . . . . . . . . . . . . . . . . . 176 Footnote . . . . . . . . . . . . . . . . 53
extern . . . . . . . . . . . . . . . . . . . . . 166 Size . . . . . . . . . . . . . . . . . . . . 127
gure-name . . . . . . . . . . . . . . . . . . 192 Space . . . . . . . . . . . . . . . 25, 6061
gure-sep . . . . . . . . . . . . . . . . . . . 192 Specic
File . . . . . . . . . . . . . . . . . . . 233234 Image . . . . . . . . . . . . . . 204, 206
Export . . . . . . . . . . . . . . . . . . . 201 Latex . . . . . . . . . . . . . . . 203204
Html . . . . . . . . . . . . . . . . . . 206 Texmacs . . . . . . . . . . . . . 203204
LaTeX . . . . . . . . . . . . . . 201202 Formula . . . . . . . . . . . . . . . . . . . . 18
Pdf . . . . . . . . . . . . . . . . . . . 15 frac . . . . . . . . . . . . . . . . . . . . . . 149
Postscript . . . . . . . . . . . . . . . 15 framed-session . . . . . . . . . . 72, 173, 188
Scheme . . . . . . . . . . . . . . . . 116 From center . . . . . . . . . . . . . . . . . . 68
XML . . . . . . . . . . . . . . . . . . 115 generic . . . . . . . . . . 17, 131, 171172, 233
Import . . . . . . . . . . . . . . . . . . . 201 get-arity . . . . . . . . . . . . . . . . . . . . 158
Html . . . . . . . . . . . . . . . . . . 207 get-label . . . . . . . . . . . . . . . . . . . . 158
258 Index
line-break . . . . . . . . . . . . . . . . . . .
144 next-line . . . . . . . . . . . . . . . . . . .
144 .
list . . . . . . . . . . . . . . . . . . . . . .
90 next-x . . . . . . . . . . . . . . . . . . . .
186 .
list-of-gures . . . . . . . . . . . . . . . . . .
198 no-break . . . . . . . . . . . . . . . . . . .
144 .
list-of-tables . . . . . . . . . . . . . . . . . .
198 no-indent . . . . . . . . . . . . . . . . . .
145 .
localize . . . . . . . . . . . . . . . . . . . .
185 no-indent* . . . . . . . . . . . . . . . . . .
145 .
logical paragraphs . . . . . . . . . . . . . .
144 no-page-break . . . . . . . . . . . . . . . .
146 .
Look and feel . . . . . . . . . . . . . . 209210 no-page-break* . . . . . . . . . . . . . . .
146 .
look-up . . . . . . . . . . . . . . . . . . . . 164 nocite . . . . . . . . . . . . . . . . . . . .
180 .
lprime . . . . . . . . . . . . . . . . . . . . . 150 normal-size . . . . . . . . . . . . . . . . .
175 .
lsub . . . . . . . . . . . . . . . . . . . . . . 149 not . . . . . . . . . . . . . . . . . . . . .
163 .
lsup . . . . . . . . . . . . . . . . . . . . . . 149 number . . . . . . . . . . . . . . . . . . .
162 .
Mac OS . . . . . . . . . . . . . . . . . . . . 209 number-env . . . . . . . . . . . . . . . . .
235 .
macaulay2 . . . . . . . . . . . . . . . . . . 173 number-europe . . . . . . . . . . . 77, 173, 188
macro . . . . . . . . . . . . . . . . . . . . . 156 number-long-article . . . . . . . . . 171172
made-by-TeXmacs . . . . . . . . . . . . . . . 177 number-us . . . . . . . . . . . . . . . . . . 173
Manual . . . . . . . . . . . . . . . . . . . . 230 Ok . . . . . . . . . . . . . . . . . . . . . . . 22
Annotate . . . . . . . . . . . . . . . . . . 234 op . . . . . . . . . . . . . . . . . . . . . . . 175
Explain . . . . . . . . . . . . . . . . . . . 233 open-tag . . . . . . . . . . . . . . . . . 164165
Environment variable . . . . . . . . . . 233 Options
Explanatory item . . . . . . . . . . . . 233 Security . . . . . . . . . . . . . . . . . .
41
Synopsis . . . . . . . . . . . . . . . . 233 or . . . . . . . . . . . . . . . . . . . . . . .
163
TeXmacs macros . . . . . . . . . . . . 233 orphans and widows . . . . . . . . . . . . .
145
Meta data . . . . . . . . . . . . . . . . . 231 output . . . . . . . . . . . . . . . . . . . . .
187
Copyright . . . . . . . . . . . . . . . 232 over . . . . . . . . . . . . . . . . . . . . . .
163
GNU FDL . . . . . . . . . . . . . . . 232 overline . . . . . . . . . . . . . . . . . . . .
177
Title . . . . . . . . . . . . . . . . . . 231 padded-bothlined . . . . . . . . . . . . . . .
184
Traversal . . . . . . . . . . . . . . . . . . 232 padded-centered . . . . . . . . . . . . . . . .
184
Traverse . . . . . . . . . . . . . . . . 232 padded-normal . . . . . . . . . . . . . . . . .
184
map . . . . . . . . . . . . . . . . . . . . . . 185 padded-std-bothlined . . . . . . . . . . . . .
184
map-args . . . . . . . . . . . . . . . . . . . 157 page lling . . . . . . . . . . . . . . . . . .
145
margin-rst-other . . . . . . . . . . . . . . . 184 page-break . . . . . . . . . . . . . . . . . . .
146
markup.ts . . . . . . . . . . . . . . . 242243 page-break* . . . . . . . . . . . . . . . . . .
146
math . . . . . . . . . . . . . . . . . . . . . 175 pageref . . . . . . . . . . . . . . . . . . . .
153
Mathematics . . . . . . . . . . . . . . . . . . 225 paragraph . . . . . . . . . . . . . . . . 141, 197
matrix . . . . . . . . . . . . . . . . . . . . . 178 Number of columns . . . . . . . . . . . . 53
Maxima . . . . . . . . . . . . . . . . . . . . 73 part . . . . . . . . . . . . . . . . . . . . . . 197
maxima . . . . . . . . . . . . . . . . . . . . 77 pdf . . . . . . . . . . . . . . . . . . . . . . 15
meaning . . . . . . . . . . . . . . . . . . . . 168 person . . . . . . . . . . . . . . . . . . . . . 174
merge . . . . . . . . . . . . . . . . . . 162, 164 phantom . . . . . . . . . . . . . . . . . . . . 177
mid . . . . . . . . . . . . . . . . . . . . . . 148 plus . . . . . . . . . . . . . . . . . . . . . . 162
middle-tag . . . . . . . . . . . . . . . . . . . 164 Preferences
minus . . . . . . . . . . . . . . . . . . . . . 162 Converters
mod . . . . . . . . . . . . . . . . . . . . . . 163 TeXmacs->Pdf/Postscript
move . . . . . . . . . . . . . . . . . . . . . 146 Expand beamer slides . . . . . . . .
69
multi-paragraph cell . . . . . . . . . . . . . 152 Printer . . . . . . . . . . . . . . . . . . . . .
209
name . . . . . . . . . . . . . . . . . . . . . 174 program . . . . . . . . . . . . . . . . . . . .
187
neg . . . . . . . . . . . . . . . . . . . . . . 150 project . . . . . . . . . . . . . . . . . . . . .
112
new-counter . . . . . . . . . . . . . . . . . . 185 proof . . . . . . . . . . . . . . . . . . . . .
190
new-counter-group . . . . . . . . . . . . . . . 186 provides . . . . . . . . . . . . . . . . . . . .
156
new-dpage . . . . . . . . . . . . . . . . . . . 168 quasi . . . . . . . . . . . . . . . . . . . . . .
161
new-dpage* . . . . . . . . . . . . . . . . . . 168 quasiquote . . . . . . . . . . . . . . . . 160161
new-env . . . . . . . . . . . . . . . . . . . . 189 quotation . . . . . . . . . . . . . . . . . . . 176
new-exercise . . . . . . . . . . . . . . . . . . 188 quote . . . . . . . . . . . . . . . . . . . . . 160
new-gure . . . . . . . . . . . . . . . . . . . 188 quote-arg . . . . . . . . . . . . . . . . . . . 161
new-line . . . . . . . . . . . . . . . . . . . . 144 quote-env . . . . . . . . . . . . . . . . . . . 176
new-list . . . . . . . . . . . . . . . . . . . . 93 quote-value . . . . . . . . . . . . . . . . . . 161
new-page . . . . . . . . . . . . . . . . . . . 146 range . . . . . . . . . . . . . . . . . . 161, 164
new-page* . . . . . . . . . . . . . . . . . . . 146 raw-data . . . . . . . . . . . . . . . . . . . . 154
new-remark . . . . . . . . . . . . . . . . . . 188 really-huge . . . . . . . . . . . . . . . . . . . 175
new-theorem . . . . . . . . . . . . . . . . . . 188 really-large . . . . . . . . . . . . . . . . . . . 175
Index 261
src-macro . . . . . . . . . . . . . . . . . .
166 . Special table properties ... . . . . . .
39 .
src-package . . . . . . . . . . . . . . . . .
166 . Border . . . . . . .... . . . . . .
39 .
src-package-dtd . . . . . . . . . . . . . . .
166 . Extract format . . .... . . . . . .
40 .
src-style-le . . . . . . . . . . . . . . . . .
166 . Vertical cell alignment .... . . . . . .
38 .
src-title . . . . . . . . . . . . . . . . . . .
166 . Vertical table alignment ... . . . . . .
38 .
src-tt . . . . . . . . . . . . . . . . . . . .
166 . table-of-contents . . . . . .... . . . . . .
198 .
src-var . . . . . . . . . . . . . . . . . . . .
166 . tabular . . . . . . . . . . .... . . . . . .
152 .
std . . . . . . . . . . . . . . . . . . . . .
90 . tabular* . . . . . . . . . .... . . . . . .
176 .
std . . . . . . . . . . . . . . . . . . . . .
173 . tag . . . . . . . . . . . .... . . . . . .
168 .
std-automatic . . . . . . . . . . . . . . .
90 . TeX . . . . . . . . . . . .... . . . . . .
177 .
std-automatic . . . . . . . . . . . . . . .
180 . TeXmacs . . . . . . . . .... . . . .112, 177
std-counter . . . . . . . . . . . . . . . .
90 . TeXmacs-version . . . . . .... . . . .
. . . 177
std-latex . . . . . . . . . . . . . . . . .
91 . Text . . . . . . . . . . . .... . . . .
. . . 225
std-list . . . . . . . . . . . . . . . . . .
90 . textput . . . . . . . . . .... . . . .
. . . 187
std-list . . . . . . . . . . . . . . 93, 178179 Texts . . . . . . . . . . .... . . . .
. . . 77
std-markup . . . . . . . . . . . . . . . . 90, 235 tformat . . . . . . . . . .... . . . .
. . . 151
std-markup . . . . . . . . . . . . . . . . 90, 173 the-glossary . . . . . . . .... . . . .
. . . 198
std-math . . . . . . . . . . . . . . . . . . . 90 the-index . . . . . . . . .... . . . .
. . . 198
std-math . . . . . . . . . . . . . . . . . . . 178 the-x . . . . . . . . . . .... . . . .
. . . 185
std-symbol . . . . . . . . . . . . . . . . . . 90 theorem-name . . . . . . .... . . . .
. . . 191
std-symbol . . . . . . . . . . . . . . . . . . 177 theorem-sep . . . . . . . .... . . . .
. . . 191
std-utils . . . . . . . . . . . . . . 90, 99, 197 times . . . . . . . . . . .... . . . .
. . . 163
std-utils . . . . . . . . . . . . . . . 183, 185 tiny . . . . . . . . . . . .... . . . .
. . . 175
strong . . . . . . . . . . . . . . . . . . . . . 173 Title . . . . . . . . . . . .... . . . .
. . . 231
structured-list . . . . . . . . . . . . . . . 173 title-base . . . . . . . .... . . . .
. 90, 99
structured-list . . . . . . . . . . . . . . . 179 title-generic . . . . . .... . . . .
. . . 90
structured-section . . . . . . . . 95, 173, 198 tmarker . . . . . . . . . .... . . . .
. . . 152
style . . . . . . . . . . . . . . . . . . . . . . 112 tmarticle . . . . . . . .... . . . .
. . . 172
style-only . . . . . . . . . . . . . . . . . . . 165 tmbook . . . . . . . . . .... . . . .
. . . 172
style-only* . . . . . . . . . . . . . . . . . . . 165 tmdoc . . . . . . . . . . .... . 172, 230233
style-with . . . . . . . . . . . . . . . . . . . 165 tmlen . . . . . . . . . . .... . . . . . . . 121
style-with* . . . . . . . . . . . . . . . . . . . 165 toc-1 . . . . . . . . . . .... . . . . . . . 181
subindex . . . . . . . . . . . . . . . . . . . . 182 toc-2 . . . . . . . . . . .... . . . . . . . 181
subparagraph . . . . . . . . . . . . . . . . . 197 toc-3 . . . . . . . . . . .... . . . . . . . 181
subsection . . . . . . . . . . . . . . . . . . . 197 toc-4 . . . . . . . . . . .... . . . . . . . 182
subsubindex . . . . . . . . . . . . . . . . . . 182 toc-5 . . . . . . . . . . .... . . . . . . . 182
subsubsection . . . . . . . . . . . . . . . . . 197 toc-dots . . . . . . . . . .... . . . . . . . 182
subtable . . . . . . . . . . . . . . . . . . . . 152 toc-main-1 . . . . . . . . .... . . . . . . . 181
surround . . . . . . . . . . . . . . . . . . . . 142 toc-main-2 . . . . . . . . .... . . . . . . . 181
svjour . . . . . . . . . . . . . . . . . . . . 172 toc-normal-1 . . . . . . . .... . . . . . . . 181
swell . . . . . . . . . . . . . . . . . . . . . . 176 toc-normal-2 . . . . . . . .... . . . . . . . 181
swell-bottom . . . . . . . . . . . . . . . . . . 176 toc-normal-3 . . . . . . . .... . . . . . . . 181
swell-top . . . . . . . . . . . . . . . . . . . . 176 toc-small-1 . . . . . . . .... . . . . . . . 181
switch . . . . . . . . . . . . . . . . . . . . . 177 toc-small-2 . . . . . . . .... . . . . . . . 181
symbol . . . . . . . . . . . . . . . . . . . . . 165 toc-strong-1 . . . . . . . .... . . . . . . . 181
table . . . . . . . . . . . . . . . . . . . . . . 152 toc-strong-2 . . . . . . . .... . . . . . . . 181
Table . . . . . . . . . . . . . . . . . . . . . 225 Tools . . . . . . . . . . .... . . . 65, 84, 210
Cell background color . . . . . . . . . . . 39 Debugging tool . . . .... . . . . . . . 65
Cell border . . . . . . . . . . . . . . . . . 39 Miscellaneous
Cell height Export selections as . . . . . . . . 55, 201
Set height . . . . . . . . . . . . . . . 39 Import selections as . . . . . . . . 55, 201
Cell operation mode . . . . . . . . . . . . 38 Project
Cell width Attach master... . . . . . . . . . . . . 45
Set width . . . . . . . . . . . . . . . . 39 Expand inclusions . . . . . . . . . . . 226
Horizontal cell alignment . . . . . . . . . . 38 Update
Horizontal table alignment . . . . . . . . . 38 Inclusions . . . . . . . . . . . . . . . . 45
Special cell properties Web
Distribute unused space . . . . . . . . 39 Create website . . . . . . . . . . . . . 206
Hyphenation transform-bibitem . . . . . . . . . . . . . . . 181
Multi-paragraph . . . . . . . . . . 139 translate . . . . . . . . . . . . . . . . . . . . 162
Index 263