~ubuntu-branches/ubuntu/trusty/pyx/trusty

« back to all changes in this revision

Viewing changes to faq/glifaq.dtx

  • Committer: Bazaar Package Importer
  • Author(s): Graham Wilson
  • Date: 2004-12-25 06:42:57 UTC
  • Revision ID: james.westby@ubuntu.com-20041225064257-31469ij5uysqq302
Tags: upstream-0.7.1
ImportĀ upstreamĀ versionĀ 0.7.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
% \iffalse
 
2
%<package>\NeedsTeXFormat{LaTeX2e}
 
3
%<*driver>
 
4
\def\fileversion{0.3}
 
5
\def\filedate{2004/12/10}
 
6
\ProvidesFile{glifaq.drv}
 
7
%</driver>
 
8
%<package>\ProvidesPackage{glifaq}
 
9
           [2004/12/10 Style for PyX FAQ (gli) v0.3]
 
10
%<*driver>
 
11
\documentclass{ltxdoc}
 
12
\usepackage{url}
 
13
\EnableCrossrefs
 
14
\CodelineIndex
 
15
\RecordChanges
 
16
\newcommand\PyX{P\kern-.3em\lower.5ex\hbox{Y}\kern-.18em X}
 
17
\newcommand{\acro}[1]{\textsc{#1}}
 
18
\begin{document}
 
19
   \DocInput{glifaq.dtx}
 
20
\end{document}
 
21
%</driver>
 
22
% \fi
 
23
%
 
24
% \CharacterTable
 
25
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
 
26
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
 
27
%   Digits        \0\1\2\3\4\5\6\7\8\9
 
28
%   Exclamation   \!     Double quote  \"     Hash (number) \#
 
29
%   Dollar        \$     Percent       \%     Ampersand     \&
 
30
%   Acute accent  \'     Left paren    \(     Right paren   \)
 
31
%   Asterisk      \*     Plus          \+     Comma         \,
 
32
%   Minus         \-     Point         \.     Solidus       \/
 
33
%   Colon         \:     Semicolon     \;     Less than     \<
 
34
%   Equals        \=     Greater than  \>     Question mark \?
 
35
%   Commercial at \@     Left bracket  \[     Backslash     \\
 
36
%   Right bracket \]     Circumflex    \^     Underscore    \_
 
37
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
 
38
%   Right brace   \}     Tilde         \~}
 
39
%
 
40
% \CheckSum{239}
 
41
%
 
42
%
 
43
% \title{The \texttt{glifaq} package}
 
44
%
 
45
% \author{Gert-Ludwig Ingold\\\small\url{<gert.ingold@physik.uni-augsburg.de>}}
 
46
% \date{(v.\fileversion\ -- \filedate)}
 
47
% \maketitle
 
48
%
 
49
% \section{Introduction}
 
50
% The \texttt{glifaq} package has been developed to typeset the \acro{faq} of 
 
51
% the \PyX{} graphics package for \acro{Python}. It might contain a few
 
52
% commands which are useful for other \acro{faq}s as well.
 
53
%
 
54
% \section{Usage}
 
55
% \label{sec:usage}
 
56
% The package \texttt{glifaq} is intended for use with the \texttt{scrartcl}
 
57
% class which is part of \acro{KOMA-Script}. \texttt{scrartcl} should therefore
 
58
% be chosen as document class. 
 
59
%  
 
60
% The options of the package \texttt{glifaq} mostly control the kind of 
 
61
% questions which will be typeset. There are four kinds of questions:
 
62
% \begin{center}
 
63
% \begin{tabular}{ll}
 
64
% |a| & answered question\\
 
65
% |c| & question where the answer has been checked by an expert\\
 
66
% |o| & outdated question\\
 
67
% |t| & question not fully answered yet (= to do)
 
68
% \end{tabular}
 
69
% \end{center}
 
70
% The following options are recognized by the package:
 
71
% \begin{description}
 
72
% \item[all] prints all questions
 
