Changes

Jump to navigation Jump to search
1,515 bytes removed ,  15:25, 11 June 2012
Clearer examples (one terser, one more verbose), and better description of \setupitemize keys.
Indentations in ConTeXt are a bit different; and sometimes difficult to understand. In this article I hope to explain how ConTeXt does indentations. First, let's understand why ConTeXt does indentations differently; why does it not simply follow the time-tested approach of plain TeX and LaTeX? The way I understand it, the reason is that Hans Hagen, the author of ConTeXt, prefers ''spaced out'' markup — surrounding each environment by empty lines — which makes it easy to see where an environment starts and ends while reading the source file. However, this style means that the 'indentation after empty lines' paradigm of plain TeX and LaTeX cannot be used for indentations. So, ConTeXt provides an alternative. As with other things in ConTeXt, this alternative is consistent and easy to configure; but if you are used to other TeX formats it takes some time to get comfortable with it.
== The basics ===== Setting up indentation for the whole document ===
Indentation involves two things: when to indent, and how much to indent. In ConTeXt, these can be specified using <tt>{{cmd|setupindenting}}[...]</tt>. There are three types of keys for this command:
* <code>''no''To enable indentingyes</code>:turn indentation on/off''' * <code>never''none'' small medium big ''dimension''</code> or : size of indents* <code>always''first'' next</code>, (equivalently, : turn indentation of first paragraph on/off. Can be overridden by environments with <code>indentnext=yes/no/auto</code> or .* <code>yesodd even</code>), The default is ''': indent odd/even lines in \obeylines scopes* <code>nevernormal</code>''': what does this do?
* '''To specify when to indent:''': <code>odd</code> or <code>even</code>, and <code>first</code> or <code>next</code>. The default is '''<code>first</code>''' * '''To specify how much to indent:''' <code>none</code>, <code>small</code>, <code>medium</code>, <code>big</code>, or a specific dimension. <code>small</code> corresponds to 1em, <code>medium</code> to 1.5em, and <code>big</code> to 2em. The default is '''<code>none</code>'''.  Suppose we want to indent all paragraphs by 20pt: we can use<texcode>\setupindenting[20pt, yes]</texcode>  which is equivalent ot <texcode>\setupindenting[20pt, yes, first]</texcode> This is what one typically uses in a document. The other keys are needed only for special cases (like typesetting quotations and verses). In particular, the most commonly used keys are * <code>yes</code> enable indenting* <code>no</code> disable indenting* <code>toggle</code> toggle the indenting state (if indenting was enabled, disable it and vice-versa)* <code>odd</code> indents every odd paragraph* <code>even</code> indents every even paragraph* <code>first</code> indents all paragraphs, including the first paragraph* <code>next</code> ''does not'' indent the first paragraph, but indents every subsequent paragraph* <code>reset</code> reset all settings to their default values. This disable indenting, sets the indenting amount to <code>none</code>, disables <code>odd</code> or <code>even</code> indenting, and sets indenting method to <code>first</code>. === Setting up indentation after an environment ===
{{cmd|setupindenting}} does not take care of indenting after environments, such as ConTeXt's itemizes, enumerations, definitions, formulas and floats. It also does not take care of indenting after heads such as chapters, sections, and subsections.
The setup command of these environments provides an '''<code>indentnext</code>''' key to configure the indentation behaviour after the environment. The <code>indentnext</code> key can take one of three values: * <code>yes</code>, declares the first paragraph following the environment should always be indented.* <code>no</code>, and <code>auto</code>. If <code>indentnext=yes</code> then declares the first paragraph after the end of following the environment is always should never be indented; if .* <code>indentnext=noauto</code> then the next paragraph is never indented; if declares <code>indentnext=auto</code> then the next paragraph is should be indented only if there is a blank space after the environment. Setting <code>indentnext=auto</code> is equivalent to the default plain TeX and LaTeX behaviour.
Let us provide a couple of Some examples. Suppose we do not want paragraphs after itemize to be indented; then we can say :
<texcode>
% Do not indent paragraphs after \stopitemize
\setupitemgroup[itemize][indentnext=no]
</texcode>
 
If we want paragraphs after section heads to be indented, we can say
<texcode>% indent paragraphs after section heads
\setuphead[section][indentnext=yes]
</texcode>
If we want % indent the paragraphs after all sectioning heads to be indented, we can say\setupheads[indentnext=yes]
<texcode>% indent paragraphs after formulas if there is a blank space in between\setupheadssetupformulas[indentnext=yesauto]
</texcode>
If we want paragraphs after formulas to be indented only if we leave a blank space after them, we can say <texcode>\setupformulas[indentnext=auto]</texcode> == Setting up indentation inside environments == There is one case that is not taken care of by {{cmd|setupindenting}} and the <code>indentnext</code> key: indentation of paragraphs inside multi-paragraph environments such as itemizes, descriptions, and enumerations. By default ConTeXt does not indent such paragraphs. The setup commands of these environments provides an '''<code>indenting</code>''' key to configure the indentation behaviour of paragraphs inside these environments. This key takes the same values as the arguments of {{cmd|setupindenting}} command. For example, if we set <texcode>\setupitemgroup[itemize][indenting={40pt,next}]</texcode>
then There is one case that is not taken care of by {{cmd|setupindenting}} and the following <code>indentnext</code> key: indentation of paragraphs inside multi-paragraph environments such as itemizes, descriptions, and enumerations. By default ConTeXt does not indent such paragraphs. The setup commands of these environments provides an <code>indenting=</code> key to configure the indentation behaviour of paragraphs inside these environments. This key takes the same arguments as the {{cmd|setupindenting}} command does. An example using {{cmd|setupitemgroup}}:
<context source="yes" text="gives">
</context>
== Manual indentation ==
No matter how careful we are with all the settings, there are some cases which cannot be taken care of by automatic indentation, and we have to tell ConTeXt how to indent. Plain TeX (and LaTeX) provide the {{cmd|indent}} and {{cmd|noindent}} commands for explicitly indenting and preventing indenting of a paragraph. These commands are defined in ConTeXt but are not hooked into the ConTeXt indentation mechanism. Instead, ConTeXt provides {{cmd|indentation}} and {{cmd|noindentation}} which achieve the same effect.
\startitemize[n]
\item A dummy listwith \type{indentnext=no}... \item To check ...to test the \typetex{\indent}command
\stopitemize
\indent This paragraph is not indented. The , because \typetex{\indent} command does not work here.
\startitemize[n]
\item Another dummy listwith \type{indentnext=no}... \item To check ...to test the \typetex{\indentation}command
\stopitemize
\indentation This paragraph will be indented , because we used \typetex{\indentation} instead.
</context>
== Beware of typos ==
ConTeXt defines two more commands not commonly used: {{cmd|indenting}} and {{cmd|noindenting}}. {{cmd|indenting}} is similar to {{cmd|setupindenting}} and is provided for backward compatibility; {{cmd|noindenting}} is equivalent to <tt>{{cmd|setupindenting}}[no]}}</tt>. Unfortunately, these commands sound very similar to {{cmd|indentation}} and {{cmd|noindentation}}, thus can be easily used by mistake. If you happen to write {{cmd|noindenting}} instead of {{cmd|noindentation}} in a document, it can take a while to debug.

Navigation menu