blob: 423cd89c2c84808bfce0b7bf2552e0f18bba71b9 [file] [log] [blame]
<!DOCTYPE html>
<html>
<!-- Created by Texinfo 6.8dev+dev, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual is for GNU Texinfo (version 6.8dev, 23 February 2022),
a documentation system that can produce both online information and a
printed manual from a single source using semantic markup.
Copyright (C) 1988, 1990-1993, 1995-1999, 2001-2022 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 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". -->
<title>Conditional Nesting (GNU Texinfo 6.8dev)</title>
<meta name="description" content="Conditional Nesting (GNU Texinfo 6.8dev)">
<meta name="keywords" content="Conditional Nesting (GNU Texinfo 6.8dev)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="texi2any">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Command-and-Variable-Index.html" rel="index" title="Command and Variable Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Conditionals.html" rel="up" title="Conditionals">
<link href="Testing-for-Texinfo-Commands.html" rel="prev" title="Testing for Texinfo Commands">
<style type="text/css">
<!--
div.example {margin-left: 3.2em}
-->
</style>
</head>
<body lang="en">
<div class="section-level-extent" id="Conditional-Nesting">
<div class="nav-panel">
<p>
Previous: <a href="Testing-for-Texinfo-Commands.html" accesskey="p" rel="prev">Testing for Texinfo Commands: <code class="code">@ifcommanddefined</code>, <code class="code">@ifcommandnotdefined</code></a>, Up: <a href="Conditionals.html" accesskey="u" rel="up">Conditionally Visible Text</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h3 class="section" id="Conditional-Nesting-1">15.7 Conditional Nesting</h3>
<a class="index-entry-id" id="index-Conditionals_002c-nested"></a>
<a class="index-entry-id" id="index-Nesting-conditionals"></a>
<p>Conditionals can be nested; however, the details are a little tricky.
The difficulty comes with failing conditionals, such as
<code class="code">@ifhtml</code> when HTML is not being produced, where the included
text is to be ignored. However, it is not to be <em class="emph">completely</em>
ignored, since it is useful to have one <code class="code">@ifset</code> inside another,
for example&mdash;that is a way to include text only if two conditions are
met. Here&rsquo;s an example:
</p>
<div class="example">
<pre class="example-preformatted">@ifset somevar
@ifset anothervar
Both somevar and anothervar are set.
@end ifset
@ifclear anothervar
Somevar is set, anothervar is not.
@end ifclear
@end ifset
</pre></div>
<p>Technically, Texinfo requires that for a failing conditional, the
ignored text must be properly nested with respect to that failing
conditional. Unfortunately, it&rsquo;s not always feasible to check that
<em class="emph">all</em> conditionals are properly nested, because then the
processors could have to fully interpret the ignored text, which
defeats the purpose of the command. Here&rsquo;s an example illustrating
these rules:
</p>
<div class="example">
<pre class="example-preformatted">@ifset a
@ifset b
@ifclear ok - ok, ignored
@end junky - ok, ignored
@end ifset
@c WRONG - missing @end ifset.
</pre></div>
<p>Finally, as mentioned above, all conditional commands must be on lines
by themselves, with no text (even spaces) before or after. Otherwise,
the processors cannot reliably determine which commands to consider
for nesting purposes.
</p>
</div>
</body>
</html>