73
% \item[answered] prints only questions which have no ``to do'' status, i.e.
 
74
%            they have a satisfying answer and might even have been checked
 
75
% \item[checked] prints only questions where the answers have been checked
 
76
% \item[outdated] prints only questions and answers which are outdated
 
77
% \item[todo] prints all questions where no satisfying answer has been 
 
78
%            formulated yet
 
79
% \item[unchecked] prints all questions which have not been checked yet
 
80
% \item[comments] if comments exist, they will be printed as well and a 
 
81
%            special mark will be put in the margin
 
82
% \item[notoc] the table of contents will not be printed
 
83
% \end{description}
 
84
% By default, all questions and the table of contents but no comments will be
 
85
% printed. If questions with ``to do'' status are printed, a special mark will
 
86
% be put in the margin.
 
87
%
 
88
% \DescribeMacro\question
 
89
% The most important task of the package \texttt{glifaq} is to define a command
 
90
% \begin{quote}
 
91
% |\question{|\meta{status}|}{|\meta{title}|}{|\meta{comment}|}{|^^A
 
92
%    \meta{answer}|}|
 
93
% \end{quote}
 
94
% to handle the typesetting of questions and their answers. As indicated, this 
 
95
% command takes four arguments:
 
96
% \begin{center}
 
97
% \begin{tabular}{ll}
 
98
% 1: & class of the question according to the table given above\\
 
99
%    & allowed values: |a|, |c|, |o|, |t|\\
 
100
% 2: & title of the question\\
 
101
% 3: & comments related to this question\\
 
102
% 4: & the answer to the question
 
103
% \end{tabular}
 
104
% \end{center}
 
105
%
 
106
% \DescribeEnv{progcode}
 
107
% For the typesetting of code snippets, an environment |progcode| has been
 
108
% defined which will use a fixed space font. Unfortunately, verbatim code
 
109
% cannot be used in arguments as is the case here in macro |\question|.
 
110
% To guarantee proper spaces and in particular indenting, a tilde has to
 
111
% used instead of a space.
 
112
%
 
113
% In addition, there exist a few simple definitions which may be useful:
 
114
%
 
115
% \DescribeMacro\uaref
 
116
% The macro |\uaref| acts like the usual |\ref| command but puts an $\uparrow$
 
117
% (|\uparrow|) in front of the reference.
 
118
%
 
119
% \DescribeMacro\toc
 
120
% The macro |\toc| replaces the usual |\tableofcontents| to allow for control
 
121
% via the |notoc| option.
 
122
%
 
123
% \DescribeMacro\PyX
 
124
% The macro |\PyX| defines the \PyX{} logo as employed by the developers of 
 
125
% \PyX{} in their manual.
 
126
%
 
127
% \DescribeMacro\tipagraph
 
128
% In order to explain the pronunciation of \PyX, the |tipa| package is
 
129
% needed which cannot be expected to be present in every installation. 
 
130
% Therefore, we provide via the |\tipagraph| command a way to alternatively
 
131
% include a graphics file. The command is used as follows
 
132
% \begin{quote}
 
133
% |\tipagraph{|\meta{tipa code}|}{|\meta{graphics filename}|}|
 
134
% \end{quote}
 
135
%
 
136
% \DescribeMacro\cs
 
137
% In some places, a backslash cannot be used verbatim, in particular in an
 
138
% argument of the |\question| macro. Using
 
139
% \begin{quote}
 
140
% \verb*+\cs +\meta{command name}
 
141
% \end{quote}
 
142
% will result in a backslash followed directly by the command name.
 
143
%
 
144
% \DescribeMacro\us
 
145
% The macro |\us| can be used to produce an underscore if there is no more
 
146
% direct way to do so.
 
147
%
 
148
% \DescribeMacro\hat
 
149
% Sometimes it may also be difficult to produce a hat character. In such cases, 
 
150
% |\hat| can be useful.
 
151
%
 
152
% \DescribeMacro\cb
 
153
% The last macro of this type is |\cb| which allows to enclose an argument in
 
