% \iffalse meta-comment % % Copyright (c) 2005, Lars Kotthoff % % Large portions copied from pdftex, % Copyright (c) 2001-3, Radhakrishnan CV % Rajagopal CV % http://www.river-valley.com % % River Valley Technologies, Floor III, SJP Buildings, Cotton Hills % Trivandrum, India 695014 % % Tel: +91 471 233 7501 % % Antoine Chambert-Loir % % http://www.math.polytechnique.fr/~chambert % % Ecole polytechnique, Palaiseau Cedex, France % % This program is free software; you can redistribute it and/or % modify it under the terms of the GNU General Public License % as published by the Free Software Foundation; either version 2 % of the License, or (at your option) any later version. % % This program is distributed in the hope that it will be useful, % but WITHOUT ANY WARRANTY; without even the implied warranty of % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % GNU General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program (gpl.txt); if not, write to the Free % Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, % MA 02111-1307, USA. % % \fi % % \iffalse %<*driver> \ProvidesFile{dottex.dtx} % % \NeedsTeXFormat{LaTeX2e}[1999/12/01] % \ProvidesPackage{dottex} %<*package> [2005/08/13 v0.2 dot/neato graphs in LaTeX] \RequirePackage{graphicx,moreverb} % % %<*driver> \documentclass{ltxdoc} \usepackage{dottex} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{dottex.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % \CheckSum{217} % % \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 \~} % % % \changes{v0.1}{2005/08/06}{Initial version} % \changes{v0.2}{2005/08/13}{New way to set graph width, neatopic environment} % % \GetFileInfo{dottex.dtx} % % \DoNotIndex{\the,\year,\month,\day,\time} % % \title{The \textsf{dottex} package\thanks{This document % corresponds to \textsf{dottex}~\fileversion, dated \filedate.}} % \author{Lars Kotthoff\\ \texttt{metalhead@metalhead.ws}} % % \maketitle % % \section{Introduction} % % This package allows you to include dot and neato graphs in your \LaTeX{} documents. % % The dot/neato code is extracted from the document and written to % \texttt{.dot}/\texttt{.neato} % files. Then, if shell escape is used, the graph files are automatically % processed and converted to PostScript files, which will then be included. If % shell escape isn't used, the user will have to manually convert the % files. % % Shell escape is available in the web2c \TeX{} compiler, it allows the execution % of shell code during the compilation of a \TeX{} document. It's disabled by % default, you'll have to edit your configuration files or give the % \texttt{-shell-escape} option to \texttt{latex}. % A check is performed whether shell escape really works, so you might get % warnings that the \texttt{.dot}/\texttt{.neato} files need to be converted manually although % you enabled shell escape. % % \section{Requirements} % % To use dottex, you'll need the \texttt{graphicx} and \texttt{moreverb} % packages, and of course, dot. % % \section{Usage} % % To load the package, simply \verb=\usepackage{dottex}= in your document % preamble. Options that can be passed to the package are % \begin{description} % \item[\oarg{shell}] Use shell escape to automatically generate the graphs % from the dot source files. This is the default. % \item[\oarg{noshell}] Don't use shell escape, graphs must be generated % manually. % \item[\oarg{miktex}] We're using mikTeX. % \end{description} % % The following environments can be used to include graphs: % % \DescribeEnv{dotpic} % Within this environment, you can specify arbitrary dot code, for example\\ % \texttt{a -> b;\\b -> a;}.\\ % The \texttt{digraph} preamble and the surrounding braces are inserted % automatically. % % \DescribeEnv{neatopic} % Within this environment, you can specify arbitrary neato code, for example\\ % \texttt{a -- b;\\b -- a;}.\\ % The \texttt{graph} preamble and the surrounding braces are inserted % automatically. % % The width of the graph in your document can be controlled via the % \verb=\dotwidth= parameter, which is set to \verb=\textwidth= by default. % % \StopEventually{} % % \section{Implementation} % % \subsection{Initialization} % \begin{macrocode} \newif\ifShellEscape \newif\ifmiktex \miktexfalse \DeclareOption{shell}{\ShellEscapetrue} \DeclareOption{noshell}{\ShellEscapefalse} \DeclareOption{miktex}{\global\miktextrue} \ExecuteOptions{shell} \ProcessOptions\relax %% test if shell escape really works \ifShellEscape \def\tmpfile{/tmp/w18-test-\the\year\the\month\the\day\the\time} \ifmiktex% \immediate\write18{rem >"\tmpfile"} \else \immediate\write18{touch \tmpfile} \fi \ifmiktex \IfFileExists{\tmpfile.}{\ShellEscapetrue}{\ShellEscapefalse} \else \IfFileExists{\tmpfile}{\ShellEscapetrue}{\ShellEscapefalse} \fi \fi \ifShellEscape \PackageInfo{dottex} {Automatically converting dot/neato files to ps} \else \PackageWarningNoLine{dottex} {Shell escape not enabled.\MessageBreak You'll need to convert the graphs yourself} \fi \newcounter{fignum} \gdef\dotwidth{\textwidth} % \end{macrocode} % % \subsection{\texttt{.dot}/\texttt{.neato} write out} % \begin{macrocode} \def\figname{\jobname-fig\thefignum} \def\dotverbatimwrite#1{% \def\BeforeStream {\message{Opening Dot stream=\figname.dot}% \immediate\write\verbatim@out{\string digraph\space G\space {/*}*/} } \@bsphack \immediate\openout \verbatim@out #1 \BeforeStream% \let\do\@makeother\dospecials \catcode`\^^M\active \def\verbatim@processline{% \immediate\write\verbatim@out {\the\verbatim@line}}% \verbatim@start} \def\enddotverbatimwrite{% \immediate\write\verbatim@out{/*{*/}} \immediate\closeout\verbatim@out \@esphack} \def\neatoverbatimwrite#1{% \def\BeforeStream {\message{Opening Neato stream=\figname.neato}% \immediate\write\verbatim@out{\string graph\space G\space {/*}*/} } \@bsphack \immediate\openout \verbatim@out #1 \BeforeStream% \let\do\@makeother\dospecials \catcode`\^^M\active \def\verbatim@processline{% \immediate\write\verbatim@out {\the\verbatim@line}}% \verbatim@start} \def\endneatoverbatimwrite{% \immediate\write\verbatim@out{/*{*/}} \immediate\closeout\verbatim@out \@esphack} % \end{macrocode} % % The spurious braces (commented out in the \texttt{.dot}/\texttt{.neato} file) are necessary % because \LaTeX{} gets confused with only one brace. % % % \subsection{Environment definition} % \begin{macrocode} \newenvironment{dotpic}{\stepcounter{fignum}% \xdef\dotCutFile{\figname.dot} \dotverbatimwrite{\dotCutFile}} {\enddotverbatimwrite% \dotgraphicsinclude} \newenvironment{neatopic}{\stepcounter{fignum}% \xdef\neatoCutFile{\figname.neato} \neatoverbatimwrite{\neatoCutFile}} {\endneatoverbatimwrite% \neatographicsinclude} % \end{macrocode} % % \subsection{\texttt{.dot}/\texttt{.neato} file processing} % \begin{macrocode} \long\gdef\dotgraphicsprocess{% \ifShellEscape \IfFileExists{\figname.dot}{% \immediate\write18{dot -Tps -o \figname.ps \figname.dot} \IfFileExists{\figname.ps}{% \PackageInfo{dottex} {\figname.dot converted}} {\PackageWarningNoLine{dottex} {Conversion of \figname.dot failed.}}}{} \fi} \long\gdef\neatographicsprocess{% \ifShellEscape \IfFileExists{\figname.neato}{% \immediate\write18{neato -Tps -o \figname.ps \figname.neato} \IfFileExists{\figname.ps}{% \PackageInfo{dottex} {\figname.neato converted}} {\PackageWarningNoLine{dottex} {Conversion of \figname.neato failed.}}}{} \fi} % \end{macrocode} % % \subsection{Graph inclusion} % \begin{macrocode} \long\gdef\dotgraphicsinclude{\dotgraphicsprocess% \IfFileExists{\figname.ps}{% \includegraphics[width=\dotwidth]{\figname} } {\PackageWarningNoLine{dottex} {Please convert \figname.dot manually}} } \long\gdef\neatographicsinclude{\neatographicsprocess% \IfFileExists{\figname.ps}{% \includegraphics[width=\dotwidth]{\figname} } {\PackageWarningNoLine{dottex} {Please convert \figname.neato manually}} } % \end{macrocode} % % \Finale \endinput