1
0
Fork 0
doc/devel/style/design/style-flow.en.tm

80 lines
3.3 KiB
Plaintext
Raw Normal View History

2011-08-28 15:59:50 +08:00
<TeXmacs|1.0.3.7>
<style|tmdoc>
<\body>
2019-07-16 23:53:53 +08:00
<tmdoc-title|Control flow>
2011-08-28 15:59:50 +08:00
Besides sequences of instructions, which can be achieved using the
<markup|concat> primitive, and the mechanism of macro expansion, the
<TeXmacs> style-sheet language provides a few other primitive for affecting
the control flow: <markup|if>, <markup|case>, <markup|while> and
<markup|for-each>. These primitives are available from the
2019-07-16 23:53:53 +08:00
<menu|Source|Control flow> menu. However, we have to warn the user that the
2011-08-28 15:59:50 +08:00
conditional constructs are quite fragile: they only apply to inline content
and the accessibility of macro arguments should not to much depend on the
conditions.
The most important primitive <markup|if>, which can be entered using
<shortcut|(make 'if)>, allows for basic conditional typesetting:
<\tm-fragment>
<inactive*|<assign|appendix|<\macro|title|body>
<style-with|src-compact|none|<compound|<if|<long-document>|<value|chapter-appendix>|<value|section-appendix>>|<arg|title>|<arg|body>>>
</macro>>>
</tm-fragment>
In this example, <markup|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 <markup|if> primitive currently only works
for inline content:
<\tm-fragment>
<inactive*|<assign|appendix|<\macro|title|body>
<style-with|src-compact|none|<if|<long-document>|<chapter-appendix|<arg|title>|<arg|body>>|<section-appendix|<arg|title>|<arg|body>>>>
</macro>>>
</tm-fragment>
The <markup|if> primitive may also be used in order to implement optional
arguments:
<\tm-fragment>
<inactive*|<assign|hey|<macro|first|second|<style-with|src-compact|none|<if|<equal|<arg|second>|<uninit>>|Hey
<arg|first>, you look lonely today...|Hey <arg|first> and <arg|second>,
you form a nice couple!>>>>>
</tm-fragment>
However, <TeXmacs> is not clever enough to detect which arguments are
optional and which arguments are accessible (<abbr|i.e.> which arguments
can be edited by the user). Therefore, you will have to manually give this
information using the <markup|drd-props> primitive. The <markup|case>,
<markup|while> and <markup|for-each> primitives are explained in more
detail in the <hyper-link|corresponding
section|../../format/primitives/prim-control.en.tm> on the
<hyper-link|<TeXmacs> primitives|../../format/primitives/primitives.en.tm>.
<tmdoc-copyright|1998--2004|Joris van der Hoeven>
<tmdoc-license|Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation; with no
Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
Texts. A copy of the license is included in the section entitled "GNU Free
Documentation License".>
</body>
<\initial>
<\collection>
<associate|page-bot|30mm>
<associate|page-even|30mm>
<associate|page-odd|30mm>
<associate|page-reduce-bot|15mm>
<associate|page-reduce-left|25mm>
<associate|page-reduce-right|25mm>
<associate|page-reduce-top|15mm>
<associate|page-right|30mm>
<associate|page-top|30mm>
<associate|par-width|150mm>
</collection>
</initial>