(*********************************************************************** Mathematica-Compatible Notebook This notebook can be used on any computer system with Mathematica 4.0, MathReader 4.0, or any compatible application. The data for the notebook starts with the line containing stars above. To get the notebook into a Mathematica-compatible application, do one of the following: * Save the data starting with the line of stars above into a file with a name ending in .nb, then open the file inside the application; * Copy the data starting with the line of stars above to the clipboard, then use the Paste menu command inside the application. Data for notebooks contains only printable 7-bit ASCII and can be sent directly in email or through ftp in text mode. Newlines can be CR, LF or CRLF (Unix, Macintosh or MS-DOS style). NOTE: If you modify the data for this notebook not in a Mathematica- compatible application, you must delete the line below containing the word CacheID, otherwise Mathematica-compatible applications may try to use invalid cache data. For more information on notebooks and Mathematica-compatible applications, contact Wolfram Research: web: http://www.wolfram.com email: info@wolfram.com phone: +1-217-398-0700 (U.S.) Notebook reader applications are available free of charge from Wolfram Research. ***********************************************************************) (*CacheID: 232*) (*NotebookFileLineBreakTest NotebookFileLineBreakTest*) (*NotebookOptionsPosition[ 51704, 1753]*) (*NotebookOutlinePosition[ 53085, 1796]*) (* CellTagsIndexPosition[ 52998, 1790]*) (*WindowFrame->Normal*) Notebook[{ Cell[CellGroupData[{ Cell["EnhancedGraphics", "Title", TextAlignment->Center], Cell["by Markus Lischka", "Subsubtitle", TextAlignment->Center], Cell["\<\ The EnhancedGraphics package defines a modified graphics layout for \ all plot routines: improved tick labels typeset in Helvetica, frames instead \ of axes, and an adjustable line width. It provides functions for using the \ Ticks option of graphics objects allowing the length and style of tick marks \ and the text labels to be altered. It also provides an enhanced ContourPlot \ function and a new export function for EPS files which includes required Math \ fonts in the EPS file thus making it portable.\ \>", "Text"], Cell[CellGroupData[{ Cell["Reference", "Section"], Cell[CellGroupData[{ Cell["Title", "Subsubsection"], Cell["\<\ EnhancedGraphics.m \[LongDash] Improved graphics layout made \ easy.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Author", "Subsubsection"], Cell["Markus Lischka (mlischka@physik.tu-muenchen.de)", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Summary", "Subsubsection"], Cell["\<\ The EnhancedGraphics package defines a modified graphics layout for \ all plot routines: improved tick labels typeset in Helvetica, frames instead \ of axes, and an adjustable line width. It provides functions for using the \ Ticks option of graphics objects allowing the length and style of tick marks \ and the text labels to be altered. It also provides an enhanced ContourPlot \ function and a new export function for EPS files which includes required Math \ fonts in the EPS file thus making it portable.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Copyright", "Subsubsection"], Cell[TextData[{ "\[Copyright] Copyright 2001, Markus Lischka.", StyleBox["\n", FontSlant->"Italic"], "\[Copyright] Copyright 1994, Tom Wickham-Jones (Ticks functions).\n\n\ Permission is granted to distribute this file for any purpose except for \ inclusion in commercial software or program collections. This copyright \ notice must remain intact." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Notebook Version", "Subsubsection"], Cell["1.8", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " Version" }], "Subsubsection"], Cell["4.0", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["History", "Subsubsection"], Cell[TextData[{ "Version 1.0: Initial version (2001-02-15).\nThe Ticks functions are based \ on the package ", StyleBox["ExtendGraphics`Ticks`", "Input"], " (Version 1.0, summer 1992) by Tom Wickham-Jones as described in his book \ \"", StyleBox["Mathematica", FontSlant->"Italic"], " Graphics: Techniques and Applications\". \n\nVersion 1.1: Fixed some \ inconsistencies when ", StyleBox["$LineStyle", "Input"], " was set to a list of graphics directives (2001-03-20).\n\nVersion 1.2: \ Added wrapper for ", StyleBox["ContourPlot", "Input"], " routine to avoid mismatch of contour styles (2001-04-12).\n\nVersion 1.3: \ Modified ", StyleBox["ContourPlot", "Input"], " routine so that all explicitly specified contour lines are actually drawn \ (2001-04-24).\n\nVersion 1.4: Improved ", StyleBox["TickPosition", "Input"], ": It now handles minor and major tick marks consistently for ", StyleBox["TickNumbers->Automatic", "Input"], ". In previous versions, incommensurate spacings for major and minor tick \ marks could result due to the fixed ratio of 8 to 32.\n\nVersion 1.5: Added \ new system default ", StyleBox["$PlotStyle", "Input"], " and three sample style sets optimized for screen (", StyleBox["$ColoredPlotStyle", "Input"], ") and PostScript output (", StyleBox["$DashedPlotStyle", "Input"], ", ", StyleBox["$ColoredDashedPlotStyle", "Input"], ").\n\nVersion 1.6: Avoid numerical inconsistencies when determining the \ number of digits for tick labels (new routine ", StyleBox["determineDigits", "Input"], " replaces routines ", StyleBox["totalDigits", "Input"], " and ", StyleBox["fractionalDigits", "Input"], ").\n\nVersion 1.7: Initial submission to ", StyleBox["MathSource", FontSlant->"Italic"], "; original package name ", StyleBox["BetterGraphics", "Input"], " changed to ", StyleBox["EnhancedGraphics", "Input"], " (2003-03-19).\n\nVersion 1.8: Changed default settings for ", StyleBox["Ticks", "Input"], " option in analogy to ", StyleBox["FrameTicks", "Input"], ". Added support for ", StyleBox["Graphics`Graphics`", "Input"], " plot routines and included bug fix of ", StyleBox["Graphics`Graphics`Private`transformticks", "Input"], ". Font inclusion is now disabled by default on ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.2.0 or higher (2003-04-27)." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Keywords", "Subsubsection"], Cell["\<\ graphics layout, tick marks, tick labels, export, EPS, Math fonts\ \ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Source", "Subsubsection"], Cell[TextData[{ "Tom Wickham-Jones, ", StyleBox["Mathematica Graphics: Techniques and Applications", FontSlant->"Italic"], ", TELOS/Springer-Verlag 1994 \ (http://www.mathsource.com/Content/Enhancements/Graphics/3D/0208-976).\nP. J. \ Hinton, ", StyleBox["emmathfnt - A Toolkit for Embedding Mathematica Fonts in EPS \ Files", FontSlant->"Italic"], StyleBox[" ", FontVariations->{"CompatibilityType"->0}], "(http://www.mathsource.com/Content/Enhancements/Graphics/General/0210-519).\ \n", "Maeder, R. ", StyleBox["Programming in Mathematica", FontSlant->"Italic"], ", 3rd ed. Addison-Wesley, 1996." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Warnings", "Subsubsection"], Cell[TextData[{ "The tick mark functions are written to mimick ", StyleBox["Mathematica", FontSlant->"Italic"], "'s default behavior as close as possible, but there might still be some \ inconsistencies!" }], "Text"], Cell["\<\ With embedded fonts, EPS files get significantly larger. If \ possible, try embedding them via dvips for the whole document.\ \>", "Text"], Cell[TextData[{ "The builtin ", StyleBox["ContourPlot", "Input"], " routine is overriden, so be aware of any conflicts with other extensions \ or future versions of ", StyleBox["Mathematica", FontSlant->"Italic"], "!" }], "Text"], Cell[TextData[{ "Furthermore, at least up to ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.1, a bug in the ", StyleBox["Graphics`Graphics`", "Input"], " package prevents the use of ", StyleBox["TickFunction", "Input"], " for logarithmic plots (if numerically equidistant tick labels were \ desired). See the discussion in Section \"Implementation / Definitions for \ system functions / ", StyleBox["Graphics`Graphics`", "Input"], " options\". To work around this problem, the private ", StyleBox["Graphics`Graphics`Private`transformticks", "Input"], " function is changed. These modifications might break future versions of \ ", StyleBox["Graphics.m", "Input"], "." }], "Text"], Cell[TextData[{ "Note: all cells marked as \"InitializationCell\" will be written to the \ Auto-Save package. This package can then be read in programs that use it with \ ", StyleBox["Needs[\"Template`\"]", "Input"], ". Cells not intended to belong to the package should not have this \ property." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Limitation", "Subsubsection", CellTags->"Reference/Limitation"], Cell[TextData[{ "The current implementation of ", StyleBox["ExportEPS", "Input"], " only works on Unix platforms as it uses a pipe construction for file \ output. It requires ", StyleBox["emmathfnt", FontSlant->"Italic"], " to be found in the current command path. As described in README.txt of ", StyleBox["emmathfnt", FontSlant->"Italic"], ", it only works when invoked by the frontend (and not by a standalone \ kernel)!\nIn ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.2.0, the font export changed and is no longer supported by emmathfnt \ (see ", ButtonBox["http://forums.wolfram.com/mathgroup/archive/2002/Nov/msg00563.\ html", ButtonStyle->"Hyperlink"], "). In ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.2.1 or higher, ", StyleBox["Mathematica", FontSlant->"Italic"], " is directly capable of exporting EPS with embedded fonts. In these cases, \ the default value of the ", StyleBox["IncludeFonts", "Input"], " option is set to ", StyleBox["False", "Input"], "." }], "Text"], Cell[TextData[{ StyleBox["TickFunction", "Input"], " does not provide any support for creating logarithmic tick labels. The \ corresponding options for logarithmic plot routines of ", StyleBox["Graphics`Graphics`", "Input"], " are thus set in such a way to not use TickFunction on scaled axes." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Discussion", "Subsubsection"], Cell[TextData[{ "The variable ", StyleBox["$FontsDirectory ", "Input"], "must be adapted to the system-specific path of the Mathematica Type 1 \ fonts directory if the fonts are not installed in the standard \ sub-directory!" }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Requirements", "Subsubsection"], Cell[TextData[{ StyleBox["emmathfnt ", "Input"], "(", StyleBox["MathSource", FontSlant->"Italic"], " /Enhancements/Graphics/General/0210-519)", StyleBox["\nGraphics`Graphics`\nUtilities`FilterOptions`", "Input"] }], "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Interface", "Section", InitializationCell->True], Cell["\<\ This part declares the publicly visible functions, options, and \ values.\ \>", "Text", InitializationCell->True], Cell[CellGroupData[{ Cell["Set up the package context, including public imports", "Subsection", InitializationCell->True], Cell["\<\ BeginPackage[\"Graphics`EnhancedGraphics`\", \ \"Graphics`Graphics`\", \"Utilities`FilterOptions`\"];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Usage messages for the exported functions and the context \ itself\ \>", "Subsection", InitializationCell->True], Cell["\<\ $LineStyle::usage = \"$LineStyle gives the default setting for the \ line style in Graphics objects (lines, axes and tick marks). It should \ evaluate to a graphics directive like Thickness or \ AbsoluteThickness.\";\ \>", "Input", InitializationCell->True], Cell["\<\ $PlotStyle::usage = \"$PlotStyle gives the default style(s) to use \ for lines or points to be plotted.\";\ \>", "Input", InitializationCell->True], Cell["\<\ $ColoredPlotStyle::usage = $DashedPlotStyle::usage = $ColoredDashedPlotStyle::usage = \"$ColoredPlotStyle, DashedPlotStyle and \ $ColoredDashedPlotStyle are sample plot styles for Plot and \ ListPlot.\";\ \>", "Input", InitializationCell->True], Cell["\<\ Pt::usage = \"Pt[x] converts the length x (in cm) to PostScript \ points as needed for the ImageSize option.\";\ \>", "Input", InitializationCell->True], Cell["\<\ ExportEPS::usage = \"ExportEPS[\\\"file.eps\\\", graphics] exports \ the graphics object in EPS format. By default, required Math fonts are \ embedded. This behaviour can be switched off with the option \ IncludeFonts->False. The Mathematica font directory must be set by the option \ FontsDirectory.\";\ \>", "Input", InitializationCell->True], Cell["\<\ RemoveClip::usage = \"RemoveClip is an option for ExportEPS that \ specifies whether PostScript clip commands should be removed from the EPS \ file. This is useful for labels outside the standard plot region which are \ otherwise not visible. The default is RemoveClip->False. This feature is only \ supported on Unix systems.\";\ \>", "Input", InitializationCell->True], Cell["\<\ IncludeFonts::usage = \"IncludeFonts is an option for ExportEPS \ that specifies whether Math fonts should be embedded in exported EPS files or \ not. The default is IncludeFonts->True. This feature is only supported on \ Unix systems using Mathematica up to version 4.1.\";\ \>", "Input", InitializationCell->True], Cell["\<\ FontsDirectory::usage = \"FontsDirectory is an option for ExportEPS \ that specifies the path to the Mathematica Type 1 fonts. The default is \ FontsDirectory->$FontsDirectory.\";\ \>", "Input", InitializationCell->True], Cell["\<\ $FontsDirectory::usage = \"$FontsDirectory gives the default \ setting for the FontsDirectory option in the ExportEPS function.\";\ \>", \ "Input", InitializationCell->True], Cell["\<\ TickPosition::usage = \"TickPosition[min, max, num] returns a list \ of at most num nicely rounded positions between min and max. These can be \ used for tick mark positions. TickPosition[min, max, Automatic] returns \ {majorTicks, minorTicks} where majorTicks and minorTicks are a list of the \ major and minor tick marks respectively as chosen according to Mathematica's \ defaults.\";\ \>", "Input", InitializationCell->True], Cell["\<\ TickFunction::usage = \"TickFunction is a function that can be used \ with the Ticks option to alter the appearance of tick marks.\";\ \>", "Input",\ InitializationCell->True], Cell["\<\ TicksOnly::usage = \"TicksOnly is a function that can be used with \ the Ticks option to produce tick marks without labels (using \ TickFunction).\";\ \>", "Input", InitializationCell->True], Cell["\<\ MajorLength::usage = \"MajorLength is an option of TickFunction \ that specifies the length of major tick marks. MajorLength -> {0.00625, 0} \ specifies that major ticks should extend 0.00625 inside the axis and not \ outside.\";\ \>", "Input", InitializationCell->True], Cell["\<\ MinorLength::usage = \"MinorLength is an option of TickFunction \ that specifies the length of minor tick marks. MinorLength -> {0.003125, 0} \ specifies that minor ticks should extend 0.003125 inside the axis and not \ outside.\";\ \>", "Input", InitializationCell->True], Cell["\<\ MajorStyle::usage = \"MajorStyle is an option of TickFunction that \ specifies the style in which major tick marks should be rendered.\";\ \>", \ "Input", InitializationCell->True], Cell["\<\ MinorStyle::usage = \"MinorStyle is an option of TickFunction that \ specifies the style in which minor tick marks should be rendered.\";\ \>", \ "Input", InitializationCell->True], Cell["\<\ TextFunction::usage = \"TextFunction is an option of TickFunction \ that specifies a function to process tick mark labels. The default is \ TextFunction->TrimText. Mathematica's standard labels may be reproduced by \ TextFunction->Automatic.\";\ \>", "Input", InitializationCell->True], Cell["\<\ TrimText::usage = \"TrimText is a function that can be used as the \ value of the TextFunction option of TickFunction to make sure that all tick \ mark labels are the same length.\";\ \>", "Input", InitializationCell->True], Cell["\<\ TickLabels::usage = \"TickLabels is an option of TickFunction that \ gives the positions and text to use for tick-labels. The value of TickLabels \ must be {{pos1, lab1}, {pos2, lab2}, ..}.\";\ \>", "Input", InitializationCell->True], Cell["\<\ TickNumbers::usage = \"TickNumbers is an option of TickFunction \ that gives the number of major and minor tick marks. The default setting is \ TickFunction->{8,32}.\";\ \>", "Input", InitializationCell->True], Cell["\<\ ContourStyle::usage = ContourStyle::usage <> \" If both contour \ lines and a list of styles are specified, the styles are applied in a \ one-to-one correspondence.\";\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["Error messages for the exported objects", "Subsection", InitializationCell->True], Cell["\<\ ExportEPS::notsupp = \"The IncludeFonts and RemoveClip options are \ only supported on Unix systems! Use IncludeFonts->False and \ RemoveClip->False.\";\ \>", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Implementation", "Section", InitializationCell->True], Cell["\<\ This part contains the actual definitions and any auxiliary \ functions that should not be visible outside.\ \>", "Text"], Cell[CellGroupData[{ Cell["Begin the private context (implementation part)", "Subsection", InitializationCell->True], Cell["Begin[\"`Private`\"];", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Unprotect any system functions for which definitions will be made\ \ \>", "Subsection", InitializationCell->True], Cell["protected = Unprotect[ ContourPlot ];", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["\<\ Definition of auxiliary functions and local (static) \ variables\ \>", "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Support function for", "Input"], StyleBox[" ExportEPS[]: fixImageSize[]", "Input"] }], "Subsubsection", InitializationCell->True], Cell["\<\ This function works around two bugs in Mathematica's Export \ function (Version 4.0): First, if the ImageSize option is already specified in the Graphics object, \ the value given to Export does not override the option setting of the \ Graphics object. The new ImageSize setting thus has to be embedded directly \ in the Graphics object. Second, if the aspect ratio is greater than 1 and only the width is specified \ via the ImageSize option, Export uses the ImageSize value for the height of \ the EPS file (in contrast to the notebook frontend which uses the given value \ for the width of the image in all cases). We thus provide both the width and \ the height to get a properly scaled EPS file.\ \>", "Text"], Cell["\<\ fixImageSize[gr_, opts___?OptionQ] := Module[{imgsize, aspr}, imgsize = ImageSize /. {opts} /. Options[gr]; If[NumericQ[imgsize], (* only image width specified *) aspr = AspectRatio /. AbsoluteOptions[gr, AspectRatio]; gr /. (Rule[ImageSize, _] -> Rule[ImageSize, {imgsize, aspr * \ imgsize}]), (* Automatic or width/height pair specified *) gr /. (Rule[ImageSize, _] -> Rule[ImageSize, imgsize]) ] ];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["Support functions for TickFunction[]", "Input"]], \ "Subsubsection", InitializationCell->True], Cell[TextData[{ "Check number of major and minor tick marks. Automatic is used to invoke ", StyleBox["Mathematica", FontSlant->"Italic"], "'s internal routines:" }], "Text"], Cell["\<\ checkTickNumbers[Automatic] := Automatic; checkTickNumbers[{x_Integer, y_Integer}] := \tIf[x > 0 && y > 0, {x,y}, checkTickNumbers[]]; checkTickNumbers[_] := {8, 32};\ \>", "Input", InitializationCell->True], Cell[TextData[{ "If the tick label is approximately integer, trim its decimals and return \ integer numbers. For labels with magnitude ", Cell[BoxData[ \(TraditionalForm\`\(\(>\)\(10\^5\)\)\)]], ", the real format is kept so that the plot routine finally produces labels \ in scientific format :" }], "Text"], Cell["\<\ trimDecimal[x_?VectorQ] := \tMap[If[Log[10.0, Abs[#]] < 5.0 && # == Round[#], Round[#], #, #]&, x]\ \>", \ "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["Support functions for TrimText[]", "Input"]], \ "Subsubsection", InitializationCell->True], Cell[TextData[{ "Determine number of total and fractional digits. The last digit is \ generally discarded to avoid rounding errors. Furthermore, if the last digit \ is 9, all trailing 9s are discarded. This works around a numerical \ inconsistency in ", StyleBox["RealDigits", "Input"], ": At least in ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.1, \n", StyleBox["RealDigits[5.35]", "Input"], " returns ", StyleBox["{{5,3,4,9,9,9,...},1}", "Input"], " instead of ", StyleBox["{{5,3,5,0,0,0,...},1}", "Input"], ". " }], "Text"], Cell["\<\ determineDigits[num_?NumericQ] := \tModule[{digs, len, total, fractional}, {digs, len} = RealDigits[num]; \t\tIf[Last[digs] == 9, \t\t\ttotal = Max[1, Length[digs //. {x__, 9} -> {x}]], \t\t\ttotal = Length[Drop[digs,-1] //. {x__, 0} -> {x}] \t\t]; \t\tfractional = Max[0, total - len]; \t\t{total, fractional} \t];\ \>", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Definition of the exported functions", "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[TextData[StyleBox["$LineStyle", "Input"]], "Subsubsection", InitializationCell->True], Cell["The new default line style used in graphics objects:", "Text"], Cell["$LineStyle = AbsoluteThickness[0.5];", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["Pt[]", "Input"]], "Subsubsection", InitializationCell->True], Cell["\<\ This function converts length specification in centimeters to \ PostScript points:\ \>", "Text"], Cell["Attributes[Pt]={Listable};", "Input", InitializationCell->True], Cell["\<\ Pt[cm_]:=(cm/2.54)*72; Pt[cm1_,cm2_]:={Pt[cm1],Pt[cm2]};\ \>", "Input", InitializationCell->True, StyleMenuListing->None] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["$FontsDirectory", "Input"]], "Subsubsection", InitializationCell->True], Cell["The standard fonts directory (default installation path):", "Text"], Cell["\<\ $FontsDirectory = $TopDirectory <> \"/SystemFiles/Fonts/Type1/\";\ \ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["ExportE", "Input"], StyleBox["PS", "Input"], StyleBox["[]", "Input"] }], "Subsubsection", InitializationCell->True], Cell[TextData[{ StyleBox["ExportEPS", "Input"], " is basically a wrapper function around emmathfnt. It uses the standard ", StyleBox["Export", "Input"], " function together with a Unix pipe to achieve the desired result. It can \ thus include fonts only on a Unix system. Starting with ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.2.0, font handling in EPS files changed and is no longer supported by \ ", StyleBox["emmathfnt", FontSlant->"Italic"], ", so this option is set to ", StyleBox["True", "Input"], " only if all requirements are fulfilled (see ", ButtonBox["Reference/Limitation", ButtonData:>"Reference/Limitation", ButtonStyle->"Hyperlink"], "):" }], "Text"], Cell["\<\ If[($OperatingSystem == \"Unix\") && ($VersionNumber < 4.2), Options[ExportEPS] = { IncludeFonts -> True, RemoveClip -> False, FontsDirectory :> $FontsDirectory }, Options[ExportEPS] = { IncludeFonts -> False, RemoveClip -> False, FontsDirectory :> $FontsDirectory } ];\ \>", "Input", InitializationCell->True], Cell[TextData[{ StyleBox["ExportEPS", "Input"], " also fixes some problems with the ", StyleBox["ImageSize", "Input"], " option (see discussion above) and with clipped PostScript objects: If \ text objects are placed outside the automatic plot region via the ", StyleBox["Epilog", "Input"], " option, they will get clipped in the exported EPS without respect to the \ chosen image size. If wanted, the PostScript clip command is thus generally \ removed with a sed script." }], "Text"], Cell["\<\ ExportEPS[filename_String, gr_, opts___?OptionQ] := Module[{opt, cmd1, cmd2, pipe}, opt = Join[{opts}, Options[ExportEPS]]; If[$OperatingSystem =!= \"Unix\" && (IncludeFonts || RemoveClip) /. opt, Message[ExportEPS::notsupp]; Return[$Failed] ]; cmd1 = \"sed -e 's/^clip$//'\"; cmd2 = \"emmathfnt -d \" <> (FontsDirectory /. opt); (* construct pipe *) Which[ RemoveClip && IncludeFonts /. opt, pipe = \"!\" <> cmd1 <> \" | \" <> cmd2 <> \" > \" <> \ filename, RemoveClip && !IncludeFonts /. opt, pipe = \"!\" <> cmd1 <> \" > \" <> filename, !RemoveClip && IncludeFonts /. opt, pipe = \"!\" <> cmd2 <> \" > \" <> filename, !RemoveClip && !IncludeFonts /. opt, pipe = filename ]; (* standard export *) Export[pipe, fixImageSize[gr, opts], \"EPS\", FilterOptions[Export, opts]] ];\ \>", "Input", InitializationCell->True, StyleMenuListing->None] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["TickPosition[]", "Input"]], "Subsubsection", InitializationCell->True], Cell[TextData[{ "Determine the best tick positions mimicking Mathematica's default \ positions. This and the following functions are adapted from the package ", StyleBox["ExtendGraphics`Ticks`", "Input"], " by Tom Wickham-Jones." }], "Text"], Cell["\<\ TickPosition[x0_?NumericQ, x1_?NumericQ, num_Integer?Positive] := Module[{dist, scale, min, delta, space}, \t\tspace = {1.0, 2.0, 2.5, 5.0, 10.0}; dist = (x1-x0)/num; scale = 10.0^Floor[Log[10, dist]]; dist = dist / scale; If[dist < 1.0, dist *= 10.0; scale /= 10.0]; If[dist >= 10.0, dist /= 10.0; scale *= 10.0]; delta = First[Select[space, (# >= dist)&]] scale; min = Ceiling[x0/delta]*delta; \t\tTable[Floor[x/delta + 0.5]*delta, {x, min, x1, delta}] \t];\ \>", "Input", InitializationCell->True], Cell["\<\ TickPosition[x0_?NumericQ, x1_?NumericQ, \t{numMaj_Integer?Positive, numMin_Integer?Positive}] := \t\t{TickPosition[x0, x1, numMaj], TickPosition[x0, x1, numMin]};\ \>", \ "Input", InitializationCell->True], Cell[TextData[{ "We copy ", StyleBox["Mathematica", FontSlant->"Italic"], "'s default positions by invoking ", StyleBox["Show[Graphics[{}]]", "Input"], " on the desired plot range. Caution: This is only approximately correct as \ ", StyleBox["Mathematica ", FontSlant->"Italic"], "calls the TickFunction with a slightly larger upper and lower bound, but \ hopefully it's good enough. The passed values for ", StyleBox["x0", "Input"], " and ", StyleBox["x1", "Input"], " are probably the ones of the frame box, not the specified plot range." }], "Text"], Cell["\<\ TickPosition[x0_?NumericQ, x1_?NumericQ, Automatic] := \tModule[{g, ticks, maj, min}, \t\tg = Show[Graphics[{}], \t\t\t\tPlotRange -> {x0, x1}, \t\t\t\tAxes -> True, \t\t\t\tTicks -> {None, Automatic}, \t\t\t\tDisplayFunction -> Identity \t\t\t]; \t\tticks = FullOptions[g, Ticks][[2]]; \t\tmaj = #[[1]]& /@ Select[ticks, (#[[2]] =!= \"\")&]; \t\tmin = #[[1]]& /@ Select[ticks, (#[[2]] == \"\")&]; \t\t \t\t{maj, min} \t];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["TickFunction[]", "Input"]], "Subsubsection", InitializationCell->True], Cell["\<\ Options[TickFunction] =\t{ \tMajorLength -> {0.00625, 0}, \tMinorLength -> {0.003125, 0}, \tMajorStyle :> Flatten[{$LineStyle}], \tMinorStyle :> Flatten[{$LineStyle}], \tTextFunction -> TrimText, \tTickLabels -> Automatic, \tTickNumbers -> Automatic \t};\ \>", "Input", InitializationCell->True], Cell["\<\ TickFunction[x0_, x1_, opts___?OptionQ] := Module[{opt, majlen, minlen, majstyle, minstyle, textfun, labs, tnums, maj, min}, \t\topt = Join[{opts}, Options[TickFunction]]; majlen = MajorLength /. opt; minlen = MinorLength /. opt; majstyle = MajorStyle /. opt; minstyle = MinorStyle /. opt; textfun = TextFunction /. opt; labs = TickLabels /. opt ; tnums = checkTickNumbers[TickNumbers /. opt]; If[textfun === Automatic, textfun = trimDecimal]; {maj, min} = TickPosition[x0, x1, tnums]; min = Complement[min, maj]; \t\tmaj = If[MatrixQ[labs], \t\t Map[{#, \"\"}&, maj], \t\t Transpose[{maj, textfun[maj]}] \t\t ]; maj = Map[{#[[1]], #[[2]], majlen, majstyle}&, maj] ; \t\tIf[Apply[Plus, minlen] =!= 0, \t\t min = Map[{#, \"\", minlen, minstyle}&, min]; \t\t maj = Join[maj, min] \t\t]; \t\tIf[MatrixQ[labs], \t\t maj = Join[maj, Map[Join[#, {{0,0}}]&, labs]] \t\t]; \t\tmaj \t];\ \>", "Input", InitializationCell->True], Cell[TextData[{ "A second method to produce ticks withouth labels would be to strip labels \ from existing ticks. Cf. ", StyleBox["Graphics`Graphics`Private`striplabels", "Input"], " for an implementation." }], "Text"], Cell["\<\ TicksOnly = TickFunction[#1, #2, TextFunction -> (Table[\"\", {Length[#]}]&)]&;\ \>", \ "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[StyleBox["TrimText[]", "Input"]], "Subsubsection", InitializationCell->True], Cell["\<\ TrimText[x_ /; VectorQ[x, NumericQ]] := Module[{test, min, max, res}, test = DeleteCases[Chop[x], 0 | 0.0]; \t\t{max, min} = Max /@ Transpose[Map[determineDigits, test]]; \t\tres = If[min == 0, \t\t Map[ToString[Round[#]]&, x], \t\t Map[ToString[PaddedForm[#, {max+min, min}]]&, x] \t\t ]; \t\tMap[StringReplace[#, \" \" -> \"\"]&, res] \t];\ \>", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Definitions for system functions", "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["C", "Input"], StyleBox["ontourPlot[", "Input"], StyleBox["]", "Input"] }], "Subsubsection", InitializationCell->True], Cell[TextData[{ "Cf. ", StyleBox["Programming in Mathematica", FontSlant->"Italic"], ", ch. 8.3.2:" }], "Text"], Cell["$ContourPlotActive = True;", "Input", InitializationCell->True], Cell[TextData[{ "Styles of contour lines are applied to the drawn contour lines, not to the \ explicitly specified contour lines via the ", StyleBox["Contour", "Input"], StyleBox["s", "Input"], " option. If any specified contour lines are not plotted because they are \ out of the value range of the given function, styles will be mismatched! This \ cannot happen when using e.g. the default ", StyleBox["Contours->10", "Input"], ".\nThe following code works around that problem: If the ", StyleBox["Contours", "Input"], " option specifies an explicit list of contour levels (", StyleBox["ListQ[cn]", "Input"], ") and the ", StyleBox["ContourStyle", "Input"], " option is a list of list of graphics styles (", StyleBox["And @@ ListQ /@ cs", "Input"], "), we adjust the options settings to avoid any mismatch. The contour plot \ is first generated to determine its maximum and minimum values. The contour \ levels and contour styles (if necessary, cyclically repeated) are then \ arranged in a one-to-one correspondence list {{", StyleBox["level", FontSlant->"Italic"], ", {", StyleBox["styles", FontSlant->"Italic"], "...}}...}. All levels outside of the value range are discarded and the \ remaining levels sorted in ascending order. The result is split up again to \ obtain a list of contours and a list of corresponding contour styles that are \ actually rendered.\nTo make sure that all explicitly specified contour lines \ are actually drawn, ", StyleBox["PlotRange", "Input"], " is set to ", StyleBox["All", "Input"], ". Cf. MathGroup discussion ", ButtonBox["http://library.wolfram.com/mathgroup/archive/1999/Jan/msg00200.\ html", ButtonData:>{ URL[ "http://library.wolfram.com/mathgroup/archive/1999/Jan/msg00200.html"], None}, ButtonStyle->"Hyperlink"], "." }], "Text"], Cell["\<\ ContourPlot[f__, opts___?OptionQ] /; $ContourPlotActive := \tBlock[{$ContourPlotActive = False}, \t\tModule[{cn, cs, dspl, cp, min, max, sl}, \t\t\tcn = Contours /. {opts} /. Options[ContourPlot]; \t\t\tcs = ContourStyle /. {opts} /. Options[ContourPlot]; \t\t\tdspl = DisplayFunction /. {opts} /. Options[ContourPlot]; \t\t\tWhich[ \t\t\t\t(* Contours and corresponding styles explicitly specified *) \t\t\t\tListQ[cn] && (And @@ (ListQ /@ cs)), \t\t\t\t\tcp = ContourPlot[f, DisplayFunction -> Identity, opts]; \t\t\t\t\tIf[Head[cp] === ContourGraphics, \t\t\t\t\t\t{min, max} = {Min[First[cp]], Max[First[cp]]}; \t\t\t\t\t\tsl = Select[ \t\t\t\t\t\t\t\tTranspose[{cn, PadRight[cs, Length[cn], cs]}], \t\t\t\t\t\t\t\t(#[[1]] >= min && #[[1]] <= max)& \t\t\t\t\t\t\t]; \t\t\t\t\t\t{cn, cs} = If[Length[sl] > 0, \t\t\t\t\t\t\t\tTranspose[Sort[sl]], \t\t\t\t\t\t\t\t{cn, cs} \t\t\t\t\t\t\t]; \t\t\t\t\t\tShow[cp, Contours -> cn, ContourStyle -> cs, PlotRange->All, \t\t\t\t\t\t\tDisplayFunction -> dspl, FilterOptions[ContourGraphics, opts]], \t\t\t\t\t\t(* Error, so just return result: *) \t\t\t\t\t\tcp \t\t\t\t\t], \t\t\t\t\t \t\t\t\t(* Contours explicitly specified *) \t\t\t\tListQ[cn], \t\t\t\t\tContourPlot[f, PlotRange->All, opts], \t\t\t\t \t\t\t\t(* Else *) \t\t\t\tTrue, \t\t\t\t\tContourPlot[f, opts] \t\t\t] \t\t] \t];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Plot", "Input"], " options" }], "Subsubsection", InitializationCell->True], Cell["$TextStyle = {FontFamily -> \"Helvetica\", FontSize -> 10.0};", "Input", InitializationCell->True], Cell["$FormatType = TraditionalForm;", "Input", InitializationCell->True], Cell[TextData[{ "Dashing or color directives in ", StyleBox["$LineStyle", "Input"], " will be overwritten by the explicit settings in the ", StyleBox["PlotStyle", "Input"], " option:" }], "Text"], Cell["\<\ $ColoredPlotStyle = { \tFlatten[{$LineStyle,GrayLevel[0]}], \tFlatten[{$LineStyle,RGBColor[1,0,0]}], \tFlatten[{$LineStyle,RGBColor[0,0,1]}], \tFlatten[{$LineStyle,RGBColor[0,1,0]}], \tFlatten[{$LineStyle,RGBColor[1,0,1]}], \tFlatten[{$LineStyle,RGBColor[0,1,1]}], \tFlatten[{$LineStyle,RGBColor[1,1,0]}] \t};\ \>", "Input", InitializationCell->True], Cell["$PlotStyle = $ColoredPlotStyle;", "Input", InitializationCell->True], Cell["These styles are optimized for PostScript printing:", "Text"], Cell["\<\ $DashedPlotStyle = { \tFlatten[{$LineStyle,AbsoluteDashing[{}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{0.5,2}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,4}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{6,4}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,2,0.5,2}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{6,2,0.5,2}]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,2,0.5,2,0.5,2}]}] \t};\ \>", "Input", InitializationCell->True], Cell["\<\ $ColoredDashedPlotStyle = { \tFlatten[{$LineStyle,AbsoluteDashing[{}],GrayLevel[0]}], \tFlatten[{$LineStyle,AbsoluteDashing[{0.5,2}],RGBColor[1,0,0]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,4}],RGBColor[0,0,1]}], \tFlatten[{$LineStyle,AbsoluteDashing[{6,4}],RGBColor[0,1,0]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,2,0.5,2}],RGBColor[1,0,1]}], \tFlatten[{$LineStyle,AbsoluteDashing[{6,2,0.5,2}],RGBColor[0,1,1]}], \tFlatten[{$LineStyle,AbsoluteDashing[{3,2,0.5,2,0.5,2}],RGBColor[1,1,0]}] \t};\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[Plot, Axes -> False, Frame -> True, PlotStyle :> $PlotStyle, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ListPlot, Axes -> False, Frame -> True, PlotStyle :> $PlotStyle, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ParametricPlot, Axes -> False, Frame -> True, PlotStyle :> $PlotStyle, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ContourPlot, Axes -> False, Frame -> True, ContourStyle :> $LineStyle, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ListContourPlot, Axes -> False, Frame -> True, ContourStyle :> $LineStyle, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell[TextData[{ StyleBox["MeshStyle", "Input"], " expects a list of graphics directives, so we have to make sure that ", StyleBox["$LineStyle", "Input"], " gets expanded to a list:" }], "Text"], Cell["\<\ SetOptions[DensityPlot, Axes -> False, Frame -> True, MeshStyle :> Flatten[{$LineStyle}], AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ListDensityPlot, Axes -> False, Frame -> True, MeshStyle :> Flatten[{$LineStyle}], AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[Plot3D, Axes -> True, Boxed -> True, MeshStyle :> Flatten[{$LineStyle}], AxesStyle :> $LineStyle, BoxStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction, TickFunction} ];\ \>", "Input", InitializationCell->True], Cell["\<\ SetOptions[ListPlot3D, Axes -> True, Boxed -> True, MeshStyle :> Flatten[{$LineStyle}], AxesStyle :> $LineStyle, BoxStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction, TickFunction} ];\ \>", "Input", InitializationCell->True], Cell[TextData[{ StyleBox["ParametricPlot3D", "Input"], " seems to have no option to specify its line or mesh style, so we only \ change the axes:" }], "Text"], Cell["\<\ SetOptions[ParametricPlot3D, Axes -> True, Boxed -> True, AxesStyle :> $LineStyle, BoxStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction, TickFunction} ];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Graphics`Graphics`", "Input"], " options" }], "Subsubsection", InitializationCell->True], Cell[TextData[{ "The logarithmic plot routines of ", StyleBox["Graphics`Graphics`", "Input"], " inherit our changed options, but not all settings are compatible. We try \ to work around this problem by manually correcting some of the options. The \ problem arises due to an insufficient ticks handling in ", StyleBox["Graphics`Graphics`", "Input"], " and is corrected in the subsection below." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ " ", StyleBox["Erroneous tick handling in ", FontWeight->"Bold"], StyleBox["Graphics`Graphics`", "Input"] }], "Text"], Cell["Begin[\"Graphics`Graphics`Private`\"];", "Input", InitializationCell->True], Cell[TextData[{ " A bug in ", StyleBox["Graphics`Graphics`", "Input"], " (as released with ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.0) prevents the use of ", StyleBox["TickFunction", "Input"], " for labelling logarithmic scales. The cause of this bug is a wrong \ invocation of the original tick-specifying function in ", StyleBox["transformticks", "Input"], ". The following modification (", StyleBox["Graphics.m", "Input"], " of ", StyleBox["Mathematica", FontSlant->"Italic"], " 4.0, line 711) fixes this problem:" }], "Text"], Cell["\<\ transformticks[tfun_, f_, scale_, flag_:False] := Composition[transformticks[#, f, scale]&, tfun[10^#1, 10^#2]&]\ \>", \ "Input", InitializationCell->True], Cell["\<\ It is then possible to evaluate the following plot, for \ example:\ \>", "Text"], Cell[BoxData[ \(\(LogPlot[Exp[x], {x, 1.05, 4}, FrameTicks \[Rule] {TickFunction, TickFunction, TicksOnly, TicksOnly}];\)\)], "Input"], Cell[TextData[{ "Note that, in any case, ", StyleBox["TickFunction", "Input"], " does not work for logarithmic axes if it returns a tick mark at 0.0." }], "Text"], Cell[TextData[{ "Furthermore, specifying ", StyleBox["Automatic", "Input"], " for a linear axis where labels are stripped by default (top or right of \ frame) effectively fails to substitute ", StyleBox["Automatic", "Input"], ". This is solved by modifying line 696 of ", StyleBox["Graphics.m", "Input"], ":" }], "Text"], Cell["\<\ transformticks[Automatic, fun_, _, flag_:False] := If[TrueQ[flag] && (fun =!= Automatic), Composition[striplabels, fun], \ fun]\ \>", "Input", InitializationCell->True], Cell["End[ ];", "Input", InitializationCell->True] }, Closed]], Cell[TextData[{ "All options of plot routines in ", StyleBox["Graphics`Graphics`", "Input"], " that inherit their options are corrected. Routines that set their options \ individually such as ", StyleBox["Histogram", "Input"], " are not changed." }], "Text"], Cell["\<\ Options[LogPlot] = Options[ParametricPlot]; SetOptions[LogPlot, Ticks -> {TickFunction, Automatic}, FrameTicks -> {TickFunction, Automatic, TicksOnly, Automatic} ]; Options[LinearLogPlot] = Options[LogPlot];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[LogLinearPlot] = Options[ParametricPlot]; SetOptions[LogLinearPlot, Ticks -> {Automatic, TickFunction}, FrameTicks -> {Automatic, TickFunction, Automatic, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[LogLogPlot] = Options[ParametricPlot]; SetOptions[LogLogPlot, Ticks -> {Automatic, Automatic}, FrameTicks -> {Automatic, Automatic, Automatic, Automatic} ];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[LogListPlot] = Options[ListPlot]; SetOptions[LogListPlot, Ticks -> {TickFunction, Automatic}, FrameTicks -> {TickFunction, Automatic, TicksOnly, Automatic} ]; Options[LinearLogListPlot] = Options[LogListPlot];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[LogLinearListPlot] = Options[ListPlot]; SetOptions[LogLinearListPlot, Ticks -> {Automatic, TickFunction}, FrameTicks -> {Automatic, TickFunction, Automatic, TicksOnly} ];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[LogLogListPlot] = Options[ListPlot]; SetOptions[LogLogListPlot, Ticks -> {Automatic, Automatic}, FrameTicks -> {Automatic, Automatic, Automatic, Automatic} ];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[PolarPlot] = Options[ParametricPlot]; Options[PolarListPlot] = Options[ListPlot];\ \>", "Input", InitializationCell->True], Cell["\<\ Options[ErrorListPlot] = Options[Graphics]; SetOptions[ErrorListPlot, Axes -> False, Frame -> True, AxesStyle :> $LineStyle, FrameStyle :> $LineStyle, Ticks -> {TickFunction, TickFunction}, FrameTicks -> {TickFunction, TickFunction, TicksOnly, TicksOnly} ];\ \>", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Restore protection of system symbols", "Subsection", InitializationCell->True], Cell["Protect[ Evaluate[protected] ];", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["End the private context", "Subsection", InitializationCell->True], Cell["End[ ];", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Epilog", "Section", InitializationCell->True], Cell["This section protects exported symbols and ends the package.", "Text"], Cell[CellGroupData[{ Cell["Protect exported symbol", "Subsection", InitializationCell->True], Cell["\<\ Protect[ Pt, ExportEPS, FontsDirectory, IncludeFonts, RemoveClip, TickFunction, TickPosition, TrimText, TicksOnly, TickLabels, TickNumbers, TextFunction, MajorLength, MajorStyle, MinorLength, MinorStyle ];\ \>", "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell["End the package context", "Subsection", InitializationCell->True], Cell["EndPackage[ ]", "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell["Examples, Tests", "Section"], Cell[BoxData[ \(\(Needs["\"];\)\)], "Input"], Cell[BoxData[ \(\(?Graphics`EnhancedGraphics`*\)\)], "Input"], Cell[BoxData[ \(\(p = Plot[{Sin[x], Cos[x]}, {x, 0, 2\ \[Pi]}];\)\)], "Input"], Cell[BoxData[ \(\(p = Plot[Sin[x], {x, 0, 2}, Frame \[Rule] False, Axes \[Rule] True, Ticks \[Rule] \((TickFunction[#1, #2, MajorStyle \[Rule] Flatten[{$LineStyle}], MajorLength \[Rule] {0.004, 0.004}, MinorLength \[Rule] {0, 0}, TextFunction \[Rule] TrimText] &)\)];\)\)], "Input"], Cell[BoxData[ \(\(p = Plot[{x - 0.35, x - 0.25, x - 0.15, x - 0.05, x + 0.05, x + 0.15, x + 0.25, x + 0.35}, {x, 0, 1}, PlotRange \[Rule] {0, 1}, AspectRatio \[Rule] Automatic];\)\)], "Input"], Cell[BoxData[ \(\(p = Plot[{x - 0.35, x - 0.25, x - 0.15, x - 0.05, x + 0.05, x + 0.15, x + 0.25, x + 0.35}, {x, 0, 1}, PlotRange \[Rule] {0, 1}, AspectRatio \[Rule] Automatic, PlotStyle \[Rule] $DashedPlotStyle];\)\)], "Input"], Cell[BoxData[ \(\(p = Plot[{x - 0.35, x - 0.25, x - 0.15, x - 0.05, x + 0.05, x + 0.15, x + 0.25, x + 0.35}, {x, 0, 1}, PlotRange \[Rule] {0, 1}, AspectRatio \[Rule] Automatic, PlotStyle \[Rule] $ColoredDashedPlotStyle];\)\)], "Input"], Cell[BoxData[ \(\($LineStyle = AbsoluteThickness[2.0];\)\)], "Input"], Cell[BoxData[ \(\(p = ParametricPlot[{{Sin[t], Cos[t]}, {Sin[0.5 t], Cos[0.8 t]}}, {t, 0, 2 \[Pi]}];\)\)], "Input"], Cell[BoxData[ \(\(p = ContourPlot[x^2 + y^2, {x, \(-1\), 1}, {y, \(-1\), 1}];\)\)], "Input"], Cell[BoxData[ \(\(p = DensityPlot[x^2 + y^2, {x, \(-1\), 1}, {y, \(-1\), 1}];\)\)], "Input"], Cell[BoxData[ \(\(p = Plot3D[Sin[x] Cos[y], {x, \(-\[Pi]\), \[Pi]}, {y, \(-\[Pi]\), \[Pi]}];\)\)], \ "Input"], Cell[BoxData[ \(\(p = ParametricPlot3D[{Cos[x], Sin[x], 0.01 x^2}, {x, 0, 6 \[Pi]}];\)\)], "Input"], Cell[TextData[{ "The ", StyleBox["ContourPlot", "Input"], " routine is modified so that contour levels can be specified together with \ corresponding styles:" }], "Text"], Cell[BoxData[ \(\(p = ContourPlot[x^2 + y^2, {x, \(-1\), 1}, {y, \(-1\), 1}, ContourShading \[Rule] False, Contours \[Rule] {1.0, \(-1.0\), 0.1, 0.55}, ContourStyle \[Rule] {{$LineStyle, RGBColor[1, 0, 0]}, {RGBColor[0, 1, 1]}, {RGBColor[0, 1, 0]}, {AbsoluteDashing[{5, 5}], RGBColor[0, 0, 1]}}];\)\)], "Input"], Cell[TextData[{ "Some of the advanced plotting routines from ", StyleBox["Graphics`Graphics`", "Input"], " are also automatically using the new options. Using ", StyleBox["TickFunction", "Input"], ", however, is only supported for non-scaled axes:" }], "Text"], Cell[BoxData[{ \(\(plots = {LogPlot, LogLinearPlot, LogLogPlot};\)\), "\n", \(\(Map[#[{x^2, Exp[x], Log[x]}, {x, 1.01, 2.0}, PlotRange \[Rule] {{0.999, 2.0}, All}] &, plots];\)\)}], "Input"], Cell[BoxData[{ \(\(plots = {LogListPlot, LogLinearListPlot, LogLogListPlot};\)\), "\n", \(\(funs = {Exp[x], Log[x], x^2};\)\), "\n", \(\(MapThread[#1[Table[{x, #2}, {x, 1.01, 2.01, 0.05}], PlotRange \[Rule] {{0.999, 2.0}, All}] &, {plots, funs}];\)\)}], "Input"], Cell[BoxData[ \(\(p = PolarPlot[{1, t/\((2 \[Pi])\)}, {t, 0, 2 \[Pi]}, AspectRatio \[Rule] Automatic];\)\)], "Input"], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], "'s default image width is 288 pt, 4 inch or 10.16 cm:" }], "Text"], Cell[BoxData[ \(Pt[10.16]\)], "Input"], Cell["\<\ We now prepare a high-quality plot for EPS export. The standard \ tick marks are altered, the image size is explicitly given, and the color \ output is suppressed. A plot label is freely positioned using the Epilog \ option:\ \>", "Text"], Cell[BoxData[{ \(\($LineStyle = AbsoluteThickness[0.5];\)\), "\[IndentingNewLine]", \(\(p = Plot[{Sin[x], Cos[x]}, {x, 0, 2\ \[Pi]}, FrameLabel \[Rule] {"\<\[Alpha]\>", "\"}, FrameTicks \[Rule] {TickFunction[#1, \ #2, \ TickNumbers \[Rule] {15, 30}] &, TickFunction, TickFunction[#1, \ #2, \ TickNumbers \[Rule] {15, 30}, \ TextFunction \[Rule] \((Table["\<\>", {Length[#]}] &)\)] &, TicksOnly}, ImageSize \[Rule] Pt[15.0, 12.0], ColorOutput \[Rule] None, Epilog \[Rule] {Text["\", Scaled[{0.5, 1.1}], {0, 1}]}];\)\)}], "Input"], Cell["We first try a standard export without fonts:", "Text"], Cell[BoxData[ \(ExportEPS["\", p, RemoveClip \[Rule] False, IncludeFonts \[Rule] False]\)], "Input"], Cell[TextData[{ "To avoid that the label placed via Epilog is clipped, we have to use ", StyleBox["RemoveClip\[Rule]True", "Input"], ". Fonts are now included as well (this only works on Unix systems with ", StyleBox["emmathfnt", FontSlant->"Italic"], " installed and ", StyleBox["Mathematica", FontSlant->"Italic"], " up to version 4.1):" }], "Text"], Cell[BoxData[ \(ExportEPS["\", p, RemoveClip \[Rule] True, IncludeFonts \[Rule] True]\)], "Input"] }, Open ]] }, Open ]] }, FrontEndVersion->"4.0 for X", ScreenRectangle->{{0, 1152}, {0, 864}}, AutoGeneratedPackage->Automatic, CellGrouping->Manual, WindowSize->{905, 794}, WindowMargins->{{Automatic, 0}, {Automatic, 0}}, PrintingPageRange->{Automatic, Automatic}, PrintingOptions->{"PaperSize"->{597.562, 842.375}, "PaperOrientation"->"Portrait", "PostScriptOutputFile":>FrontEnd`FileName[{$RootDirectory, "mnt", "home", \ "slater", "mlischka", "Mathematica", "MyPackages", "ExtendGraphics"}, \ "BetterGraphics.nb.ps", CharacterEncoding -> "ISO8859-1"], "Magnification"->1}, PrivateNotebookOptions->{"ColorPalette"->{RGBColor, 128}}, ShowSelection->True, ShowCellLabel->True, RenderingOptions->{"ObjectDithering"->True, "RasterDithering"->False} ] (*********************************************************************** Cached data follows. If you edit this Notebook file directly, not using Mathematica, you must remove the line containing CacheID at the top of the file. The cache data will then be recreated when you save this file from within Mathematica. ***********************************************************************) (*CellTagsOutline CellTagsIndex->{ "Reference/Limitation"->{ Cell[9165, 295, 71, 1, 28, "Subsubsection", CellTags->"Reference/Limitation"]} } *) (*CellTagsIndex CellTagsIndex->{ {"Reference/Limitation", 52883, 1783} } *) (*NotebookFileOutline Notebook[{ Cell[CellGroupData[{ Cell[1739, 51, 58, 1, 107, "Title"], Cell[1800, 54, 65, 1, 53, "Subsubtitle"], Cell[1868, 57, 533, 8, 68, "Text"], Cell[CellGroupData[{ Cell[2426, 69, 28, 0, 54, "Section"], Cell[CellGroupData[{ Cell[2479, 73, 30, 0, 42, "Subsubsection"], Cell[2512, 75, 92, 3, 32, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2641, 83, 31, 0, 28, "Subsubsection"], Cell[2675, 85, 63, 0, 32, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[2775, 90, 32, 0, 28, "Subsubsection"], Cell[2810, 92, 533, 8, 86, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3380, 105, 34, 0, 28, "Subsubsection"], Cell[3417, 107, 371, 8, 104, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3825, 120, 41, 0, 28, "Subsubsection"], Cell[3869, 122, 19, 0, 32, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[3925, 127, 101, 4, 28, "Subsubsection"], Cell[4029, 133, 19, 0, 32, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[4085, 138, 32, 0, 28, "Subsubsection"], Cell[4120, 140, 2398, 58, 428, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[6555, 203, 33, 0, 28, "Subsubsection"], Cell[6591, 205, 91, 3, 32, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[6719, 213, 31, 0, 28, "Subsubsection"], Cell[6753, 215, 644, 18, 104, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[7434, 238, 33, 0, 28, "Subsubsection"], Cell[7470, 240, 226, 6, 32, "Text"], Cell[7699, 248, 148, 3, 32, "Text"], Cell[7850, 253, 243, 8, 32, "Text"], Cell[8096, 263, 714, 18, 86, "Text"], Cell[8813, 283, 315, 7, 50, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[9165, 295, 71, 1, 28, "Subsubsection", CellTags->"Reference/Limitation"], Cell[9239, 298, 1061, 31, 104, "Text"], Cell[10303, 331, 314, 6, 50, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[10654, 342, 35, 0, 28, "Subsubsection"], Cell[10692, 344, 243, 6, 50, "Text"] }, Closed]], Cell[CellGroupData[{ Cell[10972, 355, 37, 0, 28, "Subsubsection"], Cell[11012, 357, 237, 7, 66, "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[11298, 370, 56, 1, 34, "Section", InitializationCell->True], Cell[11357, 373, 125, 4, 32, "Text", InitializationCell->True], Cell[CellGroupData[{ Cell[11507, 381, 102, 1, 45, "Subsection", InitializationCell->True], Cell[11612, 384, 154, 4, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[11803, 393, 124, 4, 29, "Subsection", InitializationCell->True], Cell[11930, 399, 269, 6, 42, "Input", InitializationCell->True], Cell[12202, 407, 159, 4, 27, "Input", InitializationCell->True], Cell[12364, 413, 258, 7, 72, "Input", InitializationCell->True], Cell[12625, 422, 164, 4, 27, "Input", InitializationCell->True], Cell[12792, 428, 356, 7, 57, "Input", InitializationCell->True], Cell[13151, 437, 382, 7, 57, "Input", InitializationCell->True], Cell[13536, 446, 327, 6, 57, "Input", InitializationCell->True], Cell[13866, 454, 232, 5, 42, "Input", InitializationCell->True], Cell[14101, 461, 185, 5, 42, "Input", InitializationCell->True], Cell[14289, 468, 440, 8, 72, "Input", InitializationCell->True], Cell[14732, 478, 188, 5, 42, "Input", InitializationCell->True], Cell[14923, 485, 202, 5, 42, "Input", InitializationCell->True], Cell[15128, 492, 282, 6, 42, "Input", InitializationCell->True], Cell[15413, 500, 284, 6, 42, "Input", InitializationCell->True], Cell[15700, 508, 192, 5, 42, "Input", InitializationCell->True], Cell[15895, 515, 192, 5, 42, "Input", InitializationCell->True], Cell[16090, 522, 297, 6, 57, "Input", InitializationCell->True], Cell[16390, 530, 235, 5, 42, "Input", InitializationCell->True], Cell[16628, 537, 246, 5, 42, "Input", InitializationCell->True], Cell[16877, 544, 221, 5, 42, "Input", InitializationCell->True], Cell[17101, 551, 220, 5, 42, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[17358, 561, 89, 1, 29, "Subsection", InitializationCell->True], Cell[17450, 564, 205, 5, 42, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[17704, 575, 61, 1, 34, "Section", InitializationCell->True], Cell[17768, 578, 131, 3, 32, "Text"], Cell[CellGroupData[{ Cell[17924, 585, 97, 1, 45, "Subsection", InitializationCell->True], Cell[18024, 588, 66, 1, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[18127, 594, 125, 4, 29, "Subsection", InitializationCell->True], Cell[18255, 600, 82, 1, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[18374, 606, 122, 4, 29, "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[18521, 614, 161, 4, 41, "Subsubsection", InitializationCell->True], Cell[18685, 620, 724, 12, 122, "Text"], Cell[19412, 634, 547, 15, 192, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[19996, 654, 120, 2, 41, "Subsubsection", InitializationCell->True], Cell[20119, 658, 183, 5, 32, "Text"], Cell[20305, 665, 219, 6, 72, "Input", InitializationCell->True], Cell[20527, 673, 320, 7, 50, "Text"], Cell[20850, 682, 153, 5, 42, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[21040, 692, 116, 2, 41, "Subsubsection", InitializationCell->True], Cell[21159, 696, 561, 16, 68, "Text"], Cell[21723, 714, 376, 12, 162, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[22148, 732, 86, 1, 29, "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[22259, 737, 92, 1, 41, "Subsubsection", InitializationCell->True], Cell[22354, 740, 68, 0, 32, "Text"], Cell[22425, 742, 81, 1, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[22543, 748, 86, 1, 27, "Subsubsection", InitializationCell->True], Cell[22632, 751, 106, 3, 32, "Text"], Cell[22741, 756, 71, 1, 27, "Input", InitializationCell->True], Cell[22815, 759, 135, 5, 42, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[22987, 769, 97, 1, 27, "Subsubsection", InitializationCell->True], Cell[23087, 772, 73, 0, 32, "Text"], Cell[23163, 774, 120, 4, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[23320, 783, 149, 5, 27, "Subsubsection", InitializationCell->True], Cell[23472, 790, 718, 19, 68, "Text"], Cell[24193, 811, 398, 14, 192, "Input", InitializationCell->True], Cell[24594, 827, 497, 10, 68, "Text"], Cell[25094, 839, 1108, 32, 432, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[26239, 876, 96, 1, 27, "Subsubsection", InitializationCell->True], Cell[26338, 879, 247, 5, 50, "Text"], Cell[26588, 886, 572, 14, 192, "Input", InitializationCell->True], Cell[27163, 902, 219, 6, 57, "Input", InitializationCell->True], Cell[27385, 910, 582, 16, 68, "Text"], Cell[27970, 928, 475, 16, 222, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[28482, 949, 96, 1, 27, "Subsubsection", InitializationCell->True], Cell[28581, 952, 307, 11, 147, "Input", InitializationCell->True], Cell[28891, 965, 1057, 33, 477, "Input", InitializationCell->True], Cell[29951, 1000, 224, 5, 50, "Text"], Cell[30178, 1007, 139, 5, 42, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[30354, 1017, 92, 1, 27, "Subsubsection", InitializationCell->True], Cell[30449, 1020, 415, 12, 162, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[30913, 1038, 82, 1, 29, "Subsection", InitializationCell->True], Cell[CellGroupData[{ Cell[31020, 1043, 151, 5, 41, "Subsubsection", InitializationCell->True], Cell[31174, 1050, 121, 5, 32, "Text"], Cell[31298, 1057, 71, 1, 27, "Input", InitializationCell->True], Cell[31372, 1060, 1862, 43, 212, "Text"], Cell[33237, 1105, 1389, 41, 597, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[34663, 1151, 106, 4, 42, "Subsubsection", InitializationCell->True], Cell[34772, 1157, 106, 1, 27, "Input", InitializationCell->True], Cell[34881, 1160, 75, 1, 27, "Input", InitializationCell->True], Cell[34959, 1163, 205, 6, 32, "Text"], Cell[35167, 1171, 362, 11, 147, "Input", InitializationCell->True], Cell[35532, 1184, 76, 1, 27, "Input", InitializationCell->True], Cell[35611, 1187, 67, 0, 32, "Text"], Cell[35681, 1189, 436, 11, 147, "Input", InitializationCell->True], Cell[36120, 1202, 552, 11, 147, "Input", InitializationCell->True], Cell[36675, 1215, 314, 11, 147, "Input", InitializationCell->True], Cell[36992, 1228, 318, 11, 147, "Input", InitializationCell->True], Cell[37313, 1241, 324, 11, 147, "Input", InitializationCell->True], Cell[37640, 1254, 324, 11, 147, "Input", InitializationCell->True], Cell[37967, 1267, 328, 11, 147, "Input", InitializationCell->True], Cell[38298, 1280, 201, 5, 32, "Text"], Cell[38502, 1287, 332, 11, 147, "Input", InitializationCell->True], Cell[38837, 1300, 336, 11, 147, "Input", InitializationCell->True], Cell[39176, 1313, 268, 10, 132, "Input", InitializationCell->True], Cell[39447, 1325, 272, 10, 132, "Input", InitializationCell->True], Cell[39722, 1337, 162, 4, 32, "Text"], Cell[39887, 1343, 238, 9, 117, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[40162, 1357, 120, 4, 42, "Subsubsection", InitializationCell->True], Cell[40285, 1363, 415, 8, 68, "Text"], Cell[CellGroupData[{ Cell[40725, 1375, 143, 5, 32, "Text"], Cell[40871, 1382, 83, 1, 27, "Input", InitializationCell->True], Cell[40957, 1385, 575, 17, 68, "Text"], Cell[41535, 1404, 171, 5, 42, "Input", InitializationCell->True], Cell[41709, 1411, 90, 3, 32, "Text"], Cell[41802, 1416, 160, 3, 27, "Input"], Cell[41965, 1421, 168, 4, 32, "Text"], Cell[42136, 1427, 334, 9, 50, "Text"], Cell[42473, 1438, 184, 5, 42, "Input", InitializationCell->True], Cell[42660, 1445, 52, 1, 27, "Input", InitializationCell->True] }, Closed]], Cell[42727, 1449, 268, 7, 50, "Text"], Cell[42998, 1458, 272, 8, 102, "Input", InitializationCell->True], Cell[43273, 1468, 241, 7, 87, "Input", InitializationCell->True], Cell[43517, 1477, 229, 7, 87, "Input", InitializationCell->True], Cell[43749, 1486, 282, 8, 102, "Input", InitializationCell->True], Cell[44034, 1496, 243, 7, 87, "Input", InitializationCell->True], Cell[44280, 1505, 231, 7, 87, "Input", InitializationCell->True], Cell[44514, 1514, 142, 4, 42, "Input", InitializationCell->True], Cell[44659, 1520, 338, 11, 147, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[45046, 1537, 86, 1, 29, "Subsection", InitializationCell->True], Cell[45135, 1540, 76, 1, 27, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[45248, 1546, 73, 1, 29, "Subsection", InitializationCell->True], Cell[45324, 1549, 52, 1, 27, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[45425, 1556, 53, 1, 34, "Section", InitializationCell->True], Cell[45481, 1559, 76, 0, 32, "Text"], Cell[CellGroupData[{ Cell[45582, 1563, 73, 1, 45, "Subsection", InitializationCell->True], Cell[45658, 1566, 286, 9, 117, "Input", InitializationCell->True] }, Closed]], Cell[CellGroupData[{ Cell[45981, 1580, 73, 1, 45, "Subsection", InitializationCell->True], Cell[46057, 1583, 58, 1, 27, "Input", InitializationCell->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[46164, 1590, 34, 0, 34, "Section"], Cell[46201, 1592, 77, 1, 27, "Input"], Cell[46281, 1595, 65, 1, 27, "Input"], Cell[46349, 1598, 82, 1, 27, "Input"], Cell[46434, 1601, 382, 7, 75, "Input"], Cell[46819, 1610, 229, 4, 43, "Input"], Cell[47051, 1616, 276, 5, 43, "Input"], Cell[47330, 1623, 283, 5, 43, "Input"], Cell[47616, 1630, 73, 1, 27, "Input"], Cell[47692, 1633, 144, 3, 27, "Input"], Cell[47839, 1638, 105, 2, 27, "Input"], Cell[47947, 1642, 105, 2, 27, "Input"], Cell[48055, 1646, 135, 4, 27, "Input"], Cell[48193, 1652, 127, 3, 27, "Input"], Cell[48323, 1657, 176, 5, 32, "Text"], Cell[48502, 1664, 410, 8, 59, "Input"], Cell[48915, 1674, 270, 6, 50, "Text"], Cell[49188, 1682, 212, 3, 43, "Input"], Cell[49403, 1687, 300, 5, 59, "Input"], Cell[49706, 1694, 143, 3, 27, "Input"], Cell[49852, 1699, 137, 4, 32, "Text"], Cell[49992, 1705, 42, 1, 27, "Input"], Cell[50037, 1708, 248, 5, 50, "Text"], Cell[50288, 1715, 700, 12, 91, "Input"], Cell[50991, 1729, 61, 0, 32, "Text"], Cell[51055, 1731, 122, 2, 27, "Input"], Cell[51180, 1735, 373, 10, 50, "Text"], Cell[51556, 1747, 120, 2, 27, "Input"] }, Open ]] }, Open ]] } ] *) (*********************************************************************** End of Mathematica Notebook file. ***********************************************************************)