154
% curly braces.
 
155
%
 
156
% \DescribeMacro\ctan
 
157
% For references to files on \acro{ctan}, the macro |\ctan| can be used where 
 
158
% the single argument should be the location of the file relative to the 
 
159
% \acro{ctan} root.
 
160
% \DescribeMacro\ftpCTAN
 
161
% One of the \acro{ctan} ftp servers is coded into the package via the 
 
162
% |\ftpCTAN| macro for direct reference from the \acro{pdf} version of the 
 
163
% \acro{faq}.
 
164
%
 
165
% \DescribeMacro\new\DescribeMacro\changed
 
166
% Finally, the two macros |\new| and |\changed| allow to mark questions as
 
167
% new or changed with respect to an earlier version of the \acro{faq}. These 
 
168
% macros should be used in the second argument of |\question| just behind the 
 
169
% text defining the title of a question.
 
170
%
 
171
% \section{The Description of the Package Code}
 
172
% \StopEventually
 
173
%
 
174
% We first define a few new switches:
 
175
% \begin{center} 
 
176
% \begin{tabular}{ll}
 
177
% |\if@a|& print answered questions if true\\
 
178
% |\if@c|& print corrected questions if true\\
 
179
% |\if@o|& print outdated questions if true\\
 
180
% |\if@t|& print unanswered or not fully answered questions if true\\
 
181
% |\ifc@mments|& print comments if true\\
 
182
% |\ift@c|& insert table of contents if true
 
183
% \end{tabular}
 
184
% \end{center}
 
185
% By default, we print all questions and the table of contents but no comments.
 
186
%    \begin{macrocode}
 
187
\newif\if@a \@atrue
 
188
\newif\if@c \@ctrue
 
189
\newif\if@o \@otrue
 
190
\newif\if@t \@ttrue
 
191
\newif\ifc@mments \c@mmentsfalse
 
192
\newif\ift@c \t@ctrue
 
193
%    \end{macrocode}
 
194
% Now we define the various options and set the switches according to the
 
195
% options' definition given in section~\ref{sec:usage}.
 
196
%    \begin{macrocode}
 
197
\DeclareOption{all}{\@atrue \@ctrue \@otrue \@ttrue}
 
198
\DeclareOption{answered}{\@atrue \@ctrue \@ofalse \@tfalse}
 
199
\DeclareOption{checked}{\@afalse \@ctrue \@ofalse \@tfalse}
 
200
\DeclareOption{outdated}{\@afalse \@cfalse \@otrue \@tfalse}
 
201
\DeclareOption{todo}{\@afalse \@cfalse \@ofalse \@ttrue}
 
202
\DeclareOption{unchecked}{\@atrue \@cfalse \@ofalse \@ttrue}
 
203
\DeclareOption{comments}{\c@mmentstrue}
 
204
\DeclareOption{notoc}{\t@cfalse}
 
205
\ProcessOptions\relax
 
206
%    \end{macrocode}
 
207
% Next, we load some needed packages if they have not been loaded before. 
 
208
%    \begin{macrocode}
 
209
\RequirePackage{ifthen}
 
210
\RequirePackage{remreset}
 
211
\RequirePackage{pifont}
 
212
%    \end{macrocode}
 
213
% The following macro will put a large cross in the margin to mark comments or
 
214
% questions with ``to do'' status.
 
215
%    \begin{macrocode}
 
216
\newcommand{\put@ding}{\mbox{}\marginpar{\Huge\ding{56}}}
 
217
%    \end{macrocode}
 
218
%
 
219
% Now comes the most important part of this package, the macro |\question|.
 
220
% This macro has to decide on the basis of the first argument and the
 
221
% options used with the package whether the current question is to be printed
 
222
% or not.
 
223
%
 
224
% It is assumed that in the section hierarchy, the question can take the role
 
225
% of a subsection or a subsubsection. Therefore, a mechanism has to be 
 
226
% provided which tells the question its place in the hierarchy. Independent
 
