summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/psfragx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:56:30 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:56:30 +0000
commit591c7e4eb6e46ca48d0a57e5348bdc655a0771cb (patch)
tree008bdba56bc388ccdc7a3a39e2a6c2f220ec79dd /Master/texmf-dist/source/latex/psfragx
parent4a2da8792d9f12b4a6192e03329fa9cd80775e25 (diff)
trunk/Master/texmf-dist/source/latex/psfragx
git-svn-id: svn://tug.org/texlive/trunk@469 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/psfragx')
-rw-r--r--Master/texmf-dist/source/latex/psfragx/psfragx.drv42
-rw-r--r--Master/texmf-dist/source/latex/psfragx/psfragx.dtx1669
-rw-r--r--Master/texmf-dist/source/latex/psfragx/psfragx.ins74
3 files changed, 1785 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/psfragx/psfragx.drv b/Master/texmf-dist/source/latex/psfragx/psfragx.drv
new file mode 100644
index 00000000000..bdd30fe3c73
--- /dev/null
+++ b/Master/texmf-dist/source/latex/psfragx/psfragx.drv
@@ -0,0 +1,42 @@
+%%
+%% This is file `psfragx.drv',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% psfragx.dtx (with options: `driver')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2003, 2004 Pascal Kockaert
+%% Pascal.Kockaert ad ulb.ac.be
+%% Note that ''ad´´ is often replaced by the ''@´´ sign.
+%% ----------------------------------------------------------
+%%
+%% This package 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.
+%%
+\ProvidesFile{psfragx.drv}
+\documentclass[a4paper,11pt]{ltxdoc}
+\usepackage[ansinew]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[francais,english]{babel}
+%% Uncomment the following line if you don't want to include a
+%% source-code listing.
+%%\OnlyDescription
+\CodelineIndex
+%%
+%%% Babel french option
+\NoAutoSpaceBeforeFDP
+%%%
+\begin{document}
+ \DocInput{psfragx.dtx}
+\end{document}
+\endinput
+%%
+%% End of file `psfragx.drv'.
diff --git a/Master/texmf-dist/source/latex/psfragx/psfragx.dtx b/Master/texmf-dist/source/latex/psfragx/psfragx.dtx
new file mode 100644
index 00000000000..3a01ae353b8
--- /dev/null
+++ b/Master/texmf-dist/source/latex/psfragx/psfragx.dtx
@@ -0,0 +1,1669 @@
+% \iffalse
+%<*gobble>
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%
+%
+% Run LaTeX on this file and read the generated file readmePFX.txt.
+%
+%
+%
+% Copyright 2003, Pascal Kockaert
+% This file is distributed under the LPPL license.
+% (see http://www.latex-project.org/lppl.txt for details)
+%
+%
+% You can check the integrity of this file by looking at the
+% character table below.
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \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 \~}
+%</gobble>
+%<*license>
+% This package IS NOT psfrag.sty. It is an eXtension to psfrag.sty.
+%
+% This file 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.
+%</license>
+%<*readme>
+\begin{filecontents*}{readmePFX.txt}
+Readme file associated to the psfragx package.
+
+This file describes how to install the package.
+
+All you need is the file psfragx.dtx. If the file psfragx.ins does
+not exist, run LaTeX on the file psfragx.dtx. This should
+generated the file psfragx.ins.
+
+Run LaTeX on the file psfragx.ins. This generates all the files of
+the package. The documentation will be generated if you run LaTeX
+on psfragx.drv.
+
+In order to create the index, you should run makeindex like this.
+> makeindex -s gind psfragx.idx
+> makeindex -s gglo -o psfragx.gls psfragx.glo
+
+Do not forget to re-run LaTeX on psfragx.drv two times.
+
+You can now read the file psfragx.dvi or transform it into
+psfragx.ps or psfragx.pdf.
+
+If you want to modify the default behaviour of psfragx, do not
+edit the code, but create a file psfragx.cfg to this end. This
+file will be input after the package psfragx is loaded.
+
+Finally, if your TeX implementation uses a database to find files,
+you should rebuild this database. fpTeX and teTeX systems use
+> mktexlsr
+
+Happy TeXing.
+
+Pascal Kockaert
+
+\end{filecontents*}
+%</readme>
+%<*gobble>
+% Next lines create file psfragx.ins.
+% Run it through LaTeX in order to install the package.
+\begin{filecontents*}{psfragx.ins}
+%</gobble>
+%<*ins>
+% This file will generate fast loadable files and documentation
+% driver files from the doc files in this package when run through
+% LaTeX or TeX.
+%
+% Copyright (C) 2003,2004 Pascal Kockaert
+% Pascal.Kockaert ad ulb.ac.be
+% Note that ''ad´´ is often replaced by the ligature: ''@´´.
+% ----------------------------------------------------------
+%
+% This package 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.
+%
+% --------------- start of docstrip commands ------------------
+%
+\input docstrip
+
+\keepsilent\askonceonly
+
+\usedir{tex/latex/psfragx}
+
+\preamble
+
+This is a generated file.
+
+
+Copyright (C) 2003, 2004 Pascal Kockaert
+Pascal.Kockaert ad ulb.ac.be
+Note that ''ad´´ is often replaced by the ''@´´ sign.
+----------------------------------------------------------
+
+This package 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.
+
+\endpreamble
+
+\generate{\file{psfragx.drv}{\from{psfragx.dtx}{driver}}}
+\generate{\file{psfragx.sty}{\from{psfragx.dtx}{package,version}}}
+\generate{\file{psfragx.ins}{\from{psfragx.dtx}{ins}}}
+\generate{\file{psfragx.cfg}{\from{psfragx.dtx}{cfg,version}}}
+\generate{\nopreamble\nopostamble%
+ \file{psfragx.m} {\from{psfragx.dtx}{matlab}}}
+\generate{\nopreamble\nopostamble%
+ \file{pfxprint.m} {\from{psfragx.dtx}{pfxprint}}}
+%\generate{\file{Example.eps}{\from{psfragx.dtx}{example}}}
+
+\Msg{***********************************************************}
+\Msg{* To complete the installation of psfragx, you should}
+\Msg{* move psfragx.sty to a directory seen by TeX.}
+\Msg{*}
+\Msg{* The file psfragx.cfg should be adapted to your needs}
+\Msg{* and put into a personal directory (HOME rather than LOCAL)}
+\Msg{* You can adapt the format of the documentation file by}
+\Msg{* editing the file psfragx.drv, before compiling it.}
+\Msg{*}
+\Msg{***************************************************************}
+\Msg{* This message is transcripted at the end of psfragx.log}
+\Msg{***************************************************************}
+
+\endbatchfile
+%</ins>
+%<*gobble>
+\end{filecontents*}
+%</gobble>
+%<*gobble>
+ \ProvidesFile{psfragx.dtx}
+%</gobble>
+%<package>\NeedsTeXFormat{LaTeX2e}[2001/06/01]
+%<package>\ProvidesPackage{psfragx}
+%<driver>\ProvidesFile{psfragx.drv}
+%<cfg>\ProvidesFile{psfragx.cfg}
+%<*version>
+% %\fi
+% \ProvidesFile{psfragx.dtx}
+ [2004/12/10 v1.0 psfragx (Pascal Kockaert)]
+% % \iffalse
+%</version>
+%<*gobble>
+\csname endinput\endcsname\csname @@end\endcsname\csname end\endcsname
+%</gobble>
+%<*driver>
+\documentclass[a4paper,11pt]{ltxdoc}
+\usepackage[ansinew]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[francais,english]{babel}
+%% Uncomment the following line if you don't want to include a
+%% source-code listing.
+%%\OnlyDescription
+\CodelineIndex
+%%
+%%% Babel french option
+\NoAutoSpaceBeforeFDP
+%%%
+\begin{document}
+ \DocInput{psfragx.dtx}
+\end{document}
+%</driver>
+% %\fi
+%
+% \GetFileInfo{psfragx.dtx}
+%
+% \title{PSfragX: one graphic in one file%
+% \thanks{This file has version~\fileversion.
+% It was processed on ~\filedate.}}
+% \author{Pascal Kockaert}
+% \date{\filedate}
+%
+% \CheckSum{646}
+% \RecordChanges
+% \MakeShortVerb{\"}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \newcommand{\EPS}{\textsc{eps}}
+% \newcommand{\PFX}{\textsc{pfx}}
+% \newcommand{\OVP}{\textsc{ovp}}
+% \maketitle
+% \begin{abstract}
+% "\usepackage["\textit{options}"]{pfragx}" inputs the packages "psfrag" and
+% "graphicx", and adds essentially one \LaTeX{} command, which is
+% "\includegraphicx" (with an 'x´ at the end).
+%
+% This command differs from "\includegraphics" in the fact that it
+% inputs "\psfrag" replacements contained into the included {\EPS} file
+% itself.
+%
+% If the {\EPS} files contains those replacements at the right place,
+% "\usepackage[sub]{psfragx}"
+% will substitute "\includegraphicx" to "\includegraphics"
+% automatically.
+% At the same time, it is possible to include overpic commands into the
+% {\EPS} file, and they will be automatically processed.
+%
+% The {\EPS} file can be written by a matlab script, so that the user
+% needs only to call the script in order to print the matlab figure.
+% No additional work will be necessary.
+% \end{abstract}
+%
+% \tableofcontents
+%
+% \section{Warning}
+% Some options of this package allow to overwrite some files ending
+% in .pfx and in .ovp. Be sure to understand how these options work
+% before using them.
+%
+% The text below assumes that you are used to
+% "\includegraphics" from the "graphicx" package, and
+% also to "\psfrag" from the "psfrag" package. Reading
+% the documentation of "overpic" could also help to
+% understand what follows.
+%
+% \section{Motivation}
+%
+% Using graphics drawn by mathematical softwares is very convenient
+% but does not offer all the flexibility of \TeX{} and \LaTeX{} when
+% it comes to write labels.
+%
+% Some solutions exist, like the matlab "laprint.m" function
+% (http://www.uni-kassel.de/fb16/rat/matlab/laprint/) to print from
+% matlab(TM)
+% into {\EPS} files suited to be easily handled by "psfrag". All the
+% labels (including numbers on the axis) are converted into strings
+% like `x01´ that should be replaced by their values, like `3.141'.
+%
+% Though the result is pleasant, it is \textsc{mandatory} to keep track
+% of the substitutions. This is why the "laprint.m" function takes care
+% to write a \TeX{} file that contains all the "\psfrag" commands
+% necessary to obtain the original labels. This \TeX{} file can be
+% edited to modify the "\psfrag" commands. This scheme works well, but
+% has some limitations. You must obviously take care to move the ".tex"
+% and the ".eps" file together. But in addition, you must input the
+% graphic using an "\input" command. If you intend to modify its size
+% or change some "\psfrag" replacements, you need to open and modify
+% the original ".tex" file. If you want to use packages like
+% "overpic", you must modify the ".tex" file output by "laprint" or
+% copy all the "psfrag" replacements that it contains to your main
+% \TeX{} file. In case you would choose to copy the psfrag replacements
+% into your main \TeX{} file, you will end up with a lot of lines like
+% \begin{verbatim}
+% \psfrag{x01}[B][B][1][0]{3.141}
+% \psfrag{x02}[B][B][1][0]{6.283}
+% \psfrag{x03}[B][B][1][0]{9.425}
+% \psfrag{x04}[B][B][1][0]{12.566}
+% \end{verbatim}
+% into your \LaTeX{} document.
+%
+% In fact, you \textsc{do not need} to see all these lines, and should
+% never see them, except, for example, if you want to replace them with
+% \begin{verbatim}
+% \psfrag{x01}[B][B][1][0]{$\pi$}
+% \psfrag{x02}[B][B][1][0]{$\2\,\pi$}
+% \end{verbatim}
+% and so on.
+%
+% What is said here about "\psfrag" commands can be transposed to the
+% "overpic" environment that allows to put "picture" objects over a
+% graphic.
+%
+% The authors of "psfrag" have designed a mechanism that allows to
+% embed "\psfrag" commands into the {\EPS} file itself\footnote
+% {This was kindly reminded to me by Michael C. Grant, one of the
+% authors of "psfrag", that I would like to thank here.%
+% }.
+% Though this mechanism can be convenient, it presents some drawbacks
+% that are described into the documentation of "psfrag".
+%
+% The package "psfragX" aims to circumvent these drawbacks, as well as
+% to introduce more flexibility into the automatic inclusion mechanism.
+% For example, "psfragX" allows to define different "\psfrag"
+% replacements for different languages. If "babel" is used,
+% replacements will be selected according to the current language of
+% the document. It also allows to make use of "color" commands that are
+% ignored if the "color" package is not loaded.
+%
+% \section{How PSfragX works}
+%
+% \subsection{PSfrag, \textsc{pfx}, overpic and \textsc{ovp}}
+%
+% The package "psfragx" allows to embed "\psfrag" commands into the
+% {\EPS} file, as well as "picture" objects in "overpic" environments.
+% In order to simplify the description, we will refer only to
+% "\psfrag" inclusions here below.
+% The "overpic" inclusion mechanism works in the same way and will
+% not be described. The differences between "psfrag" and "overpic"
+% inclusions will appear in the syntax of some commands. We use the
+% three letters "pfx" to prefix things that relate to "psfrag" and
+% "ovp" to prefix things that relate to "overpic".
+%
+% The psfragx mechanism can be divided into two parts that are
+% described separately.
+%
+% \subsection{Merging and separating the \TeX{} and {\EPS} documents}
+%
+% We use the result of "laprint.m" as an example, but all the {\EPS} file
+% could be processed in the same way. "laprint" outputs
+% "Fig1.tex" \&\ "Fig1.eps" files that can be converted into a single
+% file that we call Figure1.eps, which is a copy of Fig1.eps, with
+% additional comments that contain all the interesting lines of
+% Fig1.tex. At this stage, you can throw the original files Fig1.tex
+% and Fig1.eps. \textsc{Be careful to make a backup!!!}
+%
+% The added comments are not read by the PostScript interpreter and
+% should not affect the resulting {\EPS} file. As far as I know, the
+% comments used conform to the Adobe(TM) Document Structuring
+% Convention (ADSC). These comments can be added by hand or using
+% the matlab script "psfragx.m" that should be accompanying this file.
+% Their structure also conforms to the DocStrip convention (see
+% "docstrip.dtx"): the part to be copied starts with a comment "%<*pfx>"
+% and ends with "%</pfx>". All the lines between these marks will be
+% taken into account by "psfragx".
+%
+% \begin{verbatim}
+% %<*pfx>
+% %\psfrag{x01}[B][B][1][0]{3.141}
+% %\psfrag{x02}[B][B][1][0]{6.283}
+% %\psfrag{x03}[B][B][1][0]{9.425}
+% %\psfrag{x04}[B][B][1][0]{12.566}
+% %</pfx>
+% \end{verbatim}
+% PSfragx looks for these lines into the {\EPS} file and outputs them
+% into a file with the same name, but a ".pfx" extension. In other
+% words, "Figure1.pfx" is created with the comments of "Figure1.eps".
+% This file is normally created only once, though there is an option
+% to overwrite it. This means that you could edit it by hand without
+% loosing your work next time you run LaTeX.
+%
+% In the same manner, it is possible to include picture commands using
+% \begin{verbatim}
+% %<*ovp>
+% %\put(50,50){Middle of the graphic}
+% %</ovp>
+% \end{verbatim}
+% These lines will go into the file "Figure1.ovp".
+%
+% The process of seeking for "pfx" and "ovp" environments stops
+% as soon as a line starting with "%\endinput" is found. Including
+% such a line will speed the things up.
+%
+% \subsection{Input the right file at the right moment}
+%
+% Once the "Figure1.pfx" file exists, the command "\includegraphicx"
+% includes it and uses the conventional "\includegraphics" from
+% "graphicx" with the same arguments. The result is that all the
+% "\psfrag" replacements are processed before the
+% "Figure1.eps" file is included.
+%
+% The "\psfrag" commands do not appear into the \TeX{} file.
+% The {\PFX} file could be deleted, and all the replacements would still
+% be performed, because the {\PFX} file would be re-generated on the fly.
+%
+% Now that all the labels on the axes are perfectly drawn, we could
+% still want to replace the value "3.141" by the tag "$\pi$". This
+% is why the "\includegraphicx" command has a second facultative
+% argument. Inside this argument, you should issue all the "\psfrag"
+% commands that you want to perform after the inclusion of the {\PFX}
+% file.
+%
+% \begin{verbatim}
+% \includegraphicx[width=\linewidth]
+% (\psfrag{x01}[B][B]{$\pi$}%
+% \psfrag{x02}[B][B]{$2\,\pi$})
+% {Figure1.eps}
+% \end{verbatim}
+%
+% The second optional argument is defined with "()" to avoid an
+% interaction between the brackets of the "\psfrag" command and
+% those of the "\includegraphicx" command.
+%
+% All that is said about {\PFX} files and "psfrag" replacements can be
+% transposed to {\OVP} files and "overpic" "picture" commands.
+%
+% If we want to add "overpic" commands before or after the inclusion
+% of the {\OVP} file, we can use the two other optional arguments of
+% "\includegraphicx":
+% \begin{verbatim}
+% \includegraphicx[width=\linewidth]
+% <\put(50,50){Foreground object}>
+% [\put(0,0){Background object}]
+% {Figure1.eps}
+% \end{verbatim}
+%
+%
+%
+% \section{Usage}
+%
+% \subsection{Package options}
+%
+% The package is input by
+% "\usepackage["\textit{options}"]{psfragx}"
+%
+%
+% The \textit{options} are
+% \begin{description}
+% \item[sub, nosub] substitute or do not substitute
+% "\includegraphicx" to "\includegraphics";
+% \item[allcom,selcom] copy all or
+% only selected MetaComments from the {\EPS} file to the {\PFX} file
+% (if you do not understand what this means, you can safely ignore it);
+% \item[ovp, noovp] makes use of overpic to (automatically) put picture
+% objects over the graphics.
+% \end{description}
+%
+% \subsection{Two new commands}
+%
+% \DescribeMacro{\includegraphicx}
+% \DescribeEnv{overpix}
+% \begin{itemize}
+% \item \textsc{The} command of the package is:
+% \begin{tabular}{rl}
+% "\includegraphicx" &"["\textit{keys}"]"\\
+% &"("\textit{psfrags}")"\\
+% &"<"\textit{foreground overpic}">"\\
+% &"["\textit{background overpic}"]"\\
+% &"{"\textit{file.eps}"}"\\
+% \end{tabular}
+% \item \textsc{The} environment of the package is:
+% \begin{tabular}{rl}
+% "\begin{overpix}" &"["\textit{keys}"]"\\
+% &"<"\textit{foreground overpic}">"\\
+% &"["\textit{background overpic}"]"\\
+% &"{"\textit{file.eps}"}"\\
+% "\end{overpix}"&\\
+% \end{tabular}
+% \end{itemize}
+%
+% The meaning of the keys is explained in table~\ref{Tab:mean:keys}.
+% \begin{table}{h!}
+% \centering
+% \caption{Meaning of the keys for \texttt{\string\includegraphics}
+% and \texttt{overpix}}
+% \label{Tab:mean:keys}
+% \footnotesize
+% \begin{tabular}{ccl}
+% \hline
+% key &acceptable values &action\\
+% \hline
+% \textit{graphicx keys}
+% & \textit{usual values}
+% &\textit{usual meanings}\\
+% pfx &"true"/"false" &allows/disallows the
+% inclusion of the
+% {\PFX} file\\
+% overwritepfx &"true"/"false" &allows/disallows to
+% overwrite an existing
+% {\PFX} file\\
+% pfxadd &\textit{psfrags} &"\psfrag" commands to be
+% processed after the
+% inclusion of the
+% {\PFX} file\\
+% ovp &"true"/"false" &allows/disallows the
+% inclusion of the
+% {\OVP} file\\
+% overwriteovp &"true"/"false" &allows/disallows to
+% overwrite an existing
+% {\OVP} file\\
+% ovpbgd &\textit{picture commands} &"picture" commands to be
+% processed before the
+% inclusion of the
+% {\OVP} file\\
+% ovpfgd &\textit{picture commands} &"picture" commands to be
+% processed after the
+% inclusion of the
+% {\OVP} file\\
+% \hline
+% \end{tabular}
+% \end{table}
+%
+% The item denoted by \textit{psfrags} should consist only in
+% "\psfrag{A}[b][c][d][e]{F}" commands, where A,b,c,d,e,F can be
+% anything. In addition, the "\psfrag" commands can be selectively
+% included according to the current language of the document
+% (at the point of inclusion). Two commands are provided.
+% The commands "\iflanguage" is explained in the "babel"
+% documentation. If "babel" is not loaded, "\iflanguage" is redefined
+% to match the definition of "babel", that is:\\
+% "\iflanguage{"\textit{languagename}"}"%
+% "{"\textit{true case}"}"%
+% "{"\textit{false case}"}".
+% The configuration file "psfragxcfg" given below, as an example,
+% redefines the main commands of the "color" package so that no
+% error occurs if the \textit{psfrags} contains color commands and
+% the package "color" is not loaded.
+%
+% The item denoted by \textit{picture commands} should consist only in
+% commands that are allowed in the usual "picture" environment of
+% \LaTeX{}. You can also make use of "\iflanguage" and color commands,
+% provided that the configuration file given below is used.
+%
+% \textsc{You cannot put blank lines}, that is lines that would
+% consist only in one ``\%'' sign. If you insert such lines, the
+% ``\%'' sign will be removed and some space will be added in front of
+% the included figure.
+%
+%
+% \subsection{Other new commands}
+%
+% Though they are not needed in a normal use of "psfragx",
+% the following commands are available:
+% "\allmetacomments",
+% "\selectedmetacomments",
+% "\copypfxfromto{<EPS file>}{<PFX file>}",
+% "\setpfxinput{<File>}",
+% "\setpfxoutput{<File>}",
+% "\copypfxlines",
+% "\pfxinput",
+% "\ovpinput".
+% Their usage can be deduced from the commented source code.
+%
+% The other commands are internal and start with "\pfx@" or "\ovp@".
+%
+% \section{Configuration file}
+%
+% The file "psfragx.cfg" will be input by psfrags, if it exists.
+% This file can contain new commands of general use, or commands that
+% must appear just before or just after the inclusion of the {\PFX}/{\OVP}
+% file occurs. To this aim, four commands can be defined. Their names
+% are "\Beforepfxinput", "\Afterpfxinput",
+% "\Beforeovpinput", and "\Afterovpinput". They can be used as
+% in the example below.
+% \begin{macrocode}
+%<*cfg>
+% Example of configuration file for psfragx.sty
+% The macros \Beforepfxinput, \Afterpfxinput
+% \Beforeovpinput, and \Afterovpinput are executed
+% into a group. They should not define global commands to
+% avoid side effects.
+%
+%
+% The command \providecolorcommands defines commands that
+% take the same arguments as the mains commands of the
+% color package, in case this package is not loaded.
+%
+\newcommand{\providecolorcommands}
+ {\def\pfx@gobble@two##1##2{\typeout{Some psfragx
+ replacement would appear
+ in color ##1{##2}
+ if the color package was
+ loaded!!!}}%
+ \def\pfx@gobble@three@fbox##1##2##3{\typeout{Some psfragx
+ replacement would
+ appear
+ in color ##1{##2}
+ and others
+ in color ##1{##3}
+ if the color package
+ was loaded!!!}%
+ \fbox}%
+ \def\pfx@fm@to@mm##1##2##{\csname ##1\endcsname{##2}}%
+ \expandafter\ifx\csname textcolor\endcsname\relax
+ \def\textcolor{\pfx@fm@to@mm{pfx@gobble@two}}\fi
+ \expandafter\ifx\csname color\endcsname\relax
+ \def\color{\pfx@fm@to@mm{pfx@gobble@two}}\fi
+ \expandafter\ifx\csname colorbox\endcsname\relax
+ \def\colorbox{\pfx@fm@to@mm{pfx@gobble@two}}\fi
+ \expandafter\ifx\csname fcolorbox\endcsname\relax
+ \def\fcolorbox{\pfx@fm@to@mm{pfx@gobble@three@fbox}}\fi
+ }
+% The name of the next four commands are specific to psfragx
+\def\Beforepfxinput{\providecolorcommands}
+\def\Afterpfxinput{}
+\def\Beforeovpinput{\providecolorcommands}
+\def\Afterovpinput{}
+%</cfg>
+% \end{macrocode}
+% \section{Example of tagged {\EPS} file}
+%
+% We provide here below an example of {\EPS} that uses
+% the language and color features... According to the
+% “Adobe Document Structuring Convention” (ADSC), comments
+% starting with two percent signs have a special meaning.
+% You should therefore avoid to put \textsc{exactly} two
+% percents signs at the beginning of a line. If you respect this
+% rule and avoid very long lines, you should never broke your
+% {\EPS} file.
+%
+% \begin{macrocode}
+%<*example>
+ %%!PS-Adobe-2.0 EPSF-1.2
+ %%Creator: Adobe Illustrator(TM) 1.2d4
+ %%Title: tiger.eps
+ %%CreationDate: 4/12/90 3:20 AM
+ %%BoundingBox: 17 171 567 739
+ %<*pfx>
+ %\psfrag{T}[B][B]{\fcolorbox{white}{black}{\color{white}Title}}
+ %\psfrag{t}[t][t]{time (s)}
+ %\psfrag{I}[b][b]{I (W)}
+ %\iflanguage{french}
+ % {\psfrag{T}[B][B]{Title}%
+ % \psfrag{t}[t][t]{temps (s)}}
+ % {}
+ %\psfrag{T}[B][B]{Title}
+ %</pfx>
+ %<*ovp>
+ %\put(0,80){(a)}
+ %</ovp>
+ %\endinput
+ %%EndComments
+ %%
+ %% [The code of the {\EPS} file should come HERE]
+ %%
+ %% End
+%</example>
+% \end{macrocode}
+%
+% Full examples should be provided with this package. They are
+% not included into "psfrags.dtx".
+%
+% \section{Associated matlab scripts}
+%
+% The script "psfragx.m" is written for matlab and can be used in
+% conjunction with "laprint.m" (see URL above) in order to benefit from
+% the advantages of "laprint.m" and mix the resulting .tex and .eps
+% files into a file that contains all the information.
+%
+% The scripts "pfxprint.m" can be used with the same syntax as
+% "laprint.m" (see documentation of "laprint"). This script invoques
+% "laprint" with the settings contained in the file "laprpfx.mat", and
+% immediately after, it merges the generated \EPS{} and \TeX{} files.
+% Therefore, you should ensure that the files "laprint.m", "laprpfx.mat", and
+% "psfragx.m" are in a directory searched by matlab before using the
+% "pfxprint" command.
+%
+% At the time of writing, the current version of "laprint" is "3.16".
+% This version works well with "pfxprint.m" and "psfragx.sty".
+%
+%
+% \section{Credits}
+%
+% All the code to extract the comments from the {\EPS} file is inspired
+% from "docstrip". The set of commands was reduced to its
+% minimum, and a "\pfx@" prefix was added to all the commands, in
+% order to avoid any interaction with other packages.
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \StopEventually{\PrintChanges\PrintIndex}
+%
+% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% \section{Mise en œuvre}
+%
+% \changes{v0.1}{2003/08/30}{First dtx version}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Almost all the internal commands start with "\pfx@", "\ovp@",
+% "\ifpfx@", or "\ifovp@".
+% Two exceptions are "\@..@overpix" and "\@..@igx",
+% where "@..@" can be "@", "@@", "@@@" or "@@@@".
+%
+% \subsection{Required packages and options}
+%
+% We offer the option to substitute the new "\includegraphicx" command
+% to the usual "\includegraphics", and optionally, the overpix
+% environment to the usual overpic one. This could broke things but
+% allows to use "psfragx" with existing documents almost transparently.
+% \begin{macro}{\pfx@subfalse}
+% \begin{macro}{\pfx@subtrue}
+% \begin{macrocode}
+\DeclareOption{sub}{\pfx@subtrue}
+\DeclareOption{nosub}{\pfx@subfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% The next option was of some help to debug this package.
+% With "allcom", all the lines of the {\EPS} file starting with "%%" are
+% copied to the {\PFX} and {\OVP} files. Otherwise, these lines are not
+% copied if they are out of a tagged environment.
+% \begin{macrocode}
+\DeclareOption{allcom}{\allmetacomments}
+\DeclareOption{selcom}{\selectedmetacomments}
+% \end{macrocode}
+% The next option specifies that the overpic environment will be used.
+% Therefore, the overpic package should be loaded.
+%
+% \begin{macro}{\pfx@ovptrue}
+% \begin{macro}{\pfx@ovpfalse}
+% \begin{macrocode}
+\DeclareOption{ovp}{\pfx@ovptrue}
+\DeclareOption{noovp}{\pfx@ovpfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% We define the new commands needed to process the options.
+% \begin{macro}{\allmetacomments}
+% \begin{macro}{\selectedmetacomments}
+% \begin{macrocode}
+ \newif\ifpfx@sub\pfx@subfalse
+ \newif\ifpfx@ovp\pfx@ovptrue
+ \newif\ifpfx@metacomments
+ \pfx@metacommentsfalse
+ \def\allmetacomments{\pfx@metacommentstrue}
+ \def\selectedmetacomments{\pfx@metacommentsfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Finally, default options are defined.
+% \begin{macrocode}
+\ExecuteOptions{sub,ovp,selcom}
+\ProcessOptions*
+% \end{macrocode}
+%
+% Now, we load the other packages.
+% \begin{macrocode}
+\RequirePackage{graphicx}
+\RequirePackage{psfrag}
+% \end{macrocode}
+%
+% The overpic package is not loaded if this was required by the user.
+% Otherwise, we load this package. To ensure proper placement of the
+% objects put into the picture environment, we must always use the
+% same option when loading "overpic". We choose this option to be "percent".
+%
+% \begin{macrocode}
+\ifpfx@ovp \RequirePackage[percent]{overpic} \fi
+% \end{macrocode}
+%
+% \subsection{Reading the {\EPS} file and writing {\PFX} or {\OVP} files}
+% The code that follows is highly inspired from that of docstrip.tex.
+%
+% \subsubsection{Copying selected lines from the {\EPS} file}
+% Below, we write the code to copy specific lines contained in the
+% {\EPS} file into an auxiliary file. Comments (single "%" sign)
+% in front of these lines are automatically removed.
+%
+% First, we define a few macros of general use.
+%
+% \begin{macro}{\pfx@gobble}
+% \begin{macro}{\pfx@percent}
+% \begin{macro}{\pfx@doublepercent}
+% \begin{macrocode}
+\def\pfx@gobble#1{}
+{\catcode`\%=12
+ \gdef\pfx@percent{%}
+ \gdef\pfx@doublepercent{%%}
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Here we define the extension of the auxiliary file, and the name of
+% the tag associated to this file. The "metaprefix" replaces double
+% percent signs found into the original {\EPS} file.
+% \begin{macro}{\pfx@ext}
+% \begin{macro}{\pfx@tag}
+% \begin{macro}{\pfx@metaprefix}
+% \begin{macrocode}
+\let\pfx@metaprefix\pfx@doublepercent
+\def\pfx@tag{pfx}
+\def\pfx@ext{pfx}
+\def\pfx@tmp{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% We also need to define the string after which we will stop to scan
+% the {\EPS} file. This string must appear at the beginning of a line.
+% If this string is not present into the {\EPS} file, the file will be
+% scanned up to the end. This string is defined to be "%\endinput".
+% \begin{macro}{\pfx@endinput}
+% \begin{macrocode}
+\edef\pfx@endinput
+ {\pfx@percent\expandafter\pfx@gobble\string\\endinput}
+% \end{macrocode}
+% \end{macro}
+%
+% And now, we copy the needed code from "docstrip", with some
+% modifications to throw the leading percent sign when we copy
+% the lines that appear between two tags "<*pfx>...</pfx>".
+%
+% We define a command to change catcodes,
+% \begin{macrocode}
+\def\pfx@makeother#1{\catcode`#1=12\relax}
+% \end{macrocode}
+% another to copy a given token,
+% \begin{macrocode}
+\def\pfx@iden#1{#1}
+% \end{macrocode}
+% and a few boolean variables.
+% \begin{macrocode}
+\newif\ifpfx@continue
+\newif\ifpfx@outputtofile
+% \end{macrocode}
+%
+% The names of the input and output files are contained into the
+% internal variables "\pfx@infile" and "\pfx@outfile". These named
+% can be accessed from the document through the two commands
+% "\setpfxinput" and "\setpfxoutput".
+% \begin{macro}{\setpfxinput}
+% \begin{macro}{\setpfxoutput}
+% \begin{macrocode}
+\def\setpfxinput#1{\gdef\pfx@infile{#1}}
+\def\setpfxoutput#1{\gdef\pfx@outfile{#1}}
+\gdef\pfx@infile{} \gdef\pfx@outfile{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Two streams are reserved by "psfragx". I do not know if I should
+% use them locally rather than globally.
+% \begin{macrocode}
+\newread\pfx@in
+\newwrite\pfx@out
+% \end{macrocode}
+%
+% The macro "\copypfsfromto" \textsc{does not check}
+% that the input file exists.
+% \begin{macro}{\copypfxfromto}
+% \begin{macrocode}
+\def\copypfxfromto#1#2{%
+\setpfxinput{#1}%
+\setpfxoutput{#2}%
+\copypfxlines%
+}
+% \end{macrocode}
+% \end{macro}
+% The macro "\copypfxlines" does the real job.
+% See "docstrip" to understand how it works.
+% \begin{macro}{\copypfxlines}
+% \begin{macrocode}
+\def\pfx@ignorespaces{\ignorespaces}%
+\def\copypfxlines{% input and output files are global names
+\immediate\openin\pfx@in\pfx@infile\relax \ifeof\pfx@in
+ \errmessage{psfragx tried to read from a file that
+ does not exist. This seems to be a bug!}%
+\else
+ \immediate\openout\pfx@out=\pfx@outfile\relax
+ \immediate\write\pfx@out{\pfx@ignorespaces}
+ \ifeof\pfx@out
+ \begingroup
+ \pfx@makeother\ \pfx@makeother\\\pfx@makeother\$%
+ \pfx@makeother\#\pfx@makeother\^\pfx@makeother\^^K%
+ \pfx@makeother\_\pfx@makeother\^^A\pfx@makeother\%%
+ \pfx@makeother\~\pfx@makeother\{\pfx@makeother\}%
+ \pfx@makeother\&\endlinechar-1\relax
+ \loop
+ \read\pfx@in to \pfx@inline
+ \ifx\pfx@inline\pfx@endinput
+ \pfx@continuefalse
+ \typeout{psfragx: \pfx@percent
+ \expandafter\pfx@gobble
+ \string\\endinput was
+ found in \pfx@infile.}%
+ \else
+ \ifeof\pfx@in
+ \pfx@continuefalse
+ \typeout{psfragx: End of file
+ \pfx@infile was reached.}%
+ \else
+ \pfx@continuetrue
+ \expandafter\pfx@processline
+ \pfx@inline\pfx@endline
+ \fi%
+ \fi%
+ \ifpfx@continue
+ \repeat
+ \endgroup
+ \else
+ \errmessage{psfragx: output file already exists!}%
+ \fi %\pfx@out
+ \immediate\closeout\pfx@out
+\fi %\pfx@in
+\immediate\closein\pfx@in
+}
+% \end{macrocode}
+% At this stage, all "<pfx>" and "<*pfx>...</pfx>" lines from
+% "\pfx@infile" should be in "\pfx@outfile".
+% \end{macro}
+%
+% Each time a new line is found by the previous macro, the line is
+% processed using "\pfx@processline". This macro scans the beginning
+% of the line and defers the treatment to the right macro.
+% In the "docstrip" code, normal lines are copied without change.
+% In our code, the leading percent of copied lines is removed.
+%
+% \begin{macro}{\pfx@processline}
+% \begin{macrocode}
+\def\pfx@normalline#1\pfx@endline{%
+ \def\pfx@inline{#1}%
+ \ifpfx@outputtofile%
+ \immediate\write\pfx@out{\pfx@inline}%
+ \fi%
+}
+%
+\def\pfx@removecomment#1\pfx@endline{%
+ \def\pfx@inline{#1}%
+ \ifpfx@outputtofile%
+ \immediate\write\pfx@out{\pfx@inline}%
+ \fi%
+}
+%
+\bgroup\catcode`\%=12 \pfx@iden{\egroup
+\def\pfx@putmetacomment%}#1\pfx@endline{%
+ \edef\pfx@inline{\pfx@metaprefix#1}%
+ \ifpfx@metacomments
+ \immediate\write\pfx@out{\pfx@inline}%
+ \else
+ \ifpfx@outputtofile
+ \immediate\write\pfx@out{\pfx@inline}%
+ \fi
+ \fi
+}
+%
+\begingroup
+\catcode`\%=12 \catcode`\*=14 \gdef\pfx@processline#1{*
+ \ifx%#1*
+ \expandafter\pfx@processlinex
+ \else
+ \expandafter\pfx@normalline
+ \fi
+#1}
+\endgroup
+%
+\begingroup
+\catcode`\%=12 \catcode`\*=14
+\gdef\pfx@processlinex%#1{*
+ \ifcase\ifx%#10\else
+ \ifx<#11\else2\fi\fi\relax
+ \expandafter\pfx@putmetacomment\or
+ \expandafter\pfx@checkoption\or
+ \expandafter\pfx@removecomment\fi
+#1}
+\endgroup
+%
+\def\pfx@checkoption<#1{%
+ \ifcase\ifx*#10\else
+ \ifx/#11\else2\fi\fi\relax
+ \expandafter\pfx@staroption\or
+ \expandafter\pfx@slashoption\or
+ \expandafter\pfx@tagoption\fi
+#1}
+%
+\def\pfx@staroption*#1>#2\pfx@endline{%
+ \def\pfx@tmp{#1}%
+ \ifx\pfx@tmp\pfx@tag
+ \pfx@outputtofiletrue
+ \fi
+}
+%
+\def\pfx@slashoption/#1>#2\pfx@endline{%
+ \def\pfx@tmp{#1}%
+ \ifx\pfx@tmp\pfx@tag\relax
+ \pfx@outputtofilefalse
+ \fi
+}
+%
+\def\pfx@tagoption#1>#2\pfx@endline{%
+ \def\pfx@tmp{#1}%
+ \ifx\pfx@tmp\pfx@tag\relax
+ \def\pfx@inline{#2}%
+ \immediate\write\pfx@out{\pfx@inline}%
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% This ends the code to read {\EPS} file and write {\PFX} file. It is
+% clear that only "\pfx@tag" and "\pfx@ext" should be changed from
+% "pfx"to "ovp" in order to process "overpic" inclusions rather than
+% "psfrag" replacements.
+%
+% \subsection{Code that inputs the {\PFX} and {\OVP} files}
+%
+% This code will add commands to input the {\PFX} and {\OVP} files if
+% they exist. If they do not, they will be created on the fly and read
+% just after. An option allows to ignore existing files and generate
+% {\PFX} and {\OVP} files from the {\EPS} file each time the {\EPS}
+% file is included.
+%
+% At first, we define commands related to {\PFX} files.
+% Later on, we will adapt them to {\OVP} files.
+%
+% \subsubsection{Saving and providing commands of other packages}
+%
+% We save the commands that could be redefined later
+% \begin{macrocode}
+\let\pfx@includegraphics=\includegraphics
+\let\pfx@overpic=\overpic
+\let\pfx@endoverpic=\endoverpic
+% \end{macrocode}
+%
+% Even if "overpic" is not loaded, the "overpic" environment should
+% exist. In this case, the {\OVP} files will not be processed, and
+% no "picture" element should be put over the graphics.
+% Nonetheless, "\includegraphicx"
+% is defined to always use the "overpic" environment.
+%
+% Therefore, we provide a definition of the "overpic" environment
+% that is partially copied from overpic.sty. We have removed all the
+% code that makes computations about the size and the position of the
+% grid.
+% \begin{macro}{\pfx@overpic}
+% \begin{macro}{\pfx@endoverpic}
+% \begin{macrocode}
+\@ifundefined{pfx@overpic}{%
+ \newcommand*{\pfx@overpic}[2][]
+ {\sbox{\z@}{\includegraphics[#1]{#2}}%
+ \settodepth{\@tempcnta}{\usebox{\z@}}%
+ \settoheight{\@tempcntb}{\usebox{\z@}}%
+ \advance\@tempcntb\@tempcnta%
+ \settowidth{\@tempcnta}{\usebox{\z@}}%
+ \begin{picture}(\@tempcnta,\@tempcntb)%
+ \put(0,0){\makebox(0,0)[bl]{\usebox{\z@}}}}%
+ }{}
+\@ifundefined{pfx@endoverpic}{\def\pfx@endoverpic{\end{input}}}{}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \DescribeMacro{\iflanguage}
+% We also have to provide "\iflanguage" command, in case "babel"
+% is not loaded. We could have simplified the code, because
+% "\pfx@iflanguage" should always expand to "\@secondoftwo"
+% if babel is not loaded. Because this code was also copied from
+% the babel package with some changes, we use it even if "babel"
+% is loaded. This could cause problems if the internal command
+% "l@"\textit{language} of "babel" was redefined. Though we redefine
+% a "babel" command, this should cause no major problem, because
+% the command "\iflanguage" will be provided only at time of the
+% file inclusion. This means that "\psfrag" replacements should
+% contain no reference to "\iflanguage" as these commands will
+% be evaluated after the file is read. The command "\iflanguage"
+% should be evaluated at time of inclusion, in order to decide
+% which "psfrag" or "picture" commands are to be taken into account.
+%
+% \DescribeMacro{\onlylanguage}
+% \DescribeMacro{\endonlylanguage}
+% In order to simplify the writing of multilingual {\EPS} files, we
+% also provide the command "\onlylanguage" "{"\textit{language}"}..."
+% "\endonlylanguage", which argument is read only if the current
+% language of the document is \textit{language}.
+%
+% In order to simplify the writing of multilingual {\EPS} files, we
+% also provide the command "\onlylanguage" "{"\textit{language}"}..."
+% "\endonlylanguage", which argument is read only if the current
+% language of the document is \textit{language}.
+% \begin{macro}{\pfx@iflanguage}
+% \begin{macro}{\iflanguage}
+% \begin{macro}{\onlylanguage}
+% \begin{macro}{\endonlylanguage}
+% \begin{macro}{\pfx@save@iflanguage}
+% \begin{macro}{\pfx@restore@iflanguage}
+% \begin{macro}{\pfx@firstoftwo}
+% \begin{macro}{\pfx@secondoftwo}
+% \begin{macrocode}
+\long\def\pfx@firstoftwo#1#2{#1\ignorespaces}%
+\long\def\pfx@secondoftwo#1#2{#2\ignorespaces}%
+\def\pfx@iflanguage#1{%
+ \ifnum\csname l@#1\endcsname=\language
+ \expandafter\pfx@firstoftwo
+ \else
+ \expandafter\pfx@secondoftwo
+ \fi}
+\long\def\onlylanguage#1#2\endonlylanguage{\pfx@iflanguage{#1}{#2}{}\ignorespaces}
+\def\pfx@save@iflanguage{\let\save@pfx@iflanguage=\iflanguage%
+ \let\iflanguage=\pfx@iflanguage}
+\def\pfx@restore@iflanguage{\let\iflanguage=\save@pfx@iflanguage}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% The two commands "\pfx@save@iflanguage" and
+% "\pfx@restore@iflanguage" will be called just before
+% and after the inclusion of the {\PFX} file.
+%
+% \subsubsection{New commands to read and write files}
+%
+% We start with some declarations (new commands and new if)
+% The names of the "ifGin" series are chosen to be easily processed
+% through the "keyval" package mechanism. "Gin" is the prefix used
+% by the "graphicx" package.
+% \begin{macro}{\ifpfx@generate}
+% \begin{macro}{\ifovp@generate}
+% \begin{macro}{\pfx@add}
+% \begin{macro}{\ovp@add@bgd}
+% \begin{macro}{\ovp@add@fgd}
+% \begin{macro}{\ifGin@pfx}
+% \begin{macro}{\ifGin@overwritepfx}
+% \begin{macro}{\ifGin@ovp}
+% \begin{macro}{\ifGin@overwriteovp}
+% \begin{macrocode}
+\newif\ifpfx@generate
+\newif\ifovp@generate
+\newcommand*\pfx@add{}
+\newcommand*\ovp@add@bgd{}
+\newcommand*\ovp@add@fgd{}
+\newif\ifGin@pfx
+\newif\ifGin@overwritepfx
+\newif\ifGin@ovp
+\newif\ifGin@overwriteovp
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% As the names indicate, these macros are attached to {\PFX} or
+% {\OVP} inclusions. They allow to save information to know if a
+% {\PFX}/{\OVP} file is to be generated, if the {\PFX}/{\OVP}
+% automatic inclusion mechanism is to be used and if existing
+% {\PFX}/{\OVP} files should be overwritten. Finally, three commands
+% will contain the "\psfrag" commands ("\pfx@add") to be issued
+% after the inclusion of the {\PFX} file, as well as "picture"
+% commands to be issued before ("\ovp@add@bgd") and after
+% ("\ovp@add@fgd") the {\OVP} file inclusion.
+%
+% The new keys will be available through the optional arguments of
+% "\includegraphicx".
+% This is why they are defined as belonging to the same group as the
+% "graphicx" keys: "Gin".
+%
+% The role that we have described for the previous commands is
+% assigned here below. As is common, the boolean keys are set
+% to be true if they are invoked without argument.
+% \begin{macrocode}
+\define@key{Gin}{pfx}[true]%
+ {\lowercase{\Gin@boolkey{#1}}{pfx}}
+\define@key{Gin}{overwritepfx}[true]%
+ {\lowercase{\Gin@boolkey{#1}}{overwritepfx}}
+\define@key{Gin}{pfxadd}[]%
+ {\def\pfx@add{#1}}
+\define@key{Gin}{ovp}[true]%
+ {\lowercase{\Gin@boolkey{#1}}{ovp}}
+\define@key{Gin}{overwriteovp}[true]%
+ {\lowercase{\Gin@boolkey{#1}}{overwriteovp}}
+\define@key{Gin}{ovpbgd}[]%
+ {\def\ovp@add@bgd{#1}}
+\define@key{Gin}{ovpfgd}[]%
+ {\def\ovp@add@fgd{#1}}
+% \end{macrocode}
+% We will define a handy syntax for the "\includegraphicx" command.
+% This command will mainly convert some of its optional arguments
+% to keys "pfxadd={"\textit{argument}"}",
+% "ovpbgd={"\textit{argument}"}",
+% and "ovpfgd={"\textit{argument}"}".
+%
+% It is now time to define the commands that will test for the
+% existence of the input and output files and decide if an output
+% file is to be generated. This command makes use of values
+% defined previously for {\PFX} files. This is why we prefix the
+% command with "\pfx".
+% To understand the code below, it is important to know that the
+% command "\filename@parse{}" defines three commands that are
+% "\filename@area", "\filename@base" and "\filename@ext".
+% \begin{macro}{\pfxinput}
+% \begin{macrocode}
+\newcommand*{\pfxinput}[1]{%
+ \filename@parse{#1}%
+ \IfFileExists{\filename@base.\pfx@ext}
+ {\pfx@generatefalse}
+ {\pfx@generatetrue}%
+ \ifGin@overwritepfx\pfx@generatetrue\fi
+ \IfFileExists{#1}{}{\pfx@generatefalse}%
+ \ifpfx@generate%
+ \copypfxfromto{\filename@area\filename@base.\filename@ext}
+ {\filename@base.\pfx@ext}%
+ \fi%
+ \pfx@save@iflanguage
+ \csname Before\pfx@tag input\endcsname
+ \InputIfFileExists{\filename@base.\pfx@ext}
+ {\typeout{psfragx: reading commands from
+ \filename@base.\pfx@ext}}
+ {\typeout{psfragx: I was not able to read psfrag
+ definitions from
+ \filename@base.\pfx@ext}}%
+ \csname After\pfx@tag input\endcsname
+ \pfx@restore@iflanguage
+}
+% \end{macrocode}
+% \end{macro}
+% As was announced, we determine if the output file exists.
+% In case this file exists we decide not to generate the output file.
+% If the user required that the output file be overwritten, we
+% ask to generate the output file in any case.
+% Then we test if the input file exists. If not, we cannot generate
+% the ouptut file.
+%
+% Now that the existence of the input file has been checked, we can
+% call the low level command "\copypfxfromto". This completes the
+% first step.
+%
+% The second step is to input the {\PFX} file if it exists. The file
+% is input inside a "\pfx@save@iflanguage" "\pfx@restore@iflanguage"
+% pair. In addition, the commands "\Beforepfxinput" and
+% "\Afterpfxinput" are issued if they exist. Otherwise, they expand
+% to "\relax". These commands should be defined into the "psfragx.cfg"
+% file in order to customise the behaviour of "psfragx".
+%
+% Now, we define variations of "\pfx@" commands in order to work with
+% the "overpic" environment rather than with "psfrag" replacements.
+%
+% We redefine the tag and the extension, copy the overwrite
+% permission and call "\pfxinput".
+% \begin{macro}{\ovpinput}
+% \begin{macrocode}
+\newcommand*{\ovpinput}[1]{%
+\begingroup
+ \def\pfx@ext{ovp}%
+ \def\pfx@tag{ovp}%
+ \ifGin@overwriteovp\Gin@overwritepfxtrue
+ \else\Gin@overwritepfxfalse\fi
+ \pfxinput{#1}%
+\endgroup}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{The main command of this package}
+%
+% Here comes the definition of the main command of this package,
+% as seen by the user : "\includegraphicx".
+% This new command will make use of the new environment called
+% "overpix", in order to include the graphics.
+%
+% \subsubsection{Internal commands}
+%
+% First, we define two internal commands that perform the
+% required task. Then we define external commands with optional
+% arguments.
+% \begin{macro}{\pfx@includegraphicx}
+% The macro "\pfx@includegraphics" is just a shortcut to acces
+% the "overpix" environment. We do not call
+% "\begin{pfx@overpix}..." "\end{pfx@overpix}", in order to save time.
+% \begin{macrocode}
+\def\pfx@includegraphicx#1#2{%
+ \mbox{\pfx@overpix{#1}{#2}\endpfx@overpix}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\ovp@box@tmp}
+% In what follows, we need a temporary box. This is called "\ovp@box@tmp".
+% \begin{macrocode}
+\newbox{\ovp@box@tmp}%
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pfx@overpix}
+% \begin{macro}{\endpfx@overpix}
+% The environment "overpix" has the same syntax as the "overpic" one.
+% You can notice that the original version of "\includegraphics" is
+% used. This is important if we decide, later, to let
+% "\includegraphics" be equivalent to "\includegraphicx".
+% The "\psfrag" commands and the "picture" commands are processed
+% inside this environment. To avoid side effects of command
+% redefinitions inside the included files, we enclose the contents of
+% "overpix" inside a "\begingroup" "\endgroup" pair.
+%
+% The graphic is included via the original or the lightened version
+% of the "overpic" environment.
+%
+% All we do is to evaluate the keys of the first argument, then
+% input the {\PFX} file, and process the contents of "\pfx@add".
+% Thereafter, we call the original or lightened version of the
+% "overpic" environment. We read the keys again and add the
+% background layer of the picture environment, then the layer
+% contained into the {\OVP} file.
+%
+% When the "\pfx@overpix" command is issued, we end up into a
+% "picture" environment that constitutes yet another layer.
+% Finally, the "picture" environment should be closed by an
+% "\endpfx@overpix" command. Before doing so, the foreground
+% layer of the picture environment is drawn.
+%
+% It is mandatory to take care that not spurious space is added
+% at the end of the lines. A percent sign should appear each time
+% the line is ending with something else than a command name.
+%
+% \begin{macrocode}
+\def\pfx@overpix#1#2{%
+ \begingroup%
+ \begin{lrbox}{\ovp@box@tmp}%
+ \let\includegraphics=\pfx@includegraphics%
+ \Gin@pfxtrue%
+ \Gin@overwritepfxfalse%
+ \def\pfx@add{}%
+ \setkeys{Gin}{#1}%
+ \ifGin@pfx%
+ \pfxinput{#2}%
+ \fi%
+ \pfx@add
+ \pfx@overpic[#1]{#2}
+ \Gin@ovptrue
+ \Gin@overwriteovpfalse
+ \def\ovp@add@bgd{}%
+ \def\ovp@add@fgd{}%
+ \setkeys{Gin}{#1}%
+ \ovp@add@bgd
+ \ifGin@ovp
+ \ovpinput{#2}%
+ \fi
+ }% \pfx@overpix
+%
+\def\endpfx@overpix{%
+ \ovp@add@fgd%
+ \pfx@endoverpic
+ \end{lrbox}%
+ \usebox{\ovp@box@tmp}%
+ \endgroup%
+ }%
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{External commands}
+%
+% The definitions here below ensure that the optional arguments
+% are optional.
+% \begin{macro}{\overpix}
+% \begin{macro}{\endoverpix}
+% The syntax of "overpix" is as follows.\\
+% \begin{tabular}{rl}
+% "\overpix" &"["\textit{keys}"]"\\
+% &"<"\textit{foreground layer}">"\\
+% &"["\textit{background layer}"]"\\
+% &"{"\textit{file.eps}"}"
+% \end{tabular}
+% \begin{macrocode}
+\def\overpix{\@ifnextchar[{\@overpix}%
+ {\@overpix[]}}%
+\def\@overpix[#1]{\@ifnextchar<{\@@overpix[#1]}%
+ {\@@overpix[#1]<>}}%
+\def\@@overpix[#1]<#2>%
+ {\@ifnextchar[{\@@@overpix[#1]<#2>}%
+ {\@@@overpix[#1]<#2>[]}}%
+\def\@@@overpix[#1]<#2>[#3]#4%
+ {\pfx@overpix{#1,ovpfgd={#2},ovpbgd={#3}}{#4}}
+\def\endoverpix{\endpfx@overpix}
+% \end{macrocode}
+% This set of commands converts the optional arguments into keys.
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\includegraphicx}
+% The syntax of "\includegraphicx" is as follows.\\
+% \begin{tabular}{rl}
+% "\includegraphicx" &"["\textit{keys}"]"\\
+% &"("\textit{psfrag replacements}")"\\
+% &"<"\textit{foreground layer}">"\\
+% &"["\textit{background layer}"]"\\
+% &"{"\textit{file.eps}"}"
+% \end{tabular}
+% \begin{macrocode}
+\def\includegraphicx{\@ifnextchar[{\@igx}%
+ {\@igx[]}}%
+\def\@igx[#1]{\@ifnextchar({\@@igx[#1]}%
+ {\@@igx[#1]()}}%
+\def\@@igx[#1](#2){\@ifnextchar<{\@@@igx[#1](#2)}%
+ {\@@@igx[#1](#2)<>}}%
+\def\@@@igx[#1](#2)<#3>{\@ifnextchar[{\@@@@igx[#1](#2)<#3>}%
+ {\@@@@igx[#1](#2)<#3>[]}}%
+\def\@@@@igx[#1](#2)<#3>[#4]#5%
+ {\pfx@includegraphicx{#1,pfxadd={#2},ovpfgd={#3},ovpbgd={#4}}{#5}}
+% \end{macrocode}
+% This set of commands converts the optional arguments into keys.
+% \end{macro}
+%
+% \subsection{Overloading includegraphics and overpic}
+%
+% If the user requires so, we let "\includegraphics" and the "overpic"
+% environment act as their counterparts ending in "x".
+% Though this substitution was tested, it could broke things and
+% should be used with care.
+%
+%
+% \begin{macro}{\includegraphics}
+% \begin{macro}{\overpic}
+% \begin{macro}{\endoverpic}
+% \begin{macrocode}
+\ifpfx@sub
+ \let\includegraphics=\includegraphicx
+ \ifpfx@ovp
+ \let\overpic=\overpix
+ \let\endoverpic=\endoverpix
+ \fi
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Configuration file}
+%
+% Finally, we input the configuration file if it exists.
+% \begin{macrocode}
+\InputIfFileExists{psfragx.cfg}{}{}
+% \end{macrocode}
+% This ends the code of "psfragx.sty".
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \section{Code of the matlab script}
+%
+% Note that the lines containing the "rm" and "mv" commands should be
+% replaced by their equivalents on the operating system
+% on wich matlab is running. For example, under \textsc{dos} and its
+% successors the replacements are "del" and "ren".
+%
+%
+% \begin{macrocode}
+%<*matlab>
+% psfragx.m %%% [-*- Matlab -*-]
+%
+% function psfragx(NomTeX,NomEPS)
+% nargin=1 -> NomTeX=NomEPS
+%
+% Copy lines of NomTeX.tex
+% starting with
+% \psfrag
+% and
+% %<pfx>
+% to the file NomEPS.eps, as a comment following the
+% %%BoundigBox
+% line.
+
+function psfragx(TeXname,EPSname,Outname)
+TMPname='psfragx_tmp';
+if nargin<2, EPSname=TeXname; end
+if nargin<3, Outname=EPSname; end
+if Outname==EPSname,
+ eval(['!rm ',TMPname,'.eps'])
+ eval(['!mv ',EPSname,'.eps ',TMPname,'.eps'])
+ EPSname=TMPname;
+end
+TeXName=([TeXname,'.tex']);
+EPSName=([EPSname,'.eps']);
+OutName=([Outname,'.eps']);
+
+BeginInput ='%%BoundingBox:';
+BeginPSFRAG='%<pfx>\pfxbegin[1.0]{laprint}%';
+EndPSFRAG ='%<pfx>\pfxend';
+StartPFX ='%<*pfx> Inserted where \begin{psfrags}% occured';
+StopPFX ='%</pfx> Inserted where \end{psfrags}% occured';
+EndInput ='%\endinput';
+EndOfFile ='%%EOF';
+ResizeBox ='%<pfx>\def\naturalwidth';
+StopOn ={'\psfrag{','<pfx>','\begin{psfrags}','\end{psfrags}','\resizebox'};
+
+TeXFile=fopen(TeXName,'r');
+if (TeXFile==-1)
+ error(['I was not able to open ',TeXName,'!']);
+end
+EPSFile=fopen(EPSName,'r');
+if (EPSFile==-1)
+ error(['I was not able to open ',EPSName,'!']);
+end
+OutFile=fopen(OutName,'w');
+if (OutFile==-1)
+ error(['I was not able to open ',OutName,'!']);
+end
+
+[sEPS,llEPS,iEPS]=CopyUntil(EPSFile,OutFile,{BeginInput});
+ if sEPS~=1, error(['No line contains ',BeginInput]);
+ else
+ fprintf(OutFile,'%s\n',llEPS);
+ end
+
+%%%
+%%% Write preamble
+%%%
+fprintf(OutFile,'%%<*pfx> Begin Preamble\n');
+fprintf(OutFile,'%%\\providecommand*{\\pfxbegin}[2][]{}%%\n');
+fprintf(OutFile,'%%\\providecommand{\\pfxend}{}%%\n');
+fprintf(OutFile,'%%</pfx> End Preamble\n');
+%%%
+%%% Copy interesting lines
+%%%
+while 1
+ [sTeX,llTeX,iTeX]=ReadUntil(TeXFile,StopOn);
+ if sTeX~=1, break; end
+ switch iTeX
+ case 1, % \psfrag
+ fprintf(OutFile,'%%%s\n',llTeX);
+ case 2, % %<pfx>
+ fprintf(OutFile,'%s\n',llTeX);
+ case 3, % \begin{psfrags}
+ fprintf(OutFile,'%s\n',BeginPSFRAG);
+ fprintf(OutFile,'%s\n',StartPFX);
+ case 4, % \end{psfrags}
+ fprintf(OutFile,'%s\n',StopPFX);
+ fprintf(OutFile,'%s\n',EndPSFRAG);
+ case 5, % \resizebox
+ tmpbeg=findstr(llTeX,'{');
+ tmpend=findstr(llTeX,'}');
+ if (length(tmpbeg)>0)&(length(tmpend)>0)
+ if (tmpbeg(1)<tmpend(1))
+ fprintf(OutFile,'%s%s%%\n',ResizeBox,llTeX(tmpbeg(1):tmpend(1)));
+ end
+ end
+ otherwise
+ error('Otherwise should never happen !')
+ end
+end
+%%%
+%%% Write postamble
+%%%
+fprintf(OutFile,'%s\n',EndInput);
+%%%
+%%% Copy to the end of file
+%%%
+[sEPS,llEPS,iEPS]=CopyUntil(EPSFile,OutFile,{''});
+%%%
+%%% Close files
+%%%
+fclose(OutFile);
+fclose(TeXFile);
+fclose(EPSFile);
+return
+
+function [OK,lastline,elt]=CopyUntil(fidIn,fidOut,linebeg);
+sl=length(linebeg);
+if sl==0, OK=-2; return, end
+llb=zeros(sl);
+for ii=1:sl
+ llb(ii)=length(linebeg{ii});
+end
+lastline='';
+OK=0;
+elt=0;
+while 1
+ Line=fgetl(fidIn);
+ if ~isstr(Line),
+ OK=-1;
+ return,
+ end %EndOfFile
+ for ii=1:sl
+%%% fprintf('Seeking for line starting with %s.\n',linebeg{ii});
+ if llb==0, %%% Copying to the end of file
+ else
+ if length(Line)>=llb(ii)
+%%% fprintf('This line counts more than %i chars.\n',llb(ii));
+ if Line(1:llb(ii))==linebeg{ii},
+ OK=1;
+ elt=ii;
+ lastline=Line;
+ break
+ end
+ end
+ end
+ end %%% No matching string
+ if OK==1, break, end
+ if ~isempty(fidOut)
+ fprintf(fidOut,'%s\n',Line);
+ end
+end
+return
+
+function [OK,lastline,elt]=ReadUntil(fidIn,linebeg);
+ [OK,lastline,elt]=CopyUntil(fidIn,[],linebeg);
+return
+%</matlab>
+%<*pfxprint>
+%%% pfxprint [ -*- Matlab -*- ] Time-stamp: <2004-08-12 18:20:57 Pascal Kockaert>
+%%%
+% function pfxprint(fig,name,'optA','valA','optB','valB',...)
+%
+% TO USE THIS FUNCTION, THE FILE laprpfx.mat SHOULD BE IN THE MATLAB PATH
+%
+% This function is to be used like laprint.m
+% The EPS and TeX files resulting from the call to laprint with the given arguments
+% are automatically merged into one EPS file that contains the
+% psfrags replacements as comments.
+% These comments can be automatically used in LaTeX, with the help of the psfragx package.
+%
+% This file is subject to the LPPL licence (see other files in the source archive or www.ctan.org)
+% Copyright 2004, Pascal Kockaert
+%
+
+function pfxprint(fig,name,varargin)
+ deftxtint=get(0,'DefaultTextInterpreter');
+ set(0,'DefaultTextInterpreter','none');
+
+ laprint(fig,name,'options','laprpfx',varargin{:});
+ psfragx(name);
+
+ set(0,'DefaultTextInterpreter',deftxtint)
+
+% Default options are
+% LAPRINTOPT =
+% figno: 2
+% filename: 'laprint'
+% width: 12
+% factor: 0.8
+% scalefonts: 1
+% keepfontprops: 0
+% asonscreen: 0
+% keepticklabels: 0
+% mathticklabels: 0
+% head: 0
+% comment: 'Test de laprint'
+% caption: ''
+% extrapicture: 0
+% nzeros: 3
+% verbose: 'off'
+% figcopy: 1
+% printcmd: 'print('-f<figurenumber>','-depsc2','<filename.eps>')'
+% package: 'graphicx'
+% color: 0
+% createview: 0
+% viewfilename: 'unnamed_'
+% processview: 0
+% cmd1: 'latex -halt-on-error -interaction nonstopmode <viewfile>.tex'
+% cmd2: 'dvips -D600 -E* -o<viewfile>.eps <viewfile>.dvi'
+% cmd3: 'epstool --bbox --copy --output <filename>_final.eps <viewfile>.eps'
+% cmd4: 'rm <viewfile>.eps <viewfile>.dvi <viewfile>.aux <viewfile>.log <viewfile>.pfg'
+% cmd5: 'ghostview <filename>_final.eps&'
+% cmd6: ''
+% cmd7: ''
+% cmd8: ''
+%</pfxprint>
+% \end{macrocode}
+%\typeout{^^J***************************************************}
+%\typeout{In order to generate index files, run^^J}
+%\typeout{makeindex -s gglo -o psfragx.gls psfragx.glo}
+%\typeout{makeindex -s gind psfragx.idx^^J}
+%\typeout{***************************************************^^J}
+%\Finale
+\endinput
diff --git a/Master/texmf-dist/source/latex/psfragx/psfragx.ins b/Master/texmf-dist/source/latex/psfragx/psfragx.ins
new file mode 100644
index 00000000000..7fad319da5d
--- /dev/null
+++ b/Master/texmf-dist/source/latex/psfragx/psfragx.ins
@@ -0,0 +1,74 @@
+%%
+%% This is file `psfragx.ins',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% psfragx.dtx (with options: `ins')
+%%
+%% This is a generated file.
+%%
+%% Copyright (C) 2003, 2004 Pascal Kockaert
+%% Pascal.Kockaert ad ulb.ac.be
+%% Note that ''ad´´ is often replaced by the ''@´´ sign.
+%% ----------------------------------------------------------
+%%
+%% This package 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.
+%%
+\input docstrip
+
+\keepsilent\askonceonly
+
+\usedir{tex/latex/psfragx}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2003, 2004 Pascal Kockaert
+Pascal.Kockaert ad ulb.ac.be
+Note that ''ad´´ is often replaced by the ''@´´ sign.
+----------------------------------------------------------
+
+This package 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.
+
+\endpreamble
+
+\generate{\file{psfragx.drv}{\from{psfragx.dtx}{driver}}}
+\generate{\file{psfragx.sty}{\from{psfragx.dtx}{package,version}}}
+\generate{\file{psfragx.ins}{\from{psfragx.dtx}{ins}}}
+\generate{\file{psfragx.cfg}{\from{psfragx.dtx}{cfg,version}}}
+\generate{\nopreamble\nopostamble%
+ \file{psfragx.m} {\from{psfragx.dtx}{matlab}}}
+\generate{\nopreamble\nopostamble%
+ \file{pfxprint.m} {\from{psfragx.dtx}{pfxprint}}}
+
+\Msg{***********************************************************}
+\Msg{* To complete the installation of psfragx, you should}
+\Msg{* move psfragx.sty to a directory seen by TeX.}
+\Msg{*}
+\Msg{* The file psfragx.cfg should be adapted to your needs}
+\Msg{* and put into a personal directory (HOME rather than LOCAL)}
+\Msg{* You can adapt the format of the documentation file by}
+\Msg{* editing the file psfragx.drv, before compiling it.}
+\Msg{*}
+\Msg{***************************************************************}
+\Msg{* This message is transcripted at the end of psfragx.log}
+\Msg{***************************************************************}
+
+\endbatchfile
+\endinput
+%%
+%% End of file `psfragx.ins'.