CSC400 LatexCad.sty
--Thiebaut 18:09, 12 October 2009 (UTC)
% latexcad.sty - enhanced macros for LaTeX CAD program version 1.5
% Updated 17 Dec 1995
% 21/1/96, shadebox bug fix
% 17/5/96 Automatic defaults for one/two column width
% for PostScript figures. PostScript width
% does *not* automatically go back to the default -
% must explicitly use \dfltpostscriptwidth
% 16/7/96 - comments on end of *every* macro line, to
% prevent unwanted side-effects.
% J Leis leis@usq.edu.au
\typeout{ latexcad.sty (V 1.7 29 July 96) - Support for LaTeXCAD drawing package. }
\typeout{ John Leis, leis@usq.edu.au Adapted from various CTAN sources. }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% User Macros for LaTeX, SliTeX %%%
%================================================================
% For LaTeX %
% Placing LaTeX-CAD drawings (.lp)
% \placedrawing{test.lp}{A Diagram.}{fig:test}
% Multi-line format (note position of '%' ):
% \placedrawing{test.lp}%
% {A Diagram.}%
% {fig:test}
%
% \drawingscale{0.4mm}
% \placedrawing[p]{test.lp}{A Diagram.}{fig:test}
% \placedrawing*{test.lp}
% \placedrawing*[p]{test.lp}
% placing GnuPlots (.gp)
% \placegraph{test.gp}{A test graph.}{fig:test}
% \placegraph[p]{test.gp}{A test graph.}{fig:test}
% \placegraph*{test.gp}
% \placegraph*[p]{test.gp}
% Placing encapsulated PostScript (.eps)
% \placepostscript{test.eps}{A test picture.}{fig:test}
% Multi-line format (note position of '%' ):
% \placepostscript{test.eps}%
% {A test picture.}%
% {fig:test}
%
% \setpostscriptwidth{80mm}
% \placepostscript[p]{test.eps}{A test picture.}{fig:test}
% \placepostscript*{test.eps}
% \placepostscript*[p]{test.eps}
%================================================================
%================================================================
% For SliTeX %
% Placing LaTeX-CAD drawings (.sp)
% \drawingscale{0.4mm}
% \placeslidedrawing{test.sp}{ A Slide Drawing }
% Placing GnuPlots (.gp)
% \placeslidegraph{test.gp}{ A Slide Graph }
% Placing encapsulated PostScript
% \setpostscriptwidth{40mm}
% \placeslidepostscript{test.eps}{ A Slide PostScript }
% \placeslidepostscript{test.eps}{ A Slide PostScript }
%================================================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%================================================================
% redefine \tenrm
% \tenrm is used in gnuplots, but is not defined
% \it appears better
\newcommand{\tenrm}{\it}%
%================================================================
%================================================================
\newlength{\@drawingscale}% % relative scaling on LaTeX-CAD drawings
\newlength{\@dfltdrawingscale}% % default for this
% *** change here - defaults for one/two columns 17/5/96
\if@twocolumn%
\setlength{\@dfltdrawingscale}{0.5mm}% % default to 0.5mm
\else%
\setlength{\@dfltdrawingscale}{1.0mm}% % default to 1.0mm (full size on LaTeX-CAD)
\fi%
\setlength{\@drawingscale}{\@dfltdrawingscale}%
% set the PostScript figure width back to the default
\def\dfltdrawingscale{\@drawingscale=\@dfltdrawingscale}%
%================================================================
%================================================================
% command to change scale
% use: \drawingscale{0.5mm}
\def\drawingscale#1{\@drawingscale=#1}%
%================================================================
%================================================================
\newlength{\@pswidth}% % width of PostScript figure
\newlength{\@dfltpswidth}% % default for this
% *** change here - defaults for one/two columns 17/5/96
\if@twocolumn%
\setlength{\@dfltpswidth}{80mm}% % default to 80mm for A4 paper
\else%
\setlength{\@dfltpswidth}{160mm}% % default to 160mm for A4 paper
\fi%
\setlength{\@pswidth}{\@dfltpswidth}%
%================================================================
%================================================================
% command to size a PostScript figure's width
% use: \setpostscriptwidth{80mm}
\def\setpostscriptwidth#1{\@pswidth=#1}%
% set the PostScript figure width back to the default
\def\dfltpostscriptwidth{\@pswidth=\@dfltpswidth}%
%================================================================
%================================================================
% Place a LaTeXCAD drawing in a source file
% \placedrawing*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placedrawing{test.lp}{A Test Picture}{fig:testa} % normal usage
% \drawingscale{0.4mm} % for next drawing only!
% \placedrawing[p]{test.lp}{thecaption}{fig:testb} % on a page of floats
% \placedrawing*{test.lp} % no `Figure' label
% \placedrawing*[p]{test.lp} % as above, but place on a page of floats
% `*' as first arg - no `label' follows later
\def\placedrawing{\@ifstar{\@dwgnl}{\@dwgl}}%
% with label
% see if optional [placement] argument present
\def\@dwgl{ \@ifnextchar[{\@ddwgl}{\@ddwgl[tbp]} }%
% no label macro - default selection
\def\@dwgnl{ \@ifnextchar[{\@ddwgnl}{\@ddwgnl[tbp]} }%
% the final macros
\def\@ddwgl[#1]#2#3#4% % with label
{%
% WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
\setlength{\unitlength}{\@drawingscale}%
\begin{figure}[#1]%
\begin{center} \input #2 \end{center}%
\caption{#3}\label{#4}% % NOTE! \caption MUST come before \label!
\end{figure}%
%%%%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}% % back to default
}%
\def\@ddwgnl[#1]#2% % no label
{%
% NO LABEL,placement=#1,file=#2
\setlength{\unitlength}{\@drawingscale}%
\begin{figure}[#1]%
\begin{center} \input #2 \end{center}%
\end{figure}%
%%%%%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}% % back to default
}%
%================================================================
%================================================================
% Place a GnuPlot graph (with eepic term) in a source file
% \placegraph*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placegraph{test.gp}{A Test Graph}{fig:testa} % normal usage
% \placegraph[p]{test.gp}{thecaption}{fig:testb} % on a page of floats
% \placegraph*{test.gp} % no `Figure' label
% \placegraph*[p]{test.gp} % as above, but place on a page of floats
% `*' as first arg - no `label' follows later
\def\placegraph{\@ifstar{\@grnl}{\@grl}}%
% with label
% see if optional [placement] argument present
\def\@grl{ \@ifnextchar[{\@dgrl}{\@dgrl[tbp]} }%
% no label macro - default selection
\def\@grnl{ \@ifnextchar[{\@dgrnl}{\@dgrnl[tbp]} }%
% the final macros
\def\@dgrl[#1]#2#3#4% % with label
{%
% WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
\begin{figure}[#1]%
\begin{center} \input #2 \end{center}%
\caption{#3} \label{#4}%
\end{figure}%
%%%%%%%%%%\setlength{\@drawingscale}{1.0mm}% % back to default
}%
\def\@dgrnl[#1]#2% % no label
{%
% NO LABEL,placement=#1,file=#2
\begin{figure}[#1]%
\begin{center} \input #2 \end{center}%
\end{figure}%
%%%%%%%%%%\setlength{\@drawingscale}{1.0mm}% % back to default
}%
%================================================================
%================================================================
% Place a PostScript figure in a source file
% \placepostscript*[placement]{ filename }{ caption string }{ crossref-label }
% `*' - the last two arguments are missing (ie no `Figure' caption & label )
% [placement] is optional (default is tbp, see Lamport p 176)
%
% Examples:-
% \placepostscript{test.eps}{A Test Picture}{fig:testa} % normal usage
% \setpostscriptwidth{80mm} % for next drawing only!
% \placepostscript[p]{test.eps}{thecaption}{fig:testb} % on a page of floats
% \placepostscript*{test.eps} % no `Figure' label
% \placepostscript*[p]{test.eps} % as above, but place on a page of floats
% `*' as first arg - no `label' follows later
\def\placepostscript{\@ifstar{\@psnl}{\@psl}}%
% with label
% see if optional [placement] argument present
\def\@psl{ \@ifnextchar[{\@dpsl}{\@dpsl[tbp]} }%
% no label macro - default selection
\def\@psnl{ \@ifnextchar[{\@dpsnl}{\@dpsnl[tbp]} }%
% the final macros
% See Antoni Diller, "LaTeX Line by Line", 1993
\def\@dpsl[#1]#2#3#4% % with label
{%
% WITH LABEL,placement=#1,file=#2,caption=#3,label=#4
\begin{figure}[#1]%
\begin{center}%
\leavevmode%
\hbox{ \epsfxsize=\@pswidth \epsffile{#2} }%
\end{center}%
\caption{#3} \label{#4}%
\end{figure}%
%%%%\setlength{\@pswidth}{\@dfltpswidth}% % back to default
}%
\def\@dpsnl[#1]#2% % no label
{%
% NO LABEL,placement=#1,file=#2
\begin{figure}[#1]%
\begin{center}%
\leavevmode%
\hbox{ \epsfxsize=\@pswidth \epsffile{#2} }%
\end{center}%
\end{figure}%
%%%%%%%\setlength{\@pswidth}{\@dfltpswidth}% % back to default
}%
%================================================================
%================================================================
% Place a LaTeX-CAD drawing on a slide
% \placeslidedrawing{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \drawingscale{0.4mm}
% \placeslidedrawing{test.lp}{ A Slide Drawing }
\def\placeslidedrawing#1#2%
{%
\setlength{\unitlength}{\@drawingscale}%
\begin{center} \mbox{#2} \end{center}%
\vspace{-5mm}%
\begin{center} \input #1 \end{center}%
%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}% % back to default
}%
%================================================================
%================================================================
% Place a GnuPlot graph on a slide
% Use: \placeslidegraph{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \placeslidegraph{test.gp}{ A Slide Graph }
\def\placeslidegraph#1#2%
{%
\begin{center} \mbox{#2} \end{center}%
\vspace{-10mm}%
\begin{center} \input #1 \end{center}%
%%%%%%%\setlength{\@drawingscale}{\@dfltdrawingscale}% % back to default
}%
%================================================================
%================================================================
% Place a PostScript graph on a slide
% Use: \placeslidepostscript{ filename }{ title }
% Note that the title appears above the picture.
% Example:
% \placeslidepostscript{test.eps}{ A Slide PostScript }
\def\placeslidepostscript#1#2%
{%
\begin{center} \mbox{#2} \end{center}%
\vspace{-10mm}%
\begin{center}%
\leavevmode%
\hbox{ \hspace{-15mm} \epsfxsize=\@pswidth \epsffile{#1} }%
\end{center}%
%%%%%%%%%\setlength{\@pswidth}{\@dfltpswidth}% % back to default
}%
%================================================================
%================================================================
% macros for LaTeX-CAD program
\newcommand{\drawcenteredtext}[3]{\put(#1,#2){\makebox(0,0){#3}}}%
\newcommand{\drawlefttext}[3]{\put(#1,#2){\makebox(0,0)[l]{#3}}}%
\newcommand{\drawrighttext}[3]{\put(#1,#2){\makebox(0,0)[r]{#3}}}%
\newcommand{\drawframedtext}[3]{\put(#1,#2){\makebox(0,0)[c]{\framebox{#3}}}}%
\newcommand{\drawuptext}[3]{\put(#1,#2){\makebox(0,0){\rotate[l]{#3}}}}%
\newcommand{\drawdowntext}[3]{\put(#1,#2){\makebox(0,0){\rotate[r]{#3}}}}%
\newcommand{\drawstackedtext}[3]{\put(#1,#2){\makebox(0,0){\shortstack{#3}}}}%
\newcommand{\drawframebox}[5]{%
\put(#1,#2){\makebox(0,0){\framebox(#3,#4)[cc]{#5}}}}%
\newcommand{\drawdashbox}[5]{%
\put(#1,#2){\makebox(0,0){\dashbox{1}(#3,#4)[cc]{#5}}}}%
\newcommand{\drawoval}[5]{%
\put(#1,#2){\oval(#3,#4) \makebox(0,0)[cc]{#5}}}%
\newcommand{\drawcircle}[4]{%
\put(#1,#2){\circle{#3}} \put(#1,#2){\makebox(0,0)[cc]{#4}}}%
\newcommand{\drawshadedcircle}[5]{%
\special{sh #5}\put(#1,#2){\circle{#3}} \put(#1,#2){\makebox(0,0)[cc]{#4}}}%
\newcommand{\drawellipse}[5]{%
\put(#1,#2){\ellipse{#3}{#4} \makebox(0,0)[cc]{#5}}}%
\newcommand{\drawpath}[4]{\path(#1,#2)(#3,#4)}%
\newcommand{\drawdotline}[4]{\dottedline[.]{1}(#1,#2)(#3,#4)}%
\newcommand{\drawdashline}[4]{\dashline{1}(#1,#2)(#3,#4)}%
\newcommand{\drawvector}[5]{\put(#1,#2){\vector(#4,#5){#3}}}%
\newcommand{\drawshadowbox}[3]{\put(#1,#2){\makebox(0,0){\shadowbox{#3}}}}%
\newcommand{\drawdoublebox}[3]{\put(#1,#2){\makebox(0,0){\doublebox{#3}}}}%
\newcommand{\drawovalbox}[3]{\put(#1,#2){\makebox(0,0){\ovalbox{#3}}}}%
\newcommand{\drawOvalbox}[3]{\put(#1,#2){\makebox(0,0){\Ovalbox{#3}}}}%
\newcommand{\drawdot}[2]{\put(#1,#2){\circle*{0.5}}}%
\newcommand{\drawthickdot}[2]{\put(#1,#2){\circle*{1}}}%
\newcommand{\drawhollowdot}[2]{\put(#1,#2){\circle{1}}}%
\newcommand{\drawleftbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\left\{ \rule[0mm]{0mm}{#3mm} \right.$}}%
\newcommand{\drawrightbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\left\} \rule[0mm]{0mm}{#3mm} \right.$}}%
\newcommand{\drawoverbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\overbrace{\rule[0mm]{#3mm}{0mm}}$}}%
\newcommand{\drawunderbrace}[3]%
{\drawcenteredtext{#1}{#2}{$\underbrace{\rule[0mm]{#3mm}{0mm}}$}}%
\newcommand{\drawarc}[5]%
{\put(#1,#2){\arc{#3}{#4}{#5}}}%
\newcommand{\drawshadebox}[8]%
{%
% modified 17/7/96 - comment at end of lines
\makebox(0,0)[cc]{\special{sh #8}\path(#1,#4)(#3,#4)(#3,#6)(#1,#6)(#1,#4)}%
\put(#2,#5){\makebox(0,0){\makebox(0,0)[cc]{#7}}}%
}
\newcommand{\drawpostscript}[5]%
{%
\put(#1,#2){\makebox(0,0)[cc]{\epsfxsize=#3mm\epsfysize=#4mm \epsffile{#5}}}%
}%
% \drawshadowframebox{x}{y}{w}{h}{text}
% example:
% \drawshadowframebox{80}{40}{100}{40}{this is a shadowframebox}
%
\newcommand{\drawshadowframebox}[5]%
{%
\put(#1,#2){\makebox(0,0){\shadowbox{\rule{0mm}{#4mm}\rule{#3mm}{0mm}}}}%
\put(#1,#2){\makebox(0,0){#5}}%
}%
%
% End of LaTeX-CAD macros
%================================================================
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% picture macros from various sources
% for some reason, the order of these \input's is
% crucial (generates missing \begin{document} errors)
\input rotate.sty
\input fancybox.sty
\input epic.sty
\input eepic.sty
\input epsf.sty
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%