/usr/share/doc/texinfo/html/Invoking-Macros.html is in texinfo-doc-nonfree 5.2.0-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is for GNU Texinfo (version 5.2, 26 September 2013),
a documentation system that can produce both online information and a
printed manual from a single source using semantic markup.
Copyright (C) 1988, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
1998, 1999, 2001, 2001, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
2010, 2011, 2012, 2013 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 the Front-Cover Texts being "A GNU Manual",
and with the Back-Cover Texts as in (a) below. A copy of the license
is included in the section entitled "GNU Free Documentation
License".
(a) The FSF's Back-Cover Text is: "You have the freedom to copy and
modify this GNU manual. Buying copies from the FSF supports it in
developing GNU and promoting software freedom." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>GNU Texinfo 5.2: Invoking Macros</title>
<meta name="description" content="GNU Texinfo 5.2: Invoking Macros">
<meta name="keywords" content="GNU Texinfo 5.2: Invoking Macros">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Command-and-Variable-Index.html#Command-and-Variable-Index" rel="index" title="Command and Variable Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Defining-New-Texinfo-Commands.html#Defining-New-Texinfo-Commands" rel="up" title="Defining New Texinfo Commands">
<link href="Macro-Details.html#Macro-Details" rel="next" title="Macro Details">
<link href="Defining-Macros.html#Defining-Macros" rel="previous" title="Defining Macros">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Invoking-Macros"></a>
<div class="header">
<p>
Next: <a href="Macro-Details.html#Macro-Details" accesskey="n" rel="next">Macro Details</a>, Previous: <a href="Defining-Macros.html#Defining-Macros" accesskey="p" rel="previous">Defining Macros</a>, Up: <a href="Defining-New-Texinfo-Commands.html#Defining-New-Texinfo-Commands" accesskey="u" rel="up">Defining New Texinfo Commands</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html#Command-and-Variable-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Invoking-Macros-1"></a>
<h3 class="section">19.2 Invoking Macros</h3>
<a name="index-Invoking-macros"></a>
<a name="index-Expanding-macros"></a>
<a name="index-Running-macros"></a>
<a name="index-Macro-invocation"></a>
<p>After a macro is defined (see the previous section), you can
<em>invoke</em> (use) it in your document like this:
</p>
<div class="example">
<pre class="example">@<var>macroname</var> {<var>arg1</var>, <var>arg2</var>, …}
</pre></div>
<p>and the result will be more or less as if you typed the body of
<var>macroname</var> at that spot. For example:
</p>
<div class="example">
<pre class="example">@macro foo {p, q}
Together: \p\ & \q\.
@end macro
@foo{a, b}
</pre></div>
<p>produces:
</p>
<div class="display">
<pre class="display">Together: a & b.
</pre></div>
<a name="index-Backslash_002c-and-macros"></a>
<p>Thus, the arguments and parameters are separated by commas and
delimited by braces; any whitespace after (but not before) a comma is
ignored. The braces are required in the invocation even when the
macro takes no arguments, consistent with other Texinfo commands. For
example:
</p>
<div class="example">
<pre class="example">@macro argless {}
No arguments here.
@end macro
@argless{}
</pre></div>
<p>produces:
</p>
<div class="display">
<pre class="display">No arguments here.
</pre></div>
<a name="index-Comma_002c-in-macro-arguments"></a>
<p>Passing macro arguments containing commas requires special care, since
commas also separate the arguments. To include a comma character in
an argument, the most reliable method is to use the <code>@comma{}</code>
command. For <code>makeinfo</code>, you can also prepend a backslash
character, as in ‘<samp>\,</samp>’, but this does not work with TeX.
</p>
<a name="index-Automatic-quoting-of-commas-for-some-macros"></a>
<a name="index-Quoting_002c-automatic-for-some-macros"></a>
<p>It’s not always necessary to worry about commas. To facilitate use of
macros, <code>makeinfo</code> implements two rules for <em>automatic
quoting</em> in some circumstances:
</p>
<ol>
<li> If a macro takes only one argument, all commas in its invocation
are quoted by default. For example:
<div class="example">
<pre class="example">@macro TRYME{text}
@strong{TRYME: \text\}
@end macro
@TRYME{A nice feature, though it can be dangerous.}
</pre></div>
<p>will produce the following output
</p>
<div class="example">
<pre class="example"><strong>TRYME: A nice feature, though it can be dangerous.</strong>
</pre></div>
<p>And indeed, it can. Namely, <code>makeinfo</code> does not control the
number of arguments passed to one-argument macros, so be careful when
you invoke them.
</p>
</li><li> If a macro invocation includes another command (including a
recursive invocation of itself), any commas in the nested command
invocation(s) are quoted by default. For example, in
<div class="example">
<pre class="example">@say{@strong{Yes, I do}, person one}
</pre></div>
<p>the comma after ‘<samp>Yes</samp>’ is implicitly quoted. Here’s another
example, with a recursive macro:
</p>
<div class="example">
<pre class="example">@rmacro cat{a,b}
\a\\b\
@end rmacro
@cat{@cat{foo, bar}, baz}
</pre></div>
<p>will produce the string ‘<samp>foobarbaz</samp>’.
</p>
</li><li> Otherwise, a comma should be explicitly quoted, as above, for it
to be treated as a part of an argument.
</li></ol>
<a name="index-Braces_002c-in-macro-arguments"></a>
<a name="index-Backslash_002c-in-macro-arguments"></a>
<p>In addition to the comma, characters that need to be quoted in macro
arguments are curly braces and backslash. For example:
</p>
<div class="example">
<pre class="example">@<var>macname</var> {\\\{\}\,}
</pre></div>
<p>will pass the (almost certainly error-producing) argument
‘<samp>\{},</samp>’ to <var>macname</var>.
</p>
<p>Unfortunately, this has not been reliably implemented in TeX. When
macros are used in the argument to other commands, for example, errors
or incorrect output (the ‘<samp>\</samp>’ “escape” being included literally)
are likely to result.
</p>
<p>If a macro is defined to take exactly one argument, it can (but need
not) be invoked without any braces; then the entire rest of the line
after the macro name is used as the argument. (Braces around the
argument(s) are required in all other cases, i.e., if the macro takes
either zero or more than one argument.) For example:
</p>
<div class="example">
<pre class="example">@macro bar {p}
Twice: \p\ & \p\.
@end macro
@bar aah
</pre></div>
<p>produces:
</p>
<div class="display">
<pre class="display">Twice: aah & aah.
</pre></div>
<p>Likewise, if a macro is defined to take exactly one argument, and is
invoked with braces, the braced text is passed as the argument, also
regardless of commas. For example:
</p>
<div class="example">
<pre class="example">@macro bar {p}
Twice: \p\ & \p\.
@end macro
@bar{a,b}
</pre></div>
<p>produces:
</p>
<div class="display">
<pre class="display">Twice: a,b & a,b.
</pre></div>
<p>If a macro is defined to take more than one argument, but is called
with only one (in braces), the remaining arguments are set to the
empty string, and no error is given. For example:
</p>
<div class="example">
<pre class="example">@macro addtwo {p, q}
Both: \p\\q\.
@end macro
@addtwo{a}
</pre></div>
<p>produces simply:
</p>
<div class="display">
<pre class="display">Both: a.
</pre></div>
<hr>
<div class="header">
<p>
Next: <a href="Macro-Details.html#Macro-Details" accesskey="n" rel="next">Macro Details</a>, Previous: <a href="Defining-Macros.html#Defining-Macros" accesskey="p" rel="previous">Defining Macros</a>, Up: <a href="Defining-New-Texinfo-Commands.html#Defining-New-Texinfo-Commands" accesskey="u" rel="up">Defining New Texinfo Commands</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Command-and-Variable-Index.html#Command-and-Variable-Index" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|