227
% of whether the question acts like a subsection or subsubsection, the layout
 
228
% of the question title should be the one of a subsubsection.
 
229
%
 
230
% We introduce three switches: |\@printtrue| indicates that the question has
 
231
% to be printed while |\@margtrue| requests a mark to be put into the margin
 
232
% to indicate a question with ``to do'' status and |\@outdatedtrue| will mark a
 
233
% question as outdated. 
 
234
%    \begin{macrocode}
 
235
\newif\if@print
 
236
\newif\if@marg 
 
237
\newif\if@outdated
 
238
%    \end{macrocode}
 
239
% Below we will need to find out which level a question corresponds to. If the
 
240
% value of the counter \texttt{question} is not equal to 0, the level is
 
241
% already known. A value of 1 indicates that the questions are on the level
 
242
% of a \texttt{subsection} while a value of 2 implies that the questions are
 
243
% on the \texttt{subsubsection} level. Whenever a new section is started, we
 
244
% will need to find out the level of the questions in this section. Therefore,
 
245
% we reset the counter \texttt{question} whenever a new section is started.
 
246
%    \begin{macrocode}
 
247
\newcounter{question}[section]
 
248
\setcounter{question}{0}
 
249
%    \end{macrocode}
 
250
% Since we want to set the title of a question always in the fontsize of a 
 
251
% \texttt{subsubsection}, we might need to temporarily change the fontsize 
 
252
% of the \texttt{subsection} title. In order to be able to restore the original
 
253
% value, we save the value of |\size@subsection| which is used in the 
 
254
% \acro{KOMA-Script} classes to define the fontsize of the \texttt{subsection} 
 
255
% title.
 
256
%    \begin{macrocode}
 
257
\let\save@sizesubsection\size@subsection
 
258
%    \end{macrocode}
 
259
%
 
260
% Now we are ready to define the |\question| macro. First, defaults are set
 
261
% not to print the question and not to print a mark in the margin. If the status
 
262
% of the question corresponds to one asked for by the option passed to the
 
263
% package, we change the print switch to |\@printtrue|. A ``to do'' question
 
264
% will in addition ask to print a mark in the margin by setting |\@margtrue|.
 
265
%    \begin{macrocode}
 
266
\newcommand{\question}[4]%
 
