annotate doc/interpreter/tips.txi @ 10791:3140cb7a05a1

Add spellchecker scripts for Octave and run spellcheck of documentation interpreter/doccheck: New directory for spelling/grammar scripts. interpreter/doccheck/README: Instructions for using scripts. interpreter/doccheck/spellcheck: Script to spellcheck a Texinfo file. interpreter/doccheck/aspell.conf: GNU Aspell configuration file for Octave documentation. interpreter/doccheck/aspell-octave.en.pws: Private Aspell dictionary. interpreter/doccheck/add_to_aspell_dict: Script to add new Octave-specific words to private Aspell dictionary. interpreter/octave.texi: New @nospell macro which forces Aspell to ignore the word marked by the macro. interpreter/mk_doc_cache.m: Skip new @nospell macro when building doc_cache.
author Rik <octave@nomad.inbox5.com>
date Sat, 17 Jul 2010 19:53:01 -0700
parents c3df189b1b15
children 5b68000faac1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8920
eb63fbe60fab update copyright notices
John W. Eaton <jwe@octave.org>
parents: 8828
diff changeset
1 @c Copyright (C) 1996, 1997, 1999, 2002, 2004, 2005, 2007, 2008,
eb63fbe60fab update copyright notices
John W. Eaton <jwe@octave.org>
parents: 8828
diff changeset
2 @c 2009 John W. Eaton
7018
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
3 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
4 @c This file is part of Octave.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
5 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
6 @c Octave is free software; you can redistribute it and/or modify it
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
7 @c under the terms of the GNU General Public License as published by the
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
8 @c Free Software Foundation; either version 3 of the License, or (at
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
9 @c your option) any later version.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
10 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
11 @c Octave is distributed in the hope that it will be useful, but WITHOUT
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
12 @c ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
13 @c FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
14 @c for more details.
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
15 @c
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
16 @c You should have received a copy of the GNU General Public License
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
17 @c along with Octave; see the file COPYING. If not, see
fd42779a8428 [project @ 2007-10-13 00:52:12 by jwe]
jwe
parents: 7017
diff changeset
18 @c <http://www.gnu.org/licenses/>.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
19
9032
349616d9c38e Cleanup top-level documentation menu in octave.texi
Rik <rdrider0-list@yahoo.com>
parents: 8920
diff changeset
20 @node Tips and Standards
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
21 @appendix Tips and Standards
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
22 @cindex tips
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
23 @cindex standards of coding style
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
24 @cindex coding standards
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
25
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
26 This chapter describes no additional features of Octave. Instead it
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
27 gives advice on making effective use of the features described in the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
28 previous chapters.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
29
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
30 @menu
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
31 * Style Tips:: Writing clean and robust programs.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
32 * Coding Tips:: Making code run faster.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
33 * Comment Tips:: Conventions for writing comments.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
34 * Function Headers:: Standard headers for functions.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
35 * Documentation Tips:: Writing readable documentation strings.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
36 @end menu
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
37
4167
aae05d51353c [project @ 2002-11-12 02:52:50 by jwe]
jwe
parents: 3294
diff changeset
38 @node Style Tips
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
39 @section Writing Clean Octave Programs
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
40
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
41 Here are some tips for avoiding common errors in writing Octave code
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
42 intended for widespread use:
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
43
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
44 @itemize @bullet
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
45 @item
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
46 Since all global variables share the same name space, and all functions
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
47 share another name space, you should choose a short word to distinguish
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
48 your program from other Octave programs. Then take care to begin the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
49 names of all global variables, constants, and functions with the chosen
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
50 prefix. This helps avoid name conflicts.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
51
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
52 If you write a function that you think ought to be added to Octave under
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
53 a certain name, such as @code{fiddle_matrix}, don't call it by that name
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
54 in your program. Call it @code{mylib_fiddle_matrix} in your program,
5041
b2ce28713791 [project @ 2004-10-01 18:12:10 by jwe]
jwe
parents: 4167
diff changeset
55 and send mail to @email{maintainers@@octave.org} suggesting that it
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
56 be added to Octave. If and when it is, the name can be changed easily
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
57 enough.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
58
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
59 If one prefix is insufficient, your package may use two or three
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
60 alternative common prefixes, so long as they make sense.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
61
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
62 Separate the prefix from the rest of the symbol name with an underscore
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
63 @samp{_}. This will be consistent with Octave itself and with most
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
64 Octave programs.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
65
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
66 @item
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
67 When you encounter an error condition, call the function @code{error}
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
68 (or @code{usage}). The @code{error} and @code{usage} functions do not
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
69 return.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
70 @xref{Errors}.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
71
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
72 @item
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
73 Please put a copyright notice on the file if you give copies to anyone.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
74 Use the same lines that appear at the top of the function files
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
75 distributed with Octave. If you have not signed papers to assign the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
76 copyright to anyone else, then place your name in the copyright notice.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
77 @end itemize
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
78
4167
aae05d51353c [project @ 2002-11-12 02:52:50 by jwe]
jwe
parents: 3294
diff changeset
79 @node Coding Tips
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
80 @section Tips for Making Code Run Faster.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
81 @cindex execution speed
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
82 @cindex speedups
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
83
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
84 Here are some ways of improving the execution speed of Octave programs.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
85
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
86 @itemize @bullet
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
87 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
88 Vectorize loops. For instance, rather than
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
89 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
90 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
91 for i = 1:n-1
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
92 a(i) = b(i+1) - b(i);
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
93 endfor
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
94 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
95 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
96
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
97 write
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
98
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
99 @example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
100 a = b(2:n) - b(1:n-1);
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
101 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
102
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
103 This is especially important for loops with "cheap" bodies. Often it suffices to vectorize
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
104 just the innermost loop to get acceptable performance. A general rule of thumb is that the
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
105 "order" of the vectorized body should be greater or equal to the "order" of the enclosing loop.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
106
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
107 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
108 Use built-in and library functions if possible. Built-in and compiled functions are very fast.
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
109 Even with a m-file library function, chances are good that it is already optimized, or will be
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
110 optimized more in a future release.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
111
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
112 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
113 Avoid computing costly intermediate results multiple times. Octave currently
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
114 does not eliminate common subexpressions.
9486
d85a43495faa update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9356
diff changeset
115 Also, certain internal computation results are cached for variables.
d85a43495faa update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9356
diff changeset
116 For instance, if a matrix variable is used multiple times as an index,
d85a43495faa update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9356
diff changeset
117 checking the indices (and internal conversion to integers) is only done once.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
118
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
119 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
120 Be aware of lazy copies (copy-on-write). When a copy of an object
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
121 is created, the data is not immediately copied, but rather shared. The actual
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
122 copying is postponed until the copied data needs to be modified. For example:
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
123
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
124 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
125 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
126 a = zeros (1000); # create a 1000x1000 matrix
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
127 b = a; # no copying done here
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
128 b(1) = 1; # copying done here
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
129 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
130 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
131
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
132 Lazy copying applies to whole Octave objects such as matrices, cells, struct,
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
133 and also individual cell or struct elements (not array elements).
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
134
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
135 Additionally, index expressions also use lazy copying when Octave can determine
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
136 that the indexed portion is contiguous in memory. For example:
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
137
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
138 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
139 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
140 a = zeros (1000); # create a 1000x1000 matrix
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
141 b = a(:,10:100); # no copying done here
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
142 b = a(10:100,:); # copying done here
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
143 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
144 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
145
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
146 This applies to arrays (matrices), cell arrays, and structs indexed using ().
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
147 Index expressions generating cs-lists can also benefit of shallow copying
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
148 in some cases. In particular, when @var{a} is a struct array, expressions like
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
149 @code{@{a.x@}, @{a(:,2).x@}} will use lazy copying, so that data can be shared
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
150 between a struct array and a cell array.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
151
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
152 Most indexing expressions do not live longer than their `parent' objects.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
153 In rare cases, however, a lazily copied slice outlasts its parent, in which
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
154 case it becomes orphaned, still occupying unnecessarily more memory than needed.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
155 To provide a remedy working in most real cases,
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
156 Octave checks for orphaned lazy slices at certain situations, when a value
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
157 is stored into a "permanent" location, such as a named variable or cell or
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
158 struct element, and possibly economizes them. For example
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
159
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
160 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
161 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
162 a = zeros (1000); # create a 1000x1000 matrix
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
163 b = a(:,10:100); # lazy slice
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
164 a = []; # the original a array is still allocated
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
165 c@{1@} = b; # b is reallocated at this point
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
166 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
167 @end example
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
168
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
169 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
170 Avoid deep recursion. Function calls to m-file functions carry a relatively significant overhead,
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
171 so rewriting a recursion as a loop often helps. Also, note that the maximum level of recursion is
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
172 limited.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
173
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
174 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
175 Avoid resizing matrices unnecessarily. When building a single result
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
176 matrix from a series of calculations, set the size of the result matrix
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
177 first, then insert values into it. Write
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
178
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
179 @example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
180 @group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
181 result = zeros (big_n, big_m)
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
182 for i = over:and_over
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
183 r1 = @dots{}
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
184 r2 = @dots{}
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
185 result (r1, r2) = new_value ();
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
186 endfor
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
187 @end group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
188 @end example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
189
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
190 @noindent
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
191 instead of
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
192
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
193 @example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
194 @group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
195 result = [];
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
196 for i = ever:and_ever
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
197 result = [ result, new_value() ];
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
198 endfor
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
199 @end group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
200 @end example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
201
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
202 Sometimes the number of items can't be computed in advance, and stack-like operations
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
203 are needed. When elements are being repeatedly inserted at/removed from the end of an
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
204 array, Octave detects it as stack usage and attempts to use a smarter memory management
10791
3140cb7a05a1 Add spellchecker scripts for Octave and run spellcheck of documentation
Rik <octave@nomad.inbox5.com>
parents: 10284
diff changeset
205 strategy pre-allocating the array in bigger chunks. Likewise works for cell and
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
206 struct arrays.
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
207
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
208 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
209 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
210 a = [];
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
211 while (condition)
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
212 @dots{}
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
213 a(end+1) = value; # "push" operation
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
214 @dots{}
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
215 a(end) = []; # "pop" operation
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
216 @dots{}
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
217 endwhile
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
218 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
219 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
220
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
221 @item
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
222 Use @code{cellfun} intelligently. The @code{cellfun} function is a useful tool
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
223 for avoiding loops. @xref{Processing Data in Cell Arrays}.
10284
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
224 @code{cellfun} is often used with anonymous function handles; however, calling
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
225 an anonymous function involves an overhead quite comparable to the overhead
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
226 of an m-file function. Passing a handle to a built-in function is faster,
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
227 because the interpreter is not involved in the internal loop. For example:
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
228
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
229 @example
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
230 @group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
231 a = @{@dots{}@}
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
232 v = cellfun (@@(x) det(x), a); # compute determinants
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
233 v = cellfun (@@det, a); # faster
9758
09da0bd91412 Periodic grammar check of Octave documentation files to ensure common format
Rik <rdrider0-list@yahoo.com>
parents: 9486
diff changeset
234 @end group
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
235 @end example
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
236
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
237 @item
10284
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
238 Octave includes a number of other functions that can replace common types of loops,
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
239 including @code{bsxfun}, @code{arrayfun}, @code{structfun}, @code{accumarray}.
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
240 These functions can take an arbitrary function as a handle.
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
241
c3df189b1b15 more coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9758
diff changeset
242 @item
9356
b2133f97079d update coding tips
Jaroslav Hajek <highegg@gmail.com>
parents: 9322
diff changeset
243 Avoid calling @code{eval} or @code{feval} excessively, because
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
244 they require Octave to parse input or look up the name of a function in
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
245 the symbol table.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
246
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
247 If you are using @code{eval} as an exception handling mechanism and not
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
248 because you need to execute some arbitrary text, use the @code{try}
9038
fca0dc2fb042 Cleanup documentation files stmt.texi and func.texi
Rik <rdrider0-list@yahoo.com>
parents: 9032
diff changeset
249 statement instead. @xref{The @code{try} Statement}.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
250
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
251 @item
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
252 If you are calling lots of functions but none of them will need to
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
253 change during your run, set the variable
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
254 @code{ignore_function_time_stamp} to @code{"all"} so that Octave doesn't
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
255 waste a lot of time checking to see if you have updated your function
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
256 files.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
257 @end itemize
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
258
4167
aae05d51353c [project @ 2002-11-12 02:52:50 by jwe]
jwe
parents: 3294
diff changeset
259 @node Comment Tips
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
260 @section Tips on Writing Comments
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
261
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
262 Here are the conventions to follow when writing comments.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
263
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
264 @table @samp
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
265 @item #
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
266 Comments that start with a single sharp-sign, @samp{#}, should all be
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
267 aligned to the same column on the right of the source code. Such
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
268 comments usually explain how the code on the same line does its job. In
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
269 the Emacs mode for Octave, the @kbd{M-;} (@code{indent-for-comment})
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
270 command automatically inserts such a @samp{#} in the right place, or
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
271 aligns such a comment if it is already present.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
272
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
273 @item ##
7345
74075b3b54c1 [project @ 2008-01-04 18:42:40 by jwe]
jwe
parents: 7081
diff changeset
274 Comments that start with a double sharp-sign, @samp{##}, should be aligned to
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
275 the same level of indentation as the code. Such comments usually
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
276 describe the purpose of the following lines or the state of the program
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
277 at that point.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
278 @end table
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
279
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
280 @noindent
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
281 The indentation commands of the Octave mode in Emacs, such as @kbd{M-;}
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
282 (@code{indent-for-comment}) and @kbd{TAB} (@code{octave-indent-line})
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
283 automatically indent comments according to these conventions,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
284 depending on the number of semicolons. @xref{Comments,,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
285 Manipulating Comments, emacs, The GNU Emacs Manual}.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
286
4167
aae05d51353c [project @ 2002-11-12 02:52:50 by jwe]
jwe
parents: 3294
diff changeset
287 @node Function Headers
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
288 @section Conventional Headers for Octave Functions
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
289 @cindex header comments
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
290
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
291 Octave has conventions for using special comments in function files
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
292 to give information such as who wrote them. This section explains these
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
293 conventions.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
295 The top of the file should contain a copyright notice, followed by a
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
296 block of comments that can be used as the help text for the function.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
297 Here is an example:
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
298
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
299 @example
6778
083721ae3dfa [project @ 2007-07-18 17:03:10 by jwe]
jwe
parents: 6670
diff changeset
300 ## Copyright (C) 1996, 1997, 2007 John W. Eaton
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
301 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
302 ## This file is part of Octave.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
303 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
304 ## Octave is free software; you can redistribute it and/or
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
305 ## modify it under the terms of the GNU General Public
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
306 ## License as published by the Free Software Foundation;
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
307 ## either version 3 of the License, or (at your option) any
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
308 ## later version.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
309 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
310 ## Octave is distributed in the hope that it will be useful,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
311 ## but WITHOUT ANY WARRANTY; without even the implied
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
312 ## warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
313 ## PURPOSE. See the GNU General Public License for more
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
314 ## details.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
315 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
316 ## You should have received a copy of the GNU General Public
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
317 ## License along with Octave; see the file COPYING. If not,
7016
93c65f2a5668 [project @ 2007-10-12 06:40:56 by jwe]
jwe
parents: 7001
diff changeset
318 ## see <http://www.gnu.org/licenses/>.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
319
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
320 ## usage: [IN, OUT, PID] = popen2 (COMMAND, ARGS)
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
321 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
322 ## Start a subprocess with two-way communication. COMMAND
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
323 ## specifies the name of the command to start. ARGS is an
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
324 ## array of strings containing options for COMMAND. IN and
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
325 ## OUT are the file ids of the input and streams for the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
326 ## subprocess, and PID is the process id of the subprocess,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
327 ## or -1 if COMMAND could not be executed.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
328 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
329 ## Example:
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
330 ##
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
331 ## [in, out, pid] = popen2 ("sort", "-nr");
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
332 ## fputs (in, "these\nare\nsome\nstrings\n");
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
333 ## fclose (in);
7768
a2d9f325b65a Use isschar instead of deprecated isstr
Rafael Laboissiere <rafael@debian.org>
parents: 7345
diff changeset
334 ## while (ischar (s = fgets (out)))
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
335 ## fputs (stdout, s);
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
336 ## endwhile
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
337 ## fclose (out);
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
338 @end example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
339
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
340 Octave uses the first block of comments in a function file that do not
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
341 appear to be a copyright notice as the help text for the file. For
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
342 Octave to recognize the first comment block as a copyright notice, it
6530
f80cc454860d [project @ 2007-04-16 23:16:58 by jwe]
jwe
parents: 5307
diff changeset
343 must start with the word `Copyright' after stripping the leading
f80cc454860d [project @ 2007-04-16 23:16:58 by jwe]
jwe
parents: 5307
diff changeset
344 comment characters.
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
345
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
346 After the copyright notice and help text come several @dfn{header
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
347 comment} lines, each beginning with @samp{## @var{header-name}:}. For
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
348 example,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
349
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
350 @example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
351 @group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
352 ## Author: jwe
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
353 ## Keywords: subprocesses input-output
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
354 ## Maintainer: jwe
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
355 @end group
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
356 @end example
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
357
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
358 Here is a table of the conventional possibilities for @var{header-name}:
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
359
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
360 @table @samp
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
361 @item Author
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
362 This line states the name and net address of at least the principal
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
363 author of the library.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
364
6670
14992092ab06 [project @ 2007-05-29 17:51:37 by jwe]
jwe
parents: 6576
diff changeset
365 @example
9322
66fdc831c580 fix jwe email address
John W. Eaton <jwe@octave.org>
parents: 9210
diff changeset
366 ## Author: John W. Eaton <jwe@@octave.org>
6670
14992092ab06 [project @ 2007-05-29 17:51:37 by jwe]
jwe
parents: 6576
diff changeset
367 @end example
3294
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
368
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
369 @item Maintainer
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
370 This line should contain a single name/address as in the Author line, or
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
371 an address only, or the string @samp{jwe}. If there is no maintainer
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
372 line, the person(s) in the Author field are presumed to be the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
373 maintainers. The example above is mildly bogus because the maintainer
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
374 line is redundant.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
375
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
376 The idea behind the @samp{Author} and @samp{Maintainer} lines is to make
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
377 possible a function to ``send mail to the maintainer'' without
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
378 having to mine the name out by hand.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
379
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
380 Be sure to surround the network address with @samp{<@dots{}>} if
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
381 you include the person's full name as well as the network address.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
382
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
383 @item Created
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
384 This optional line gives the original creation date of the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
385 file. For historical interest only.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
386
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
387 @item Version
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
388 If you wish to record version numbers for the individual Octave program,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
389 put them in this line.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
390
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
391 @item Adapted-By
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
392 In this header line, place the name of the person who adapted the
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
393 library for installation (to make it fit the style conventions, for
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
394 example).
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
395
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
396 @item Keywords
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
397 This line lists keywords. Eventually, it will be used by an apropos
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
398 command to allow people will find your package when they're looking for
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
399 things by topic area. To separate the keywords, you can use spaces,
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
400 commas, or both.
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
401 @end table
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
402
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
403 Just about every Octave function ought to have the @samp{Author} and
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
404 @samp{Keywords} header comment lines. Use the others if they are
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
405 appropriate. You can also put in header lines with other header
bfe1573bd2ae [project @ 1999-10-19 10:06:07 by jwe]
jwe
parents:
diff changeset
406 names---they have no standard meanings, so they can't do any harm.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
407
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
408 @node Documentation Tips
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
409 @section Tips for Documentation Strings
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
410
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
411 As noted above, documentation is typically in a commented header block
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
412 on an Octave function following the copyright statement. The help string
7001
8b0cfeb06365 [project @ 2007-10-10 18:02:59 by jwe]
jwe
parents: 6778
diff changeset
413 shown above is an unformatted string and will be displayed as is by
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
414 Octave. Here are some tips for the writing of documentation strings.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
415
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
416 @itemize @bullet
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
417 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
418 Every command, function, or variable intended for users to know about
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
419 should have a documentation string.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
420
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
421 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
422 An internal variable or subroutine of an Octave program might as well have
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
423 a documentation string.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
424
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
425 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
426 The first line of the documentation string should consist of one or two
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
427 complete sentences that stand on their own as a summary.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
428
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
429 The documentation string can have additional lines that expand on the
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
430 details of how to use the function or variable. The additional lines
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
431 should also be made up of complete sentences.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
432
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
433 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
434 For consistency, phrase the verb in the first sentence of a
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
435 documentation string as an infinitive with ``to'' omitted. For
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
436 instance, use ``Return the frob of A and B.'' in preference to ``Returns
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
437 the frob of A and B@.'' Usually it looks good to do likewise for the
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
438 rest of the first paragraph. Subsequent paragraphs usually look better
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
439 if they have proper subjects.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
440
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
441 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
442 Write documentation strings in the active voice, not the passive, and in
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
443 the present tense, not the future. For instance, use ``Return a list
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
444 containing A and B.'' instead of ``A list containing A and B will be
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
445 returned.''
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
446
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
447 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
448 Avoid using the word ``cause'' (or its equivalents) unnecessarily.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
449 Instead of, ``Cause Octave to display text in boldface,'' write just
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
450 ``Display text in boldface.''
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
451
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
452 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
453 Do not start or end a documentation string with whitespace.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
454
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
455 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
456 Format the documentation string so that it fits in an Emacs window on an
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
457 80-column screen. It is a good idea for most lines to be no wider than
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
458 60 characters.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
459
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
460 However, rather than simply filling the entire documentation string, you
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
461 can make it much more readable by choosing line breaks with care.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
462 Use blank lines between topics if the documentation string is long.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
463
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
464 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
465 @strong{Do not} indent subsequent lines of a documentation string so
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
466 that the text is lined up in the source code with the text of the first
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
467 line. This looks nice in the source code, but looks bizarre when users
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
468 view the documentation. Remember that the indentation before the
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
469 starting double-quote is not part of the string!
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
470
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
471 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
472 The documentation string for a variable that is a yes-or-no flag should
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
473 start with words such as ``Nonzero means@dots{}'', to make it clear that
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
474 all nonzero values are equivalent and indicate explicitly what zero and
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
475 nonzero mean.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
476
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
477 @item
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
478 When a function's documentation string mentions the value of an argument
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
479 of the function, use the argument name in capital letters as if it were
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
480 a name for that value. Thus, the documentation string of the operator
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
481 @code{/} refers to its second argument as @samp{DIVISOR}, because the
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
482 actual argument name is @code{divisor}.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
483
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
484 Also use all caps for meta-syntactic variables, such as when you show
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
485 the decomposition of a list or vector into subunits, some of which may
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
486 vary.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
487 @end itemize
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
488
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
489 Octave also allows extensive formatting of the help string of functions
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
490 using Texinfo. The effect on the online documentation is relatively
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
491 small, but makes the help string of functions conform to the help of
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
492 Octave's own functions. However, the effect on the appearance of printed
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
493 or online documentation will be greatly improved.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
494
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
495 The fundamental building block of Texinfo documentation strings is the
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
496 Texinfo-macro @code{@@deftypefn}, which takes three arguments: The class
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
497 the function is in, its output arguments, and the function's
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
498 signature. Typical classes for functions include @code{Function File}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
499 for standard Octave functions, and @code{Loadable Function} for
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
500 dynamically linked functions. A skeletal Texinfo documentation string
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
501 therefore looks like this
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
502
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
503 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
504 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
505 -*- texinfo -*-
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
506 @@deftypefn@{Function File@} @{@@var@{ret@} =@} fn (@dots{})
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
507 @@cindex index term
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
508 Help text in Texinfo format. Code samples should be marked
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
509 like @@code@{sample of code@} and variables should be marked
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
510 as @@var@{variable@}.
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
511 @@seealso@{fn2@}
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
512 @@end deftypefn
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
513 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
514 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
515
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
516 This help string must be commented in user functions, or in the help
9209
923c7cb7f13f Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents: 9080
diff changeset
517 string of the @w{@code{DEFUN_DLD}} macro for dynamically loadable
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
518 functions. The important aspects of the documentation string are
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
519
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
520 @table @asis
10791
3140cb7a05a1 Add spellchecker scripts for Octave and run spellcheck of documentation
Rik <octave@nomad.inbox5.com>
parents: 10284
diff changeset
521 @item -*- @nospell{texinfo} -*-
8347
fa78cb8d8a5c corrections for typos
Brian Gough<bjg@network-theory.co.uk>
parents: 7768
diff changeset
522 This string signals Octave that the following text is in Texinfo format,
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
523 and should be the first part of any help string in Texinfo format.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
524 @item @@deftypefn@{class@} @dots{} @@end deftypefn
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
525 The entire help string should be enclosed within the block defined by
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
526 deftypefn.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
527 @item @@cindex index term
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
528 This generates an index entry, and can be useful when the function is
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
529 included as part of a larger piece of documentation. It is ignored
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
530 within Octave's help viewer. Only one index term may appear per line
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
531 but multiple @@cindex lines are valid if the function should be
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
532 filed under different terms.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
533 @item @@var@{variable@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
534 All variables should be marked with this macro. The markup of variables
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
535 is then changed appropriately for display.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
536 @item @@code@{sample of code@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
537 All samples of code should be marked with this macro for the same
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
538 reasons as the @@var macro.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
539 @item @@seealso@{function2@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
540 This is a comma separated list of function names that allows cross
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
541 referencing from one function documentation string to another.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
542 @end table
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
543
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
544 Texinfo format has been designed to generate output for online viewing
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
545 with text terminals as well as generating high-quality printed output.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
546 To these ends, Texinfo has commands which control the diversion of parts
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
547 of the document into a particular output processor. Three formats are
10791
3140cb7a05a1 Add spellchecker scripts for Octave and run spellcheck of documentation
Rik <octave@nomad.inbox5.com>
parents: 10284
diff changeset
548 of importance: info, HTML and @TeX{}. These are selected with
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
549
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
550 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
551 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
552 @@ifinfo
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
553 Text area for info only
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
554 @@end ifinfo
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
555 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
556 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
557
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
558 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
559 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
560 @@ifhtml
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
561 Text area for HTML only
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
562 @@end ifhtml
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
563 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
564 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
565
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
566 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
567 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
568 @@tex
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
569 Text area for TeX only
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
570 @@end tex
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
571 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
572 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
573
10791
3140cb7a05a1 Add spellchecker scripts for Octave and run spellcheck of documentation
Rik <octave@nomad.inbox5.com>
parents: 10284
diff changeset
574 Note that often @TeX{} output can be used in HTML documents and so often
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
575 the @code{@@ifhtml} blocks are unnecessary. If no specific output
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
576 processor is chosen, by default, the text goes into all output
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
577 processors. It is usual to have the above blocks in pairs to allow the
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
578 same information to be conveyed in all output formats, but with a
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
579 different markup. Currently, most Octave documentation only makes a
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
580 distinction between @TeX{} and all other formats. Therefore, the
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
581 following construct is seen repeatedly.
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
582
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
583 @example
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
584 @group
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
585 @@tex
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
586 text for TeX only
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
587 @@end tex
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
588 @@ifnottex
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
589 text for info, HTML, plaintext
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
590 @@end ifnottex
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
591 @end group
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
592 @end example
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
593
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
594 Another important feature of Texinfo that is often used in Octave help
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
595 strings is the @code{@@example} environment. An example of its use is
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
596
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
597 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
598 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
599 @@example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
600 @@group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
601 @@code@{2 * 2@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
602 @@result@{@} 4
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
603 @@end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
604 @@end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
605 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
606 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
607
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
608 which produces
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
609
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
610 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
611 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
612 @code{2 * 2}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
613 @result{} 4
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
614 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
615 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
616
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
617 The @code{@@group} block prevents the example from being split across a
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
618 page boundary, while the @code{@@result@{@}} macro produces a right
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
619 arrow signifying the result of a command. If your example is larger than
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
620 20 lines it is better NOT to use grouping so that a reasonable page boundary
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
621 can be calculated.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
622
8828
8463d1a2e544 Doc fixes.
Brian Gough <bjg@network-theory.co.uk>
parents: 8347
diff changeset
623 In many cases a function has multiple ways in which it can be called,
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
624 and the @code{@@deftypefnx} macro can be used to give alternatives. For
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
625 example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
626
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
627 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
628 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
629 -*- texinfo -*-
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
630 @@deftypefn@{Function File@} @{@@var@{a@} =@} fn (@@var@{x@}, @dots{})
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
631 @@deftypefnx@{Function File@} @{@@var@{a@} =@} fn (@@var@{y@}, @dots{})
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
632 Help text in Texinfo format.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
633 @@end deftypefn
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
634 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
635 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
636
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
637 Many complete examples of Texinfo documentation can be taken from the
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
638 help strings for the Octave functions themselves. A relatively complete
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
639 example of which is the @code{nchoosek} function. The Texinfo
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
640 documentation string for @code{nchoosek} is
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
641
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
642 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
643 -*- texinfo -*-
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
644 @@deftypefn @{Function File@} @{@} nchoosek (@@var@{n@}, @@var@{k@})
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
645
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
646 Compute the binomial coefficient or all combinations of
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
647 @@var@{n@}. If @@var@{n@} is a scalar then, calculate the
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
648 binomial coefficient of @@var@{n@} and @@var@{k@}, defined as
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
649
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
650 @@tex
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
651 $$
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
652 @{n \choose k@} = @{n (n-1) (n-2) \cdots (n-k+1) \over k!@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
653 $$
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
654 @@end tex
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
655 @@ifnottex
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
656
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
657 @@example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
658 @@group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
659 / \
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
660 | n | n (n-1) (n-2) @dots{} (n-k+1)
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
661 | | = -------------------------
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
662 | k | k!
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
663 \ /
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
664 @@end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
665 @@end example
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
666 @@end ifnottex
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
667
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
668 If @@var@{n@} is a vector, this generates all combinations
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
669 of the elements of @@var@{n@}, taken @@var@{k@} at a time,
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
670 one row per combination. The resulting @@var@{c@} has size
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
671 @@code@{[nchoosek (length (@@var@{n@}),@@var@{k@}), @@var@{k@}]@}.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
672
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
673 @@code@{nchoosek@} works only for non-negative integer arguments; use
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
674 @@code@{bincoeff@} for non-integer scalar arguments and for using vector
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
675 arguments to compute many coefficients at once.
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
676
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
677 @@seealso@{bincoeff@}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
678 @@end deftypefn
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
679 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
680
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
681 which demonstrates most of the concepts discussed above.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
682 @iftex
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
683 This documentation string renders as
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
684
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
685 @c Note actually use the output of info below rather than try and
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
686 @c reproduce it here to prevent it looking different than how it would
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
687 @c appear with info.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
688 @example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
689 @group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
690 -- Function File: C = nchoosek (N, K)
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
691 Compute the binomial coefficient or all combinations
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
692 of N. If N is a scalar then, calculate the binomial
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
693 coefficient of N and K, defined as
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
694
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
695 / \
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
696 | n | n (n-1) (n-2) @dots{} (n-k+1) n!
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
697 | | = ------------------------- = ---------
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
698 | k | k! k! (n-k)!
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
699 \ /
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
700
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
701 If N is a vector generate all combinations of the
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
702 elements of N, taken K at a time, one row per
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
703 combination. The resulting C has size `[nchoosek
7081
503001863427 [project @ 2007-10-31 01:08:14 by jwe]
jwe
parents: 7018
diff changeset
704 (length (N), K), K]'.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
705
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
706 `nchoosek' works only for non-negative integer
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
707 arguments; use `bincoeff' for non-integer scalar
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
708 arguments and for using vector arguments to compute
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
709 many coefficients at once.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
710
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
711 See also: bincoeff.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
712 @end group
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
713 @end example
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
714
9209
923c7cb7f13f Simplify TeXinfo files by eliminating redundant @iftex followed by @tex construction.
Rik <rdrider0-list@yahoo.com>
parents: 9080
diff changeset
715 using info, whereas in a printed documentation using @TeX{} it will appear
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
716 as
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
717
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
718 @deftypefn {Function File} {@var{c} =} nchoosek (@var{n}, @var{k})
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
719
6576
f14a0d35f90b [project @ 2007-04-25 14:22:34 by jwe]
jwe
parents: 6574
diff changeset
720 Compute the binomial coefficient or all combinations of @var{n}.
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
721 If @var{n} is a scalar then, calculate the binomial coefficient
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
722 of @var{n} and @var{k}, defined as
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
723
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
724 @tex
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
725 $$
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
726 {n \choose k} = {n (n-1) (n-2) \cdots (n-k+1) \over k!}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
727 $$
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
728 @end tex
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
729
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
730 If @var{n} is a vector generate all combinations of the elements
9080
ec41eabf4499 Cleanup documentation files dynamic.texi, testfun.texi, tips.texi
Rik <rdrider0-list@yahoo.com>
parents: 9038
diff changeset
731 of @var{n}, taken @var{k} at a time, one row per combination. The
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
732 resulting @var{c} has size @code{[nchoosek (length (@var{n}),
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
733 @var{k}), @var{k}]}.
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
734
9210
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
735 @code{nchoosek} works only for non-negative integer arguments; use
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
736 @code{bincoeff} for non-integer scalar arguments and for using vector
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
737 arguments to compute many coefficients at once.
a7a9eecc07b5 Change recommendation for writing documentation to favor @tex
Rik <rdrider0-list@yahoo.com>
parents: 9209
diff changeset
738
6574
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
739 @seealso{bincoeff}
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
740 @end deftypefn
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
741
d5d6a670f137 [project @ 2007-04-25 14:02:38 by jwe]
jwe
parents: 6530
diff changeset
742 @end iftex