diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/xypdf/xypdf.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/xypdf/xypdf.dtx | 634 |
1 files changed, 463 insertions, 171 deletions
diff --git a/Master/texmf-dist/source/latex/xypdf/xypdf.dtx b/Master/texmf-dist/source/latex/xypdf/xypdf.dtx index 01609dd9048..a324870ff68 100644 --- a/Master/texmf-dist/source/latex/xypdf/xypdf.dtx +++ b/Master/texmf-dist/source/latex/xypdf/xypdf.dtx @@ -22,18 +22,21 @@ % This file is part of the LaTeX2e xypdf package. The package % consists of the following files: % -% README - The distribution guide -% xypdf.dtx - Documented source code -% xypdf.ins - Installation script -% xypdf.sty - LaTeX style file -% xypdf.pdf - Documentation +% README - This file, the distribution guide +% xypdf.dtx - Documented source code +% xypdf.ins - Installation script +% xypdf.pdf - Documentation (generated from xypdf.dtx) +% +% The LaTeX style file xypdf.sty is generated by the following command: +% +% latex xypdf.ins % % \fi % % \iffalse %<package>\NeedsTeXFormat{LaTeX2e} %<package>\ProvidesPackage{xypdf} -%<package> [2010/03/24 v1.0 PDF output for the Xy-pic package] +%<package> [2010/03/30 v1.1 PDF output for the Xy-pic package] % %<*driver> \documentclass[a4paper]{ltxdoc} @@ -60,22 +63,8 @@ \usepackage{lmodern} \normalfont \usepackage[T1]{fontenc} -\usepackage[arrow,curve]{xy} +\usepackage[arrow,curve,rotate]{xy} \usepackage{xypdf} -\newsavebox\mybox -\makeatletter -% Parameter #1: scaling factor -% Parameter #2: Box content -\newcommand*\scalebox[2]{% - \sbox\mybox{#2}% - \xP@literal{q #1 0 0 #1 0 0 cm}% - % Zero-sized box with the scaled content - \vbox to\z@{\vss\hbox to \z@{\usebox\mybox\hss}}% - \xP@literal{Q}% - % Dummy box for correct spacing - \hbox to#1\wd\mybox{\vrule width\z@ height#1\ht\mybox depth#1\dp\mybox\hss}% -} -\makeatother \usepackage{shortvrb} \MakeShortVerb{\"} \AtBeginDocument{\DeleteShortVerb{\|}}% revoke the shortcut from ltxdoc.cls @@ -126,7 +115,7 @@ %</driver> % \fi % -% \CheckSum{4941} +% \CheckSum{0} % % \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 @@ -199,7 +188,7 @@ % As the most recent version 3.7 of \Xy-pic dates from 1999, there is no support for pdf\TeX. In order to produce PDF files with high-quality \Xy-pic diagrams, users had to use so far the Postscript file format as an intermediate step or embed the diagrams as external graphics. However, since many users directly generate PDF files from the \TeX{} or DVI files (with bookmarks, hyperlinks and other PDF features), it is highly desirable to also have the possibility of directly generating \Xy-pic diagrams with high-quality PDF graphics elements. % % The present package \textsf{xypdf} adapts the output routines of the \Xy-pic package to generate high-quality graphics for PDF output. It works with both pdf\LaTeX and the two-step compilation \LaTeX${}\to{}$dvipdfm(x) with an intermediate DVI file. Note that some version of $\varepsilon$-\TeX{} is needed (which is anyway used by default in modern \TeX{} installations). \autoref{Fig1} compares the output quality of a small \Xy-pic figure. -% \newcommand*\testdiag{\scalebox{10}{\xy (5,0): 0; +% \newcommand*\testdiag{\xy *[*10]\hbox{\xy (5,0): 0; % a(0) **\dir{-}, % a(6.524)**\dir{-}, % a(13.048) **\dir{-}, @@ -210,7 +199,7 @@ % @+(-.2,.5), % @+(.5,.3), % a(70) *+<.5pt>{} **\crvs{-} -% \endxy}} +% \endxy}\endxy} % \begin{figure}\label{Fig1} % \centering\setlength\tabcolsep{1.5em} % \begin{tabular}{@{}cc@{}} @@ -270,6 +259,17 @@ % \showline{\xy *\cir<16pt>{} *\cir<19pt>{} \endxy}&"\xy *\cir<16pt>{} *\cir<19pt>{} \endxy" % \end{tabular} % \end{center} +% +% \item +% \textsf{xypdf} supports the “rotate” extension of \Xy-pic: +% \begin{center} +% \begin{tabular}{@{}cl@{}} +% with \textsf{xypdf}&code\\ +% \midrule +% \xy *!D[@!15]\hbox{Test text} \endxy\vrule width 0pt height 3ex depth 2ex&"\xy *[@!15]\hbox{Test text} \endxy"\\ +% \xy *!D[*1.5]\hbox{Test text} \endxy&"\xy *[*1.5]\hbox{Test text} \endxy" +% \end{tabular} +% \end{center} % \end{itemize} % % If you notice any unwanted behavior, please generate a minimal example and e-mail it to the author of this package. Current contact details are available at \url{http://www.math.uni-bonn.de/people/muellner}. Please report situations where the algorithms produce arithmetic overflows. Also, the code is not really optimized for speed but for accuracy, so feel free to report a significant slowdown of the compiling process for your thesis/paper/book. @@ -296,11 +296,7 @@ % \begin{itemize} % % \item -% Code for the “line styles” extension. -% -% \item -% Code for scaling and rotating diagrams. -% +% Support for the “line styles”, “frame” and “color” extensions. % \end{itemize} % % \section{Caveat} @@ -347,9 +343,9 @@ {\PackageError{xypdf}{Load the Xy-pic package before this package} {Insert `\string\usepackage[<options>]{xy}' before `\string\usepackage{xypdf}'}} -\ifdefined\xypsloaded - \PackageError{xypdf}{Do not load Xy-pic with a Postscript backend}{} -\fi +\xywithoption{ps}{% + \PackageError{xypdf}{Do not load Xy-pic with a Postscript backend}{}% +} % \end{macrocode} % Rely on the ifpdf package to test for PDF output. % \begin{macrocode} @@ -378,7 +374,14 @@ \expandafter\noexpand\csname xP@old@#1\endcsname }% } -\AtEndOfPackage{\xypdfon\let\xP@hook\@undefined\let\xP@tempvar\@undefined} +\AtEndOfPackage{% + \xypdfon + \let\xP@hook\@undefined + \let\xP@tempvar\@undefined + \let\@tempa\@undefined + \let\xP@gobblepart\@undefined + \let\xP@endgobble\@undefined +} % \end{macrocode} % \end{macro} % \end{macro} @@ -390,15 +393,28 @@ \ifpdf \let\xP@literal\pdfliteral \else - \def\xP@literal#1{\special{pdf:literal #1}} + \def\xP@literal{% + \PackageWarning{xypdf}{The produced DVI file is NOT PORTABLE. Convert it with% + ^^J% + dvipdfm(x) to the PDF format but do not expect the DVI itself to be displayed% + ^^J% + correctly\@gobble}% + \global\let\xP@literal\xP@literal@ + \xP@literal + } + \newcommand*\xP@literal@[1]{\special{pdf:literal #1}} \fi % \end{macrocode} % \end{macro} % \begin{macro}{\xP@dim} % Conversion between \TeX{} points (pt) and PDF/Postscript points (bp) % \begin{macrocode} -\newcommand*\xP@dim[1]{% - \expandafter\removePT@\the\dimexpr(#1)*800/803\relax\space} +\newcommand*\xP@dim[1]{\xP@EARPT\dimexpr(#1)*800/803\relax\space} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@EARPT} +% \begin{macrocode} +\newcommand*\xP@EARPT{\expandafter\removePT@\the} % \end{macrocode} % \end{macro} % \begin{macro}{\xP@coor} @@ -421,7 +437,9 @@ } % \end{macrocode} % \end{macro} +% % \subsection{Straight lines} +% % \begin{macro}{\solid@} % \begin{macro}{\xP@solid@} % This is the hook for solid straight lines. Derived from "\xyPSsolid@" in "xyps.tex". @@ -722,6 +740,7 @@ % \end{macro} % % \subsection{Squiggled lines} +% % \begin{macro}{\squiggledSpread@} % \begin{macro}{\xP@squiggledSpread@} % This is the hook for squiggled straight lines. @@ -781,8 +800,364 @@ % \end{macrocode} % \end{macro} % +% \subsection{Circles} +% +% \begin{macro}{\circhar@@} +% \begin{macro}{\xP@circhar@@} +% Replacement macro for the circle chars. +% \begin{macrocode} +\xP@hook{circhar@@} +\newcommand*\xP@circhar@@[1]{% + \expandafter\xP@circhar@@@\ifcase#1 % +% \end{macrocode} +% Bézier segments for 1/8 circle. +% Let +% \[\tabskip 0pt plus 1fil\openup\jot +% \halign to \displaywidth{$#$\hfill\cr +% \noalign{\vskip-\jot} +% a\coloneq\sqrt{1/2}\approx.707106781,\cr +% b\coloneq\frac83\sqrt2\cos(\pi/8)\left(1-\cos(\pi/8)\right)\approx.2652164898,\cr +% c\coloneq\frac13\left(-3+8\cos(\pi/8)-2\cos^2(\pi/8)\right)\approx.8946431596,\cr +% d\coloneq \frac12b(2+3\cos(\pi/8)-\cos^2(\pi/8))\approx.5195704027.\cr +% } +% \] +% (We have $\cos(\pi/8)=\frac12\sqrt{2+\sqrt2}$.) +% +% The fractions below are best possible rational approximations (obtained by continued fractions) to the following coordinates: +% +% $(0,0)$, $(0,-b)$, $(1-c, -d)$, $(1-a,a)$ +% \begin{macrocode} + 00% + 0{-173517671/654249180}% + {65307479/619869377}{-34221476/65864945}% + {225058681/768398401}{-543339720/768398401}% + \or +% \end{macrocode} +% $(0,-a)$, $(a-d,-c)$, $(a-b,-1)$, $(a,-1)$ +% \begin{macrocode} + 0{-543339720/768398401}% + {181455824/967576667}{-554561898/619869377}% + {826676217/1870772527}{-1}% + {543339720/768398401}{-1}% + \or +% \end{macrocode} +% $(0,-1)$, $(b,-1)$, $(d,-c)$, $(a,-a)$ +% \begin{macrocode} + 0{-1}% + {173517671/654249180}{-1}% + {34221476/65864945}{-554561898/619869377}% + {543339720/768398401}{-543339720/768398401}% + \or +% \end{macrocode} +% $(0,-a)$, $(c-a,-d)$, $(1-a,-b)$, $(1-a,0)$ +% \begin{macrocode} + 0{-543339720/768398401}% + {181455824/967576667}{-34221476/65864945}% + {225058681/768398401}{-173517671/654249180}% + {225058681/768398401}0% + \or +% \end{macrocode} +% $(0,a)$, $(c-a,d)$, $(1-a,b)$, $(1-a,0)$ +% \begin{macrocode} + 0{543339720/768398401}% + {181455824/967576667}{34221476/65864945}% + {225058681/768398401}{173517671/654249180}% + {225058681/768398401}0% + \or +% \end{macrocode} +% $(0,1)$, $(b,1)$, $(d,c)$, $(a,a)$ +% \begin{macrocode} + 01% + {173517671/654249180}1% + {34221476/65864945}{554561898/619869377}% + {543339720/768398401}{543339720/768398401}% + \or +% \end{macrocode} +% $(0,a)$, $(a-d,c)$, $(a-b,1)$, $(a,1)$ +% \begin{macrocode} + 0{543339720/768398401}% + {181455824/967576667}{554561898/619869377}% + {826676217/1870772527}1% + {543339720/768398401}1% + \or +% \end{macrocode} +% $(0,0)$, $(0,b)$, $(1-c,d)$, $(1-a,a)$ +% \begin{macrocode} + 00% + 0{173517671/654249180}% + {65307479/619869377}{34221476/65864945}% + {225058681/768398401}{543339720/768398401}% + \fi} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@circhar@@@} +% Draw the arc of $1/8$ circle and use the same space as the chars from the circle font do. +% \begin{macrocode} +\newcommand\xP@circhar@@@[8]{% + \xP@setsolidpat + \xP@stroke{\xP@coor{\R@*#1}{\R@*#2}m + \xP@coor{\R@*#3}{\R@*#4}\xP@coor{\R@*#5}{\R@*#6}% + \xP@coor{\R@*#7}{\R@*#8}c}% + \vrule width\z@ height\R@ depth\R@ + \kern\dimexpr\R@*#7\relax +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{\cirrestrict@@} +% \begin{macro}{\xP@cirrestrict@@} +% Basically, "\cirrestrict@@" is turned into a no-op and does not change the radius. +% \begin{macrocode} +\xP@hook{cirrestrict@@} +\newcommand*\xP@cirrestrict@@{\count@\z@\relax} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \subsection{Optional code sections} +% +% \begin{macro}{\xP@optionalsection} +% \textbf{Important!} The next sections of the code are executed only if \Xy-pic is loaded with certain extensions. If the extension has not been loaded but is loaded afterwards (e.\,g.\ with "\xyoption{rotate}"), display an error message. +% \begin{macrocode} +\newcommand*\xP@optionalsection[1]{% + \expandafter\ifx\csname xy#1loaded\endcsname\relax + \xywithoption{#1}{\xP@optionerror{#1}}% + \expandafter\xP@gobblepart + \else + \message{`#1' extension support,}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@optionerror} +% \begin{macrocode} +\newcommand*\xP@optionerror[1]{% + \PackageError{xypdf}{Load the Xy-pic "#1" option before the xypdf package}% + {}% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@gobblepart} +% \begin{macrocode} +\@ifdefinable\xP@gobblepart\relax +\long\def\xP@gobblepart#1\xP@endgobble{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@endgobble} +% \begin{macrocode} +\newcommand*\xP@endgobble{\relax} +% \end{macrocode} +% \end{macro} +% +% \subsection{Rotation and scaling} +% +% Execute the following part only if \Xy-pic's “rotate” option was loaded. +% \begin{macrocode} +\xP@optionalsection{rotate} +% \end{macrocode} +% \begin{macro}{\xP@scale} +% Scale the box $0$ to the factors in "#1" and "#2". +% \begin{macrocode} +\newcommand*\xP@scale[2]{% + \setboxz@h{% + \hskip\L@p + \hskip-\R@p + \lower\U@p\hbox{% + \xP@literal{q #1\space0 0 #2\space0 0 cm}% + \raise\U@p\hb@xt@\z@{\hskip-\L@p\boxz@\hss}% + \xP@literal{Q}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@rotate} +% Rotation in the direction "#1". +% \begin{macrocode} +\newcommand\xP@rotate{% + \xP@rotate@\xP@trigfromdir +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@specialrotate} +% Rotation by the angle in "#1". +% \begin{macrocode} +\@ifdefinable\xP@specialrotate\relax +\def\xP@specialrotate#1@@{\xP@rotate@\xP@trig{#1\p@}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@rotate@} +% Common code for both rotations: rotate the box $0$. +% \begin{macrocode} +\newcommand*\xP@rotate@[2]{% + \setboxz@h{% + #1{#2}% + \hskip\L@p + \hskip-\R@p + \lower\U@p\hbox{% + \xP@literal{q % + \cosDirection\space + \sinDirection\space + \if-\sinDirection\else-\sinDirection\fi\space + \cosDirection\space + 0 0 cm}% + \raise\U@p\hb@xt@\z@{\hskip-\L@p\boxz@\hss}% + \xP@literal{Q}% + }% + }% +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xyRotate@@} +% The hooks for planting the code into \Xy-pic. +% \begin{macrocode} +\CheckCommand*\xyRotate@@[1]{\xyundefinedRotate@{rotate}{#1}@@} +\let\xyRotate@@\xP@rotate +% \end{macrocode} +% \end{macro} +% \begin{macro}{\doSpecialRotate@@} +% \begin{macrocode} +\def\@tempa#1@@{\xyundefinedRotate@{special rotate}{#1}@@} +\@check@eq\doSpecialRotate@@\@tempa +\let\doSpecialRotate@@\xP@specialrotate +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xyscale@} +% \begin{macrocode} +\CheckCommand*\xyscale@[2]{\xyundefinedRotate@{scale}{#1,#2}@@} +\let\xyscale@@\xP@scale +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@trigfromdir} +% Calculate sine and cosine from the direction number in "#1". +% \begin{macrocode} +\newcommand*\xP@trigfromdir[1]{{% + \Direction#1\relax + \count@-\Direction + \advance\count@4096 + \divide\count@2048 + \ifcase\count@ + \d@X\K@\p@ + \d@Y\numexpr\Direction-3*\K@\relax\p@ + \or + \d@X\numexpr\Direction-\K@\relax\p@ + \d@Y-\K@\p@ + \or + \d@X-\K@\p@ + \d@Y\numexpr-\Direction-\K@\relax\p@ + \or + \d@X\numexpr-\Direction-3*\K@\relax\p@ + \d@Y\K@\p@ + \else + \PackageError{xypdf}{Unexpected case in direction calculation}% + {Feel free to contact the author of the xypdf package with a minimal % + example.}% + \fi + \xP@veclen + \xdef\@gtempa{% + \def\noexpand\cosDirection{\xP@EARPT\dimexpr\d@X*\p@/\@tempdimb\relax}% + \def\noexpand\sinDirection{\xP@EARPT\dimexpr\d@Y*\p@/\@tempdimb\relax}% + }% + }\@gtempa +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@trigfromdir} +% Calculate sine and cosine from the angle in "#1". +% \begin{macrocode} +\newcommand*\xP@trig[1]{% + \@tempdima\dimexpr#1\relax + \@tempdimb\@tempdima +% \end{macrocode} +% $23592960=360\cdot65536$ +% \begin{macrocode} + \divide\@tempdimb23592960 + \advance\@tempdima-23592960\@tempdimb + \ifdim\@tempdima<\z@\advance\@tempdima360pt\fi + \@tempdimb\@tempdima +% \end{macrocode} +% $5898240=90\cdot65536$ +% \begin{macrocode} + \divide\@tempdimb5898240 + \ifcase\@tempdimb + \xP@sinpoly + \edef\sinDirection{\xP@EARPT\@tempdimb}% + \@tempdima\dimexpr90pt-\@tempdima\relax + \xP@sinpoly + \edef\cosDirection{\xP@EARPT\@tempdimb}% + \or + \@tempdima\dimexpr180pt-\@tempdima\relax + \xP@sinpoly + \edef\sinDirection{\xP@EARPT\@tempdimb}% + \@tempdima\dimexpr90pt-\@tempdima\relax + \xP@sinpoly + \edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}% + \or + \@tempdima\dimexpr\@tempdima-180pt\relax + \xP@sinpoly + \edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}% + \@tempdima\dimexpr90pt-\@tempdima\relax + \xP@sinpoly + \edef\cosDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}% + \or + \@tempdima\dimexpr360pt-\@tempdima\relax + \xP@sinpoly + \edef\sinDirection{\xP@EARPT\dimexpr-\@tempdimb\relax}% + \@tempdima\dimexpr90pt-\@tempdima\relax + \xP@sinpoly + \edef\cosDirection{\xP@EARPT\@tempdimb}% + \else + \PackageError{xypdf}{Unexpected case in sin/cos calculation}% + {Feel free to contact the author of the xypdf package with a minimal % + example.}% + \fi +} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\xP@sinpoly} +% Polynomial approximation to the sine in the interval $[0\mathrm{pt},90\mathrm{pt}]$. The deviation should be $\pm1\mathrm{sp}$ maximal (but no guarantee). (3rd order, 4 subintervals, exact values for 0pt and 90pt) +% \begin{macrocode} +\newcommand*\xP@sinpoly{{% + \ifdim\@tempdima<49pt + \ifdim\@tempdima<27pt + \@tempdimb\dimexpr((\@tempdima*-529771058/16039085-1384933sp)% + *\@tempdima/268756075+10714164sp)*\@tempdima/613777813\relax + \else + \advance\@tempdima-27pt + \@tempdimb\dimexpr(((\@tempdima*-743101305/20672414-238989613sp)% + *\@tempdima/80975565+42661556sp)*\@tempdima/622461739+2\p@)% + *157520747/693945047\relax + \fi + \else + \ifdim\@tempdima<70pt + \advance\@tempdima-49pt + \@tempdimb\dimexpr(((\@tempdima*-348406699/107952940-55079229sp)% + *\@tempdima/866635628+408805sp)*\@tempdima/26926757+\p@)% + *135751711/179873976\relax + \else + \advance\@tempdima-70pt + \@tempdimb\dimexpr(((\@tempdima*-1015850353/137849442-460519207sp)% + *\@tempdima/8742349+142263941sp)*\@tempdima/972432199+23\p@)% + *31253604/764969669\relax + \fi + \fi + \global\dimen@i\@tempdimb + }\@tempdimb\dimen@i +} +% \end{macrocode} +% \end{macro} +% +% End of the section for \Xy-pic's “rotate” option. +% \begin{macrocode} +\xP@endgobble +% \end{macrocode} +% % \subsection{Temporary registers} % +% The next section is for the “curve” extension! +% \begin{macrocode} +\xP@optionalsection{curve} +% \end{macrocode} % In order to save registers, \textsf{xypdf} shares \Xy-pic's dimension and counter registers but uses different, more descriptive names. Every macro that uses these temporary variables must be safely encapsulated in a group so that the registers are not changed from the outside scope! % % The \textsf{xypdf} package uses several sets of temporary variable names for different modules. Since it is important that these assignments do not overlap and that the variables are only used encapsulated within groups, the macros which use temporary variables are marked by colored bullets \BulletA, \BulletB, \BulletC, \BulletD, \BulletE, \BulletF, \BulletG\ with one color for each set of variables. @@ -912,15 +1287,6 @@ % \begin{macro}{\xP@F} % \begin{macro}{\xP@G} % \begin{macro}{\xP@H} -% \begin{macro}{\xP@I} -% \begin{macro}{\xP@J} -% \begin{macro}{\xP@K} -% \begin{macro}{\xP@L} -% \begin{macro}{\xP@fa} -% \begin{macro}{\xP@fd} -% \begin{macro}{\xP@tm} -% \begin{macro}{\xP@xm} -% \begin{macro}{\xP@ym} % \BulletC\ % Third set of temporary registers: Bézier offset algorithm ans solving linear equations. % \begin{macrocode} @@ -932,6 +1298,26 @@ \xP@tempvar\xP@F\Y@origin \xP@tempvar\xP@G\X@xbase \xP@tempvar\xP@H\Y@xbase +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\xP@I} +% \begin{macro}{\xP@J} +% \begin{macro}{\xP@K} +% \begin{macro}{\xP@L} +% \begin{macro}{\xP@fa} +% \begin{macro}{\xP@fd} +% \begin{macro}{\xP@tm} +% \begin{macro}{\xP@xm} +% \begin{macro}{\xP@ym} +% \BulletC\ +% \begin{macrocode} \xP@tempvar\xP@I\X@ybase \xP@tempvar\xP@J\Y@ybase \xP@tempvar\xP@K\X@min @@ -951,16 +1337,6 @@ % \end{macro} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \BulletC\ -% Alas, we need 20 more temporary registers. Hopefully, there are still free slots for dimension registers. We take them for the temporary variables but release them afterwards so that other packages can use them. % \begin{macro}{\xP@off} % \begin{macro}{\xP@ta} % \begin{macro}{\xP@tb} @@ -981,7 +1357,8 @@ % \begin{macro}{\xP@yc} % \begin{macro}{\xP@xd} % \begin{macro}{\xP@yd} -% \BulletC +% \BulletC\ +% Alas, we need 20 more temporary registers. Hopefully, there are still free slots for dimension registers. We take them for the temporary variables but release them afterwards so that other packages can use them. % \begin{macrocode} \@tempcnta\count11\relax \newdimen\xP@off @@ -1067,9 +1444,6 @@ % \begin{macro}{\xP@AAba} % \begin{macro}{\xP@AAbb} % \begin{macro}{\xP@AAbc} -% \begin{macro}{\xP@dta} -% \begin{macro}{\xP@dtb} -% \begin{macro}{\xP@dtc} % \BulletF\ % Sixth set of temporary variables: Solving a linear system approximately. % \begin{macrocode} @@ -1084,9 +1458,6 @@ \xP@tempvar\xP@AAba\xP@xb \xP@tempvar\xP@AAbb\xP@yb \xP@tempvar\xP@AAbc\xP@xc -\xP@tempvar\xP@dta\xP@yc -\xP@tempvar\xP@dtb\xP@xd -\xP@tempvar\xP@dtc\xP@yd % \end{macrocode} % \end{macro} % \end{macro} @@ -1099,6 +1470,15 @@ % \end{macro} % \end{macro} % \end{macro} +% \begin{macro}{\xP@dta} +% \begin{macro}{\xP@dtb} +% \begin{macro}{\xP@dtc} +% \BulletF\ +% \begin{macrocode} +\xP@tempvar\xP@dta\xP@yc +\xP@tempvar\xP@dtb\xP@xd +\xP@tempvar\xP@dtc\xP@yd +% \end{macrocode} % \end{macro} % \end{macro} % \end{macro} @@ -1754,6 +2134,7 @@ % \end{macro} % % \subsection{A Bézier curve offset algorithm} +% % First, all control points are offset by the desired distance and in the direction of the normal vectors at the boundary points of the curve. We then adjust the distance of the inner two control points to the boundary control points along the tangents at the boundary points: $x_b = x_a + f_a T_{ax}$, $x_c = x_d + f_d T_{dx}$, and likewise for the $y$-coordinates. In nondegenerate cases, we have $T_{ax}=x_b-x_a$ and $T_{dx}=x_c-x_d$. % % Let $P(a,b,c,d,t)$ denote the Bézier polynomial $a(1-t)^3+3bt(1-t)^2+3ct^2(1-t)+dt^3$. In order to determine the factors $f_a$ and $f_d$, we set up a system of three equations. @@ -3281,119 +3662,30 @@ } % \end{macrocode} % \end{macro} -% -% \subsection{Circles} -% \begin{macro}{\circhar@@} -% \begin{macro}{\xP@circhar@@} -% Replacement macro for the circle chars. +% End of the section for \Xy-pic's “curve” option. % \begin{macrocode} -\xP@hook{circhar@@} -\newcommand*\xP@circhar@@[1]{% - \expandafter\xP@circhar@@@\ifcase#1 % +\xP@endgobble % \end{macrocode} -% Bézier segments for 1/8 circle. -% Let -% \[\tabskip 0pt plus 1fil\openup\jot -% \halign to \displaywidth{$#$\hfill\cr -% \noalign{\vskip-\jot} -% a\coloneq\sqrt{1/2}\approx.707106781,\cr -% b\coloneq\frac83\sqrt2\cos(\pi/8)\left(1-\cos(\pi/8)\right)\approx.2652164898,\cr -% c\coloneq\frac13\left(-3+8\cos(\pi/8)-2\cos^2(\pi/8)\right)\approx.8946431596,\cr -% d\coloneq \frac12b(2+3\cos(\pi/8)-\cos^2(\pi/8))\approx.5195704027.\cr -% } -% \] -% (We have $\cos(\pi/8)=\frac12\sqrt{2+\sqrt2}$.) % -% The fractions below are best possible rational approximations (obtained by continued fractions) to the following coordinates: +% \section{Changelog} % -% $(0,0)$, $(0,-b)$, $(1-c, -d)$, $(1-a,a)$ -% \begin{macrocode} - 00% - 0{-173517671/654249180}% - {65307479/619869377}{-34221476/65864945}% - {225058681/768398401}{-543339720/768398401}% - \or -% \end{macrocode} -% $(0,-a)$, $(a-d,-c)$, $(a-b,-1)$, $(a,-1)$ -% \begin{macrocode} - 0{-543339720/768398401}% - {181455824/967576667}{-554561898/619869377}% - {826676217/1870772527}{-1}% - {543339720/768398401}{-1}% - \or -% \end{macrocode} -% $(0,-1)$, $(b,-1)$, $(d,-c)$, $(a,-a)$ -% \begin{macrocode} - 0{-1}% - {173517671/654249180}{-1}% - {34221476/65864945}{-554561898/619869377}% - {543339720/768398401}{-543339720/768398401}% - \or -% \end{macrocode} -% $(0,-a)$, $(c-a,-d)$, $(1-a,-b)$, $(1-a,0)$ -% \begin{macrocode} - 0{-543339720/768398401}% - {181455824/967576667}{-34221476/65864945}% - {225058681/768398401}{-173517671/654249180}% - {225058681/768398401}0% - \or -% \end{macrocode} -% $(0,a)$, $(c-a,d)$, $(1-a,b)$, $(1-a,0)$ -% \begin{macrocode} - 0{543339720/768398401}% - {181455824/967576667}{34221476/65864945}% - {225058681/768398401}{173517671/654249180}% - {225058681/768398401}0% - \or -% \end{macrocode} -% $(0,1)$, $(b,1)$, $(d,c)$, $(a,a)$ -% \begin{macrocode} - 01% - {173517671/654249180}1% - {34221476/65864945}{554561898/619869377}% - {543339720/768398401}{543339720/768398401}% - \or -% \end{macrocode} -% $(0,a)$, $(a-d,c)$, $(a-b,1)$, $(a,1)$ -% \begin{macrocode} - 0{543339720/768398401}% - {181455824/967576667}{554561898/619869377}% - {826676217/1870772527}1% - {543339720/768398401}1% - \or -% \end{macrocode} -% $(0,0)$, $(0,b)$, $(1-c,d)$, $(1-a,a)$ -% \begin{macrocode} - 00% - 0{173517671/654249180}% - {65307479/619869377}{34221476/65864945}% - {225058681/768398401}{543339720/768398401}% - \fi} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\xP@circhar@@@} -% Draw the arc of $1/8$ circle and use the same space as the chars from the circle font do. -% \begin{macrocode} -\newcommand\xP@circhar@@@[8]{% - \xP@setsolidpat - \xP@stroke{\xP@coor{\R@*#1}{\R@*#2}m - \xP@coor{\R@*#3}{\R@*#4}\xP@coor{\R@*#5}{\R@*#6}% - \xP@coor{\R@*#7}{\R@*#8}c}% - \vrule width\z@ height\R@ depth\R@ - \kern\dimexpr\R@*#7\relax -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\cirrestrict@@} -% \begin{macro}{\xP@cirrestrict@@} -% Basically, "\cirrestrict@@" is turned into a no-op and does not change the radius. -% \begin{macrocode} -\xP@hook{cirrestrict@@} -\newcommand*\xP@cirrestrict@@{\count@\z@\relax} -% \end{macrocode} -% \end{macro} -% \end{macro} +% \begin{description} +% \item[v1.0] 2010/03/24 +% +% Initial version +% +% \item[v1.1] 2010/03/30 +% \begin{itemize} +% \item Added support for the \Xy-pic “rotate” extension. +% +% \item The parts of the style file dealing with \Xy-pic extensions (currently “curve” and “rotate”) are only executed when those extension were loaded. +% +% \item \textsf{xypdf} does not give an error message when used with \Xy-pic options which query the Postscript drivers (e.\,g.\ “all” or “color”). +% +% \item In DVI mode, a warning is issued that the DVI file is not portable, like \Xy-pic does when a Postscript driver is in use. +% +% \end{itemize} % +% \end{description} % \Finale \endinput
\ No newline at end of file |