267
{\@printfalse\@margfalse\@outdatedfalse%
 
268
 \ifthenelse{\equal{a}{#1}\and\boolean{@a}}{\@printtrue}{}%
 
269
 \ifthenelse{\equal{c}{#1}\and\boolean{@c}}{\@printtrue}{}%
 
270
 \ifthenelse{\equal{o}{#1}\and\boolean{@o}}{\@printtrue\@outdatedtrue}{}%
 
271
 \ifthenelse{\equal{t}{#1}\and\boolean{@t}}{\@printtrue\@margtrue}{}%
 
272
%    \end{macrocode}
 
273
% If the \texttt{question} counter has the value 0, we need to determine the
 
274
% level of the question. The question should at least be on 
 
275
% \texttt{subsubsection} level if not higher. So we first assume it to be
 
276
% of this level and make corrections later on if necessary. The counter
 
277
% \texttt{question} is set to a level different from 0 (in this case to a
 
278
% value of 2 although this is nowhere exploited in the code). This counter
 
279
% will now be reset not only by a |\section| but also by a |\subsection|.
 
280
% Finally, we set the command |\questi@n| which will typeset the question title
 
281
% as \texttt{subsubsection}.
 
282
%
 
283
% In a second step, we check whether the question is on |\subsection| level
 
284
% instead of |\subsubsection| level as was assumed before. In this case,
 
285
% the counter \texttt{question} is set to 1 (again it is only important that
 
286
% the value is different from 0). This counter should no longer be reset
 
287
% by a |\subsection| so we remove the corresponding entry from the reset list.
 
288
% Finally, the command |\questi@n| typesetting the title of the question is
 
289
% set to |\subsection|.
 
290
%    \begin{macrocode}
 
291
 \ifthenelse{\value{question} = 0}{%
 
292
   \setcounter{question}{2}%
 
293
   \@addtoreset{question}{subsection}%
 
294
   \let\questi@n\subsubsection%
 
295
   \ifthenelse{\value{subsection} = 0}%
 
296
      {\setcounter{question}{1}%
 
297
       \@removefromreset{question}{subsection}%
 
298
       \let\questi@n\subsection}%
 
299
      {}%
 
300
  }{}
 
301
%    \end{macrocode}
 
302
% Now we are ready to typeset the question if this is what the options passed
 
303
% to the package ask for. Before typesetting the question title, we temporarily
 
304
% set the fontsize of the |\subsection| title to the fontsize of the 
 
305
% |\subsubsection| just in case we are on the |\subsection| level. |\questi@n|
 
306
% does the typesetting of the title and a mark is put into the margin if
 
307
% requested by |\@margtrue|. 
 
308
%
 
309
% After the title, a comment, if present and asked for, is typeset in sans 
 
310
% serif and small fontsize. Finally, the answer, i.e. the contents of argument 
 
311
% 4, is typeset.
 
312
%    \begin{macrocode}
 
313
  \if@print%
 
314
    \let\size@subsection\size@subsubsection
 
315
     \questi@n{#2 \if@outdated\outd@ted\fi}\if@marg\put@ding\else\fi%
 
316
    \let\size@subsection\save@sizesubsection
 
317
   \ifc@mments
 
318
    \ifthenelse{\equal{}{#3}}{}
 
319
    {\put@ding{\sffamily\small#3}\par}%
 
320
   \else\fi
 
321
    #4
 
322
  \else\fi}
 
323
%    \end{macrocode}  
 
324
%
 
325
% Since it is not possible to use verbatim code in macro arguments, we cannot
 
326
% typeset code snippets in an answer by using a \texttt{verbatim} environment.
 
327
% We therefore define the environment \texttt{progcode}. In order to ensure
 
328
% proper indentation, we make the tilde an active character and define
 
329
% it as space preceded by a |\strut| so that the space is not ignored.
 
330
% In addition, several layout parameters are set like a global indentation
 
331
% of the code and the use of a small fixed space font.
 
332
%    \begin{macrocode}
 
333
\newenvironment{progcode}
 
334
  {\list{}{\leftmargin\parindent\rightmargin\z@}%
 
335
         \ttfamily\small%
 
336
         \catcode`\~=13%
 
337
         \def~{\strut\ }%
 
338
         \item\relax}
 
339
        {\endlist}
 
340
%    \end{macrocode}
 
341
% To facilitate references preceded by a $\uparrow$ we define |\uaref| which
 
342
% works like the standard |\ref|.
 
343
%    \begin{macrocode}
 
344
\DeclareRobustCommand\uaref[1]{$\uparrow$\ref{#1}}
 
345
%    \end{macrocode}
 
346
% The option \texttt{notoc} only works if instead of |\tableofcontents| the
 
347
% command |\toc| defined here is used.
 
348
%    \begin{macrocode}
 
349
\DeclareRobustCommand\toc[0]{\ift@c\tableofcontents\else\fi}
 
350
%    \end{macrocode}
 
351
% The definition of the \PyX{} logo is copied from the code used by the \PyX{}
 
352
% developers in their manual. Here, we also provide the simple string ``PyX''
 
353
% for use in the \acro{pdf} bookmarks.
 
354
%    \begin{macrocode}
 
355
\DeclareRobustCommand\PyX[0]{\texorpdfstring%
 
356
           {P\kern-.3em\lower.5ex\hbox{Y}\kern-.18em X}{PyX}%
 
357
          }
 
358
%    \end{macrocode}  
 
359
% We now check for the presence of the |tipa| package. If present, it
 
360
% will be loaded and the command |\tipagraph| will hand over its first
 
361
% argument to the command |\textipa|. Otherwise, the |graphicx| package
 
362
% is loaded and |\tipagraph| will lead to the inclusion of the graphics file
 
363
% given in the second argument. The vertical shift of the box has been chosen 
 
364
% by trial and error. The horizontal spacing is slightly different in the two 
 
365
% alternatives but this should not give to rise to major problems. 
 
366
%    \begin{macrocode}
 
367
\IfFileExists{tipa.sty}%
 
368
  {\usepackage{tipa}%
 
369
   \newcommand{\tipagraph}[2]{\textipa{##1}}}%
 
370
  {\usepackage{graphicx}%
 
371
   \newcommand{\tipagraph}[2]{\raisebox{-0.8ex}{\includegraphics{##2}}}}
 
372
%    \end{macrocode}
 
373
% When a backslash character is needed as part of a verbatim command name,
 
374
% but verbatim code cannot be used, the macro |\cs| can be employed.
 
375
% Again, we take care of the requirements of the \acro{pdf} bookmarks.
 
376
%    \begin{macrocode}
 
377
\DeclareRobustCommand\cs[1]{%
 
378
    \texorpdfstring{\texttt{\char`\\}}{\textbackslash}#1%
 
379
    }
 
380
%    \end{macrocode}
 
381
% In order to avoid problems with verbatim code, we define |\us| and |\hat|
 
382
% to produce an underscore and a hat, respectively.
 
383
%    \begin{macrocode}
 
384
\DeclareRobustCommand\us[0]{\texttt{\char`\_}}
 
385
\DeclareRobustCommand\hat[0]{\texttt{\char`\^}}
 
386
%    \end{macrocode}
 
387
% The macro |\cb| encloses its argument in curly braces and should be used
 
388
% when verbatim code does not work.
 
389
%    \begin{macrocode}
 
390
\DeclareRobustCommand\cb[1]{\texttt{\char`\{#1\char`\}}}
 
391
%    \end{macrocode}
 
392
% For files on \acro{ctan}, we define the macro |\ctan| which is used as follows
 
393
% \begin{quote}
 
394
% |\ctan{|\meta{file location relative to CTAN root}|}|
 
395
% \end{quote}
 
396
% In order for the link to connect to a \acro{ctan} server, |\ftpCTAN| contains
 
397
% the URL of one of the \acro{ctan} servers which is chosen quite arbitrarily 
 
398
% and could be replaced by another \acro{ctan} server. Note that we use
 
399
% |\path| instead of |\url| to avoid that a link is created to the second
 
400
% argument instead of the first one.
 
401
%    \begin{macrocode}
 
402
\def\ftpCTAN{ftp://ctan.tug.org/tex-archive/}
 
403
\DeclareRobustCommand\ctan[1]{%
 
404
    \href{\ftpCTAN#1}{\path{CTAN:#1}}%
 
405
}
 
406
%    \end{macrocode}
 
407
% In order to mark questions as new or changed with respect to a previous
 
408
% release of the \acro{faq}, we define the macros |\new| and |\changed| which 
 
409
% are intended to be used at the end of the second argument of |\question|.
 
410
% No output is generated for \acro{pdf} bookmarks.
 
411
%    \begin{macrocode}
 
412
\DeclareRobustCommand\new[0]{\texorpdfstring%
 
413
           {\quad\raisebox{0.3ex}{\fbox{\tiny\normalfont NEW}}}{}
 
414
          }
 
415
\DeclareRobustCommand\changed[0]{\texorpdfstring%
 
416
           {\quad\raisebox{0.3ex}{\fbox{\tiny\normalfont CHANGED}}}{}
 
417
          }
 
418
%    \end{macrocode}
 
419
% Outdated questions should be marked also in the \acro{pdf} bookmarks. 
 
420
%    \begin{macrocode}
 
421
\DeclareRobustCommand\outd@ted[0]{\texorpdfstring%
 
422
           {\quad\colorbox{black}{\color{white}\small OUTDATED}}
 
423
                      {~(outdated)}
 
424
          }
 
425
%    \end{macrocode}
 
426
% \Finale
 
427
\endinput