mirror of https://github.com/CGAL/cgal
1074 lines
51 KiB
TeX
1074 lines
51 KiB
TeX
% =============================================================================
|
|
% The CGAL Developers' Manual
|
|
% Chapter: Specification Documentation
|
|
% -----------------------------------------------------------------------------
|
|
% file : specification.tex
|
|
% authors: Susan Hert <hert@mpi-sb.mpg.de>
|
|
% -----------------------------------------------------------------------------
|
|
% $Revision$
|
|
% $Date$
|
|
% =============================================================================
|
|
\ccIndexMainItem{preconditions}
|
|
\ccIndexMainItem{postconditions}
|
|
\ccIndexMainItem{assertions}
|
|
\ccIndexMainItem{warnings}
|
|
|
|
\chapter{Specification Documentation}
|
|
\label{chap:specification}
|
|
|
|
|
|
\begin{quote}
|
|
There are two ways of constructing a software design. One way is to make
|
|
it so simple that there are obviously no deficiencies. And the other way
|
|
is to make it so complicated that there are no obvious deficiencies.
|
|
|
|
\hspace*{\fill}{\em C. A. R. Hoar}
|
|
\end{quote}
|
|
|
|
\ccIndexMainItemBegin{manuals}
|
|
\ccChapterRelease{Chapter Version: 1.1} \\
|
|
\ccChapterAuthor{Susan Hert ({\tt hert@mpi-sb.mpg.de})}
|
|
|
|
The official \cgal\
|
|
\ccAnchor{http://www.cgal.org/Manual/}{documentation}
|
|
is currently divided into six separate manuals:
|
|
\begin{itemize}
|
|
\item \ccAnchor{http://www.cgal.org/Manual/doc_html/frameset/fsInstallation.html}{Installation Guide}
|
|
\item \ccAnchor{http://www.cgal.org/Manual/doc_html/frameset/fsKernel.html}{Kernel}
|
|
\item \ccAnchor{http://www.cgal.org/Manual/doc_html/frameset/fsBasic.html}{Basic Library}
|
|
\item \ccAnchor{http://www.cgal.org/Manual/doc_html/frameset/fsSupport.html}{Support Library}
|
|
\item \ccAnchor{http://www.cgal.org/Manual/doc_html/frameset/fsUseOfSTL.html}{Use of \stl\ and \stl\ Extensions in \cgal}
|
|
\end{itemize}
|
|
Not surprisingly, the Installation Guide describes how to install \cgal
|
|
\ccIndexMainItem{installation} and the Use of \stl\ manual describes
|
|
features of \stl\ \ccIndexMainItem{\stl} that are used and extended in \cgal.
|
|
|
|
Documentation of new packages and features will likely be included in
|
|
the Kernel, Basic Library, and Support Library documentation. See
|
|
Section~\ref{sec:overall_design} for a description of what these three
|
|
parts of the library contain. Each of
|
|
these manuals is (or will soon be) further subdivided into two
|
|
parts: a Reference Manual and a Users' Manual. Sections~\ref{sec:ref_manual}
|
|
and~\ref{sec:users_manual} below describe the contents of these two parts.
|
|
|
|
The manuals are produced from \ccTexHtml{\LaTeX}{LaTeX} input files in
|
|
both PostScript and
|
|
HTML format. The conversion from \ccTexHtml{\LaTeX}{LaTeX} input to HTML
|
|
output is accomplished
|
|
through the use of a set of shell scripts and programs, as well as style
|
|
files that were designed to support this conversion. These style files
|
|
provide numerous commands that are used to format the manuals in a
|
|
(more or less) uniform fashion. Section~\ref{sec:manual_tools}
|
|
provides the basic information about these tools and style files that
|
|
you will need to produce documentation of your package specification.
|
|
Section~\ref{sec:files_required} describes the files that
|
|
are required for submitting documentation. Sections~\ref{sec:doc_figures}
|
|
and~\ref{sec:indexing} give information about including figures in your
|
|
documentation and inserting indexing commands, respectively. The conversion
|
|
to HTML is briefly discussed in Section~\ref{sec:html_conversion}.
|
|
Section~\ref{sec:doc_test_suite} describes the manual test suite run
|
|
for each internal release of the library. Common problems and solutions
|
|
are described in Section~\ref{sec:common_problems} followed by a section
|
|
summarizing the requirements and recommendations for specification
|
|
documentation.
|
|
|
|
\section{The manual tools}
|
|
\label{sec:manual_tools}
|
|
\ccModifierCrossRefOff
|
|
\ccIndexSubitemBegin{tools}{manual}
|
|
|
|
The manual tools are provided as a compressed tar file that is downloadable
|
|
from \path|http://www.cgal.org/Members/Manual_tools/|. The CVS package
|
|
\verb+Manual_tools+\ccIndexSubsubitem{tools}{manual}{CVS package}
|
|
\index{CVS server!Manual_tools package@\texttt{Manual\_tools} package} contains the
|
|
source files used to create this distribution. When unpacked, the
|
|
tar file will create a directory called \texttt{Manual\_tools} that contains
|
|
the following subdirectories:
|
|
|
|
\begin{description}
|
|
\item[{\bf\tt doc/}] -- directory containing the documentation for
|
|
the tools
|
|
\item[{\bf\tt example/}] -- directory containing example documentation
|
|
\item[{\bf\tt format/}] -- directory containing the
|
|
\ccTexHtml{\LaTeX\ }{LaTeX} style files
|
|
used for formatting the manual
|
|
\item[{\bf\tt scripts/}] -- directory containing the various scripts
|
|
to do conversions
|
|
\item[{\bf\tt src/}] -- directory containing the style files and program
|
|
source code for the tools used to convert from
|
|
\ccTexHtml{\LaTeX\ }{LaTeX} to HTML.
|
|
\end{description}
|
|
|
|
There are also {\tt CHANGES}, {\tt README}, and {\tt INSTALLATION} files
|
|
provided that will help you to install the tools on your system.
|
|
|
|
\subsection{The style files}
|
|
\label{subsec:manual_style_files}
|
|
\ccIndexSubsubitem{tools}{manual}{style files}
|
|
|
|
The manuals are developed through the use of the style files
|
|
{\tt cc\_manual.sty}\ccIndexMainItem[c]{\tt cc_manual.sty} and
|
|
{\tt cc\_manual\_index.sty}\ccIndexMainItem[c]{\tt cc_manual_index.sty}
|
|
that provide formatting
|
|
commands and style file {\tt latex\_converter.sty}
|
|
\ccIndexMainItem[c]{\tt latex_converter.sty}
|
|
that provides commands
|
|
useful for the conversion to HTML.
|
|
For each of these files, there is a PostScript document describing
|
|
the file, the commands it defines, and how to use them. These documents
|
|
(\ccAnchor{./cc_manual.ps.gz}{{\tt cc\_manual.ps.gz}},
|
|
\ccAnchor{./cc_manual_index.ps.gz}{{\tt cc\_manual\_index.ps.gz}} and
|
|
\ccAnchor{./latex_to_html.ps.gz}{{\tt latex\_to\_html.ps.gz}}, respectively)
|
|
are located in the {\tt Manual\_tools/doc}
|
|
directory\ccIndexSubsubitem{tools}{manual}{documentation}.
|
|
|
|
\subsection{Scripts and programs}
|
|
\label{sec:manual_scripts}
|
|
\ccIndexSubsubitem{tools}{manual}{scripts}
|
|
\ccIndexSubsubitem{tools}{manual}{programs}
|
|
|
|
The following scripts and programs are provided with the tools package.
|
|
|
|
\begin{itemize}
|
|
\lcRawHtml{<A NAME="add_part_num">}
|
|
\item \verb|add_part_num|\lcRawHtml{</A>}%
|
|
\index{add_part_num script@{\tt add\_part\_num} script}%
|
|
\ccIndexSubitem{index}{adding part number to}
|
|
-- script used to prepend a part number to the
|
|
page numbers in a {\tt .idx} file produced by the indexing commands in
|
|
a \ccTexHtml{\LaTeX\ }{LaTeX} document.
|
|
See \ccAnchor{./cc_manual_index.ps.gz}{{\tt Manual\_tools/doc/cc\_manual\_index.ps.gz}}.
|
|
\item \lcRawHtml{<A NAME="cc_extract_html">}
|
|
\verb|cc_extract_html|\lcRawHtml{</A>}%
|
|
\index{cc_extract_html program@{\tt cc\_extract\_html} program}%
|
|
-- program used by {\tt cc\_manual\_to\_html}
|
|
that converts a \ccTexHtml{\LaTeX\ }{LaTeX} file into an HTML file.
|
|
See \ccAnchor{./latex_to_html.ps.gz}{{\tt Manual\_tools/doc/latex\_to\_html.ps.gz}}.
|
|
\lcRawHtml{<A NAME="cc_extract_images">}
|
|
\item \verb|cc_extract_images|\lcRawHtml{</A>}%
|
|
\index{cc_extract_images program@{\tt cc\_extract\_images} program}
|
|
-- program used by {\tt cc\_manual\_to\_html}
|
|
that extracts inline images
|
|
({\tt .gif} files) from an HTML stream given on \ccc{stdin}.
|
|
\lcRawHtml{<A NAME="cc_extract_include">}
|
|
\item \verb|cc_extract_include|\lcRawHtml{</A>}%
|
|
\index{cc_extract_include script@{\tt cc\_extract\_include} script}
|
|
-- script to extract \verb|\ccInclude|
|
|
statements from a specification file and write these converted to
|
|
C preprocessor includes to standard output.
|
|
\lcRawHtml{<A NAME="cc_make_ref_pages">}
|
|
\item \verb|cc_make_ref_pages|\lcRawHtml{</A>}
|
|
\index{cc_make_ref_pages script@{\tt cc\_make\_ref\_pages} script}
|
|
-- script that creates a
|
|
\ccAnchor{example/doc_tex/basic/Package_ref/main_tex}%
|
|
{{\tt main.tex}}%
|
|
\ccIndexMainItem{\tt main.tex}%
|
|
\ccIndexSubitem{reference manual}{\tt main.tex}
|
|
file in a directory, the name of which is supplied as an argument.
|
|
This {\tt main.tex} will be the driver file for the reference manual
|
|
chapter for the directory named in the argument. See
|
|
\ccAnchor{./latex_to_html.ps.gz}{{\tt Manual\_tools/doc/cc\_manual.ps.gz}}
|
|
and the script itself for further explanation.
|
|
\lcRawHtml{<A NAME="cc_manual_to_html">}
|
|
\item \verb|cc_manual_to_html|\lcRawHtml{</A>}%
|
|
\index{cc_manual_to_html script@{\tt cc\_manual\_to\_html} script}
|
|
-- script that does the conversion from \ccTexHtml{\LaTeX\ }{LaTeX}
|
|
to HTML\ccIndexSubitem{manuals}{HTML}%
|
|
\ccIndexSubitem{manuals}{HTML}.
|
|
See \ccAnchor{./latex_to_html.ps.gz}{{\tt Manual\_tools/doc/latex\_to\_html.ps.gz}}
|
|
and \ccAnchor{./cc_manual.ps.gz}{{\tt Manual\_tools/doc/cc\_manual.ps.gz}}.
|
|
\lcRawHtml{<A NAME="cc_ref_wizard">}
|
|
\item \verb|cc_ref_wizard|\lcRawHtml{</A>}%
|
|
\index{cc_ref_wizard script@{\tt cc\_ref\_wizard} script}
|
|
-- script that creates a reference page skeleton
|
|
\ccIndexSubitem{reference manual}{page template script}%
|
|
given the category of the item and the item name. See
|
|
\ccAnchor{./cc_manual.ps.gz}{{\tt Manual\_tools/doc/cc\_manual.ps.gz}}
|
|
and the script itself for further explanation.
|
|
\lcRawHtml{<A NAME="cc_index_fix">}
|
|
\item \verb|index_fix|\lcRawHtml{</A>}%
|
|
\index{index_fix script@{\tt index\_fix} script}%
|
|
\ccIndexSubitem{index}{postprocessing}
|
|
-- script used to postprocess an {\tt .ind } file
|
|
produced by {\tt makeindex} to make the index fit the specifications
|
|
detailed in \ccAnchor{./cc_manual_index.ps.gz}%
|
|
{{\tt Manual\_tools/doc/cc\_manual\_index.ps.gz}}.
|
|
\end{itemize}
|
|
|
|
|
|
The following programs are obsolete and will likely disappear from the
|
|
manual tools package:
|
|
\begin{itemize}
|
|
\lcRawHtml{<A NAME="cc_extract">}
|
|
\item \verb|cc_extract|\lcRawHtml{</A>}%
|
|
\index{cc_extract program@{\tt cc\_extract} program}
|
|
-- program to read a specification written with
|
|
the \verb|cc_manual.sty| file and output all declarations in the
|
|
document to standard output in \CC\ format.
|
|
See \ccAnchor{./cc_extract.ps.gz}{{\tt Manual\_tools/doc/cc\_extract.ps.gz}} for further explanation.
|
|
\lcRawHtml{<A NAME="cc_check">}
|
|
\item \verb|cc_check|\lcRawHtml{</A>}%
|
|
\index{cc_extract script@{\tt cc\_check} script}
|
|
-- script to check the consistency between a
|
|
specification written in a \ccTexHtml{\TeX\ }{TeX} file with the
|
|
\verb|cc_manual.sty|
|
|
and the implementation in a C++ header file. See
|
|
\ccAnchor{./cc_extract.ps.gz}{{\tt Manual\_tools/doc/cc\_extract.ps.gz}}
|
|
for further explanation.
|
|
\lcRawHtml{<A NAME="cc_rename_include">}
|
|
\end{itemize}
|
|
\ccIndexSubitemEnd{tools}{manual}
|
|
\ccModifierCrossRefOn
|
|
|
|
\section{Files required}
|
|
\label{sec:files_required}
|
|
\ccIndexSubitemBegin{manuals}{source files}
|
|
\ccIndexSubitemBegin{source files}{documentation}
|
|
|
|
Generally, each package in the library will have its own chapter in
|
|
both the reference manual and the users' manual%
|
|
\ccIndexMainItem{reference manual}%
|
|
\ccIndexMainItem{reference manual}, so you should write
|
|
your documentation accordingly. That is, you should begin the documentation
|
|
for each of these parts with a \verb|\chapter| command. (Note, however, that
|
|
until the new manual style is used, the reference manual pages will not be
|
|
put in their own chapter.)\ccIndexSubitem{manuals}{new style}
|
|
|
|
\ccIndexSubitem{directory structure}{for documentation}
|
|
It is required that the documentation submitted with a package be organized
|
|
according to a specific directory structure, which is described more
|
|
completely in Section~\ref{sec:doc_tex_subdirectory}. You must submit
|
|
the {\tt .tex} source files according to the following rules:
|
|
\begin{itemize}
|
|
\item The {\tt .tex} files for the users' manual%
|
|
\ccIndexSubitem{users' manual}{directory} should be placed in a
|
|
directory \verb|doc_tex|/\VarText{manual part}/\VarText{Package}%
|
|
\index{doc_tex directory@{\tt doc\_tex} directory}
|
|
and must include a file
|
|
\ccAnchor{example/doc_tex/basic/Package/main_tex}{{\tt main.tex}}%
|
|
\ccIndexMainItem{\tt main.tex}%
|
|
\ccIndexSubitem{users' manual}{\tt main.tex}
|
|
that inputs all other users'
|
|
manual source files using the \verb|\input| command (NOT the
|
|
\verb|\include| command).%
|
|
\index{input@$\backslash${\tt input}!vs. include@vs. $\backslash${\tt include}}.
|
|
\ccIndexSubitem{manuals}{new style}%
|
|
\ccIndexMainItem{reference manual}
|
|
|
|
\item The source files for the reference manual should be placed in the
|
|
directory \verb|doc_tex/|\VarText{manual part}/\VarText{Package}%
|
|
\verb|_ref|.
|
|
\ccIndexSubitem{directory structure}{for reference manual}%
|
|
\ccIndexSubitem{reference manual}{directory}%
|
|
\index{ref directory@{\tt \_ref} directory}%
|
|
(See Section~\ref{sec:doc_tex_subdirectory} for a full description of
|
|
the directory structure for the documentation.)
|
|
and must also include a file
|
|
\ccAnchor{example/doc_tex/basic/Package_ref/main_tex}{{\tt main.tex}}.
|
|
For the purposes of the HTML converter, each item
|
|
documented in the reference manual should be put in its own file.
|
|
\ccIndexSubitem{reference manual}{files}
|
|
(The script \ccAnchor{#cc_ref_wizard}{{\tt cc\_ref\_wizard}} can be
|
|
used to create these files.)
|
|
The script \ccAnchor{#cc_make_ref_pages}{{\tt cc\_make\_ref\_pages}}
|
|
will create a
|
|
\ccAnchor{example/doc_tex/basic/Package_ref/main_tex}%
|
|
{{\tt main.tex}}
|
|
\ccIndexSubsubitem{reference manual}{\tt main.tex}{creating}
|
|
file given the name of the directory that contains the separate files
|
|
for each
|
|
reference manual item. The items will be input in alphabetical order,
|
|
with a file {\tt intro.tex}\ccIndexMainItem{\tt intro.tex}, if it
|
|
exists, included first. In the
|
|
\ccAnchor{example/doc_tex/basic/Package_ref/intro_tex}%
|
|
{{\tt intro.tex}} file,
|
|
there should be the \verb|\chapter| command,
|
|
a short introductory section and an overview of the reference pages
|
|
contained in the chapter as well as a nonnumbered section labeled
|
|
\textbf{Assertions} that indicates the string used in the
|
|
package-specific assertion macros
|
|
(Section~\ref{sec:checks_controlling}). See the current reference
|
|
manual and the example provided in
|
|
\nonlinkedpath|Manual_tools/example/two_manuals|.
|
|
|
|
\item To create a PostScript version of a package's manual and to test
|
|
that there is no problem in converting your {\tt .tex} files to
|
|
HTML using {\tt cc\_manual\_to\_html}
|
|
\ccIndexSubitem{manuals}{HTML}%
|
|
\index{cc_manual_to_html script@{\tt cc\_manual\_to\_html} script},
|
|
you will need
|
|
a \ccAnchor{example/doc_tex/basic/Package/manual_tex}{wrapper file}
|
|
that includes the preamble, \verb|\begin{document}|,
|
|
\verb|\end{document}|, {\em etc.} commands. This wrapper file
|
|
should NOT be submitted (especially if it is called {\tt wrapper.tex}).
|
|
Example wrapper files are available in the
|
|
\nonlinkedpath|Manual_tools/example| directory and the actual wrapper
|
|
file used to create the manuals can be found in the package
|
|
\texttt{Manual} on the \ccAnchor{http://cgal.inria.fr/cgi-bin/viewcvs.cgi/}{CVS server}
|
|
in the \nonlinkedpath|doc_tex_skel| subdirectory.
|
|
\end{itemize}
|
|
\ccIndexSubitemEnd{source files}{documentation}
|
|
\ccIndexSubitemEnd{manuals}{source files}
|
|
|
|
\section{Users' manual}
|
|
\label{sec:users_manual}
|
|
\ccIndexMainItemBegin{users' manual}
|
|
|
|
In contrast to the reference manual, the users' manual is intended to be
|
|
read by users who are first considering whether to use part of the library.
|
|
Thus the descriptions provided here should give sufficient information
|
|
for a user to understand the functionality provided by the packages, but
|
|
this does not mean, for example, that all functions and classes need to
|
|
be described in great detail. Descriptions should be given in a more
|
|
general way than in the reference manual. For example, one might mention
|
|
that there is a function called \ccc{ch_jarvis} that implements the Jarvis
|
|
march convex hull algorithm, but one need not explicitly state what the
|
|
arguments of this function are, what the traits class requirements are,
|
|
or the template parameters. The users' manual should also provide examples%
|
|
\ccIndexSubitem{example programs}{in users' manual}
|
|
that are more lengthy than the ones provided in
|
|
the reference manual. The examples should naturally be accompanied by
|
|
sufficient explanation of the code in order for them to be understandable,
|
|
and one should aim for examples that illustrate the most interesting
|
|
features of a package and not necessarily the most complicated ones.
|
|
|
|
You should mention the precise name of the class(es) or function(s)
|
|
being described (although NOT in the table of contents) so if the user
|
|
wants the functionality being described it will be easy to find the thing
|
|
that provides it. If the precise name is given (\textit{i.e.}, the name
|
|
given at the top of the reference page), then a hyperlink can be created
|
|
automatically.
|
|
|
|
As a rule, each chapter should include:
|
|
\begin{itemize}
|
|
\item definitions necessary to describe the functionality (usually at the
|
|
beginning of the chapter);
|
|
|
|
\item a section describing the software design, where applicable. When there
|
|
are no real design issues to explain, then a section isn't really
|
|
warranted but at the very least the interface to the class or function
|
|
should be briefly explained (\textit{e.g.}, ``the class
|
|
\ccc{CGAL::Cone<T, DS>} has two template parameters; the first
|
|
represents the traits class and the second the data structure'', or
|
|
``the function \ccc{flavor(b, e, r)} computes the value 42
|
|
from an iterator range \ccc{[b, e)} over a set of points. The
|
|
computed value is stored in the output iterator \ccc{r}");
|
|
|
|
\item one or more examples, which are included in the \texttt|examples|
|
|
or \texttt|demo| directory of the package and inserted into the
|
|
documentation using the \verb|\ccIncludeExampleCode| command.
|
|
\ccIndexSubitem{example programs}{in manuals}
|
|
|
|
\item a section (or paragraph) with information about the
|
|
implementation, which includes:
|
|
\begin{itemize}
|
|
\item references to the papers describing the algorithms/DS's
|
|
implemented;
|
|
\item comments on the running times;
|
|
\item and perhaps a short description of how the algorithm works or
|
|
the data structure is built.
|
|
\end{itemize}
|
|
|
|
\item pictures of resulting output are good too.
|
|
\end{itemize}
|
|
|
|
The table of contents reflects the organization of the manual, and it
|
|
should be a concise but informative listing. These specific guidelines
|
|
regarding the organization are provided:
|
|
\begin{itemize}
|
|
\item There should be an introductory section that actually introduces
|
|
the chapter, perhaps providing definitions of relevant terms.
|
|
It should not be followed immediately by examples, as this implies
|
|
that the entire description was contained in the introduciton.
|
|
|
|
\item The section describing software design should be labeled (you guessed
|
|
it) ``Software Design.''
|
|
|
|
\item Example programs should have entries in the table of contents and
|
|
the user should be able to figure out quite easily what this example
|
|
illustrated from the table of contents. This means, examples should
|
|
be in sections of their own and the sections should have descriptive
|
|
names (\textit{i.e.}, ``Example Constructing a Vanilla Cone'' instead
|
|
of just ``Example'', unless this is a subsection of a section
|
|
entitled ``Vanilla Cone'').
|
|
|
|
\item The examples should appear near the things of which they are
|
|
examples. So for chapters describing more than one class (such as
|
|
Triangulations) or one class that achieves different things by using
|
|
different traits classes (such as Arrangements) or more than one
|
|
global function, the examples should appear in the sections
|
|
corresponding to each class. For example, if you had a
|
|
section labeled, say, "Vanilla Cones" and then you do some
|
|
explanations about what vanilla cones are and finally show an example
|
|
of constructing one, the expected organization would be
|
|
\begin{verbatim}
|
|
\section{Vanilla Cones}
|
|
\subsection{Definition}
|
|
\subsection{...}
|
|
\subsection{Example}
|
|
OR
|
|
\subsection{Example with Extra Stuff}
|
|
\end{verbatim}
|
|
|
|
|
|
For chapters describing a single class
|
|
(such as HalfedgeDS), the examples can appear in a section of their
|
|
own.
|
|
|
|
\item Examples should generally not span more than a page.
|
|
Advanced examples are a possible exception.
|
|
\end{itemize}
|
|
|
|
In general, one should describe things at a level of detail that gives people
|
|
enough information to determine if they want to refer to the reference page
|
|
for the full details and one should use the precise name of a reference manual
|
|
item so that cross-linking (by humans or the HTML converter) is possible. For
|
|
example, you might say:
|
|
\begin{quote}
|
|
The fact that points are required to be chocolate in order to compute a
|
|
Hundink cone means that the traits class for a Hundink cone must provide
|
|
flavored predicates. The precise description of the requirements is given by
|
|
the concept HundinkConeTraits\_6. The class \ccc{Hundink_cone_traits_6}
|
|
is a model of this concept.
|
|
\end{quote}
|
|
\ccIndexMainItemEnd{users' manual}
|
|
|
|
\section{Reference manual}
|
|
\label{sec:ref_manual}
|
|
\ccIndexMainItemBegin{reference manual}
|
|
|
|
The reference manual is meant to be a place where programmers already
|
|
familiar with the library can look to find information about specific
|
|
parts of the library they want to use. It should provide detailed
|
|
descriptions of the functions, classes, concepts, {\em etc.} provided
|
|
in the library and should not be weighted down with lengthy explanations
|
|
of the design philosophy or complicated examples;
|
|
\ccIndexSubitem{example programs}{in reference manual} these things belong,
|
|
if anywhere, in the
|
|
users' manual. Because the reference manual and users' manual are meant
|
|
to be independent documents, there is going to be some overlap between
|
|
the two ({\em e.g.}, text that introduces a package chapter),
|
|
but this overlap should be kept to a minimum.
|
|
|
|
There are currently nine categories of reference pages that are supported by
|
|
the manual tools. These are: class, function object class, concept,
|
|
function object concept, enum, function, macro, constant, and
|
|
variable. For each of these categories there is an environment that takes
|
|
a single argument, which is the identifier plus an optional list of
|
|
template arguments (for classes). Function parameters, function template
|
|
declarations and macro parameters are not given here. The result of entering
|
|
one of these environments is the production of a section heading that
|
|
has the category followed by the identifier provided as the argument.
|
|
For all categories except concepts and function object concepts, this
|
|
identifier is prefixed by the
|
|
global scope name that has been defined using \verb|\ccDefGlobalScope|.
|
|
By default, this scope is empty. For example the following commands
|
|
\begin{verbatim}
|
|
\ccDefGlobalScope{CGAL::}
|
|
\begin{ccRefClass}{Some_Class<T>} ... \end{ccRefClass}
|
|
\end{verbatim}
|
|
|
|
produce the heading
|
|
|
|
\ccDefGlobalScope{CGAL::}
|
|
\ccAutoIndexingOff
|
|
\ccHtmlNoClassToc
|
|
\ccHtmlNoIndex
|
|
\begin{ccRefClass}{Some_Class<T>} \end{ccRefClass}
|
|
%{\large\bf \ccPrintTokens Class CGAL::Some_Class<T>\ccEnd\ccEndFont}
|
|
\ccAutoIndexingOn
|
|
|
|
If \verb|\ccNewRefManualStyle|%\ccIndexEntry{NewRefManualStyle}%
|
|
\ccIndexSubitem{manuals}{new style} has been set to \verb|\ccTrue|, each
|
|
new reference manual environment will also produce a new page and will
|
|
decorate the first page of each environment with a tab in the side
|
|
margin. The macro \verb|\ccRefPageBreak| can be usd to turn off page
|
|
breaks for very short reference pages (\textit{e.g.}, for constants).
|
|
|
|
Below we briefly describe what should be documented in
|
|
each of the {\tt ccRef*} environments and list some of the most useful
|
|
commands for each section. See
|
|
\ccAnchor{./cc_manual.ps.gz}{{\tt Manual\_tools/doc/cc\_manual.ps.gz}}
|
|
for a full description of these environments and the other commands
|
|
available.
|
|
|
|
\subsection{Section headings}
|
|
\label{sec:section_headings}
|
|
\ccIndexSubitemBegin{reference manual}{section headings}
|
|
|
|
The following commands defined in {\tt cc\_manual.sty} produce non-numbered
|
|
section headings under which various aspects of an item should be documented.
|
|
The commands are listed in the order in which they should be used. Sections
|
|
that are empty for a particular item should, obviously, be left out.
|
|
|
|
\begin{tabbing}
|
|
\lcTex{ M \= CCimplementationNNN \= IsxModelxforxthexConceptxx \= \kill}
|
|
\> \verb+\ccDefinition+ \> {\bf Definition} \>
|
|
including template parameters\\
|
|
\> \verb+\ccInheritsFrom+ \> {\bf Inherits From} \>
|
|
base classes\\
|
|
% \> \verb+\ccGeneralizes+ \> {\bf Generalizes} \>
|
|
% concept names\\
|
|
\> \verb+\ccRefines+ \> {\bf Refines} \>
|
|
concept names\\
|
|
\> \verb+\ccHasModels+ \> {\bf Has Models} \>
|
|
models for concepts\\
|
|
\> \verb+\ccIsModel+ \> {\bf Is Model for the Concept} \>
|
|
concept names\\
|
|
\> \verb+\ccTypes+ \> {\bf Types} \>
|
|
local type definitions\\
|
|
\> \verb+\ccConstants+ \> {\bf Constants} \>
|
|
constant values\\
|
|
\> \verb+\ccCreation+ \> {\bf Creation} \>
|
|
constructors, assignment\\
|
|
\> \verb+\ccOperations+ \> {\bf Operations} \>
|
|
functions and operators\\
|
|
\> \verb+\ccAccessFunctions+ \> {\bf Access Functions} \>
|
|
member access\\
|
|
\> \verb+\ccQueryFunctions+ \> {\bf Query Functions} \>
|
|
query functions\\
|
|
\> \verb+\ccPredicates+ \> {\bf Predicates} \>
|
|
predicates\\
|
|
\> \verb+\ccModifiers + \> {\bf Modifiers} \>
|
|
insert, delete, update\\
|
|
\> \verb+\ccSeeAlso+ \> {\bf See Also}\>
|
|
other classes, functions\\
|
|
\> \verb+\ccImplementation+ \> {\bf Implementation}\>
|
|
running time, memory\\
|
|
\> \verb+\ccExample+ \> {\bf Example} \>
|
|
program examples
|
|
\end{tabbing}
|
|
\ccIndexSubitemEnd{reference manual}{section headings}
|
|
|
|
|
|
\subsection{Classes}
|
|
\label{sec:ref_class}
|
|
\ccIndexSubitemBegin{reference manual}{classes}
|
|
\ccIndexSubitem{classes}{documenting}
|
|
|
|
Classes are described using the {\tt ccRefClass} environment.
|
|
%\Eindex{ccRefClass}
|
|
The types provided by the class should be described using\verb|\ccTypedef|
|
|
followed by a description
|
|
of each member function, its parameters, and pre- and postconditions (using
|
|
either \verb|\ccMethod|, \verb|\ccMemberFunction|, or \verb|\ccConstructor|).
|
|
The types and functions provided by a class should be documented in the
|
|
order indicated by the ordering of the section commands listed in
|
|
Section~\ref{sec:section_headings}.
|
|
Just after the definition section, a command \verb|\ccInclude| should be
|
|
used to indicate in which file the class is defined.
|
|
\ccIndexSubitemEnd{reference manual}{classes}
|
|
|
|
Note that it is NOT generally sufficient to say simply that this class
|
|
provides all types and operations required by a concept it models. The
|
|
point is to document the implementation details here so people can find
|
|
out, for example, exactly what type of point is being used in the computation.
|
|
|
|
\subsection{Concepts}
|
|
\label{sec:ref_concept}
|
|
\ccIndexSubitemBegin{reference manual}{concepts}
|
|
\ccIndexSubitem{concepts}{documenting}
|
|
|
|
Concepts should be described using the {\tt ccRefConcept} environment.
|
|
%\Eindex{ccRefConcept}
|
|
Concepts are abstractions that are defined by a set of syntactical and
|
|
semantical requirements. These requirements include data, types, and functions.
|
|
You should describe the concept under a \verb|\ccDefinition|
|
|
heading and describe the requirements using as many of the headings listed
|
|
in Section~\ref{sec:section_headings} as appropriate. In particular, under
|
|
the heading produced by \verb|\ccHasModels| you should list the classes
|
|
in the library that are models for this concept.
|
|
\ccIndexSubitemEnd{reference manual}{concepts}
|
|
|
|
\subsection{Constants}
|
|
\label{sec:ref_constant}
|
|
\ccIndexSubitemBegin{reference manual}{constants}
|
|
\ccIndexSubitem{constants, global}{documenting}
|
|
|
|
Global constants should be described using the
|
|
{\tt ccRefConstant} environment.
|
|
%\Eindex{ccRefVariable}.
|
|
The name of the constant
|
|
should be provided as the argument to the environment. Under a
|
|
\verb|\ccDefinition| heading, the meaning of the constant
|
|
should be described. Just after the definition, a command
|
|
\verb|\ccInclude| should be used to indicate in which file the constant
|
|
is defined. Following this, the complete declaration of the constant
|
|
should be formatted using \verb|\ccGlobalVariable|.
|
|
Another possible section heading here is \verb|\ccSeeAlso|.
|
|
\ccIndexSubitemEnd{reference manual}{constants}
|
|
|
|
\subsection{Enums}
|
|
\label{sec:ref_enums}
|
|
\ccIndexSubitemBegin{reference manual}{enums}
|
|
\ccIndexSubitem{enumerations}{documenting}
|
|
|
|
Global enums should be described using the {\tt ccRefEnum} environment.
|
|
%\Eindex{ccRefEnums}
|
|
The name of the enum is provided as an argument to this environment.
|
|
Within this environment the \verb|\ccGlobalEnum| macro should be used to
|
|
format the complete enum declaration. You should describe the enum and
|
|
its values under a \verb|\ccDefinition| heading and use as many of the
|
|
other section headings listed in Section~\ref{sec:section_headings} as
|
|
appropriate ({\em e.g.}, \verb|\ccSeeAlso|, or \verb|\ccExample|).
|
|
\ccIndexSubitemEnd{reference manual}{enums}
|
|
|
|
\subsection{Functions}
|
|
\label{sec:ref_function}
|
|
\ccIndexSubitemBegin{reference manual}{functions}
|
|
\ccIndexSubitem{functions}{documenting}
|
|
|
|
Global functions should be described using the {\tt ccRefFunction} environment.
|
|
%\Eindex{ccRefFunction}
|
|
The name of the function, excluding template declarations and parameters,
|
|
is provided as the argument to this environment. Under a \verb|\ccDefinition|
|
|
heading, the purpose of the function should be described. Just after the
|
|
definition, a command \verb|\ccInclude| should be used to indicate in which
|
|
file the function is defined. Following this, the macro
|
|
\verb|\ccGlobalFunction| should be used to format the function together with its
|
|
template declarations and parameters. Preconditions and postconditions
|
|
of the function should be documented using \verb|\ccPrecond| and
|
|
\verb|\ccPostcond|. Other possible section headings here are
|
|
\verb|\ccSeeAlso|, \verb|\ccImplementation|, and \verb|\ccExample|.
|
|
\ccIndexSubitemEnd{reference manual}{functions}
|
|
|
|
\subsection{Function Object Classes}
|
|
\label{sec:ref_function_object_class}
|
|
\ccIndexSubitemBegin{reference manual}{function object classes}
|
|
\ccIndexSubitem{function object classes}{documenting}
|
|
\ccIndexSubsubitem{classes}{function object}{documenting}
|
|
|
|
Function object classes should be documented using the
|
|
{\tt ccRefFunctionObjectClass} environment.
|
|
Just after the definition section, a command \verb|\ccInclude| should be
|
|
used to indicate in which file the class is defined. Following this,
|
|
the concepts that this class is a model for should be listed under
|
|
the heading \verb|\ccIsModel| and then the list of
|
|
member functions (a set of \ccc{operator()} functions) should be
|
|
listed. Another possible heading here is \verb|\ccSeeAlso|.
|
|
\ccIndexSubitemEnd{reference manual}{function object classes}
|
|
|
|
\subsection{Function Object Concepts}
|
|
\label{sec:ref_function_object_concept}
|
|
\ccIndexSubitemBegin{reference manual}{function object concepts}
|
|
\ccIndexSubitem{function object concepts}{documenting}
|
|
\ccIndexSubsubitem{concepts}{function object}{documenting}
|
|
|
|
Function object classes should be documented using the
|
|
{\tt ccRefFunctionObjectConcept} environment.
|
|
The name of the concept is provided as the argument to this environment.
|
|
Under the \verb|\ccDefinition| heading, the concept should be described
|
|
followed by the set of required functions (one or more
|
|
\ccc{operator()} methods). Under the heading \verb|\ccRefines|
|
|
you should list concepts that this one ``inherits'' from and
|
|
under \verb|\ccHasModels| list the classes that are models of this
|
|
concept.
|
|
\ccIndexSubitemEnd{reference manual}{function object concepts}
|
|
|
|
\subsection{Macros}
|
|
\label{sec:ref_macro}
|
|
\ccIndexSubitemBegin{reference manual}{macros}
|
|
\ccIndexSubitem{macros}{documenting}
|
|
|
|
Global macros should be describe using the {\tt ccRefMacro} environment.
|
|
The name of the macro, excluding its arguments, is provided as the argument
|
|
to this environment. Under a \verb|\ccDefinition| heading, the purpose of
|
|
the macro should be described. Just after the definition, a command
|
|
\verb|\ccInclude| should be used to indicate in which file the macro is
|
|
defined. Following this, the macro together with its arguments should
|
|
be formatted using \verb|\ccc|.
|
|
\ccIndexSubitemEnd{reference manual}{macros}
|
|
|
|
\subsection{Variables}
|
|
\label{sec:ref_variable}
|
|
\ccIndexSubitemBegin{reference manual}{variables}
|
|
\ccIndexSubitem{variables, global}{documenting}
|
|
%\ccIndexSubitem{types, global}{documenting}
|
|
|
|
Global variables should be described using the
|
|
{\tt ccRefVariable} environment.
|
|
The name of the variable
|
|
should be provided as the argument to the environment. Under a
|
|
\verb|\ccDefinition| heading, the meaning of the variable
|
|
should be described. Just after the definition, a command
|
|
\verb|\ccInclude| should be used to indicate in which file the variable
|
|
is defined. Following this, the complete declaration of the variable
|
|
should be formatted using \verb|\ccGlobalVariable|.
|
|
Another possible section heading here is \verb|\ccSeeAlso|.
|
|
\ccIndexSubitemEnd{reference manual}{variables}
|
|
\ccIndexMainItemEnd{reference manual}
|
|
|
|
|
|
\section{Figures}
|
|
\label{sec:doc_figures}
|
|
\ccIndexSubitemBegin{manuals}{figures}
|
|
|
|
When including pictures in your documentation, you must provide versions
|
|
of the pictures for both the PostScript and HTML versions of the manuals.
|
|
This generally means providing both a {\tt .ps}, {\tt .eps}, or {\tt .ipe}
|
|
file and a {\tt .gif} file. You should take care that the figures are
|
|
readable in both formats and that they are neither too large nor too small.
|
|
Also, all figures used in the HTML documentation should have transparent
|
|
backgrounds. You can achieve this using the {\tt giftrans}\index{giftrans
|
|
script@{\tt giftrans} script} program distributed with
|
|
\ccTexHtml{\LaTeX\ }{LaTeX} or by using one of the scripts available at
|
|
\path|http://www.cgal.org/Members/Manual_tools| for converting from
|
|
\ccAnchor{http://www.cgal.org/Members/Manual_tools/latex2gif}{\ccTexHtml{\LaTeX\ }{LaTeX} to gif},
|
|
\ccAnchor{http://www.cgal.org/Members/Manual_tools/eps2gif}{Encapsulated PostScript to gif},
|
|
\ccAnchor{http://www.cgal.org/Members/Manual_tools/pstogif}{PostScript to gif}, and from
|
|
\ccAnchor{http://www.cgal.org/Members/Manual_tools/ipe2gif}{ipe to gif}\ccIndexSubsubitem{manuals}{figures}{converting to gif}.
|
|
|
|
The program that converts to HTML does not currently support
|
|
the commands that input PostScript figures into a document (since the figures
|
|
for the HTML manual will be {\tt .gif} files). Thus for each figure
|
|
you must provide the raw HTML command that inserts the {\tt .gif} file
|
|
in the document.\ccIndexSubsubitem{manuals}{HTML}{figures} For example:
|
|
|
|
\begin{verbatim}
|
|
\begin{figure}[htbp]
|
|
\begin{ccTexOnly}
|
|
\begin{center}
|
|
\includegraphics{orient.eps}
|
|
\end{center}
|
|
\end{ccTexOnly}
|
|
\caption{Orientation of a cell (3-dimensional case)
|
|
\label{Triangulation3-fig-orient}}
|
|
|
|
\begin{ccHtmlOnly}
|
|
<CENTER>
|
|
<IMG BORDER=0 SRC="./orient.gif" ALIGN=center ALT="Orientation of a cell
|
|
(3-dimensional case)">
|
|
</CENTER>
|
|
\end{ccHtmlOnly}
|
|
\end{figure}
|
|
\end{verbatim}
|
|
|
|
Note above that only the parts that include the two different figure files
|
|
are enclosed in the {\tt ccTexOnly} and {\tt ccHtmlOnly} environments.
|
|
The {\tt figure}, {\tt caption}, and {\tt label} commands will be processed
|
|
for both \ccTexHtml{\LaTeX\ }{LaTeX} and {\tt cc\_manual\_to\_html}.
|
|
Note also that the caption and label are placed {\bf above} the HTML picture.
|
|
This is done so references to this figure will go to the top of the picture
|
|
instead of the bottom (and thus be visible in the browser).
|
|
\ccIndexSubitemEnd{manuals}{figures}
|
|
|
|
|
|
\section{Indexing}
|
|
\label{sec:indexing}
|
|
\ccIndexSubitemBegin{index}{PostScript}
|
|
\ccIndexSubitemBegin{manuals}{index}
|
|
|
|
In order to be truly useful, a manual needs to have an index. The
|
|
{\tt cc\_manual\_to\_html} program produces an index for the HTML manual
|
|
automatically. %
|
|
\ccIndexSubitem{index}{HTML}\ccIndexSubsubitem{manuals}{HTML}{index}
|
|
The style file {\tt cc\_manual\_index.sty}%
|
|
\ccIndexMainItem[c]{\tt cc_manual_index.sty} was developed in order to provide
|
|
a means for producing an index for the PostScript version of the manual.
|
|
Though there is also some automatic indexing done by the
|
|
{\tt cc\_manual\_index.sty} file in conjunction with {\tt cc\_manual.sty},
|
|
this indexing is not sufficient as it can index only things that are
|
|
given as arguments to the formatting macros. When writing your
|
|
documentation, you should add other indexing commands in the text in
|
|
order to achieve the following goals:
|
|
\begin{itemize}
|
|
\item All key words, phrases, topics, and concepts should be indexed.
|
|
\item All \cgal\ \CC\ identifiers described in the manual should be indexed.
|
|
\item There should be listings in the index for any pages on which an
|
|
item is introduced, defined, or described as well as any pages
|
|
where key uses for or instances of these things are described.
|
|
\item There should be sufficient cross referencing to allow users
|
|
to find things starting from many different points.
|
|
\item There should NOT be entries for every mention of every item in the
|
|
manual.
|
|
\end{itemize}
|
|
|
|
You should also take care that the index entries produced by the automatic
|
|
indexing are in keeping with these goals, and, when not, use the commands
|
|
provided in {\tt cc\_manual\_index.sty} to turn off the automatic indexing.
|
|
See the file \ccAnchor{./cc_manual_index.ps.gz}{{\tt Manual\_tools/doc/cc\_manual\_index.ps.gz}}
|
|
for a description of the commands available and a full description of what
|
|
should and should not be indexed.
|
|
\ccIndexSubitemEnd{index}{PostScript}
|
|
\ccIndexSubitemEnd{manuals}{index}
|
|
|
|
\section{Converting to HTML}
|
|
\label{sec:html_conversion}
|
|
\ccIndexSubitemBegin{manuals}{HTML}
|
|
\index{cc_manual_to_html script@{\tt cc\_manual\_to\_html} script}
|
|
|
|
The script {\tt cc\_manual\_to\_html} converts \ccTexHtml{\LaTeX}{LaTex}
|
|
source files
|
|
into HTML files. This conversion tool supports all the commands
|
|
in the {\tt cc\_manual.sty}\ccIndexMainItem[c]{\tt cc_manual.sty} and
|
|
{\tt cc\_manual\_index.sty}\ccIndexMainItem[c]{\tt cc_manual_index.sty} files as
|
|
well as the commands in {\tt latex\_converter.sty}%
|
|
\ccIndexMainItem[c]{\tt latex_converter.sty}. There are a few
|
|
\ccTexHtml{\LaTeX\ }{LaTex} commands that are not supported by this tool.
|
|
These are listed
|
|
in \ccAnchor{./latex_to_html.ps.gz}{{\tt latex\_to\_html.ps.gz}}, which
|
|
also explains how to use this command.
|
|
\ccIndexSubitemEnd{manuals}{HTML}
|
|
|
|
\section{Test suite}
|
|
\label{sec:doc_test_suite}
|
|
\ccIndexSubitemBegin{manuals}{test suite}
|
|
\ccIndexSubitemBegin{test suite}{for manuals}
|
|
|
|
With each internal release of the library, a test suite is run on the manuals
|
|
to make sure that the documentation submitted makes it through all the programs
|
|
and scripts without a problem. Each package is tested separately with both
|
|
\ccTexHtml{\LaTeX\ }{LaTeX} (and its companion programs {\tt makeindex} and
|
|
{\tt bibtex}) and
|
|
{\tt cc\_manual\_to\_html}; those that make it through the programs are then
|
|
included in the ``complete'' manuals for the internal release.
|
|
It is a given, of course, that developers should {\bf test} that their packages'
|
|
documentation works with {\bf both} \ccTexHtml{\LaTeX\ }{LaTeX} and
|
|
{\tt cc\_manual\_to\_html}
|
|
{\bf before} submitting. The test suite is meant simply to assure that all the
|
|
parts fit together nicely and all references to other parts of the manual
|
|
get resolved correctly. The results of the test suite are currently
|
|
available at \path|http://www.cgal.org/Members/Manual_test/|.
|
|
Each time you submit a package with modified documentation, you should
|
|
check these test results to make sure your documentation did not cause
|
|
any problems.
|
|
\ccIndexSubitemEnd{manuals}{test suite}
|
|
\ccIndexSubitemEnd{test suite}{for manuals}
|
|
|
|
\section{CVS \texttt{Manual} package}
|
|
\label{sec:cvs_manual}
|
|
|
|
The package
|
|
\texttt{Manual}\index{CVS server!Manual package@\texttt{Manual} package}
|
|
on the \ccAnchor{http://cgal.inria.fr/cgi-bin/viewcvs.cgi/}{CVS server}
|
|
contains all the scripts and extra files used to run the manual test suite
|
|
(Section~\ref{sec:doc_test_suite}) and to create the documentation for
|
|
an external release. Most of the processes are automated through a makefile,
|
|
and there are several \texttt{README} files in this package that explain
|
|
what is going on.
|
|
\ccIndexSubitem{manuals}{CVS package}
|
|
|
|
\section{Common problems and solutions}
|
|
\label{sec:common_problems}
|
|
|
|
\subsection*{Problem --- Linking of word ``Traits'' in HTML}
|
|
\ccIndexSubsubitemBegin{manuals}{HTML}{preventing Traits linking}
|
|
\ccIndexSubitem{traits class}{naming}
|
|
|
|
\begin{description}
|
|
\item[{\bf Cause:}] This is caused by the use of the non-mnemonic name
|
|
``Traits'' for a traits class that is described in a {\tt ccClass}
|
|
environment that is not preceeded by a \verb|\ccHtmlNoClassLinks| command.
|
|
|
|
\item[{\bf Solution:}] The preferred solution is to use a better name for the
|
|
traits class ({\em e.g.}, one that uses the package name as well such as
|
|
\ccc{Planar_map_traits}),
|
|
although one can also add the command \verb|\ccHtmlNoClassLinks| before the
|
|
\nonlinkedpath|\begin{ccClass}{Traits}| command to turn off this linking.
|
|
\end{description}
|
|
\ccIndexSubsubitemEnd{manuals}{HTML}{preventing Traits linking}
|
|
|
|
\subsection*{Problem --- Nontransparent backgrounds for HTML figures}
|
|
\ccIndexSubsubitemBegin{manuals}{HTML}{figures}
|
|
|
|
\begin{description}
|
|
\item[{\bf Cause:}] The {\tt .gif} file was produced without a transparent
|
|
background.
|
|
|
|
\item[{\bf Solution:}] Use either the {\tt giftrans}%
|
|
\index{giftrans script@{\tt giftrans} script}
|
|
program distributed with \ccTexHtml{\LaTeX\ }{LaTeX} or one of the
|
|
scripts {\tt ps2gif}\index{ps2gif script@{\tt ps2gif} script},
|
|
{\tt ipe2gif}\index{ipe2gif script@{\tt ipe2gif} script}, or
|
|
{\tt latex2gif}\index{latex2gif script@{\tt latex2gif} script}
|
|
that are available from
|
|
\path|http://www.cgal.org/Members/Manual_tools|
|
|
(which use {\tt giftrans} and work for figures with white backgrounds) to
|
|
make the background transparent.
|
|
\end{description}
|
|
\ccIndexSubsubitemEnd{manuals}{HTML}{figures}
|
|
|
|
\subsection*{Problem --- Unresolved figure references in HTML}
|
|
\ccIndexSubsubitemBegin{manuals}{HTML}{figure references}
|
|
|
|
%Figure references in the HTML manual appear as ``[ref:fig:xxx]''
|
|
%instead of as a link to the figure.
|
|
|
|
\begin{description}
|
|
\item[{\bf Cause:}] This problem is generally caused by the absence of a
|
|
\verb|\label| command inside the HTML figure environment.
|
|
|
|
\item[{\bf Solution:}]
|
|
The easiest way to solve this problem is to put the
|
|
\verb|\label| command in the text that is processed by the HTML converter,
|
|
as the following example illustrates:
|
|
|
|
\begin{verbatim}
|
|
\begin{figure}[htbp]
|
|
\begin{ccTexOnly}
|
|
\begin{center}
|
|
\includegraphics{orient.eps}
|
|
\end{center}
|
|
\caption{Orientation of a cell (3-dimensional case)
|
|
\label{Triangulation3-fig-orient}}
|
|
\end{ccTexOnly}
|
|
\lcHtml{\label{Triangulation3-fig-orient}}
|
|
\begin{ccHtmlOnly}
|
|
<CENTER>
|
|
<IMG BORDER=0 SRC="./orient.gif" ALIGN=center ALT="Orientation of a cell
|
|
(3-dimensional case)">
|
|
</CENTER>
|
|
\end{ccHtmlOnly}
|
|
\end{figure}
|
|
\end{verbatim}
|
|
|
|
This will produce a centered figure without a caption in the HTML manual.
|
|
References to the label {\tt Triangulation3-fig-orient} will produce a
|
|
link that refers to the top of this figure. If you want the caption with
|
|
the HTML figure as well, then simply move the \verb|\end{ccTexOnly}|
|
|
command above the \verb|\caption| command and remove the \verb|\lcHtml|
|
|
command.
|
|
%Note that in order for the
|
|
%figure numbers to be correct in the PostScript manual, the \verb|\label|
|
|
%command must be included in the \verb|\caption| command, which means
|
|
%the caption must appear in the HTML document. Though this may not be ideal,
|
|
%it is currently the best solution supported by the tools. If you want
|
|
%to avoid this,
|
|
|
|
It is also possible to provide the label as part of the raw
|
|
HTML. The following example is taken from the file {\tt hds.tex}, which
|
|
results in an HTML file called {\tt Chapter\_hds.html}:
|
|
|
|
\begin{verbatim}
|
|
\begin{ccTexOnly}
|
|
\begin{figure}
|
|
\begin{center}
|
|
\parbox{0.7\textwidth}{%
|
|
\includegraphics[width=0.7\textwidth]{idraw/poly_design.ips}%
|
|
}
|
|
\end{center}
|
|
\caption{Responsibilities of the different layers in the
|
|
halfedge data-structure design.}
|
|
\label{figurePolyDesign}
|
|
\end{figure}
|
|
\end{ccTexOnly}
|
|
|
|
\begin{ccHtmlOnly}
|
|
<CENTER>
|
|
<A NAME="figurePolyDesign">
|
|
<IMG SRC="./poly_design_color.gif"
|
|
ALT="Halfedge Data-Structure Design"><BR>
|
|
Figure: Responsibilities of the different layers in the
|
|
halfedge data-structure design.
|
|
<P>
|
|
</CENTER>
|
|
\end{ccHtmlOnly}
|
|
\end{verbatim}
|
|
|
|
Then, to refer to this figure, you would use something like:
|
|
|
|
\begin{verbatim}
|
|
Figure~\ccTexHtml{\ref{figurePolyDesign}}{}\begin{ccHtmlOnly}
|
|
<A HREF="Chapter_hds.html#figurePolyDesign"><IMG
|
|
SRC="cc_ref_up_arrow.gif" ALT="reference arrow" WIDTH="10" HEIGHT="10"></A>
|
|
\end{ccHtmlOnly}
|
|
\end{verbatim}
|
|
Probably only and author of the tools would want to try something like this.
|
|
\ccIndexSubsubitemEnd{manuals}{HTML}{figure references}
|
|
|
|
\end{description}
|
|
|
|
\subsection*{Problem --- Raw \ccTexHtml{\LaTeX\ }{LaTeX} commands in HTML manual}
|
|
\index{manuals!HTML!removing raw \LaTeX\ commands|(}
|
|
\ccIndexSubsubitemBegin{manuals}{HTML}{unsupported commands}
|
|
|
|
\begin{description}
|
|
\item[{\bf Cause:}] This problem is generally caused by the use of commands
|
|
that are not supported by the HTML converter. See
|
|
\ccAnchor{latex_to_html.ps.gz}{{\tt latex\_to\_html.ps.gz}} for a list of
|
|
these unsupported commands.
|
|
|
|
\item[{\bf Solution:}] Either remove the offending command altogether or enclose
|
|
it in a \verb|\lcTex| command or an {\tt lcTexBlock} environment (which are
|
|
both defined in {\tt latex\_converter.sty})\ccIndexMainItem[c]{\tt latex_converter.sty}.
|
|
\end{description}
|
|
\ccIndexSubsubitemEnd{manuals}{HTML}{unsupported commands}
|
|
\index{manuals!HTML!removing raw \LaTeX\ commands|)}
|
|
|
|
\subsection*{Problem --- Included files cannot be found}
|
|
\ccIndexSubsubitemBegin{manuals}{source files}{not found}
|
|
\ccIndexSubitemBegin{source files}{documentation}
|
|
\ccIndexSubitemBegin{manuals}{environment variables}
|
|
\index{input@$\backslash${\tt input}!files not found|(}
|
|
|
|
\begin{description}
|
|
\item[{\bf Cause:}] This problem is generally caused by a wrong relative path
|
|
given in the \verb|\input| command (or its derivative) or the absence of a
|
|
directory from the appropriate environment variable.
|
|
|
|
\item[{\bf Solution:}] Paths to source files in other directories must
|
|
generally be provided relative to the place where the conversion program is
|
|
run, not relative to the place where the file containing the command is. When
|
|
producing the manual, these programs are run in the \VarText{manual part}
|
|
directory ({\em i.e.}, {\tt doc\_tex/basic}, {\tt doc\_tex/support},
|
|
{\em etc.}), so paths should be relative to these directories.
|
|
|
|
An exception is for example and demo programs included in the documentation.
|
|
\ccIndexSubitem{example programs}{in manuals}. These should always
|
|
be programs that are in the distribution (and thus in the test suite)
|
|
and should included using the command \texttt{ccIncludeExampleCode}. For
|
|
programs you need only specify the path relative to the directory
|
|
\texttt{CGAL\_ROOT/examples} or \texttt{CGAL\_ROOT/demo} as the environment
|
|
variables \texttt{TEXINPUTS} and \texttt{LATEX\_CONV\_INPUTS} are set so these
|
|
directories are searched when the whole manual is created.
|
|
(See
|
|
\ccAnchor{./latex_to_html.ps.gz}{{\tt Manual\_tools/doc/latex\_to\_html.ps.gz}}
|
|
for more details.)
|
|
For example,
|
|
you would use the following command
|
|
\begin{verbatim}
|
|
\ccIncludeExampleCode{Polygon/PolygonDemo.C}
|
|
\end{verbatim}
|
|
to include the source file \nonlinkedpath|CGAL_ROOT/demo/Polygon/PolygonDemo.C|.
|
|
Obviously, you could have problems if you have an example program and a demo
|
|
program with the same name in the same pacakge, so try to avoid this.
|
|
\end{description}
|
|
\index{input@$\backslash${\tt input}!files not found|)}
|
|
\ccIndexSubitemEnd{source files}{documentation}
|
|
\ccIndexSubitemEnd{manuals}{environment variables}
|
|
\ccIndexSubsubitemEnd{manuals}{source files}{not found}
|
|
|
|
\section{Requirements and recommendations}
|
|
\label{sec:specification_req_and_rec}
|
|
|
|
\noindent
|
|
Requirements:
|
|
\begin{itemize}
|
|
\item Documentation must be written using the {\tt cc\_manaul.sty}
|
|
and {\tt cc\_manual\_index.sty} style files.
|
|
\item There must be a {\tt main.tex} file for both the users' manual
|
|
and reference manual parts of the documentation.
|
|
\item Files must be organized according to the directory structure
|
|
outlined in Section~\ref{sec:files_required} and further detailed
|
|
in Section~~\ref{sec:doc_tex_subdirectory}.
|
|
\item Indexing commands must be placed in the text to achieve the
|
|
goals listed in Section~\ref{sec:indexing}.
|
|
\item Example programs incluced in the manual should also be distributed
|
|
in the \texttt{examples} or \texttt{demo} directories and should
|
|
be incorporated in the documentation using the
|
|
\verb|\ccIncludeExampleCode| command.
|
|
\end{itemize}
|
|
|
|
\noindent
|
|
Recommendations:
|
|
\begin{itemize}
|
|
\item Documentation of items in the reference manual should use as
|
|
many of the headings listed in Section~\ref{sec:section_headings}
|
|
as approriate and in the indicated order.
|
|
\item The users' manual should include illustrative examples of a package's
|
|
functionality.
|
|
\item Document each item in the reference manual in its own file.
|
|
\end{itemize}
|
|
|
|
\ccIndexMainItemEnd{manuals}
|