diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/fmp |
Initial commit
Diffstat (limited to 'macros/latex/contrib/fmp')
-rw-r--r-- | macros/latex/contrib/fmp/README | 32 | ||||
-rw-r--r-- | macros/latex/contrib/fmp/fmp.dtx | 675 | ||||
-rw-r--r-- | macros/latex/contrib/fmp/fmp.ins | 72 | ||||
-rw-r--r-- | macros/latex/contrib/fmp/fmp.pdf | bin | 0 -> 149981 bytes |
4 files changed, 779 insertions, 0 deletions
diff --git a/macros/latex/contrib/fmp/README b/macros/latex/contrib/fmp/README new file mode 100644 index 0000000000..5aae9ab4ad --- /dev/null +++ b/macros/latex/contrib/fmp/README @@ -0,0 +1,32 @@ +fmp, a LaTeX package to support Functional MetaPost +Copyright 2001 Marco Kuhlmann + +Files: + + fmp.ins Batch file, run through LaTeX + fmp.dtx Docstrip archive, run through LaTeX + fmp.pdf Package documentation + README This file + +Contact: + + Marco Kuhlmann <marco.kuhlmann@gmx.net> + +Notes: + + To make use of this package, you need a working version of + Functional MetaPost. You can download this software from + + http://www.informatik.uni-bonn.de/~ralf/software.html + + You also need a Haskell interpreter; the basic setup of the FMP + package supports the wide-spread hugs program. More information + on hugs can be found at + + http://www.haskell.org/hugs/ + + Before you make use of this package, ensure that your FMP + installation works okay. Note that I cannot in general give any + support for FMP as such. + + Happy FMPing! diff --git a/macros/latex/contrib/fmp/fmp.dtx b/macros/latex/contrib/fmp/fmp.dtx new file mode 100644 index 0000000000..9384c0f008 --- /dev/null +++ b/macros/latex/contrib/fmp/fmp.dtx @@ -0,0 +1,675 @@ +% \iffalse meta-comment +% +% Copyright 2001 Marco Kuhlmann +% +% This program is distributed under the conditions of the +% LaTeX Project Public License, which can be found in +% http://www.latex-project.org/lppl.txt +% +% This program consists of the files fmp.ins and fmp.dtx +% +% \fi +% +% +% \CheckSum{260} +% +% \changes{v1.0a}{2001/04/03}{% +% Initial release.} +% +% \CharacterTable +% {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 +% 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 +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \title{Functional {\MP} for {\LaTeX}\thanks{% +% This file has version number \fileversion.}} +% \author{Marco Kuhlmann\thanks{% +% E-Mail: \texttt{marco.kuhlmann@gmx.net}}} +% \date{\filedate} +% \maketitle +% +% +% \begin{abstract} +% Functional {\MP} (\FMP) is a powerful frontend to the {\MP} +% language. This package adds basic {\FMP} support to {\LaTeX}, +% enabling users to keep {\FMP} source code within their +% documents and, by a two-run mechanism, including +% automatically generated {\FMP} figures. +% \end{abstract} +% +% +% \section{Introduction} +% +% Functional {\MP} by Joachim Korittky (\cite{Diplomarbeit}) adds +% a high-level interface to the {\MP} language (\cite{MetaPost1}, +% \cite{MetaPost2}), enabling the user to program their graphics +% using the Haskell language. Impressive examples of Functional +% {\MP} can be found in Korittky's diploma thesis; some of them +% will be given below. The system and the documentation can be +% downloaded from +% \begin{quote} +% \texttt{http://www.informatik.uni-bonn.de/\~{}ralf/software.html} +% \end{quote} +% +% Using Functional {\MP} as my standard graphics developing tool, +% I felt a need to write a {\LaTeX} package which smoothly +% integrates {\FMP} into daily work, similar to the |emp| package +% by Thorsten Ohl (\cite{EMP}); this is how |fmp| came to being. +% The earliest version supported only the possibility to +% automatically produce shell-scripts for graphics generation. +% Since then, I have added the possibility to encapsulate {\FMP} +% code -- though I still ask myself if this way of maintaining +% code is as natural for {\FMP} as it is for pure {\MP} in |emp|. +% +% In case you have any questions or comments on this package, +% feel free to send me an email. May |fmp| help {\FMP} to spread +% around the world. \texttt{:-)} +% +% +% \subsection{Examples of Functional {\MP}} +% +% Before I start to present the |fmp| package, let me first give +% you two mouth-watering examples of {\FMP} (the Haskell code for +% them can be found at the end of this document): +% figure~\ref{figure:example1} gives a binominal tree of +% rank~$5$, figure~\ref{figure:example2} shows a simple Venn +% diagram. Among other things, these examples exhibit two +% features in which {\FMP} is superior to many other graphics +% drawing packages around: +% \begin{itemize} +% \item By embedding {\MP} into the Haskell programming language, +% {\FMP} gives the user (and especially users who have previous +% experience in functional programming) a great tool to program +% graphics on a very high-level level of abstraction. This not +% only helps you to focus on the logical structure rather than +% on layout questions, but also is especially important if you +% want to scale and re-use old material. +% \item {\FMP} can be easily extended. For example, for +% figure~\ref{figure:example1}, the core language has been +% augmented by tree drawing features, using much better +% algorithms than those of any other tree drawing package +% around. This is especially good news for computer scientists, +% who need trees very often, but did not yet have a package to +% draw them on such a level of abstraction. +% \end{itemize} +% +% \begin{figure} +% \begin{center} +% \fmpfigure{example1} +% \end{center} +% \caption{A binominal tree of rank~$5$} +% \label{figure:example1} +% \end{figure} +% +% \begin{figure} +% \begin{center} +% \fmpfigure{example2} +% \end{center} +% \caption{A Venn diagram (cf.\ figure~22 in \cite{MetaPost2})} +% \label{figure:example2} +% \end{figure} +% +% To be able to use {\FMP}, you need a Haskell interpreter, such +% as |hugs|, and the {\MP} program, which should be part of any +% somewhat complete distribution of {\LaTeX}. Having produced a +% Haskell source, you feed it into |hugs| and issue the +% |generate| command provided by {\FMP}. This will translate your +% code into low-level {\MP} commands, and finally produce a +% ready-to use PostScript file. +% +% \subsection{How this package works} +% +% Calling |hugs| and typing in the generation commands is a +% tedious job if you keep more than but a few illustrations +% around. This package offers the |\fmpfigure| command, which +% generates a shell script (at present, this only works for +% $*$n$*$x), which you then can execute to have all the graphics +% files generated at once. At the next run of {\LaTeX}, these +% graphic files will appear at their proper positions. Besides, +% |fmp| enables you to store Haskell code within a {\LaTeX} file, +% in case you want to have all the code for one document at one +% place. +% +% +% \section{Usage} +% +% \subsection{Including graphics} +% +% \changes{v1.0b}{2001/10/22}{% +% Documentation: Improvements as suggested by Peter Bartke.} +% Using \verb|fmp| to include graphics from some {\FMP} source is +% straightforward. Let us assume that you keep two {\FMP} figures +% (Haskell values) \verb|example1| and \verb|example2| in a file +% called \verb|fmp-doc.hs|. A minimal document using the package to +% include these two figures would then look like this: +% +% \medskip\noindent\bgroup\small +% \verb|\documentclass{article}|\\ +% \verb|\usepackage{fmp}|\\ +% \verb|\fmpsourcefilename{fmp-doc}|\\ +% \verb|\begin{document}|\\ +% \verb|\fmpfigure{example1}|\\ +% \verb|\fmpfigure{example2}|\\ +% \verb|\end{document}|\\ +% \verb|\end{verbatim}| +% \medskip\par\egroup +% +% \DescribeMacro{\fmpfigure} You include a figure into your +% {\LaTeX} document by using the |\fmpfigure| macro. It takes, as +% its mandatory argument, the string identifying the figure in +% the Haskell source, and creates a shell script containing all +% the |hugs| calls needed for the actual generation. After the +% shell script has been written, you can execute it and run +% {\LaTeX} again; if everything went right, the graphics file +% will appear at the place where you issued the |\fmpfigure| +% command. +% +% \changes{v1.1a}{2001/11/19}{% +% Documentation: Optional arguments to \cs{fmpfigure} are now +% passed to the \texttt{graphicx} package.} +% Any optional arguments to |\fmpfigure| will be passed to the +% |graphicx| package and interpreted as if they appeared together +% with a |\includegraphics| command. This allows you to change +% the visual appearance of the included figure (e.\,g., the size +% to which the figure shall be scaled). Refer to \cite{graphicx} +% for more information about possible paramters. +% +% \subsection{Including code} +% +% \DescribeEnv{fmp} You can also store your {\FMP} code in the same +% file than your {\LaTeX} source, included within the |fmp| +% environment. During compilation, the contents of this environment +% are written to an external file (see below). +% +% \subsection{Changing file names} +% +% \DescribeMacro{\fmpsourcefilename} +% \DescribeMacro{\fmpscriptfilename} +% \DescribeMacro{\fmpfigurebasename} +% You can control the names of three different files: +% \begin{itemize} +% \item the Haskell source (|\fmpsourcefilename|, defaults to +% \meta{jobname}|.hs|), +% \item the shell script (|\fmpscriptfilename|, defaults to +% |fmpgenerate.sh|) and +% \item the graphics file base name (|\fmpfigurebasename|, +% defaults to |fmpfigure|), which is the base file name of the +% graphics files that will be generated by |hugs|. (An index +% number specifying their order in the document will be +% appended to this name.) +% \end{itemize} +% You can modify all three file names by calling the respective +% macros, each of which takes the new name as its argument. +% +% \subsection{Preamble and postamble} +% +% \DescribeMacro{\fmpsourcepreamble} +% \DescribeMacro{\fmpaddtosourcepreamble} +% \DescribeMacro{\fmpscriptpreamble} +% \DescribeMacro{\fmpaddtoscriptpreamble} +% \DescribeMacro{\fmpsourcepostamble} +% \DescribeMacro{\fmpaddtosourcepostamble} +% \DescribeMacro{\fmpscriptpostamble} +% \DescribeMacro{\fmpaddtoscriptpostamble} +% Before something is written to the source file or the shell +% script file, the package will output a \emph{preamble} to that +% file. The source code preamble could contain everything from +% comments to Haskell module identifications and basic imports, +% while the shell script preamble should probably contain the +% line that calls |hugs| and tells it to input the rest of the +% file as comment. Have a sample run to see the default contents +% of the preamble. If you wish to change the text: you can set a +% new preamble by the |\fmpsourcepreamble| command, and you can +% append a new line to the current preamble calling +% |\fmpaddtosourcepreamble|. (Similar commands are available for +% the shell script preamble.) There is also a postamble, which is +% written as the very last thing to the source code or shell +% script. +% +% \MP\ uses the environment variable \verb|$TEX| to determine which +% \TeX\ it has to call when generating labels etc. On many systems, +% this variable defaults to \verb|tex|, which is certainly not what +% you want in conjunction with \verb|fmp|. One common usage for the +% preamble therefore is to include a line like +% \verb|export TEX=latex| (or something similar, depending on your +% shell) into the generation script. +% +% \subsection{Graphics file formats} +% +% The |graphicx| package is used to handle the inclusion of +% generated {\FMP} figures. If |fmp| is called from within +% |pdflatex|, |graphicx| is loaded with the |pdftex| driver +% option. In this case, the fall-back behaviour when +% encountering an |\fmpfigure| command is to read the +% corresponding graphics file as |mps| ({\MP} output); it will +% then internally be converted to \textsc{pdf} by |graphicx|. +% When called from within normal |latex|, graphics files are +% handled as |eps| (encapsulated PostScript). You probably need +% to load a specific PostScript driver for |graphicx| in this +% case -- do so by supplying |fmp| with the same package option +% that you would use for |graphicx| (see the |graphicx| user +% manual for further information on that). +% +% +% \subsection*{Acknowledgements} +% +% The help of Ralf Hinze and the suggestions of Peter Bartke and +% Ferenc Wagner are gratefully acknowledged. +% +% +% \section*{Source code for the examples} +% +% \verbatiminput{fmp-doc.hs} +% +% +% \StopEventually{% +% \begin{thebibliography}{XXX99} +% \bibitem[Hob89]{MetaPost1} +% \textsc{John D.\ Hobby:} +% \emph{A {\MF}-like System with PostScript Output.} +% TUGboat vol.~10, no.~2, pp.\ 505--512, 1989 +% \bibitem[Hob92]{MetaPost2} +% \textsc{John D.\ Hobby:} +% \emph{A User's manual for {\MP}.} +% Computing Science Technical Report no.~162, AT\&T Bell +% Laboratories, Murray Hill, New Jersey, 1992 +% \bibitem[Kor98]{Diplomarbeit} +% \textsc{Joachim Korittky:} +% \emph{functional {\MP}. Eine Beschreibungsspra\-che +% f\"ur Grafiken.} +% Diplomarbeit an der Rheinischen +% Friedrich-Wilhelms-Universit\"at Bonn, 1998 +% \bibitem[Ohl97]{EMP} +% \textsc{Thorsten Ohl:} +% \emph{EMP: Encapsulated {\MP} for {\LaTeX}.} +% Technische Hochschule Darmstadt, 1998 +% \bibitem[Car99]{graphicx} +% \changes{v1.1a}{2001/11/19}{% +% Added to bibliography: Reference to \texttt{graphicx} +% package user documentation.} +% \textsc{David Carlisle:} +% \emph{Packages in the `graphics' bundle.} +% User documentation, 1999 +% \end{thebibliography}} +% +% +% \section{The Documentation Driver File} +% +% \begin{macrocode} +%<*driver> +\documentclass{ltxdoc} +\usepackage{fmp} +\usepackage{mflogo} +\OnlyDescription +\GetFileInfo{fmp.sty} +\newcommand*{\FMP}{\textsc{fmp}} +\fmpsourcefilename{fmp-doc} +\setcounter{topnumber}{1} +\makeatletter +\let\verbatim@oldfont=\verbatim@font +\def\verbatim@font{\small\verbatim@oldfont} +\makeatother +\tolerance=2000 +\emergencystretch=20pt +\RecordChanges +\begin{document} +\DocInput{fmp.dtx} +\PrintChanges +\end{document} +%</driver> +% \end{macrocode} +% +% +% \section{The Implementation} +% +% \subsection{Setup} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% +% We start with the usual identification procedure. All the +% options that |fmp| cannot cater for itself are passed to the +% |graphicx| package, as they probably are requests for special +% PostScript drivers (see above). +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e}[1995/05/16] +\ProvidesPackage{fmp} +[2001/11/19 v1.1a Support for Functional MetaPost] +\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{graphicx}} +\ProcessOptions +% \end{macrocode} +% +% Depending on whether or not |fmp| is called from within +% |pdflatex|, the |graphicx| package has to be loaded with or +% without the |pdftex| option. A fall-back rule is declared for +% |\includegraphics| commands. +% \begin{macrocode} +\@ifundefined{pdfoutput}{% + \RequirePackage{graphicx}[1999/02/16]% + \DeclareGraphicsRule{*}{eps}{*}{}}{% + \RequirePackage[pdftex]{graphicx}[1994/12/15]% + \DeclareGraphicsRule{*}{mps}{*}{}} +% \end{macrocode} +% +% The |verbatim| package is used for writing the contents of the +% |fmp| environment (see below) into a file. +% \begin{macrocode} +\RequirePackage{verbatim} +% \end{macrocode} +% +% We set up new streams |\fmp@sourceout| and |\fmp@scriptout| for +% the Haskell source and the shell script to be written, as well +% as conditionals to remember whether or not we have already +% opened these streams. +% \begin{macrocode} +\newwrite\fmp@sourceout +\newwrite\fmp@scriptout +\newif\iffmp@sourceio +\fmp@sourceiofalse +\newif\iffmp@scriptio +\fmp@scriptiofalse +% \end{macrocode} +% +% Finally, we need a counter for the figures that we want to +% generate. +% \begin{macrocode} +\newcounter{fmpfigure} +% \end{macrocode} +% +% \subsection{Writing the source code} +% +% \begin{environment}{fmp} +% The |fmp| environment writes its contents into the +% |\fmp@sourceout| stream. This is done in an almost +% ``classical'' way, employing the |verbatim| package. +% \begin{macrocode} +\newenvironment*{fmp}{}{} +\def\fmp{% + \begingroup + \@bsphack + \let\do\@makeother\dospecials + \catcode`\^^M\active + \def\verbatim@processline{\fmp@sourcewrite{\the\verbatim@line}}% + \verbatim@start} +\def\endfmp{% + \@esphack + \endgroup} +% \end{macrocode} +% \end{environment} +% +% \begin{macro}{\fmp@sourcewrite} +% This is the wrapper used for writing to the source file. Every +% time it is called, it checks whether or not the +% |\fmp@sourceout| stream has already been opened. If not, it +% calls |\fmp@sourceopen| to do so. (I do so because I want to +% avoid situations like in the |emp| package, where the outstream +% is opened and a file is created, even when at the end nothing +% is written to it. Is this too expensive?) +% \begin{macrocode} +\def\fmp@sourcewrite#1{% + \iffmp@sourceio \else \global\fmp@sourceiotrue\fmp@sourceopen \fi% + \immediate\write\fmp@sourceout{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@sourceopen} +% Opens the output stream for the source file and writes the +% preamble. +% \begin{macrocode} +\def\fmp@sourceopen{% + \immediate\openout\fmp@sourceout\fmp@sourcefilename% + \edef\@tempa{\the\fmp@sourcepreamble}% + \immediate\write\fmp@sourceout{\@tempa}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmpsourcefilename} +% \begin{macro}{\fmp@sourcefilename} +% Set the filename of the source file. +% \begin{macrocode} +\newcommand*{\fmpsourcefilename}[1]{% + \gdef\fmp@sourcefilename{#1}} +\@onlypreamble{\fmpsourcefilename} +\def\fmp@sourcefilename{\jobname.hs} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fmp@sourcepreamble} +% \begin{macro}{\fmpsourcepreamble} +% \begin{macro}{\fmpaddtosourcepreamble} +% Sets up the preamble for the source file, as well as macros to +% reset them or append new lines to it. +% \begin{macrocode} +\newtoks\fmp@sourcepreamble +\newcommand*{\fmpsourcepreamble}[1]{% + \global\fmp@sourcepreamble={#1}} +\@onlypreamble{\fmpsourcepreamble} +\newcommand*{\fmpaddtosourcepreamble}[1]{% + \fmp@sourcepreamble=\expandafter{\the\fmp@sourcepreamble#1}} +\@onlypreamble{\fmpaddtosourcepreamble} +\fmp@sourcepreamble={-- This is file `\fmp@sourcefilename', + created automatically. Do not edit!^^J} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fmp@sourceclose} +% This is added to \LaTeX's |\@enddocumenthook|. It writes the +% postamble to the source file and closes the output stream. +% \begin{macrocode} +\def\fmp@sourceclose{% + \iffmp@sourceio + \edef\@tempa{\the\fmp@sourcepostamble}% + \fmp@sourcewrite{\@tempa}% + \immediate\closeout\fmp@sourceout + \fi} +\AtEndDocument{\fmp@sourceclose} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@sourcepostamble} +% \begin{macro}{\fmpsourcepostamble} +% \begin{macro}{\fmpaddtosourcepostamble} +% Sets up the postamble for the source file, as well as macros to +% reset and update it. +% \begin{macrocode} +\newtoks\fmp@sourcepostamble +\newcommand*{\fmpsourcepostamble}[1]{% + \global\fmp@sourcepostamble={#1}} +\@onlypreamble{\fmpsourcepostamble} +\newcommand*{\fmpaddtosourcepostamble}[1]{% + \fmp@sourcepostamble=\expandafter{\the\fmp@sourcepostamble#1}} +\@onlypreamble{\fmpaddtosourcepostamble} +\fmp@sourcepostamble={^^J-- End of file `\fmp@sourcefilename'} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Writing the shell script} +% +% \begin{macro}{\fmpfigure} +% \changes{v1.1a}{2001/11/19}{% +% Pass through optional arguments to the \texttt{graphicx} +% package, as suggested by Ferenc Wagner.} +% Writes a new line to the |\fmp@scriptout| stream, which is +% connected to the generation shell script file, telling |hugs| +% to generate a graphics file with the name specified. Any +% optional argument is passed to the |graphicx| package. +% \begin{macrocode} +\newcommand*{\fmpfigure}[2][]{% + \fmp@scriptwrite{% + generate "\fmp@figurebasename" \thefmpfigure\space #2}% + \fmp@includegraphics{#1}{\fmp@figurebasename}{\thefmpfigure}% + \refstepcounter{fmpfigure}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@scriptwrite} +% Wrapper for writing to the shell script file. +% \begin{macrocode} +\def\fmp@scriptwrite#1{% + \iffmp@scriptio \else \global\fmp@scriptiotrue\fmp@scriptopen \fi% + \immediate\write\fmp@scriptout{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@scriptopen} +% Opens the output stream for the shell script file and writes +% the preamble. +% \begin{macrocode} +\def\fmp@scriptopen{% + \immediate\openout\fmp@scriptout\fmp@scriptfilename% + \edef\@tempa{\the\fmp@scriptpreamble}% + \immediate\write\fmp@scriptout{\@tempa}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@scriptpreamble} +% \begin{macro}{\fmpscriptpreamble} +% \begin{macro}{\fmpaddtoscriptpreamble} +% Set up the preamble for the shell script file as well as macros +% to reset and append information to it. +% \begin{macrocode} +\newtoks\fmp@scriptpreamble +\newcommand*{\fmpscriptpreamble}[1]{% + \global\fmp@scriptpreamble={#1}} +\@onlypreamble{\fmpscriptpreamble} +\newcommand*{\fmpaddtoscriptpreamble}[1]{% + \fmp@scriptpreamble=\expandafter{\the\fmp@scriptpreamble#1}} +\@onlypreamble{\fmpaddtoscriptpreamble} +\fmp@scriptpreamble={hugs \fmp@sourcefilename\space <<!} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fmpscriptfilename} +% \begin{macro}{\fmp@scriptfilename} +% This sets the filename of the shell script which can be used +% for generation. +% \begin{macrocode} +\newcommand*{\fmpscriptfilename}[1]{% + \gdef\fmp@scriptfilename{#1}} +\@onlypreamble{\fmpscriptfilename} +\def\fmp@scriptfilename{fmpgenerate.sh} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fmpfigurebasename} +% \begin{macro}{\fmp@figurebasename} +% This sets the base name for the graphics files that will be +% created by |hugs|. +% \begin{macrocode} +\newcommand*{\fmpfigurebasename}[1]{% + \gdef\fmp@figurebasename{#1}} +\@onlypreamble{\fmpfigurebasename} +\def\fmp@figurebasename{fmpfigure} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\fmp@includegraphics} +% \changes{v1.1a}{2001/11/19}{% +% Pass through optional arguments to the \texttt{graphicx} +% package, as suggested by Ferenc Wagner.} +% This is a wrapper for the |\includegraphics| command. If the +% |graphicx| package has been loaded correctly, it should be able +% to import the graphics file, either directly in |eps| format, +% or after a transformation to |pdf| by the Con{\TeX}t macros +% included in the |pdftex| driver. +% \begin{macrocode} +\def\fmp@includegraphics#1#2#3{% + \leavevmode + \IfFileExists{#2.#3}% + {\includegraphics[#1]{#2.#3}}% + {\typeout{fmp: Could not find file #2.#3}}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@scriptclose} +% Write the shell script postamble and close the output stream. +% \begin{macrocode} +\def\fmp@scriptclose{% + \iffmp@scriptio + \edef\@tempa{\the\fmp@scriptpostamble}% + \fmp@scriptwrite{\@tempa}% + \immediate\closeout\fmp@scriptout + \fi} +\AtEndDocument{\fmp@scriptclose} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\fmp@scriptpostamble} +% \begin{macro}{\fmpscriptpostamble} +% \begin{macro}{\fmpaddtoscriptpostamble} +% Set up the postamble for the shell script file as well as macros +% to reset and append information to it. +% \begin{macrocode} +\newtoks\fmp@scriptpostamble +\newcommand*{\fmpscriptpostamble}[1]{% + \global\fmp@scriptpostamble={#1}} +\@onlypreamble{\fmpscriptpostamble} +\newcommand*{\fmpaddtoscriptpostamble}[1]{% + \fmp@scriptpostamble=\expandafter{\the\fmp@scriptpostamble#1}} +\@onlypreamble{\fmpaddtoscriptpostamble} +\fmp@scriptpostamble={:quit} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</package> +% \end{macrocode} +% +% +% \Finale +% +% +%<*examples> +module FMPDoc where +import FMP +import FMPTree + +example1 = binom 5 + where + ce = circle empty + binom 0 = node ce [] + binom n = node ce [edge (binom i) + | i <- [(n-1),(n-2)..0]] + #setAlign AlignRight + +example2 = box (math "U" ||| + ooalign [toPicture [cArea a 0.7, + cArea b 0.7, + cArea ab 0.4], + bOverA]) + where + cArea a c = toArea a #setColor c + bOverA = column [math "B" #setBGColor white, + vspace 50, + math "A" #setBGColor white] + a = transformPath (scaled 30) fullcircle + b = transformPath (scaled 30 & shifted (0,-30)) + fullcircle + ab = buildCycle a b +%</examples> + + + diff --git a/macros/latex/contrib/fmp/fmp.ins b/macros/latex/contrib/fmp/fmp.ins new file mode 100644 index 0000000000..b2bbf98bb4 --- /dev/null +++ b/macros/latex/contrib/fmp/fmp.ins @@ -0,0 +1,72 @@ +% +% fmp.ins +% +% Copyright 2001 Marco Kuhlmann +% +% This program is distributed under the conditions of the +% LaTeX Project Public License, which can be found in +% http://www.latex-project.org/lppl.txt +% +% This program consists of the files fmp.ins and fmp.dtx +% + +\input docstrip +\keepsilent + +% Produce documentation + +\preamble + +Copyright 2001 Marco Kuhlmann + +This program may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either version +1.2 of this license or (at your option) any later version. The +latest version of this license is in + + http://www.latex-project.org/lppl.txt + +and version 1.2 or later is part of all distributions of LaTeX +version 1999/12/01 or later. + +This program consists of the files fmp.ins and fmp.dtx + +\endpreamble + +\generate{\file{fmp.sty}{\from{fmp.dtx}{package}}} + +\def\MetaPrefix{--} + +% Produce example source code + +\preamble + +Example source code for the FMP package + +\endpreamble + +\nopostamble + +\generate{\file{fmp-doc.hs}{\from{fmp.dtx}{examples}}} + +% That's all, folks! + +\Msg{*****************************************************************} +\Msg{*} +\Msg{* To complete the installation, move `fmp.sty' to a place where} +\Msg{* LaTeX can find it.} +\Msg{*} +\Msg{* To produce the documentation run} +\Msg{* - latex fmp.dtx} +\Msg{* - makeindex -s gglo.ist -o fmp.gls fmp.glo} +\Msg{* - sh fmpgenerate.sh} +\Msg{* - latex fmp.dtx} +\Msg{*} +\Msg{* (This assumes that you have the hugs Haskell compiler installed} +\Msg{* and a working version of Functional MetaPost running.)} +\Msg{*} +\Msg{* Happy FMPing!} +\Msg{*} +\Msg{*****************************************************************} + +\endbatchfile diff --git a/macros/latex/contrib/fmp/fmp.pdf b/macros/latex/contrib/fmp/fmp.pdf Binary files differnew file mode 100644 index 0000000000..7091ada2fb --- /dev/null +++ b/macros/latex/contrib/fmp/fmp.pdf |