Mercurial > hg > plml
diff pldoc/pldoc.sty @ 2:546bfd3988b0
Added unpolished pldoc documentation.
author | samer |
---|---|
date | Fri, 13 Jan 2012 15:53:04 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pldoc/pldoc.sty Fri Jan 13 15:53:04 2012 +0000 @@ -0,0 +1,517 @@ +% SWI-Prolog document-style + +% Test for PDF generation using pdflatex + +\usepackage{ifpdf} +%Old tex versions +%\newif\ifpdf +%\ifx\pdfoutput\undefined +% \pdffalse +%\else +% \pdfoutput=1 +% \pdftrue +%\fi + +% Get hyperrefs to work + +\usepackage{makeidx} +\usepackage{url} + +\ifpdf + \usepackage[pdftex,colorlinks=true,urlcolor=blue]{hyperref} + \pdfcompresslevel=9 +% \pdfcatalog{ +% /PageMode /UseOutLines +% } + \usepackage[pdftex]{graphicx} + \DeclareGraphicsExtensions{.pdf,.jpg,.png} +\else + \usepackage[dvips]{graphicx} + \DeclareGraphicsExtensions{.eps,.ps} +\fi +\graphicspath{{figs/}{./}} + +% Other styles + +\usepackage{a4wide} +\usepackage{longtable} +\usepackage{ifthen} +\usepackage{dcolumn} +\usepackage{calc} +\setlongtables + +\catcode`\^^A=8% downarrow are for subscripts +\catcode`\_=\active +\def_{\ifmmode\else\_\fi} +\def\vobeyspaces{\@vobeyspaces} + +\newcommand{\onlinebreak}{} + +% References + +\newcommand{\secref}[1]{section~\ref{sec:#1}} +\newcommand{\appref}[1]{appendix~\ref{sec:#1}} +\newcommand{\chapref}[1]{chapter~\ref{sec:#1}} +\newcommand{\figref}[1]{figure~\ref{fig:#1}} +\newcommand{\tabref}[1]{table~\ref{tab:#1}} + +\newcommand{\Secref}[1]{Section~\ref{sec:#1}} +\newcommand{\Appref}[1]{Appendix~\ref{sec:#1}} +\newcommand{\Chapref}[1]{Chapter~\ref{sec:#1}} +\newcommand{\Figref}[1]{Figure~\ref{fig:#1}} +\newcommand{\Tabref}[1]{Table~\ref{tab:#1}} + +\newcommand{\tm}{$^{tm}$} + +\newcommand{\reffont}{\tt} +\newcommand{\predref}[2]{% % functor/arity + \mbox{\reffont #1/#2}} +\newcommand{\funcref}[2]{% % functor/arity + \mbox{\reffont #1/#2}} +\newcommand{\dcgref}[2]{% % functor//arity + \mbox{\reffont #1//#2}} +\newcommand{\qpredref}[3]{% % module:functor/arity + \mbox{\reffont #1:#2/#3}} +\newcommand{\qdcgref}[3]{% % module:functor//arity + \mbox{\reffont #1:#2//#3}} +\newcommand{\nopredref}[2]{% % functor/arity (external) + \mbox{\reffont #1/#2}} +\newcommand{\functor}[2]{% % functor/arity (no predicate) + \mbox{\reffont #1/#2}} +\newcommand{\manref}[2]{% % page(n) + \mbox{{\reffont #1(}{\rm #2}{\tt )}}} +\newcommand{\cfuncref}[2]{% % function(Args...) + \mbox{{\reffont #1(}{\it #2}{\tt )}}} +\newcommand{\prologflag}[1]{% + \mbox{\reffont #1}} + +% Descriptions (definitions) of various things +% Note: I do not know where the 1ex comes from. This should fit +% exactly, but appearently some dimension is missing. I suspect +% a space creaping in somewhere. + +\def\@nodescription{false} + +\newcommand{\defentry}[1]{\definition{#1}} +\newcommand{\definition}[1]{% + \onlinebreak% + \ifthenelse{\equal{\@nodescription}{true}}{% + \def\@nodescription{false}% + \makebox[-\leftmargin]{\mbox{}}\makebox[\linewidth+\leftmargin-1ex][l]{\bf #1}\\}{% + \item[{\makebox[\linewidth+\leftmargin-1ex][l]{#1}}]}} +\newcommand{\nodescription}{\def\@nodescription{true}} + +\makeatletter +\def\cmdlineoptionitem{\@ifstar{\@gluedcmdoptitem}{\@cmdoptitem}} +\def\@gluedcmdoptitem#1#2{\definition{\texttt{#1}\var{#2}}} +\def\@cmdoptitem#1#2{\definition{\texttt{#1} \var{#2}}} +\makeatother +\newcommand{\longoptionitem}[2]{% + \ifthenelse{\equal{}{#2}}{% + \definition{-{}-#1}}{% + \definition{-{}-#1={\it #2}}}\ignorespaces} +\newcommand{\longoption}[2]{% + \ifthenelse{\equal{}{#2}}{% + \mbox{\reffont -{}-#1}}{% + \mbox{\reffont -{}-#1={\it #2}}}} + +\newcommand{\traceoption}[3]{% + \definition{{\tt #1} (#2)}#3% + \ignorespaces} +\newcommand{\pleaseoption}[3]{% + \definition{#1 {\it #2} {\rm(default: \it #3)}}% + \ignorespaces} +%\prologflagitem{Name}{Type}{Access} +\newcommand{\prologflagitem}[3]{% + \definition{#1 {\it (#2% + \ifthenelse{\equal{rw}{#3}}{, changeable}{})}}% + \index{flag:#1}\ignorespaces} +\newcommand{\escapeitem}[1]{% + \definition{\Sesc{\tt #1}} + \ignorespaces} +\newcommand{\fmtchar}[1]{% + \item[\tt #1]% + \ignorespaces} + +% \directive{Name}{Arity}{Args} +% \predicate[Attibutes]{Name}{Arity}{Args} +% \function[Attibutes]{Name}{Arity}{Args} +% \infixop{Name}{Left}{Right} +% \prefixop{Name}{Right} +% \infixfunction{Name}{Left}{Right} +% \prefixfunction{Name}{Right} +% \dcg[Attibutes]{Name}{Arity}{Args} +% +% Predicate descriptions. Must appear in a description +% environment. + +\newcommand{\resitem}[1]{% + \defentry{#1}% + \index{#1}\ignorespaces} +\makeatletter +\def\predatt#1{\hfill{\it\footnotesize[#1]}} +\def\predicate{\@ifnextchar[{\@attpredicate}{\@predicate}} +\def\qpredicate{\@ifnextchar[{\@attqpredicate}{\@qpredicate}} +\def\@predicate#1#2#3{% + \ifthenelse{\equal{#2}{0}}{% + \defentry{#1}}{% + \defentry{#1({\it #3})}}% + \index{#1/#2}\ignorespaces} +\def\@attpredicate[#1]#2#3#4{% + \ifthenelse{\equal{#3}{0}}{% + \defentry{#2\predatt{#1}}}{% + \defentry{#2({\it #4})\predatt{#1}}}% + \index{#2/#3}\ignorespaces} +\def\@qpredicate#1#2#3#4{% + \ifthenelse{\equal{#3}{0}}{% + \defentry{#1:#2}}{% + \defentry{#1:#2({\it #4})}}% + \index{#1/#2}\ignorespaces} +\def\@attqpredicate[#1]#2#3#4#5{% + \ifthenelse{\equal{#4}{0}}{% + \defentry{#2:#3\predatt{#1}}}{% + \defentry{#2:#3({\it #5})\predatt{#1}}}% + \index{#2/#3}\ignorespaces} +\def\directive{\@ifnextchar[{\@attdirective}{\@directive}} +\def\@directive#1#2#3{% + \ifthenelse{\equal{#2}{0}}{% + \defentry{:- #1}}{% + \defentry{:- #1({\it #3})}}% + \index{#1/#2}\ignorespaces} +\def\@attdirective[#1]#2#3#4{% + \ifthenelse{\equal{#3}{0}}{% + \defentry{:- #2\predatt{#1}}}{% + \defentry{:- #2({\it #4})\predatt{#1}}}% + \index{#2/#3}\ignorespaces} +\def\dcg{\@ifnextchar[{\@attdcg}{\@dcg}} +\def\@dcg#1#2#3{% + \ifthenelse{\equal{#2}{0}}{% + \defentry{#1}}{% + \defentry{#1({\it #3}) \texttt{//}}}% + \index{#1/#2}\ignorespaces} +\def\@attdcg[#1]#2#3#4{% + \ifthenelse{\equal{#3}{0}}{% + \defentry{#2 \texttt{//}\predatt{#1}}}{% + \defentry{#2({\it #4}) \texttt{//}\predatt{#1}}}% + \index{#2//#3}\ignorespaces} +\def\infixop{\@ifnextchar[{\@attinfixop}{\@infixop}} +\def\@infixop#1#2#3{% + \defentry{{\it #2} #1 {\it #3}}% + \index{#1/2}\ignorespaces} +\def\@attinfixop[#1]#2#3#4{% + \defentry{{\it #3} #2 {\it #4}\predatt{#1}}% + \index{#2/2}\ignorespaces} +\def\prefixop{\@ifnextchar[{\@attprefixop}{\@prefixop}} +\def\@prefixop#1#2{% + \defentry{#1 {\it #2}}% + \index{#1/1}\ignorespaces} +\def\@attprefixop[#1]#2#3{% + \defentry{#2 {\it #3}\predatt{#1}}% + \index{#2/1}\ignorespaces} +\let\function\predicate +\let\infixfunction\infixop +\let\prefixfunction\prefixop +\makeatother + +% \termitem{functor}{Args} +% \infixtermitem{functor}{Left}{Right} +% \prefixtermitem{functor}{Right} +% \postfixtermitem{functor}{Left} +% +% Terms in description lists. Typically used to describe various +% possible values or types for a term. + +\newcommand{\termitem}[2]{% + \ifthenelse{\equal{}{#2}}{% + \definition{#1}}{% + \definition{#1({\it #2})}}\ignorespaces} +\newcommand{\infixtermitem}[3]{% + \definition{{\it #2} #1 {\it #3}}\ignorespaces} +\newcommand{\prefixtermitem}[2]{% + \definition{#1 {\it #2}}\ignorespaces} +\newcommand{\postfixtermitem}[2]{% + \definition{{\it #2} #1}\ignorespaces} + +% \term{functor}{Args} +% \infixterm{functor}{Left}{Right} +% \prefixterm{functor}{Right} +% \postfixterm{functor}{Left} +% +% Terms used in running text. + +\def\term{} +\renewcommand{\term}[2]{% + \ifthenelse{\equal{\protect}{\protect#2}}{% + {\reffont #1}}{% + {\reffont #1}({\it #2})}} +\newcommand{\infixterm}[3]{{\it #2} #1 {\it #3}} +\newcommand{\prefixterm}[2]{#1 {\it #2}} +\newcommand{\postfixterm}[2]{{\it #2} #1} +\newcommand{\errorterm}[2]{\mbox{\tt% + \ifthenelse{\equal{}{#2}}{% + #1}{% + #1(#2)}}} + + +\newcommand{\cfunction}[3]{% + \defentry{{\tt #1} #2{\rm (}{\it #3}{\rm )}}% + \index{#2()}\ignorespaces} +\newcommand{\constructor}[2]{% + \defentry{#1::#1{\rm (}{\it #2}{\rm )}}% + \index{#1::#1()}\ignorespaces} +\newcommand{\destructor}[1]{% + \defentry{#1::\Stilde{}#1{\rm ()}}% + \index{#1::\Stilde{}#1()}\ignorespaces} +\newcommand{\cppcast}[2]{% + \defentry{#1::operator #2{\rm ({\it void})}}% + \index{#1::operator #2()}\ignorespaces} +\newcommand{\cdecl}[2]{{\tt #1} {\em #2}} +\newcommand{\cmacro}[3]{% + \defentry{{\it #1} #2({\it #3})}% + \index{#2()}\ignorespaces} +\newcommand{\constitem}[1]{% + \definition{#1}% + \index{#1}\ignorespaces} +\newcommand{\cglobalvar}[1]{{\tt #1}} +\newcommand{\classitem}[1]{% + \definition{Class #1}% + \index{#1 \string\idxtype{class}}\ignorespaces} +\newcommand{\menuitem}[2]{% + \ifthenelse{\equal{\protect}{\protect#2}}{% + \definition{\textsf #1}}{% + \definition{\textsf #1 ({\it #2})}}% + \index{#1 \string\idxtype{menu}}% + \ignorespaces} + + +% \tag{Keyword} +% +% PlDoc @keyword expansion. \mtag{Keyword} is a multi-valued tag + +\newcommand{\tag}[1]{% + \item[#1]} +\newcommand{\mtag}[1]{% + \item[#1]\mbox{}\\} + +\newcommand{\bnfmeta}[1]{\ifmmode{\langle\mbox{\it #1}\rangle}\else$\langle\mbox{\it #1}\rangle$\fi} +\newcommand{\bnfor}{\ifmmode\mid\else$\mid$\fi} +\newcommand{\isa}{& ::= &} +\newcommand{\ora}{& $\mid$ &} + +\renewcommand{\arg}[1]{\ifmmode\mbox{\em #1}\else{\it #1}\fi} +\newcommand{\class}[1]{{\em #1}\index{#1 \string\idxtype{class}}} +\newcommand{\classs}[1]{{\em #1s}\index{#1 \string\idxtype{class}}} +\newcommand{\demo}[1]{{\sf #1}\index{#1 \string\idxtype{demo}}} +\newcommand{\pllib}[1]{{\texttt{#1}}\index{#1 \string\idxtype{library}}} +\newcommand{\clib}[1]{{\tt #1}\index{#1 \string\idxtype{library}}} +\newcommand{\tool}[1]{{\em #1}\index{#1 \string\idxtype{tool}}} +\newcommand{\menuref}[1]{\textsf{#1}\index{#1 \string\idxtype{menu}}} +\newcommand{\constf}[1]{{\reffont #1}} +\newcommand{\const}[1]{{\tt #1}} +\newcommand{\plflag}[1]{{\tt #1}} +\newcommand{\type}[1]{{\reffont #1}} +\newcommand{\idx}[1]{#1\index{#1}} +\newcommand{\foreseen}[1]{\footnote{#1}} +\newcommand{\metafile}[1]{\mbox{\tt #1}} +\newcommand\file{\begingroup \urlstyle{tt}\Url} +\newcommand\email{\begingroup \urlstyle{tt}\Url} +\newcommand{\env}[1]{\mbox{\tt #1}} +\newcommand{\except}[1]{\mbox{\tt #1}} +\newcommand{\exam}[1]{\mbox{\tt #1}} +\newcommand{\module}[1]{\mbox{\reffont #1}} +\newcommand{\fileext}[1]{\mbox{\texttt{.#1}}} +\newcommand{\option}[1]{\mbox{\tt #1}} +\newcommand{\resource}[1]{\mbox{\reffont #1}} +\newcommand{\cmdlineoption}[1]{\mbox{\tt #1}} +\newcommand{\argoption}[2]{\mbox{\tt #1 \em #2}} +\newcommand{\ctype}[1]{{\texttt{#1}}} +\newcommand{\op}[1]{{\tt #1}} +\newcommand{\program}[1]{\texttt{#1}} +\newcommand{\manpage}[2]{{\bf #1}(#2)} +\newcommand{\chr}[1]{{\tt #1}} +\newcommand{\jargon}[1]{{\em #1}} +\newcommand{\strong}[1]{{\bf #1}} +\newcommand{\texcmd}[1]{{\Sesc}{\tt #1}} +\newcommand{\texenv}[1]{{\tt #1}} +\newcommand{\texmode}[1]{{\tt #1}} +\newcommand{\HTML}[1]{{\bf #1}} +\newcommand{\libdoc}[2]{\section{\pllib{#1}: #2}} +\newcommand{\key}[1]{{\sf #1}} +\newcommand{\menu}[2]{% + {\sf #1}% + \ifthenelse{\equal{#2}{}}{% + }{% + ~(\texttt{#2})}} + +\newcommand\satom{\begingroup \urlstyle{tt}\Url} +\newcommand\fmtseq{\begingroup \urlstyle{tt}\Url} + +\urldef{\Sexe}\satom{#!} % #! +\urldef{\Scgt}\satom{#>} % #> +\urldef{\Scge}\satom{#>=} % #>= +\urldef{\Sclt}\satom{#<} % #< +\urldef{\Scle}\satom{#=<} % #=< +\urldef{\Sceq}\satom{#=} % #= +\urldef{\Scne}\satom{#\=} % #\= +\urldef{\Scnot}\satom{#\} % #\ +\urldef{\Scor}\satom{#\/} % #\/ +\urldef{\Scand}\satom{#/\} % #/\ +\urldef{\Sequiv}\satom{#<=>} % #<=> +\urldef{\Slimpl}\satom{#<=} % #<= +\urldef{\Srimpl}\satom{#=>} % #=> +\urldef{\Slimplies}\satom{#<==} % #<== +\urldef{\Srimplies}\satom{#==>} % #==> +\urldef{\Scequal}\satom{#<==>} % #<==> +\urldef{\Scieq}\satom{#=:=} % #=:= +\urldef{\Scine}\satom{#=\=} % #=\= +\urldef{\Shash}\satom{#} % # +\urldef{\Scut}\satom{!} % ! +\urldef{\Scomma}\satom{,} % , +\urldef{\Sifthen}\satom{->} % -> +\urldef{\Ssoftcut}\satom{*->} % *-> +\urldef{\Sdot}\satom{.} % . +\urldef{\Ssemicolon}\satom{;} % ; +\urldef{\Slt}\satom{<} % < +\urldef{\Sxor}\satom{><} % >< +\urldef{\Seq}\satom{=} % = +\urldef{\Suniv}\satom{=..} % =.. +\urldef{\Saeq}\satom{=:=} % =:= +\urldef{\Sle}\satom{=<} % =< +\urldef{\Sel}\satom{<=} % <= +\urldef{\Sequal}\satom{==} % == +\urldef{\Sstructeq}\satom{=@=} % =@= +\urldef{\Sstructneq}\satom{\=@=} % \=@= +\urldef{\Sane}\satom{=\=} % =\= +\urldef{\Sgt}\satom{>} % > +\urldef{\Sge}\satom{>=} % >= +\urldef{\Stlt}\satom{@<} % @< +\urldef{\Stle}\satom{@=<} % @=< +\urldef{\Stgt}\satom{@>} % @> +\urldef{\Stge}\satom{@>=} % @>= +\urldef{\Snot}\satom{\+} % \+ +\urldef{\Sne}\satom{\=} % \= +\urldef{\Snequal}\satom{\==} % \== +\urldef{\Shat}\satom{^} % ^ +\urldef{\Sbar}\satom{|} % | +\urldef{\Stimes}\satom{*} % * +\urldef{\Spow}\satom{**} % ** +\urldef{\Splus}\satom{+} % + +\urldef{\Sminus}\satom{-} % - +\urldef{\Sdiv}\satom{/} % / +\urldef{\Sidiv}\satom{//} % // +\urldef{\Sand}\satom{/\} % /\ +\urldef{\Slshift}\satom{<<} % << +\urldef{\Srshift}\satom{>>} % >> +\urldef{\Sneg}\satom{\} % \ +\urldef{\Sesc}\satom{\} % \ +\urldef{\Sor}\satom{\/} % \/ +\urldef{\Sdollar}\satom{$} % $ +\urldef{\Squest}\satom{?} % ? +\urldef{\Smodule}\satom{:} % : +\urldef{\Sneck}\satom{:-} % :- +\urldef{\Sdirective}\satom{?-} % ?- +\urldef{\Sdcg}\satom{-->} % --> +\urldef{\Bc}\satom{\c} % \c +\urldef{\Bn}\satom{\n} % \n +\urldef{\Br}\satom{\r} % \r +\urldef{\Bl}\satom{\l} % \l +\urldef{\BB}\satom{\\} % \\ +\urldef{\Stilde}\satom{~} % ~ +\urldef{\Spercent}\satom{%} % % +\urldef{\Shash}\satom{#} % # +\urldef{\Scurl}\satom{{}} % {} +\urldef{\SxXX}\satom{xXX..\} % xXX..\ + +\newcommand{\bug}[1]{\footnote{BUG: #1}} + +\newcommand{\mod}[2]{#1 \mbox{\rm mod} #2} +\newcommand{\rem}[2]{#1 \mbox{\rm rem} #2} +\newcommand{\pow}[2]{{#1}^{#2}} +\newcommand{\bsl}[0]{\Sesc} + +% Index handling + +\newcommand{\idxtype}[1]{{\small\em #1}} + +% Prolog predicate summary + +\newenvironment{summarylist}[1]{\begin{longtable}[l]{#1}}{\end{longtable}} +\newcommand{\predicatesummary}[3]{#1/#2 & #3 \\} +\newcommand{\oppredsummary}[5]{#1/#2 & #5 \\} +\newcommand{\functionsummary}[3]{#1/#2 & #3 \\} +\newcommand{\opfuncsummary}[5]{#1/#2 & #5 \\} +\newcommand{\opsummary}[4]{#3 & #1 & #2 & #4 \\} +\newcommand{\hook}[1]{(hook)} + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% CODE environment % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\usepackage{fancyvrb} +\usepackage{color} + +%\definecolor{codeboxcolor}{rgb}{0.7,0.7,0.7} +\definecolor{codeboxcolor}{rgb}{0.4,0.4,0.4} +\DefineVerbatimEnvironment% + {code}{Verbatim} + {frame=single, + framerule=0.2pt, + rulecolor=\color{codeboxcolor}, + } + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% INCLUDE FIGURES % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +% PostScript figures +% \postscriptfig[width=5in]{label}{Title} + +\makeatletter +\def\postscriptfig{\@ifnextchar[{\@scaledpostscriptfig}{\@postscriptfig}} +\def\@scaledpostscriptfig[#1]#2#3{% + \begin{figure}% + \centerline{\includegraphics[#1]{#2}} + \caption{#3} + \label{fig:#2} + \end{figure}} +\def\@postscriptfig#1#2{% + \begin{figure}% + \centerline{\includegraphics{#1}} + \caption{#2} + \label{fig:#1} + \end{figure}} +\makeatother + +% \begin{tabularlp}{longest-text} + +\newlength{\tabDright} +\newlength{\tabDleft} +\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp} +\newcommand{\raggedrightcolumn}{\PreserveBackslash\raggedright\hspace{0pt}} +\newenvironment{tabularlp}[1]% + {\settowidth{\tabDleft}{#1}% + \setlength{\tabDright}{\linewidth-\columnsep*3-\tabDleft}% + \begin{tabular}{|p{\tabDleft}|>{\raggedrightcolumn}p{\tabDright}|}}% + {\end{tabular}} + +% \begin{tags} ... \end{tags} + +\newenvironment{tags}% + {\begin{quote}\begin{description}% + \setlength{\itemsep}{0pt}% + \footnotesize}% + {\end{description}\end{quote}} + + +% \begin{parameters} ... \end{parameters} + +\newenvironment{parameters}% + {\par% + \makebox[\linewidth]{\hfill\footnotesize Parameters} + \begin{tabular*}{\linewidth}{lp{0.7\linewidth}} + \hline}% + {\end{tabular*}} + +