% @version $Header$ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e} \def\CA@styledate{\CA@getcvsdate $Date$} \def\CA@styleversion{\CA@getcvsversion $Revision$} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\CA@getcvsdate $#1:#2/#3/#4 #5:#6:#7${#2/#3/#4} \def\CA@getcvsversion $#1:#2${#2} \IfFileExists{../interface.ccl} % Is this the documentation.tex for a thorn? { \ProvidesPackage{../../../../doc/latex/cactus}[\CA@styledate \CA@styleversion] } { \IfFileExists{../FAQ} % Is this the UsersGuide or MaintGuide? { \ProvidesPackage{../latex/cactus}[\CA@styledate \CA@styleversion] } { \IfFileExists{../../../arrangements/README} % Is this the % documentation.tex for an % entire arrangement? { \ProvidesPackage{../../../doc/latex/cactus} } { \ProvidesPackage{cactus}[\CA@styledate \CA@styleversion] } } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Load in other packages. \RequirePackage[latin9]{inputenc} \RequirePackage{fancyhdr} \RequirePackage{graphicx} \RequirePackage{latexsym} \RequirePackage{amssymb} \RequirePackage{ifthen} \RequirePackage{calc} \RequirePackage{thumbpdf} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \parskip = 10 pt \parindent = 0 pt \oddsidemargin = 0 cm \textwidth = 16 cm \topmargin = -1 cm \textheight = 24 cm %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % macros \def\text#1{{\rm #1}} \def\q{\bf QUERY: } \def\t{\tt \obeylines } \def\ie{\hbox{i.e.\hbox{}}} \def\nhat{{\hat n}} \def\vone{{v_{{}_{(1)}}}} \def\vtwo{{v_{{}_{(2)}}}} \def\vthree{{v_{{}_{(3)}}}} \def\eref#1{(\ref{#1})} % nicely typeset "C++" (adapted from a comp.lang.C++ FAQ entry) \def\Cplusplus{\hbox{C\hspace{-.05em}\raisebox{.4ex}{\tiny\bf ++}}} % reference to code, i.e. routine or variable names \newcommand{\code}[1]{\texttt{#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % MANPAGE like description setting for options, use as % \begin{Lentry} %\item[text] text \end{Lentry} \usepackage{ifthen,calc} \newcommand{\entrylabel}[1]{\mbox{\textsf{#1}}\hfil} \newenvironment{entry} {\begin{list}{} {\renewcommand{\makelabel}{\entrylabel} \setlength{\labelwidth}{90pt} \setlength{\leftmargin}{\labelwidth+\labelsep} } } {\end{list}} \newlength{\Mylen} \newcommand{\Lentrylabel}[1]{% % Latex doesn't always like spaces -- sometimes it outputs them, and % then they destroy the layout. Please don't indent the following, % nor add spaces, nor remove the percent signs, nor add spaces in % front of them. \settowidth{\Mylen}{\textsf{#1}}% \ifthenelse{\lengthtest{\Mylen > \labelwidth}}% {\parbox[b]{\labelwidth}% term > labelwidth {\makebox[0pt][l]{\textsf{#1}}\\}}% {\textsf{#1}}% \hfil\relax} \newenvironment{Lentry} {\renewcommand{\entrylabel}{\Lentrylabel} \begin{entry}} {\end{entry}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newenvironment{CCTKroutine}{\newpage}{} \newenvironment{CCTKsyn}{\noindent\begin{tabular}{@{}p{3cm}cp{11cm}}&&\\{\bf Synopsis} \hfill&&\\}{\end{tabular}} % The above needs to be fixed -- sometimes it runs off the page (e.g. with cctk_complex arguments...) \newenvironment{CCTKpar}{\noindent\begin{tabular}{@{}p{3cm}cp{11cm}}&&\\{\bf Parameters} \hfill&&\\}{\end{tabular}} \newcommand{\CCTKname}[1]{\noindent{\t #1}\hrule} \newcommand{\CCTKdesc}[1]{\vskip .3cm \noindent #1} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Define some saveboxes to hold data \newsavebox{\cctkbox} \newsavebox{\cctkcargbox} \newsavebox{\cctkfargbox} \newsavebox{\cctkfargdefs} \newsavebox{\cctkcsepbox} \newsavebox{\cctkfsepbox} \newsavebox{\cctkfdefssep} \newsavebox{\cctkcprefix} \newsavebox{\cctkfprefix} \newsavebox{\cctkparambox} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newenvironment{CCTKFunc}[2] {\sbox{\cctkbox}{#1} \newpage \noindent{\t #1}\hrule \vskip .3cm \noindent #2\\ %Clear the saveboxes - this may not be neccessary \sbox{\cctkcargbox}{} \sbox{\cctkfargbox}{} \sbox{\cctkfargdefs}{} \sbox{\cctkcsepbox}{} \sbox{\cctkfsepbox}{} \sbox{\cctkfdefssep}{} \sbox{\cctkcprefix}{} \sbox{\cctkfprefix}{} %A command to add an argument - takes ctype, ftype, name \newcommand{\argument}[3] {\sbox{\cctkcargbox}{\usebox{\cctkcargbox}\usebox{\cctkcsepbox} ##1 ##3} \sbox{\cctkcsepbox}{,} \sbox{\cctkfargbox}{\usebox{\cctkfargbox}\usebox{\cctkfsepbox} ##3} \sbox{\cctkfsepbox}{,} \sbox{\cctkfargdefs}{\noindent{}\vbox{\noindent\usebox{\cctkfargdefs}\noindent\usebox{\cctkfdefssep}\noindent {} ##2 ##3}} \sbox{\cctkfdefssep}{\\} } %Use this command if it is a subroutine, same args as \argument \newcommand{\subroutine}[3] {\sbox{\cctkcprefix}{##1 ##3 =} \sbox{\cctkfprefix}{call} \sbox{\cctkfargbox}{##3\usebox{\cctkfsepbox} \usebox{\cctkfargbox}} \sbox{\cctkfsepbox}{,} \sbox{\cctkfargdefs}{\noindent{}\vbox{\noindent ##2 ##3 \usebox{\cctkfdefssep}\noindent{}\usebox{\cctkfargdefs}}} \sbox{\cctkfdefssep}{\\} } %Use this command if it is a function, same args as \argument \newcommand{\function}[3] {\sbox{\cctkcprefix}{##1 ##3 =} \sbox{\cctkfprefix}{##3 = } \sbox{\cctkfargdefs}{\noindent{}\vbox{\noindent ##2 ##3 \usebox{\cctkfdefssep}\noindent{}\usebox{\cctkfargdefs}}} \sbox{\cctkfdefssep}{\\} } %Use this to display the arguments \newcommand{\showargs} {\noindent \begin{tabular}{@{}p{3cm}cp{11cm}}&&\\ {\bf Synopsis} \hfill&&\\ \hfill {\bf C} && {\t \usebox{\cctkcprefix} \usebox{\cctkbox}(\usebox{\cctkcargbox})}\\ \hfill {\bf Fortran} && {\t \usebox{\cctkfprefix} \usebox{\cctkbox}(\usebox{\cctkfargbox} ) }\\ &&\noindent\usebox{\cctkfargdefs} \end{tabular}\\ } %Use this to display the C arguments \newcommand{\showcargs} {\noindent \begin{tabular}{@{}p{3cm}cp{11cm}}&&\\ {\bf Synopsis} \hfill&&\\ \hfill {\bf C} && {\t \usebox{\cctkcprefix} \usebox{\cctkbox}(\usebox{\cctkcargbox})}\\ \end{tabular}\\ } %Environment for describing parameters \newenvironment{params}{ \noindent\begin{tabular}{@{}p{3cm}cp{11cm}}&&\\{\bf Parameters} \hfill&&\\}{\end{tabular}\\} %Command to describe a parameter, takes name and description \newcommand{\parameter}[2]{ \\ \hfill {\t ##1} &-&##2 \\ } %Environment for discussion \newenvironment{discussion} {\noindent \begin{tabular}{@{}p{14cm}} \\{\bf Discussion} \hfill\\ } { \end{tabular}\\ } %Environment for examples \newenvironment{examples} {\noindent \begin{tabular}{@{}p{14cm}} \\{\bf Examples} \hfill\\ } { \end{tabular}\\\\ } %Environment for describing errors \newenvironment{errorcodes} {\noindent \begin{tabular}{@{}p{6cm}cp{10cm}}&&\\ {\bf Errors} \hfill&&\\} {\end{tabular}\\} %Command to describe an errorcode, takes name and description \newcommand{\errorcode}[2]{ \\ \hfill {\t ##1} &-&##2 \\ } }% end of \begin{CCTKFunc} expansion {}% \end{CCTKFunc} expansion %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Alternate environments/macros to define function descriptions % (can/should be used to replace CCTKFunc environment) % Jonathan Thornburg, 10 Nov 2001, revised 26 Mar 2002 & 3 Apr 2002 % % Usage: % \begin{FunctionDescription}{name} % \label{label} % Synopsis for this function (running text rules) % % \begin{SynopsisSection} % \begin{Synopsis}{C} % text of C function synopsis (running text rules) % \end{Synopsis} % \begin{Synopsis}{Fortran} % text of Fortran function synopsis (running text rules) % \end{Synopsis} % \end{SynopsisSection} % % \begin{ResultSection} % \begin{ResultNote} % optional note to go at the beginning of all results % (running text rules) % \end{ResultNote} % \begin{Result}{name or value (automatically in \tt font)} % desription of what the result means in general, % or of what this particular result value means (running text rules) % \end{Result} % \end{ResultSection} % % \begin{ParameterSection} % \begin{Parameter}{name (automatically in \tt font)} % desription of parameter (running text rules) % \end{Parameter} % \begin{Parameter}{name2 (automatically in \tt font)} % desription of another parameter (running text rules) % \end{Parameter} % \end{ParameterSection} % % \begin{Discussion} % (note that there is no "DiscussionSection" environment!) % discussion (running text rules) % % another paragraph of discussion (running text rules) % % yet another paragraph of discussion (running text rules) % \end{Discussion} % % \begin{SeeAlsoSection} % \begin{SeeAlso}{name (automatically in \tt font) % cross-references to other function of that name (running text rules) % \end{SeeAlso} % \begin{SeeAlso}{name2 (automatically in \tt font) % cross-references to another function (running text rules) % \end{SeeAlso} % \end{SeeAlsoSection} % % \begin{ErrorSection} % \begin{Error}{error\_code (automatically in \tt font)} % description of what this error code means (running text rules) % \end{Error} % \begin{Error}{error\_code2 (automatically in \tt font)} % description of what next error code means (running text rules) % \end{Error} % \end{ErrorSection} % % \begin{ExampleSection} % \begin{Example}{C} % example C code (running text rules) % \end{Example} % \begin{Example}{Fortran} % example Fortran code (running text rules) % \end{Example} % \end{ExampleSection} % % For arguments which are automatically in \tt font, \tt may be used % to switch back to normal Roman font (eg for a numerical value), and % $...$ may be used for math mode (eg ($\ge 0$) to mark a result % which is always non-negative). % % Each "running text rules" item is the body of a latex environment, % so it may include multiple lines or even paragraphs. Normally % underscore must be escaped (\_), but \verb|...| and/or % \begin{verbatim} % ... % \end{verbatim} % or similar constructs (which can't be used inside a macro argument) % may also be used (in which case _ { } \ etc need not be escaped). % % All the subsections are optional. % % Bugs: % - It would be nice if we could avoid having to escape underscore % within arguments. % - Error checking: if you have to ask, there isn't enough for you! :) % - There are no controls to prevent a page break falling between the % line "C" or "Fortran", and an immediately following example generated % by the Example subenvironment. In fact, LaTeX seems to like doing % this. :( % - It would be nice to have a "...continued" legend at the bottom of % all but the last page of a multi-page description. % - The running header giving the function name, only appears for the % first page of a multi-page description. % - In some ideal world, "See Also" would generate pdf hotlinks. % - The horizontal spacing is ugly in a ResultNote environment, and it's % really *really* ugly if the note spans multiple lines of text. :( % - There are often unwanted one-horizontal-space indentations at % the start of items; I don't know how to get rid of these. :( % \newenvironment{FunctionDescription}[1] { \newpage \noindent{\tt #1} \vskip1mm \hrule \vskip3mm % % We define all the subenvironments inside the main one, so they won't % interfere with any conflicting global definitions. % \newenvironment{FunctionDescriptionEntry} {%%% \begin{list}%%% {}%%% {%%% \renewcommand{\makelabel}{\Lentrylabel}%%% \setlength{\topsep}{0ex}%%% \setlength{\partopsep}{0ex}%%% \setlength{\itemsep}{0ex}%%% \setlength{\labelwidth}{8em}%%% \setlength{\leftmargin}{\labelwidth+\labelsep}%%% \setlength{\itemindent}{0em}%%% \setlength{\listparindent}{0em}%%% }%%% }%%% {\end{list}}%%% \newenvironment{FunctionDescriptionWideEntry} {%%% \begin{list}%%% {}%%% {%%% \renewcommand{\makelabel}{\Lentrylabel}%%% \setlength{\topsep}{0ex}%%% \setlength{\partopsep}{0ex}%%% \setlength{\itemsep}{0ex}%%% \setlength{\labelwidth}{16em}%%% \setlength{\leftmargin}{\labelwidth+\labelsep}%%% \setlength{\itemindent}{0em}%%% \setlength{\listparindent}{0em}%%% }%%% }%%% {\end{list}}%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \newenvironment{SynopsisSection} {%%% \par\noindent{\bf Synopsis} \begin{FunctionDescriptionEntry} }%%% {\end{FunctionDescriptionEntry}} \newenvironment{Synopsis}[1]{\item[\bf{##1}]}{} % \newenvironment{ResultSection} {%%% \par\noindent{\bf Result} \begin{FunctionDescriptionEntry} }%%% {\end{FunctionDescriptionEntry}} \newenvironment{ResultNote}{\item[]\hskip-\leftmargin{}}{} \newenvironment{Result}[1]{\item[\tt{##1}]}{} % \newenvironment{ParameterSection} {%%% \par\noindent{\bf Parameters} \begin{FunctionDescriptionEntry} }%%% {\end{FunctionDescriptionEntry}} \newenvironment{Parameter}[1]{\item[\tt{##1}]}{} % \newenvironment{Discussion}%%% {%%% \par\noindent{\bf Discussion} \begin{FunctionDescriptionEntry} \item[] }%%% {\end{FunctionDescriptionEntry}} % \newenvironment{SeeAlsoSection} {%%% \par\noindent{\bf See Also} \begin{FunctionDescriptionWideEntry} }%%% {\end{FunctionDescriptionWideEntry}} \newenvironment{SeeAlso}[1]{\item[\tt{##1}]}{} \newenvironment{SeeAlso2}[2]{\item[\tt{##1} \rm{[\pageref{##2}]}]}{} % \newenvironment{ErrorSection} {%%% \par\noindent{\bf Errors} \begin{FunctionDescriptionWideEntry} }%%% {\end{FunctionDescriptionWideEntry}} \newenvironment{Error}[1]{\item[\tt{##1}]}{} % \newenvironment{ExampleSection} {%%% \par\noindent{\bf Examples} \begin{FunctionDescriptionEntry} }%%% {\end{FunctionDescriptionEntry}} \newenvironment{Example}[1]{\item[\bf{##1}]}{} % }%%% % end of \begin{FunctionDescription} expansion {%%% }%%% % \end{FunctionDescription} expansion is empty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Takes three arguments - the name of the document, the revision, and % the date. % Additionally ther eis an optional first argument with the version number \newcommand{\cactustitlepage}[4][4.0] { \thispagestyle{empty} \setlength{\parindent}{0mm} \setlength{\parskip}{0mm} \vspace*{\stretch{1}} \rule{\linewidth}{1mm} \begin{flushright} \Huge Cactus #1\\[5mm] #2 \end{flushright} \rule{\linewidth}{1mm} \vspace*{\stretch{2}} \begin{center} \includegraphics[angle=0,width=5cm]{bincactus2} \end{center} \vspace*{\stretch{2}} \begin{center} \Large #3 \\[3mm] #4 \end{center} \newpage \setlength{\parindent}{0pt} \setlength{\parskip}{10pt} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \makeatletter \def\BigAlph#1{\expandafter\@BigAlph\csname c@#1\endcsname} \def\@BigAlph#1{% \ifcase#1\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else\@ctrerr\fi} \makeatother % % arguments: % #1 = Name of this part, eg "Function Reference" % #2 = $RCSFile:$ keyword % #3 = $Revision$ keyword % \newenvironment{cactuspart}[3] { \clearpage \renewcommand{\thepage}{\BigAlph{part}\arabic{page}} % Redefine the plain style \fancypagestyle{plain} { \fancyhf{} % Clear all header and footer fields \lfoot{#2} \cfoot{#3} \rfoot{\thepage/\pageref{lastpage:\thepart}} \renewcommand{\headrulewidth}{0.0pt} \renewcommand{\footrulewidth}{0.4pt} \renewcommand{\thepage}{\BigAlph{part}\arabic{page}} } % Make sure it's arabic numbering \pagenumbering{arabic} % Start the page counter at 1 \setcounter{page}{1} % Start a new part \renewcommand{\thepage}{\BigAlph{part}\arabic{page}} \part{#1} % Redefine the page % Set up fancy headings. \lfoot{#2} \cfoot{#3} \rfoot{\thepage/\pageref{lastpage:\thepart}} \renewcommand{\headrulewidth}{0.4pt} \renewcommand{\footrulewidth}{0.4pt} } { % Remember the last page of the \label{lastpage:\thepart} \clearpage } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \endinput %% End of cactus.sty