summaryrefslogtreecommitdiff
path: root/graphics/AddTeX2Eps/AddTeX2Eps.m
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /graphics/AddTeX2Eps/AddTeX2Eps.m
Initial commit
Diffstat (limited to 'graphics/AddTeX2Eps/AddTeX2Eps.m')
-rw-r--r--graphics/AddTeX2Eps/AddTeX2Eps.m172
1 files changed, 172 insertions, 0 deletions
diff --git a/graphics/AddTeX2Eps/AddTeX2Eps.m b/graphics/AddTeX2Eps/AddTeX2Eps.m
new file mode 100644
index 0000000000..34afe29114
--- /dev/null
+++ b/graphics/AddTeX2Eps/AddTeX2Eps.m
@@ -0,0 +1,172 @@
+(* ::Package:: *)
+
+(* :Title: AddTeX2Eps *)
+(* :Context: EpsTools`AddTeX2Eps` *)
+(* :Author: Janko Slavic (janko.slavic@fs.uni-lj.si) *)
+(* :Summary:
+ Package for using native LaTeX syntax on eps figures directly from Mathematica.
+ AddTeX2Eps calls latex.exe and dvips.exe and makes use of psfrag package (needs to be installed).
+
+ default.tex is the LaTeX template where you can add packages and define your own LaTeX commands.
+ Copy default.tex and AddTeX2Eps.m to ..\AddOns\StandardPackages\Graphics\ or to search path.
+
+*)
+(* :Package Version: 1.14 *)
+(* :Mathematica Version: 7.0 *)
+(* :History:
+ 1.14 by Janko Slavic, October, 2009 (some fixes for Mathematica 7.0).
+ 1.13 by Janko Slavic, December, 2006 (for linux compatibility default.tex is always used as lowercase).
+ 1.12 by Janko Slavic, April, 2006 (default.tex located in searh path or ..\AddOns\StandardPackages\Graphics\).
+ 1.11 by Janko Slavic, April, 2006 (directory problem resolved).
+ 1.1 by Janko Slavic, April, 2006.
+ 1.0 by Janko Slavic, 2003.
+*)
+(* :Keywords: eps, tex, latex, psfrag.
+*)
+
+
+BeginPackage["EpsTools`AddTeX2Eps`"]
+
+EpsExport::usage="EpsExport[fileName,graphics,PSFrag]
+EpsExport is used to export graphics to eps files
+and then use psfrag LaTeX package with latex.exe and dvips.exe. \n
+fileName is a string with full path (long names and spaces can cause troubles)\n
+graphics is a graphical object to export\n
+PSFrag is List of strings with psfrag syntax\n
+\n
+Example:\n\n
+Needs[\"EpsTools`AddTeX2Eps`\"];\n
+fig = Plot[Sin[x^2], {x, 0, 4}, AxesLabel -> {\"a\",\"b\"},PlotLabel -> \"c\"];\n
+EpsExport[\"d:/test.eps\",fig,\n
+{\n
+\"\\psfrag{a}[c]{$x$}\",\n
+\"\\psfrag{b}[c]{$\\sin(x^2)$}\",\n
+\"\\psfrag{c}[c]{Native \\LaTeX via psfrag package}\"\n
+}]
+";
+
+CorrectBB::usage="Use to manually correct bounding box dimensions: {llx, lly, urx, ury}.\n
+For example: {-10, 0, 0, 0} moves the lower left bounding box point for 10 points to the left.";
+
+IncludeGraphicsOptions ::usage="Native LaTeX includegraphics options (scale, trim,...)";
+
+DeleteTempFiles::usage="If you are having problems with compiling, it may help to look at the temporary files.
+ Try to compile temp.tex with latex.exe."
+
+Options[EpsExport]={
+ CorrectBB -> {0, 0, 0, 0},
+ IncludeGraphicsOptions -> "[scale=1.0]",
+ DeleteTempFiles -> True};
+
+Begin["`Private`"]
+
+EpsExport[fileName_String, graphics_, PSFrag_List, opts___] :=
+ Module[{stream},
+ Export[fileName, graphics, "EPS"];
+ stream = OpenAppend[fileName];
+ (*Save PSFrag syntax in file - if needed later*)
+ WriteString[stream,
+ "%%PSFragBegin\n" <> StringJoin[StringInsert[PSFrag,"\n%%",1]] <>
+ "\n%%PSFragEnd"];
+ Close[stream];
+
+ (*run latex and ps*)
+ RunLaTeX[fileName, PSFrag, opts];
+ ];
+
+
+RunLaTeX[fileName_String, PSFrag_List, opts___] :=
+ Module[{texDat, bbText, bb, stream, w, h, workD, llx, lly, urx, ury,
+ epsFile, tmp, deleteTempFiles},
+ {{cllx, clly, curx, cury}, incGrapOpts,
+ deleteTempFiles} = {CorrectBB, IncludeGraphicsOptions,
+ DeleteTempFiles} /. Flatten[{opts}] /. Options[EpsExport];
+
+ (*default.tex needs to be in Graphics dir*)
+ (*if needed, add packages/new commands to default.tex*)
+ texDat := Module[{out},
+ out=Import["EpsTools//default.tex", "Text"];
+ out
+ ];
+
+ (*Read bounding box*)
+ stream = OpenRead[fileName];
+ bbText = Find[stream, "%%BoundingBox:"];
+ bb = ToExpression[Drop[StringSplit[bbText], 1]];
+ Close[stream];
+ {w, h} = IntegerPart[{bb[[3]] - bb[[1]], bb[[4]] - bb[[2]]}];
+
+
+
+ (*Prepare TeX dat*)
+ texDat = StringReplace[texDat,
+ {"psfragSyntax" -> StringJoin[StringInsert[PSFrag,"\n",1]],
+ "[scaleSyntax]" -> incGrapOpts,
+ "figureName" -> StringReplace[StringReplace[fileName, "/" -> $PathnameSeparator], __ ~~$PathnameSeparator~~ name_ -> name],
+ "{width}" -> "{" <> ToString[w] <> "pt}",
+ "{height}" -> "{" <> ToString[h] <> "pt}"
+ }];
+
+
+ (*set working dir*)
+ workDir = Directory[];
+ SetDirectory[DirectoryName[StringReplace[fileName, "/" -> $PathnameSeparator]]];
+
+ (*Export tex*)
+ Export["EpsExport.tex", texDat, "Text"];
+
+ (*Run Latex*)
+ Run["latex EpsExport"];
+
+ (*Run dvi to ps*)
+ Run["dvips -E EpsExport"];
+
+
+ (*read bounding box*)
+ stream = OpenRead["EpsExport.ps"];
+ bbText = Find[stream, "%%BoundingBox:"];
+ {llx, lly, urx, ury} = ToExpression[Drop[StringSplit[bbText], 1]];
+ Close[stream];
+
+
+
+
+ (*correct bounding box*)
+ {llx, ury, lly, urx} = {urx - w + cllx, lly + h + cury, lly + clly,
+ urx + curx};
+ bbText =
+ ToString[llx] <> " " <> ToString[lly] <> " " <> ToString[urx] <> " " <>
+ ToString[ury];
+ epsFile = Import["EpsExport.ps", "Lines"];
+ epsFile = Join[
+
+ StringReplace[Take[epsFile, 20],
+ StartOfLine ~~ "%%BoundingBox:" ~~ tmp__ ->
+ "%%BoundingBox: " ~~ bbText],
+ Drop[epsFile, 20]
+ ];
+ Export[fileName, epsFile, "Lines"];
+
+ (*covert to pdf*)
+ (*If[convertToPdf,Run["ps2pdf "<>fileName<>" "<>StringDrop[fileName,-4]<>".pdf"];];*)
+
+ (*delete files*)
+ If[deleteTempFiles,
+ DeleteFile[{"EpsExport.ps", "EpsExport.aux", "EpsExport.dvi", "EpsExport.log",
+ "EpsExport.tex"}];
+ ];
+
+
+
+
+ (*reset working dir*)
+ SetDirectory[workDir];
+
+ ];
+
+
+End[]
+
+Protect[EpsExport]
+
+EndPackage[]