diff options
Diffstat (limited to 'macros/latex/contrib/gnuplottex/gnuplottex.dtx')
-rw-r--r-- | macros/latex/contrib/gnuplottex/gnuplottex.dtx | 904 |
1 files changed, 904 insertions, 0 deletions
diff --git a/macros/latex/contrib/gnuplottex/gnuplottex.dtx b/macros/latex/contrib/gnuplottex/gnuplottex.dtx new file mode 100644 index 0000000000..58286bc6fc --- /dev/null +++ b/macros/latex/contrib/gnuplottex/gnuplottex.dtx @@ -0,0 +1,904 @@ +% \iffalse meta-comment +% +% Copyright (c) 2006-2015, Lars Kotthoff <lars@larsko.org> and contributors +% +% Large portions copied from pdftex, +% Copyright (c) 2001-3, Radhakrishnan CV <cvr@river-valley.com> +% Rajagopal CV <cvr3@river-valley.com> +% 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 +% <chambert@math.polytechnique.fr> +% 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{gnuplottex.dtx} +%</driver> +%<package> \NeedsTeXFormat{LaTeX2e}[1999/12/01] +%<package> \ProvidesPackage{gnuplottex} +%<*package> + [2016/08/21 v0.9.2 gnuplot graphs in LaTeX] +\RequirePackage{graphicx,moreverb,keyval,ifthen,catchfile} +%</package> +% +%<*driver> +\documentclass{ltxdoc} +% \iffalse +%<*example> +\usepackage{xcolor,epstopdf,siunitx,eepic,epic,eepicemu,gnuplot-lua-tikz} +% \fi +% \iffalse +%</example> +% \fi +\usepackage[siunitx]{gnuplottex} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\begin{document} + \DocInput{gnuplottex.dtx} + \PrintChanges + \PrintIndex +\end{document} +%</driver> +% \fi +% +% \CheckSum{457} +% +% \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}{2006/04/02}{Initial version.} +% \changes{v0.2}{2006/10/28}{Changed gnuplot output to LaTeX, simplified code.} +% \changes{v0.3}{2007/08/21}{Improved MikTeX compatibility.} +% \changes{v0.4}{2007/09/28}{Added feature to specify gnuplot terminal.} +% \changes{v0.4.1}{2007/10/06}{Improved gnuplot terminal handling.} +% \changes{v0.4.2}{2007/10/13}{Added terminaloptions option.} +% \changes{v0.4.3}{2011/04/16}{Fixed terminaloptions example (Philip Vetter).} +% \changes{v0.4.4}{2011/09/11}{Fixed "Undefined control sequence" error (sdaau).} +% \changes{v0.4.5}{2012/10/02}{Add support for cairolatex terminal (Mika Pfl\"uger).} +% \changes{v0.4.6}{2013/04/14}{Fix bug with temporary file creation in LuaTeX (Henri Menke).} +% \changes{v0.5}{2013/06/03}{Provide command to include gnuplot code in file verbatim (Michel Vo\ss{}kuhle).} +% \changes{v0.6}{2013/06/28}{Support for \texttt{siunitx} package and tikz terminal (Udo H\"ofel).} +% \changes{v0.7}{2013/07/23}{Add cleanup and subfolder option (Udo H\"ofel).} +% \changes{v0.7.1}{2013/09/08}{Fix bug with subfolder option with MikTeX (Thomas Schmid).} +% \changes{v0.7.2}{2013/11/16}{Allow to specify path to gnuplot (Manuel Solano).} +% \changes{v0.8}{2013/11/24}{Extended Documentation.} +% \changes{v0.8.1}{2013/12/29}{Extended Documentation.} +% \changes{v0.9}{2015/12/08}{Show any errors during conversion on Unix (Enrico Gregorio, suggested by Udo H\"ofel).} +% \changes{v0.9.1}{2015/12/13}{Fix bug in error gathering introduced in 0.9.} +% \changes{v0.9.2}{2016/08/21}{Misc bugfixes (thanks fostermaier, Enrico Gregorio, Jan-Benedict Glaw).} +% +% \GetFileInfo{gnuplottex.dtx} +% +% \DoNotIndex{\the,\year,\month,\day,\time} +% +% \title{The \textsf{gnuplottex} package\thanks{This document +% corresponds to \textsf{gnuplottex}~\fileversion, dated \filedate.}} +% \author{Lars Kotthoff\hspace{0.05em}\thanks{\texttt{lars@larsko.org}}, Udo H\"ofel\thanks{\texttt{udo.hoefel@ipp.mpg.de}} and more contributors } +% +% \maketitle +% +% \section{Introduction} +% +% This package allows you to include gnuplot graphs in your \LaTeX{} documents. +% +% The gnuplot code is extracted from the document and written to +% \texttt{.gnuplot} files. Then, if shell escape is used, the graph files are +% automatically processed to graphics or \LaTeX{} code files which will then be +% included in the document. +% If shell escape isn't used, the user will have to manually convert +% the files by running gnuplot on the extracted \texttt{.gnuplot} 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}. +% +% The package also allows you to include gnuplot code in a file verbatim, +% generating and including the plot automatically. +% +% If you find a bug, please open an issue at +% \url{https://github.com/larskotthoff/gnuplottex/issues}. +% +% \section{Requirements} +% +% To use gnuplottex, you'll need the \texttt{graphicx}, \texttt{latexsym}, +% \texttt{keyval}, \texttt{ifthen}, and \texttt{moreverb} packages and, of +% course, gnuplot. +%If you want to use tikz-terminal you also have to use the \texttt{gnuplot-lua-tikz}-package from gnuplot. +% If you want to use the \texttt{eepic}-terminal, you'll need the \texttt{eepic}-, the \texttt{epic}- and (if you're not using dvips or dvipdfm) the \texttt{eepicemu}-package. +% +% \section{Usage} +% +% To load the package, simply write \verb=\usepackage{gnuplottex}= 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 gnuplot source files. This is the default. Normally, you don't +% need to specify this option. +% \item[\oarg{noshell}] Don't use shell escape, graphs must be generated +% manually. +% \item[\oarg{miktex}] We're using mikTeX. +% \item[\oarg{siunitx}] Use \texttt{siunitx} to typeset numbers in the +% graphs. You need to load the \texttt{siunitx} package before +% \texttt{gnuplottex} for this to work. If the gnuplot terminal does not +% support \TeX, a warning will be given and the functionality not used. +% \item[\oarg{subfolder}] Put the generated graphs in a "gnuplottex" +% subfolder, which will be created automatically. +% \item[\oarg{cleanup}] Delete the \texttt{.gnuplot} files after conversion. +% \end{description} +% +% In addition, you can set \verb=\gnuplotexe= to the path to the gnuplot +% executable. Normally, you don't need to do this; use this option only if +% \LaTeX{} doesn't find gnuplot. +% +% The following environment can be used to include graphs: +% +% \DescribeEnv{gnuplot} +% Within this environment, you can specify arbitrary gnuplot code, for example\\ +% \texttt{plot sin(x)}.\\ +% The code necessary to write the plot to a file will be inserted by this +% package. It adds 'set terminal \meta{terminal}' and the name of the output file. +% The terminal can be specified by the user and defaults to \texttt{latex}. It may +% be set to anything supported by gnuplot. If set to a terminal which produces +% \TeX{} output, such as latex, tex, epslatex, or pstricks, the file processed +% by gnuplot will be included with the \verb=\include= command, else the +% \verb=\includegraphics= command is used. The file extension of the +% intermediate file is in some cases different from the terminal name, this is +% taken care of for most common terminals in the package code. If graphics +% inclusion fails for a specific terminal, the intermediate file extension may +% be the cause. +% +% The terminal name can be specified as +% a value to the key \texttt{terminal} as an argument to the environment,\\ +% \verb=\begin{gnuplot}=[terminal=\meta{terminal}]\\ +% \ldots\\ +% \verb=\end{gnuplot}= +% +% The graph can be scaled by providing an argument to the \texttt{scale} key, +% similar to the specification of the terminal name. It defaults to 1, i.e.\ no +% scaling will be done. Additional options to the terminal can be given as +% argument to the \texttt{terminaloptions} key, e.g.\\ +% \verb=\begin{gnuplot}=[terminal=pdf,terminaloptions={font ",10" linewidth 3}]\\ +% \ldots\\ +% \verb=\end{gnuplot}= +% +% \DescribeMacro{\gnuplotloadfile} +% In addition to the environment, you can use the command +% \verb=\gnuplotloadfile= to directly include gnuplot source code. It accepts +% the same options as the environment, e.g.\\ +% \verb+\gnuplotloadfile[terminal=pdf]{example.gnuplot}+ +% +%\section{Examples} +% Here are short examples of each possible terminal. +% +% \DescribeMacro{latex} +% This is a terminal that offers only basic support, as you won't be able to (easily) use colours. For an example see figure~\ref{pic:latex}. +% +% An advantage of this terminal is that it only relies on the picture-environment (which should be supported widely). +% Furthermore you can use the \texttt{siunitx}-option to get correct axis labeling and you can use \LaTeX{} commands. +% +% On the other hand, if you have multiple things to plot, it'll be hard to distinguish them, as you can't use colours (and the dash patterns are hard to distinguish). +% As this is something which should be avoided, especially for scientific work, if possible, you should try another terminal. +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=latex, terminaloptions=rotate] + set key box top left + set key width 4 + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 1 t '$\sin(x)$',\ + cos(x) w l lc 2 t '$\cos(x)$',\ + tan(x) w l lc 3 t '$\tan(x)$',\ + tanh(x) w l lc 4 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{latex}-terminal.}% + \label{pic:latex}% +\end{figure}% +% \iffalse +%</example> +% \fi +%The source code for figure~\ref{pic:latex} is:\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=latex, terminaloptions=rotate]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width 4+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 1 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 2 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 3 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 4 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the latex-terminal.}%+\\ +%\verb+ \label{pic:latex}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{epslatex} +% This terminal produces high-quality output, you also can use the \texttt{siunitx}-option for axis labeling and the usual \LaTeX{} commands. +% +% There are rare examples where one sees flaws, like two lines not completely adhering (see e.g. some parts of the red line in figure~\ref{pic:epslatex}). +% You have to use the \texttt{epstopdf}-package to use this terminal with pdf\TeX. +% +% If you're using pdf\TeX{} this or the \texttt{cairolatex}-terminal should be the terminals you use. +% Your pdf viewer can slow down dramatically, if you use high resolution 3d plots though, but there are seldom real problems. +% For an example see figure~\ref{pic:epslatex}. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed] + set key box top left + set key width 2 + set key opaque + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\ + cos(x) w l lc 7 lw 3 t '$\cos(x)$',\ + tan(x) w l lc 3 lw 3 t '$\tan(x)$',\ + tanh(x) w l lc 4 lw 3 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{epslatex}-terminal.}% + \label{pic:epslatex}% +\end{figure}% +% \iffalse +%</example> +% \fi +% +%Its code is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width 2+\\ +%\verb+ set key opaque+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 2 lw 3 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 3 lw 3 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 4 lw 3 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the epslatex-terminal.}%+\\ +%\verb+ \label{pic:epslatex}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{jpeg} +% This is a terminal that offers (compared with other terminals) poor raster graphics output. +% If possible switch to another terminal (preferably to the \texttt{cairolatex}-, the \texttt{epslatex}- or the \texttt{tikz}-terminal) +% For an example see figure~\ref{pic:jpeg}. +% +% There are quite some disadvantages, as you cannot use \LaTeX{} commands, it is hard to get the right font and the right font size, the \texttt{siunitx} option is useless, no vector graphics and there seems to be no support for dashed lines. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=jpeg, terminaloptions=crop] + set key box top left + set key width -2 + set key opaque + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set size 0.7,0.7 + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 1 lw 2 t '$\sin(x)$',\ + cos(x) w l lc 7 lw 2 t '$\cos(x)$',\ + tan(x) w l lc 3 lw 2 t '$\tan(x)$',\ + tanh(x) w l ls 8 lc 4 lw 2 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{jpeg}-terminal.}% + \label{pic:jpeg}% +\end{figure}% +% \iffalse +%</example> +% \fi +% +%Its code is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=jpeg, terminaloptions=crop]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width -2+\\ +%\verb+ set key opaque+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set size 0.7,0.7+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 2 lw 3 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 3 lw 3 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 4 lw 3 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the jpeg-terminal.}%+\\ +%\verb+ \label{pic:jpeg}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{cairolatex} +% This is a terminal that offers high-quality output. +% Unlike the \texttt{epslatex}-terminal it will generate \emph{directly} pdf output. +% It allows the use of the \texttt{siunitx} option as well as \LaTeX{} commands. +% If you're using pdf\TeX{} this or the \texttt{epslatex}-terminal should be the terminals you use. +% \texttt{cairolatex} has the advantage of not needing the \texttt{epstopdf}-package. +% Your pdf viewer can slow down dramatically, if you use high resolution 3d plots though, but there are seldom real problems. +% For an example see figure~\ref{pic:cairolatex}. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=cairolatex, terminaloptions=color dashed] + set key box top left + set key width 4 + set key height 0.25 + set key spacing 1.2 + set key opaque + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\ + cos(x) w l lc 7 lw 3 t '$\cos(x)$',\ + tan(x) w l lc 3 lw 3 t '$\tan(x)$',\ + tanh(x) w l lc 4 lw 3 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{cairolatex}-terminal.}% + \label{pic:cairolatex}% +\end{figure}% +% \iffalse +%</example> +% \fi +% +%Its code is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=epslatex, terminaloptions=color dashed]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width 4+\\ +%\verb+ set key height 0.25+\\ +%\verb+ set key spacing 1.2+\\ +%\verb+ set key opaque+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 7 lw 3 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 3 lw 3 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 4 lw 3 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the cairolatex-terminal.}%+\\ +%\verb+ \label{pic:cairolatex}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{eepic} +% This is a terminal that offers better output than the \texttt{latex}-terminal, but it is quite worse compared to \texttt{epslatex/cairolatex/tikz}-terminal. +% You can use the \texttt{siunitx} option as well as \LaTeX{} commands. +% +% It seems one can use either coloured or dashed lines, not both combined. +% The lines are also pretty ugly and there is no \verb+set key opaque+-option in \texttt{gnuplot} available. +% +% For an example see figure~\ref{pic:eepic}. +% Avoid if possible. +% There are better terminals available. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=eepic, terminaloptions = color rotate] + set key box top left + set key width -3 + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\ + cos(x) w l lc 2 lw 3 t '$\cos(x)$',\ + tan(x) w l lc 3 lw 3 t '$\tan(x)$',\ + tanh(x) w l lc 4 lw 3 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{eepic}-terminal.}% + \label{pic:eepic}% +\end{figure}% +% \iffalse +%</example> +% \fi +%Its code is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=eepic, terminaloptions = color rotate]+\\ +%\verb+ set key box top left+\\ +%\verb+ #set key width -3+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 1 lw 3 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 2 lw 3 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 3 lw 3 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 4 lw 3 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the cairolatex-terminal.}%+\\ +%\verb+ \label{pic:cairolatex}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{emtex} +% Similar to the \texttt{latex}-terminal (but with emtex specials), except it seems not to draw any borders (at least for pdf\TeX). +% Only relies on the picture environment, so should be widely supported, the \texttt{siunitx} option is available and you can use \LaTeX{} commands. +% +% If you have multiple things to plot, it'll be hard to distinguish them, as you can't use colours (and the dash patterns are hard to distinguish), this is a no-no for scientific work, so avoid if possible. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=emtex, terminaloptions=rotate] + set key box top left + set key width 4 + set sample 1000 + set xr [-5:5] + set yr [-1:1] + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc 2 t '$\sin(x)$',\ + cos(x) w l lc 4 t '$\cos(x)$',\ + tan(x) w l lc 6 t '$\tan(x)$',\ + tanh(x) w l lc 8 t '$\tanh(x)$' + \end{gnuplot} + \caption{This is a simple example using the \texttt{emtex}-terminal.}% + \label{pic:emtex}% +\end{figure}% +% \iffalse +%</example> +% \fi +%The source code for figure~\ref{pic:emtex} is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=emtex, terminaloptions=rotate]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width 4+\\ +%\verb+ set sample 1000+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb+ plot sin(x) w l lc 2 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 4 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 6 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 8 t '$\tanh(x)$'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the emtex-terminal.}%+\\ +%\verb+ \label{pic:emtex}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{tikz} +% Probably offers the best output terminal at the moment, even though the difference to \texttt{cairolatex} and \texttt{epslatex} isn't that big. +% The \texttt{siunitx} option is available, \LaTeX{} commands can be used and you can easily export constants from within gnuplot (see the example code for an example on how to export them). +% +%On the other hand requires this terminal the \texttt{gnuplot-lua-tikz}-package and you cannot use many plots if you use pdf\TeX, as \TeX s memory will be exceeded pretty fast. +% If you use Lua\TeX, this is no problem. +% +% \iffalse +%<*example> +% \fi +\begin{figure}% + \centering% + \begin{gnuplot}[terminal=tikz, terminaloptions={color dashed providevars a,c}] + set key box top left + set key width -0.9 + set key height 0.25 + set key spacing 1.25 + set size 1,0.9 + set sample 1000 + set grid xtics lt 0 ls 0 + set grid ytics lt 0 ls 0 + set xr [-5:5] + set yr [-1:1] + set key opaque + f(x) = a*x+c + fit f(x) "SomeValuesForGnuplot.txt" u ($1*5/7):($2/20) via a,c + set xlabel '$x$-label' + set ylabel '$y$-label' + plot sin(x) w l lc -1 t '$\sin(x)$',\ + cos(x) w l lc 1 t '$\cos(x)$',\ + tan(x) w l lc 7 t '$\tan(x)$',\ + tanh(x) w l lc 3 t '$\tanh(x)$',\ + f(x) t 'fitted function' lc 4,\ + "SomeValuesForGnuplot.txt" u ($1*5/7):($2/20) w points lc 5 t 'example values' + \end{gnuplot} + \caption{This is a simple example using the \texttt{tikz}-terminal. The slope of the fitted function ($a*x+c$) is $a=\num{\gpgetvar{a}}$, while its offset is $c=\num{\gpgetvar{c}}$.}% + \label{pic:tikz}% +\end{figure}% +% \iffalse +%</example> +% \fi +% +% The source code for figure~\ref{pic:tikz} is:\\ +%~\\ +%\verb+\begin{figure}%+\\ +%\verb+ \centering%+\\ +%\verb+ \begin{gnuplot}[terminal=tikz, terminaloptions={color dashed providevars a,c}]+\\ +%\verb+ set key box top left+\\ +%\verb+ set key width -0.9+\\ +%\verb+ set key height 0.25+\\ +%\verb+ set key spacing 1.25+\\ +%\verb+ set sample 1000+\\ +%\verb+ set grid xtics lt 0 ls 0+\\ +%\verb+ set grid ytics lt 0 ls 0+\\ +%\verb+ set xr [-5:5]+\\ +%\verb+ set yr [-1:1]+\\ +%\verb+ set key opaque+\\ +%\verb+ set xlabel '$x$-label'+\\ +%\verb+ set ylabel '$y$-label'+\\ +%\verb- f(x) = a*x+c-\\ +%\verb+ fit f(x) "SomeValuesForGnuplot.txt" u ($1*5/7):($2/20) via a,c+\\ +%\verb+ plot sin(x) w l lc 2 t '$\sin(x)$',\+\\ +%\verb+ cos(x) w l lc 4 t '$\cos(x)$',\+\\ +%\verb+ tan(x) w l lc 6 t '$\tan(x)$',\+\\ +%\verb+ tanh(x) w l lc 3 t '$\tanh(x)$',\+\\ +%\verb+ f(x) t 'fitted function' lc 4,\+\\ +%\verb+ "SomeValuesForGnuplot.txt" u ($1*5/7):($2/20) w points lc 5\+\\ +%\verb+ t 'example values'+\\ +%\verb+ \end{gnuplot}+\\ +%\verb+ \caption{This is a simple example using the \texttt{tikz}-terminal.+\\ +%\verb- The slope of the fitted function ($a*x+c$) is $a=\num{\gpgetvar{a}}$,-\\ +%\verb- while its offset is $c=\num{\gpgetvar{c}}$.}%-\\ +%\verb+ \label{pic:tikz}%+\\ +%\verb+\end{figure}%+\\ +% As compiling all pictures everytime can take quite a long time, the \texttt{tikz}-package offers the possibility to externalize the pictures, resulting in a great speedup. +% An example for Lua\TeX{} is shown below, pictures are not generated if they are up-to-date. +% In the preamble write:\\ +% \verb+\usepackage{tikz} +\\ +% \verb+\usetikzlibrary{external}+\\ +% \verb+\tikzexternalize[prefix=gnuplottex/] %-- Use the gnuplottex-subfolder. Deactivate+\\ +%\verb+ %-- the subfolderoption of gnuplottex to use!+\\ +% \verb+\tikzset{external/system call={lualatex -shell-escape -halt-on-error+\\ +% \verb+-interaction=batchmode -jobname "\image" "\texsource"}}+\\ +% \verb+\tikzexternalize+\\ +% In the document, write e.\,g.:\\ +% \verb+\begin{figure}%+\\ +% \verb+ \centering%+\\ +% \verb+ \tikzsetnextfilename{ThisIsASinus}+\\ +% \verb+ \begin{tikzpicture}[gnuplot]+\\ +% \verb+ \begin{gnuplot}[terminal=tikz, terminaloptions=color dashed nopicenvironment]+\\ +%\verb+ set grid xtics mxtics lt 0 ls 0+\\ +%\verb+ set grid ytics mytics lt 0 ls 0+\\ +%\verb+ set key box top left+\\ +%\verb+ plot sin(x) w l t 'Sinus'+\\ +% \verb+ \end{gnuplot}+\\ +% \verb+ \end{tikzpicture}+\\ +% \verb+ \caption{Captiontext.}%+\\ +% \verb+ \label{pic:ThisIsASinus}%+\\ +%\verb+\end{figure}%+\\ +% +% \DescribeMacro{pstex,pslatex,pstricks} +% The \texttt{pstex}- and \texttt{pslatex}-terminal produces unusable output with pdf\TeX. +% I wasn't able to get any output using the \texttt{pstricks}-terminal with pdf\TeX{} (if you manage to get reasonable output via one of these terminals, please send me an email). +% +% \section{Acknowledgements} +% +% In addition to the people mentioned in the changelog, I would like to thank +% Roy Ratcliffe for the suggestion and basic code for the gnuplot terminal +% specification and handling. Additional thanks to Michel Vo\ss{}uhle for the +% implementation of \verb=\gnuplotloadfile=. I would also like to thank all the +% people who sent me bug reports, feature requests and patches -- Philip Vetter, +% sdaau, Mika Pfl\"uger, Henri Menke, Michel Vo\ss{}kuhle, Udo H\"ofel, Thomas +% Schmid and Manuel Solano. Gnuplottex wouldn't be what it is today without you. +% +% \StopEventually{} +% +% \section{Implementation} +% +% \subsection{Initialization} +% \begin{macrocode} +\newif\ifShellEscape +\newif\ifmiktex \miktexfalse +\newif\ifusesiunitx +\newif\ifcleanup +\newif\ifusesubfolder + +\newwrite\verbatim@out + +\DeclareOption{shell}{\ShellEscapetrue} +\DeclareOption{noshell}{\ShellEscapefalse} +\DeclareOption{miktex}{\global\miktextrue} +\DeclareOption{siunitx}{\usesiunitxtrue} +\DeclareOption{cleanup}{\cleanuptrue} +\DeclareOption{subfolder}{\usesubfoldertrue} + +\@ifundefined{gnuplotexe}{\def\gnuplotexe{gnuplot}}{} + +\ExecuteOptions{shell} +\ProcessOptions\relax +%% test if shell escape really works +\ifShellEscape + \def\tmpfile{w18-test-\the\year\the\month\the\day\the\time.tex} + \ifmiktex + \immediate\write18{echo t > "\tmpfile"} + \else + \immediate\write18{touch \tmpfile} + \fi + \ifmiktex + \IfFileExists{\tmpfile.}{\ShellEscapetrue}{\ShellEscapefalse} + \immediate\write18{del "\tmpfile"} + \else + \IfFileExists{\tmpfile}{\ShellEscapetrue}{\ShellEscapefalse} + \immediate\write18{rm -f \tmpfile} + \immediate\write18{rm -f "\jobname.gnuploterrors"} + \fi +\fi + +\ifusesubfolder + \ifmiktex + \immediate\write18{mkdir gnuplottex} + \immediate\write18{echo test > "gnuplottex/\tmpfile"} + \else + \immediate\write18{mkdir -p "gnuplottex"} + \immediate\write18{touch "gnuplottex/\tmpfile"} + \fi + \IfFileExists{gnuplottex/\tmpfile}{ + \ifmiktex + \immediate\write18{del "gnuplottex\@backslashchar\tmpfile"} + \else + \immediate\write18{rm -f "gnuplottex/\tmpfile"} + \fi + \def\subfolder{gnuplottex/} + }{ + \PackageWarningNoLine{gnuplottex} + {Creation of subfolder failed.\MessageBreak + You'll need to create the folder yourself} + \def\subfolder{} + } +\else + \def\subfolder{} +\fi + + +\ifShellEscape + \PackageInfo{gnuplottex} + {Automatically converting gnuplot files.} +\else + \PackageWarningNoLine{gnuplottex} + {Shell escape not enabled.\MessageBreak + You'll need to convert the graphs yourself.} +\fi +\newcounter{fignum} +% \end{macrocode} +% +% \subsection{\texttt{.gnuplot} write out} +% \begin{macrocode} +\def\figname{\jobname-gnuplottex-fig\thefignum} + +\def\usesiunitxingnuplot{\immediate\write\verbatim@out{set format '\@backslashchar num{\@percentchar g}'}} + +\def\gnuplotverbatimwrite#1{% + \def\BeforeStream + {\message{Opening gnuplot stream #1}% + \immediate\write\verbatim@out{\string set terminal \gnuplotterminal \gnuplotterminaloptions} + \immediate\write\verbatim@out{\string set output '\subfolder\figname.\gnuplottexextension{\gnuplotterminal}'} + \ifusesiunitx + \ifthenelse{\equal{\extension}{\string tex}}{\usesiunitxingnuplot}{\PackageWarningNoLine{gnuplottex}{Axis numbers not written in \noexpand\num{}. Use a terminal that allows TeX output to enable this feature.}} + \else + \relax + \fi + } + \@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\endgnuplotverbatimwrite{% + \immediate\closeout\verbatim@out + \@esphack + \catcode`\\0 + \catcode`\{1 + \catcode`\}2 + \catcode`\$3 + \catcode`\&4 + \catcode`\^^M5 + \catcode`\#6 + \catcode`\^7 + \catcode`\_8 + \catcode`\ 10 + \catcode`\%14} +% \end{macrocode} +% +% \subsection{Environment definition} +% \begin{macrocode} +\def\gnuplottexextension@latex{\string tex} +\def\gnuplottexextension@epslatex{\string tex} +\def\gnuplottexextension@cairolatex{\string tex} +\def\gnuplottexextension@eepic{\string tex} +\def\gnuplottexextension@pstricks{\string tex} +\def\gnuplottexextension@pslatex{\string tex} +\def\gnuplottexextension@pstex{\string tex} +\def\gnuplottexextension@emtex{\string tex} +\def\gnuplottexextension@jpeg{\string jpg} +\def\gnuplottexextension@tikz{\string tex} +\def\gnuplottexextension@lua{\string tex} +\def\gnuplottexextension#1{\@ifundefined{gnuplottexextension@#1}{#1}{\csname gnuplottexextension@#1\endcsname}} +\define@key{pic}{scale}[1]{\def\gnuplotscale{#1}} +\define@key{pic}{terminal}[latex]{\def\gnuplotterminal{#1}} +\define@key{pic}{terminaloptions}{\def\gnuplotterminaloptions{ #1}} +\newenvironment{gnuplot}[1][]{\stepcounter{fignum}% + \def\gnuplotterminal{latex} + \def\gnuplotterminaloptions{} + \def\gnuplotscale{1} + \setkeys{pic}{#1} + \xdef\gnuplotCutFile{\subfolder\figname.gnuplot} + \gnuplotverbatimwrite{\gnuplotCutFile}} + {\endgnuplotverbatimwrite% + \gnuplotgraphicsprocess% + \gnuplotgraphicsinclude} +% \end{macrocode} +% +% \subsection{\texttt{.gnuplot} file processing} +% \begin{macrocode} +\def\extension{\gnuplottexextension{\gnuplotterminal}} +\long\gdef\gnuplotgraphicsprocess{% + \ifShellEscape + \IfFileExists{\subfolder\figname.gnuplot}{% + \ifmiktex + \immediate\write18{\gnuplotexe\space \subfolder\figname.gnuplot} + \else + \immediate\write18{\gnuplotexe\space \subfolder\figname.gnuplot\space 2>>\jobname.gnuploterrors} + \fi + \IfFileExists{\subfolder\figname.\extension}{% + \PackageInfo{gnuplottex}{\subfolder\figname.gnuplot converted} + \ifcleanup + \ifmiktex + \immediate\write18{del "\subfolder\figname.gnuplot"} + \else + \immediate\write18{rm -f "\subfolder\figname.gnuplot"} + \fi + \fi + } + {\PackageWarningNoLine{gnuplottex} + {Conversion of \subfolder\figname.gnuplot failed}}}{} + \fi} +\long\def\gnuploterrors@eatpar#1#2\@nil{\def\gnuploterrors@{#2}} +\AtEndDocument{% + \ifmiktex + \else + \IfFileExists{\jobname.gnuploterrors}{% + \CatchFileDef\gnuploterrors@{\jobname.gnuploterrors}{\endlinechar=`^^J \catcode`\ =12 }% + \expandafter\gnuploterrors@eatpar\gnuploterrors@\@nil + \ifx\gnuploterrors@\@empty\else + \PackageWarningNoLine{gnuplottex}{Gnuplot execution produced errors:^^J% + \detokenize\expandafter{\gnuploterrors@}}% + \fi + }{}% + \fi +} +% \end{macrocode} +% +% \subsection{Graph inclusion} +% \begin{macrocode} +\long\gdef\gnuplotgraphicsinclude{% + \IfFileExists{\subfolder\figname.\extension}{% + \ifthenelse{\equal{\extension}{\string tex}} + {\scalebox{\gnuplotscale}{\input{\subfolder\figname.\extension}}} + {\includegraphics[scale=\gnuplotscale]{\subfolder\figname.\extension}} + } + {\PackageWarningNoLine{gnuplottex} + {Please convert \subfolder\figname.gnuplot manually}} +} +% \end{macrocode} +% +% \subsection{\texttt{.gnuplot} file processing} +% \begin{macrocode} +\newcommand{\gnuplotloadfilewrite}[2]{% + \immediate\openout \verbatim@out #1% + \message{Opening gnuplot stream #1}% + \immediate\write\verbatim@out{\string set terminal \gnuplotterminal \gnuplotterminaloptions}% + \immediate\write\verbatim@out{\string set output '\subfolder\figname.\gnuplottexextension{\gnuplotterminal}'}% + \ifusesiunitx + \ifthenelse{\equal{\extension}{\string tex}}{\usesiunitxingnuplot}{\PackageWarningNoLine{gnuplottex}{Axis numbers not written in \noexpand\num{}. Use a terminal that allows TeX output to enable this feature.}} + \else + \relax + \fi + \ifusesiunitx + {\escapechar=-1\edef\percentforgnuplot{\string\%} + \escapechar=-1\edef\backslashforgnuplot{\string\\} + \immediate\write\verbatim@out{set format '\backslashforgnuplot num{\percentforgnuplot g}'}} + \else + \relax + \fi + \immediate\write\verbatim@out{\string load '#2'}% + \immediate\closeout\verbatim@out% + } + + \newcommand{\gnuplotloadfile}[2][]{ + \stepcounter{fignum}% + \def\gnuplotterminal{latex} + \def\gnuplotterminaloptions{} + \def\gnuplotscale{1} + \setkeys{pic}{#1} + \xdef\gnuplotCutFile{\subfolder\figname.gnuplot} + \gnuplotloadfilewrite{\gnuplotCutFile}{#2} + \gnuplotgraphicsprocess% + \gnuplotgraphicsinclude + } +% \end{macrocode} +% +% \Finale +\endinput |