diff options
Diffstat (limited to 'macros/latex/contrib/bxeepic')
-rw-r--r-- | macros/latex/contrib/bxeepic/LICENSE | 24 | ||||
-rw-r--r-- | macros/latex/contrib/bxeepic/README | 74 | ||||
-rw-r--r-- | macros/latex/contrib/bxeepic/bxdpxp2e.def | 10 | ||||
-rw-r--r-- | macros/latex/contrib/bxeepic/bxeepic.sty | 666 | ||||
-rw-r--r-- | macros/latex/contrib/bxeepic/sample-bxeepic.pdf | bin | 0 -> 8349 bytes | |||
-rw-r--r-- | macros/latex/contrib/bxeepic/sample-bxeepic.tex | 11 |
6 files changed, 785 insertions, 0 deletions
diff --git a/macros/latex/contrib/bxeepic/LICENSE b/macros/latex/contrib/bxeepic/LICENSE new file mode 100644 index 0000000000..46756e57fe --- /dev/null +++ b/macros/latex/contrib/bxeepic/LICENSE @@ -0,0 +1,24 @@ +本ソフトウェアは MIT ライセンスの下で配布されます。著作権は作者である +「八登崇之(別名 ZR)」に属します。また本ソフトウェアは無保証です。 + +The MIT License + +Copyright (c) 2012 Takayuki YATO (a.k.a. "ZR") + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/macros/latex/contrib/bxeepic/README b/macros/latex/contrib/bxeepic/README new file mode 100644 index 0000000000..a3cb4d00ba --- /dev/null +++ b/macros/latex/contrib/bxeepic/README @@ -0,0 +1,74 @@ +BXeepic Package +=============== + +LaTeX: Reimplementation of epic/eepic features using pict2e engine
+
+The eepic package (authored by Conrad Kwok) is one of packages to
+provide small-size extention to the picture environment of LaTeX
+(and epic package) and employs the tpic drawing feature of DVI-wares.
+Back in 1990--2000 the use of epic + eepic was widespread because
+many of the legacy DVI-wares (dvips, dvipdfmx, etc.) support tpic
+(and thus eepic extension). But pdfTeX engine has never supported
+tpic. As consequence, the use of epic + eepic was gradually replaced
+by pict2e as pdfTeX became more popular.
+
+In most cases drawings using epic + eepic are easily converted to
+pict2e ones, but there are features that eepic supports but pict2e
+does not --- e.g. ellipsis, dashed line. The present package provides
+almost full features of epic + eepic implemented on pict2e engines.
+Thus one can make epic + eepic drawings work on pdfTeX; moreover,
+one can use eepic and pict2e in the same document.
+
+### Installation + + - `*.sty`, `*.def` → $TEXMF/tex/latex/bxeepic + +### Usage + +Load this package after loading pict2e. + + \usepackage[<pict2e options>]{pict2e}
+ \usepackage{bxeepic}
+
+If pict2e is not yet loaded in loading bxeepic then it is loaded
+automatically, and in this case every option given to bxeepic will
+be passed to pict2e.
+
+ \usepackage[<pict2e options>]{bxeepic}
+ +This package provides all commands of epic and eepic packages, except
+the following:
+
+ - Shading: `\blacken`, `\whiten`, `\shade`, `\texture`, `\filltype`
+ - Dashed line with dotted dashes: the second optional argument of
+ `\dashline` is ignored.
+ - Dotted line with user-defined dots: the optional argument of
+ `\dottedline` is ignored.
+
+### Notice
+
+ - When behavior of a command differs btween eepic and epic, then
+ that of eepic is adopted.
+ - When behavior of a command differs btween pict2e and eepic, then
+ that of pict2e is adopted.
+ - However, `\arc` command can be used either in pict2e or eepic
+ syntax; when it looks like `\arc{...}{...}{...}` then eepic syntax
+ is assumed.
+ - When bxeepic is loaded, both epic and eepic packages are marked
+ as ‘already-loaded’; so one can load bxeepic earlily and then
+ the packages that rely on epic and eepic will work happily.
+ +Revision History +---------------- + + * Version 0.2 <2013/04/28> + - The bxdpxp2e module, which provides proper support for
+ dvipdfmx, was abolished because the recent pic2e (>=v0.2y)
+ has the support.
+ - Documentation. + * Version 0.1 <2010/08/08> + - The first public version. + +-------------------- +Takayuki YATO (aka. "ZR") +http://zrbabbler.sp.land.to/ diff --git a/macros/latex/contrib/bxeepic/bxdpxp2e.def b/macros/latex/contrib/bxeepic/bxdpxp2e.def new file mode 100644 index 0000000000..b1fde9c735 --- /dev/null +++ b/macros/latex/contrib/bxeepic/bxdpxp2e.def @@ -0,0 +1,10 @@ +\typeout{% +!!!!!!!!!!!!!!!!!!!! WARNING !!!!!!!!!!!!!!!!!!!!^^J% +Loading the file 'bxdpxp2e.def' in 'pict2e.cfg' should be^^J% +no longer needed, because the recent pict2e package (>=0.2y)^^J% +properly supports dvipdfmx.^^J% +If your pict2e is of older version, then update pict2e, or^^J% +load 'bxeepic' package (with 'dvipdfmx' driver option) in^^J% +place of 'pict2e' package.^^J% +!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} +\endinput diff --git a/macros/latex/contrib/bxeepic/bxeepic.sty b/macros/latex/contrib/bxeepic/bxeepic.sty new file mode 100644 index 0000000000..f450f154b2 --- /dev/null +++ b/macros/latex/contrib/bxeepic/bxeepic.sty @@ -0,0 +1,666 @@ +% +% bxeepic.sty +% + +%% package declarations +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{bxeepic}[2013/04/28 v0.2] + +%% preparation +\def\bxpz@ee@pkgname{bxeepic} +\def\bxpz@ee@error{\PackageError\bxpz@ee@pkgname} +\def\bxpz@ee@warn{\PackageWarning\bxpz@ee@pkgname} +% (errors) +\def\bxpz@warn@peald#1{\bxpz@ee@warn + {Option '#1' ignored (pict2e already loaded)}} +\def\bxpz@warn@wnpnt{\bxpz@ee@warn + {Poly-line commands need at least two vertices.}} +\def\bxpz@warn@wnstr{\bxpz@ee@warn + {Blank lines due to too low stretch value.}} +% (globals) +\newif\ifbxpz@injoin +\newif\ifbxpz@dashset +\newif\ifbxpz@eepic@dotl +\newif\ifbxpz@uselbl +\newif\ifbxpz@first +\chardef\bxpz@boxa=8 + +%% public parameters +%%<*> \dashlinestretch +\def\dashlinestretch{0} +%%<*> \drawlinestretch +\def\drawlinestretch{0} +%%<*> \maxovaldiam +\newdimen\maxovaldiam \maxovaldiam=40pt +%%<*> \epictopgridlabelsep +\def\epictopgridlabelsep{2mm} +%%<*> \epicbottomgridlabelsep +\def\epicbottomgridlabelsep{2\unitlength} +%%<*> \epicsidegridlabelsep +\def\epicsidegridlabelsep{\spacewidth} +%% other initial settings +\AtEndOfPackage{% + \drawlines + \eepicdottedlines + \def\bxpz@tmpa{20pt}% + %\ifx\maxovalrad\bxpz@tmpa \def\maxovalrad{.5\maxovaldiam}\fi +} + +%% internal parameters +\def\bxpz@dashlen@drawline{10pt} +\def\bxpz@setdash@phase{0} +\def\bxpz@dflt@linecap{0} +\def\bxpz@dflt@linejoin{0} + +%% dvipdfmx option +\IfFileExists{p2e-dvipdfmx.def}{}{%else + % if pict2e lacks of proper support of dvipdfmx + \@ifpackageloaded{pict2e}{}{%else + \DeclareOption{dvipdfmx}{% + \PassOptionsToPackage{dvipdfm}{pict2e}% + \def\bxpz@begin@picture@hook{\let\pdfliteral\bxpz@pdfliteral}% + \def\bxpz@pdfliteral##1{\special{pdf:literal ##1}}% + \let\bxpz@org@@picture\@picture + \def\@picture{\bxpz@begin@picture@hook \bxpz@org@@picture}% + }% + }% +} +%% option handling +\newif\ifbxpz@safe +\DeclareOption{safe}{\bxpz@safetrue} +\DeclareOption{nosafe}{\bxpz@safefalse} +% other options are passed to pict2e +\@ifpackageloaded{pict2e}{% + \DeclareOption*{\bxpz@warn@peald\CurrentOption}% +}{%else + \DeclareOption*{\PassOptionsToPackage{\CurrentOption}{pict2e}}% +}% +\ExecuteOptions{nosafe} +\ProcessOptions* + +% load pict2e if not done +\@ifpackageloaded{pict2e}{}{\RequirePackage{pict2e}} + +% pretend that epic & eepic are already loaded +\@namedef{ver@epic.sty}{2100/01/01} +\@namedef{ver@eepic.sty}{2100/01/01} + +%%------ mode-dependent stuffs + +%% exits unless in right mode +\ifnum\pIIe@mode<\@ne + \endinput\expandafter\fi + +%% +\ifcase\pIIe@mode\relax + \or + \def\bxpz@setdash@op{setdash} + \or + \def\bxpz@setdash@op{d} +\fi +\def\bxpz@beginarray@op{[} +\def\bxpz@endarray@op{]} + +%%------ Poly-line commands + +%% \bxpz@asdraw / \bxpz@asjoin / \bxpz@asmode +\def\bxpz@asdraw{\chardef\bxpz@lm@invoke\z@} +\def\bxpz@asjoin{\chardef\bxpz@lm@invoke\@ne} +\def\bxpz@asmode{\chardef\bxpz@lm@invoke\tw@} + +%%<*> \drawline/\dottedline/\dashline +% \dottedline[CHAR]{DOTGAP}(X1,Y1)...(XN,YN) +% \dashline[STRETCH]{DASHLEN}[DOTGAP](X1,Y1)...(XN,YN) +% * DOTGAP is ignored +% \drawline[STRETCH](X1,Y1)...(XN,YN) +% * switches to \dashline in case of negative STRETCH +\def\drawline{\bxpz@asdraw\bxpz@drawl@a} +\def\dottedline{\bxpz@asdraw\bxpz@dotl@a} +\def\dashline{\bxpz@asdraw\bxpz@dashl@a} +\def\bxpz@drawl@a{\@testopt\bxpz@drawl@b\drawlinestretch} +\def\bxpz@drawl@b[#1]{% + \ifnum#1<\z@ \def\bxpz@nxt{\bxpz@path{\bxpz@dp@drawl@x{#1}}}% + \else \let\bxpz@nxt\bxpz@drawl@c + \fi \bxpz@nxt} +\def\bxpz@drawl@c{\bxpz@path{\bxpz@dp@drawl}} +\def\bxpz@dashl@a{\@testopt\bxpz@dashl@b\dashlinestretch} +\def\bxpz@dashl@b[#1]#2{\@testopt{\bxpz@dashl@c{#1}{#2}}{}} +\def\bxpz@dashl@c#1#2[#3]{\bxpz@path{\bxpz@dp@dashl{#1}{#2}}} +\def\bxpz@dotl@a{\@testopt\bxpz@dotl@b{}} +\def\bxpz@dotl@b[#1]#2{\bxpz@path{\bxpz@dp@dotl{#1}{#2}}} +%\def\path{\bxpz@asdraw\bxpz@path{}} +%% \bxpz@path{<dash-pattern>} +\def\bxpz@path#1{% + #1\ifcase\bxpz@lm@invoke + \expandafter\bxpz@polyline + \or \expandafter\bxpz@join@start + \or \expandafter\bxpz@dash@mode + \fi} + +%% \bxpz@polyline +% Same as \polyline in pict2e, except that \bxpz@stroke@graph is +% used instead of \pIIe@strokeGraph. +\def\bxpz@polyline(#1,#2){% + \@killglue + \pIIe@moveto{#1\unitlength}{#2\unitlength}% + \@ifnextchar\lp@r{\bxpz@polyline@a}% + {\ifnum\bxpz@lm@invoke=\z@ \bxpz@warn@wnpnt \fi \ignorespaces}} +\def\bxpz@polyline@a(#1,#2){% + \pIIe@lineto{#1\unitlength}{#2\unitlength}% + \@ifnextchar\lp@r{\bxpz@polyline@a}{\bxpz@stroke@graph\ignorespaces}} + +%%<*> drawjoin / dottedjoin / dashjoin environment +% \begin{dottedjoin}[CHAR]{DOTGAP}...\end{dottedjoin} +% \begin{dashjoin}[STRETCH]{DASHLEN}[DOTGAP]...\end{dashjoin} +% \begin{drawjoin}[STRETCH]...\end{drawjoin} +\def\drawjoin{\bxpz@asjoin\bxpz@drawl@a} +\def\dottedjoin{\bxpz@asjoin\bxpz@dotl@a} +\def\dashjoin{\bxpz@asjoin\bxpz@dashl@a} +\def\bxpz@endjoin{\bxpz@join@end\aftergroup\bxpz@join@finale} +\let\enddrawjoin\bxpz@endjoin +\let\enddottedjoin\bxpz@endjoin +\let\enddashjoin\bxpz@endjoin + +%%<*> \jput(X,Y){something} +\def\jput(#1,#2){% + \ifbxpz@injoin + \xdef\bxpz@g@join@last{(#1,#2)}% + \xdef\bxpz@g@join@path{\bxpz@g@join@path\bxpz@g@join@last}% + \fi \put(#1,#2)} +\let\bxpz@g@join@last\relax +\let\bxpz@g@join@path\@empty + +%% \bxpz@join@start +\def\bxpz@join@start{% + \bxpz@renew@join \let\bxpz@dp@join\bxpz@dp + \edef\bxpz@wholewidth@join{\the\@wholewidth}% + \bxpz@dp@clear \bxpz@injointrue \ignorespaces} + +%% \bxpz@join@end +\def\bxpz@join@end{\bxpz@renew@join} + +%% \bxpz@join@finale +\def\bxpz@join@finale{% + \ifbxpz@injoin\else + \global\let\bxpz@g@join@last\relax + \global\let\bxpz@g@join@path\@empty + \fi \ignorespaces} + +%%<*> \flushjoin +\def\flushjoin{% + \bxpz@flush@join \global\let\bxpz@g@join@last\relax} +%% \bxpz@renew@join +\def\bxpz@renew@join{% + \bxpz@flush@join + \ifx\bxpz@g@join@last\relax\else + \global\let\bxpz@g@join@path\bxpz@g@join@last \fi} +\def\bxpz@flush@join{% + \ifx\bxpz@g@join@path\@empty\else + \bgroup \bxpz@asjoin + \@wholewidth=\bxpz@wholewidth@join \let\bxpz@dp\bxpz@dp@join + \expandafter\bxpz@polyline\bxpz@g@join@path + \egroup \global\let\bxpz@g@join@path\@empty + \fi} + +%%<*> \drawlines / \dottedlines / \dashlines +\def\drawlines{\bxpz@asmode\bxpz@drawl@a} +\def\dottedlines{\bxpz@asmode\bxpz@dotl@a} +\def\dashlines{\bxpz@asmode\bxpz@dashl@a} + +%% \bxpz@dash@mode +\def\bxpz@dash@mode{% + \let\bxpz@dp@mode\bxpz@dp \bxpz@dp@clear \ignorespaces} + +%%<*>\path(X1,Y1)..(Xn,Yn) +\def\path{\bxpz@asdraw \bxpz@polyline} + +%%------ Dash-pattern generator + +% A dash-pattern generator defines \bxpz@dp to be +% {<PS dash array>}{<dash flag>} +% where <dash flag> means: 0 = normal; 1 = ordinary dotted line, +% line-width adjustment is needed; 2 = character dotted line. + +%% \bxpz@dp@drawl +\def\bxpz@dp@drawl{\let\bxpz@dp\bxpz@dp@drawl@val} +%% \bxpz@dp@dotl{<IGNORED>}{<dot-gap>} +\def\bxpz@dp@dotl#1#2{\bxpz@dp@start + \bxpz@addto@dp@nums{\@wholewidth}{#2\unitlength}% + \gdef\bxpz@g@dpflag{1}\bxpz@dp@end} +%% \bxpz@dp@drawl@x{<stretch>} +% For \drawline with negative stretch. +\def\bxpz@dp@drawl@x#1{\bxpz@dp@dashl@sub{% + \@tempcnta=#1\relax\multiply\@tempcnta\tw@ + \@tempdima=\bxpz@dashlen@drawline}} +%% \bxpz@dp@dashl{<stretch>}{<dash-length>} +\def\bxpz@dp@dashl#1#2{\bxpz@dp@dashl@sub{% + \@tempcnta=#1\relax\advance\@tempcnta-100 + \@tempdima=#2\unitlength}} +% \bxpz@dp@dashl@sub +% Here dash gap length is calculated so that 'ink ratio' in resulted +% lines equals the value derived from the given stretch value. +% ink ratio: (blank)0.0 0.5 1.0(solid) +% \drawline stretch: -100 .. -50 .. 0 +% \dashline stretch: -100 .. 0 .. 100 +\def\bxpz@dp@dashl@sub#1{\bxpz@dp@start + #1% here \@tempcnta is adjusted in range -200..0 + \ifnum\@tempcnta<\z@ + \ifnum\@tempcnta>-200 % + \@tempdimb=-\@tempcnta\@tempdima + \advance\@tempcnta200 \divide\@tempdimb\@tempcnta + \bxpz@addto@dp@nums{\@tempdima}{\@tempdimb}% + \else % 'blank' lines + \bxpz@warn@wnstr \bxpz@addto@dp@nums{\z@}{1000pt}% + \fi + \fi % if \@tempcnta >=0 then do nothing (solid lines) + \bxpz@dp@end} +% some internal stuffs +\def\bxpz@dp@start{% + \bgroup \global\let\bxpz@g@dp\@empty \gdef\bxpz@g@dpflag{0}} +\def\bxpz@dp@end{ + \egroup \edef\bxpz@dp{{\bxpz@g@dpflag}{\bxpz@g@dp}}} +\def\bxpz@dp@drawl@val{{}{0}} +\def\bxpz@addto@dp@nums#1#2{% + \bgroup \@tempdima#1\relax \@tempdimb#2\relax + \xdef\bxpz@g@dp{% + \bxpz@g@dp\strip@pt\@tempdima\space\strip@pt\@tempdimb\space}% + \egroup} +\def\bxpz@dp@clear{\let\bxpz@dp\relax} + +%%------ Strokes with dash-pattern in effect + +%% pict2e original \pIIe@strokeGraph +\def\bxpz@pIIe@strokeGraph{\begingroup \@tempswafalse\pIIe@drawGraph} + +% \bxpz@stroke@graph +\def\bxpz@stroke@graph{\begingroup \bxpz@draw@graph} +\def\bxpz@draw@graph{% + \ifx\bxpz@dp\relax \let\bxpz@dp\bxpz@dp@mode \fi + \ifx\bxpz@dp\bxpz@dp@drawl@val \let\bxpz@setdash\@empty + \else + \ifbxpz@eepic@dotl \roundcap \fi + \bxpz@set@dp\bxpz@dp + \ifnum \bxpz@dpflag=\@ne \bxpz@adj@linewidth \fi + \xdef\bxpz@setdash{\bxpz@beginarray@op\space\bxpz@dpary + \bxpz@endarray@op\space\bxpz@setdash@phase\space + \bxpz@setdash@op\space}% + \fi + \edef\x{\pIIe@debug@comment\space\pIIe@scale@PTtoBP}% + \edef\x{\x\space\bxpz@setdash\strip@pt\@wholewidth\space + \pIIe@setlinewidth@op}% + \edef\y{\pIIe@stroke@op}% + \expandafter\pIIe@code\expandafter{% + \expandafter\x\the\pIIe@GRAPH\space\y}% + \global\pIIe@GRAPH{}\xdef\pIIe@CPx{}\xdef\pIIe@CPy{}% + \endgroup + \let\bxpz@dp\relax} + +%% \bxpz@set@dp\DP +\def\bxpz@set@dp#1{\expandafter\bxpz@set@dp@a#1} +\def\bxpz@set@dp@a#1#2{% + \def\bxpz@dpary{#2}\def\bxpz@dpflag{#1}} + +\def\bxpz@adj@linewidth{% + \ifdim\@wholewidth<0.2pt \@wholewidth=2\@wholewidth + \else\ifdim\@wholewidth<1pt + \@wholewidth=0.75\@wholewidth \advance\@wholewidth0.25pt + \fi\fi} + +%%------ Circles & ovals + +% pict2e's original \@arc command +\let\bxpz@pIIe@arc\@arc + +%% \@arc{<diam>}{<s_angle>}{<e_angle>} +% If the arguments obey the format shown above then passes them +% to \bxpz@eepic@arc; otherwise passes them to \bxpz@pIIe@arc. +\def\@arc{\@ifnextchar[{\@arc}{\bxpz@arc@a}} +\def\bxpz@arc@a#1{% + \def\bxpz@argi{#1}\futurelet\bxpz@tok\bxpz@arc@b} +\def\bxpz@arc@b{% + \ifx\bxpz@tok\bgroup \expandafter\bxpz@arc@c + \else \bxpz@pIIe@arc\bxpz@argi \fi} +\def\bxpz@arc@c#1{% + \def\bxpz@doargii{\bxpz@do{#1}}\futurelet\bxpz@tok\bxpz@arc@d} +\def\bxpz@arc@d{% + \ifx\bxpz@tok\bgroup \expandafter\bxpz@arc@f + \else \expandafter\bxpz@arc@e \fi} +\def\bxpz@arc@e{% + \bxpz@pIIe@arc\bxpz@argi \let\bxpz@do\@empty\bxpz@doargii} +\def\bxpz@arc@f{% + \def\bxpz@do##1{\bxpz@eepic@arc\bxpz@argi{##1}}\bxpz@doargii} + +%% \bxpz@eepic@arc{<diam>}{<s_angle>}{<e_angle>} +\def\bxpz@eepic@arc#1#2#3{% + \bgroup + \@tempdima=#2\p@ \@tempdimb=#3\p@ \bxpz@conv@arc@param + \@tempdimc=#1\unitlength \divide\@tempdimc\tw@ + \xdef\bxpz@g@tmpa{% + {\the\@tempdimc}{\strip@pt\@tempdima}{\strip@pt\@tempdimb}}% + \egroup + \if@tempswa + \def\bxpz@do{\pIIe@arc{\z@}{\z@}}% + \pIIe@moveto\z@\z@ \expandafter\bxpz@do\bxpz@g@tmpa + \pIIe@closepath\pIIe@fillGraph + \else + \def\bxpz@do{\pIIe@arc[1]{\z@}{\z@}}% + \expandafter\bxpz@do\bxpz@g@tmpa \pIIe@strokeGraph + \fi} + +%% \bxpz@conv@arc@param +% Converts tpic degree arguments (s, e) to pict2e ones (S, E); values +% of (\@tempdima, \@tempdimb) are changed from (s, e) to (S, E). +% Let (S', E') = -(180/pi)(s, e); then: +% * if e - s >= 2pi (ie. S' - 360 >= E') then (S, E) = (0, 360) +% so that a whole circle is drawn; +% * otherwise, adjust S' and E' to values in range [0, 360), and then +% if S' < E' then decrement E' by 360, since in tpic an arc is +% always drawn in clockwise direction and thus S' >= E' must hold. +% Note: After scaling by 180/pi, degree values are rounded to multiples +% of 2^(-10). This rounding eliminates errors in the case of 'common +% angles' such as 15deg, while generally it enlarges the maximum possible +% error by factor about two. +\def\bxpz@conv@arc@param{% +%\typeout{BEFORE:\the\@tempdima/\the\@tempdimb}% + \bxpz@conv@arc@param@a\@tempdima \bxpz@conv@arc@param@a\@tempdimb + \@tempdimc\@tempdima \dimen@360\p@ \advance\@tempdimc-\dimen@ + \ifdim \@tempdimb>\@tempdimc + \bxpz@conv@arc@param@b\@tempdima \bxpz@conv@arc@param@b\@tempdimb + \ifdim \@tempdima<\@tempdimb \advance\@tempdimb-\dimen@ \fi + \else \@tempdima\z@ \@tempdimb\dimen@ \fi +%\typeout{AFTER : \the\@tempdima/\the\@tempdimb}% +} +\def\bxpz@conv@arc@param@a#1{% + #1=57.29577951#1\advance#132sp \divide#164\multiply#1-64\relax} +\def\bxpz@conv@arc@param@b#1{% + \@whiledim#1>\z@ \do{\advance#1-\dimen@}% + \@whiledim#1<\z@ \do{\advance#1\dimen@}}% + +%%<*> \ellipse[*]{<x_diam>}{<y_diam>} +\def\ellipse{% + \@ifstar{\begingroup\@tempswatrue\bxpz@ellipse}% + {\begingroup\@tempswafalse\bxpz@ellipse}} +\def\bxpz@ellipse#1#2{% + \@tempdima=#1\unitlength\@tempdimb=#2\unitlength + \ifdim\@tempdima<\z@ \@tempdima\z@ \fi + \ifdim\@tempdimb<\z@ \@tempdimb\z@ \fi + \divide\@tempdima\tw@ \divide\@tempdimb\tw@ + \bxpz@ellipse@a + \if@tempswa \pIIe@fillGraph \else \pIIe@strokeGraph \fi + \endgroup} +\def\bxpz@ellipse@a{% + \buttcap \@ovxx\@tempdima \@ovyy\@tempdimb + \@ovdx=0.55228475\@ovxx \@ovdy=0.55228475\@ovyy + \pIIe@moveto\@ovxx\z@ + \pIIe@curveto\@ovxx\@ovdy\@ovdx\@ovyy\z@\@ovyy + \pIIe@curveto{-\@ovdx}\@ovyy{-\@ovxx}\@ovdy{-\@ovxx}\z@ + \pIIe@curveto{-\@ovxx}{-\@ovdy}{-\@ovdx}{-\@ovyy}\z@{-\@ovyy}% + \pIIe@curveto\@ovdx{-\@ovyy}\@ovxx{-\@ovdy}\@ovxx\z@ + \pIIe@closepath} + + +%%------ Chaikin spline curves + +%%<*> \spline +% Same as \polyline in pict2e, except that \bxpz@stroke@graph is +% used instead of \pIIe@strokeGraph. +\def\spline{\bxpz@firsttrue\bxpz@spline@a} +\def\bxpz@spline@a(#1,#2){% + \@killglue \@xdim=#1\unitlength \@ydim=#2\unitlength + \pIIe@moveto\@xdim\@ydim + \@ifnextchar\lp@r{\bxpz@spline@b}% + {\ifnum \bxpz@warn@wnpnt \ignorespaces}} +\def\bxpz@spline@b(#1,#2){% + % M1:previous midpoint (\@ovdx,\@ovdy) + % P1:previous point (\@xdim,\@ydim) + % M2:current midpoint (\@ovxx,\@ovyy) + % P2:current point (\@tempdima,\@tempdimb) + \@tempdima=#1\unitlength\@tempdimb=#2\unitlength + \@ovxx\@tempdima \advance\@ovxx\@xdim \divide\@ovxx\tw@ + \@ovyy\@tempdimb \advance\@ovyy\@ydim \divide\@ovyy\tw@ + \ifbxpz@first + \pIIe@lineto\@ovxx\@ovyy \bxpz@firstfalse + \else\bgroup + % quadratic Bezier curve M1--P1--M2 + \pIIe@bezier@QtoC\@ovdx\@xdim\@ovdx + \pIIe@bezier@QtoC\@ovdy\@ydim\@ovdy + \pIIe@bezier@QtoC\@ovxx\@xdim\@xdim + \pIIe@bezier@QtoC\@ovyy\@ydim\@ydim + \pIIe@curveto\@ovdx\@ovdy\@xdim\@ydim\@ovxx\@ovyy + \egroup\fi + \@ovdx\@ovxx \@ovdy\@ovyy + \@xdim\@tempdima \@ydim\@tempdimb + \@ifnextchar\lp@r{\bxpz@spline@b}{\bxpz@spline@c}} +\def\bxpz@spline@c{% + \pIIe@lineto\@xdim\@ydim + \bxpz@stroke@graph\ignorespaces} + + +%%------ Functions not dependent on special features + +%%<*> \allinesthickness +% In pict2e \linethickness setting applies to all kinds of lines. +% For better compatibility with eepic, \allinesthickness changes +% (without much aim) the LaTeX "line fonts". +\def\allinethickness{\bxpz@thicklinefont \linethickness} +\def\bxpz@thicklinefont{\let\@linefnt\tenlnw\let\@circlefnt\tencircw} + +%%<*> \Thicklines +% Sets line-width to 1.5 times the width of \thicklines. +\def\Thicklines{\bxpz@thicklinefont \@wholewidth\fontdimen8\tenlnw + \linethickness{1.5\@wholewidth}} + +%%<*> \picsquare +% Not of much use. +\def\picsquare{% + \hskip-\@halfwidth + \vrule\@width\@wholewidth\@height\@halfwidth\@depth\@halfwidth\relax} + +%%<*> \multiputlist +% \multiputlist(X,Y)(DX,DY)[tbrl]{ITEM,...} +\def\multiputlist(#1,#2)(#3,#4){% + \@xdim=#1\unitlength \@ydim=#2\unitlength \@killglue + \@ifnextchar[{\bxpz@multiputlist@a{#3}{#4}}% + {\bxpz@multiputlist@a{#3}{#4}[]}} +\def\bxpz@multiputlist@a#1#2[#3]#4{% + \@for\bxpz@x:={#4}\do{% + \raise\@ydim\hb@xt@\z@{\kern\@xdim + \@imakepicbox(0,0)[#3]\bxpz@x \hss}% + \advance\@xdim#1\unitlength \advance\@ydim#2\unitlength}% + \ignorespaces} + +%%<*> \matrixput +% \matrixput(X,Y)(DX1,DY1){N1}(DX2,DY2){N2}{ITEM} +\def\matrixput(#1,#2)(#3,#4)#5(#6,#7)#8#9{% + \bgroup \@xdim\z@ \@ydim\z@ + \setbox\bxpz@boxa\hbox{% + \@multicnt=#8\relax + \@whilenum\@multicnt>\z@\do{% + \raise\@ydim\hb@xt@\z@{\kern\@xdim #9\hss}% + \advance\@xdim#6\unitlength \advance\@ydim#7\unitlength + \advance\@multicnt\m@ne}}% + \@xdim=#1\unitlength \@ydim=#2\unitlength \@killglue + \@multicnt=#5\relax + \@whilenum\@multicnt>\z@\do{% + \raise\@ydim\hb@xt@\z@{\kern\@xdim \copy\bxpz@boxa\hss}% + \advance\@xdim#3\unitlength \advance\@ydim#4\unitlength + \advance\@multicnt\m@ne}% + \egroup \ignorespaces} + +%%<*> \grid +% \grid(W,H)(DW,DH)[X0,Y0] +\def\grid(#1,#2)(#3,#4){% + \@ovxx=#1\unitlength \@ovyy=#2\unitlength + \edef\bxpz@gridx{#3}\edef\bxpz@gridy{#4}% + \@ifnextchar[{\bxpz@grid@a}{\bxpz@grid@a[,]}} +\def\bxpz@grid@a[#1,#2]{% + \@killglue \let\spacewidth\@ovri + \setbox\bxpz@boxa\hbox{\space}\@ovri=\wd\bxpz@boxa + \@tempdimc=\z@ \@ovdx=\bxpz@gridx\unitlength + \ifx @#1@\bxpz@uselblfalse + \else \@tempdima=#1\p@ \bxpz@uselbltrue \fi + \@tempdimb\@ovxx \advance\@tempdimb.5\@ovdx \divide\@tempdimb\@ovdx + \@tempcnta\@tempdimb \advance\@tempcnta\@ne + \@whilenum\@tempcnta>\z@ \do{% + \hb@xt@\z@{\kern\@tempdimc \kern-\@halfwidth + \vrule\@height\@ovyy\@width\@wholewidth \hss}% + \ifbxpz@uselbl \bxpz@makelbl + \setbox\bxpz@boxa\hb@xt@\z@{\hss\copy\bxpz@boxa\hss}% + \hb@xt@\z@{\kern\@tempdimc + \vtop{\kern\epicbottomgridlabelsep\copy\bxpz@boxa}\hss}% + \raise\@ovyy\hb@xt@\z@{\kern\@tempdimc + \vbox{\copy\bxpz@boxa\kern\epictopgridlabelsep}\hss}% + \fi + \advance\@tempdima\bxpz@gridx\p@ \advance\@tempdimc\@ovdx + \advance\@tempcnta\m@ne}% + \@tempdimc=\z@ \@ovdy=\bxpz@gridy\unitlength + \ifx @#2@\bxpz@uselblfalse + \else \@tempdima=#2\p@ \bxpz@uselbltrue \fi + \@tempdimb\@ovyy \advance\@tempdimb.5\@ovdy \divide\@tempdimb\@ovdy + \@tempcnta\@tempdimb \advance\@tempcnta\@ne + \@whilenum\@tempcnta>\z@ \do{% + \raise\@tempdimc\hb@xt@\z@{% + \vrule\@height\@halfwidth\@depth\@halfwidth\@width\@ovxx \hss}% + \ifbxpz@uselbl \bxpz@makelbl + \setbox\bxpz@boxa\vbox to\z@{\vss\copy\bxpz@boxa\vss}% + \raise\@tempdimc\hb@xt@\z@{% + \hss\copy\bxpz@boxa\kern\epicsidegridlabelsep}% + \raise\@tempdimc\hb@xt@\z@{\kern\@ovxx + \kern\epicsidegridlabelsep\copy\bxpz@boxa\hss}% + \fi + \advance\@tempdima\bxpz@gridy\p@ \advance\@tempdimc\@ovdy + \advance\@tempcnta\m@ne}% + \let\spacewidth\@undefined + \ignorespaces} +\def\bxpz@makelbl{% + \edef\bxpz@tmpa{\noexpand\bxGridLabelForm{\strip@pt\@tempdima}}% + \setbox\bxpz@boxa\hbox{\bxpz@tmpa}} + +%<+> \bxGridLabelForm{<real>} +% It must output the formatted string for value <real>. which is +% given as numerals (e.g. 72 or 10.333333). +% The default implementation uses decimal strings of the value +% rounded to integers. +\def\bxGridLabelForm#1{\@tempdima#1\p@ \advance\@tempdima.5\p@ + \expandafter\bxpz@gridlabelform@a\the\@tempdima\@nil} +\def\bxpz@gridlabelform@a#1.#2\@nil{#1} + +%%<*> \putfile{<filename>}{<general_text>} +\def\putfile#1#2{% + \def\bxpz@body{#2}% + \let\bxpz@dofile\bxpz@putfile@a \let\bxpz@dofile@skipped\relax + \bxpz@dofile@ifexists{#1}} +\let\bxpz@fhread\@inputcheck +\def\bxpz@putfile@a#1{% + \openin\bxpz@fhread=#1\relax \let\bxpz@tmpa\relax + \ifeof\bxpz@fhread\else \expandafter\bxpz@putfile@b \fi + \closein\bxpz@fhread \ignorespaces} +\def\bxpz@putfile@b{% + \read\bxpz@fhread to\bxpz@line + \ifx\bxpz@line\bxpz@line@par \let\bxpz@line\@empty \fi + \edef\bxpz@line{\bxpz@line\space\space}% + \expandafter\bxpz@putfile@c\bxpz@line + \ifeof\bxpz@fhread\else \expandafter\bxpz@putfile@b \fi} +\def\bxpz@putfile@c#1 {% + \ifx @#1@\relax \else + \ifx\bxpz@tmpa\relax \def\bxpz@tmpa{#1}% + \else \put(\bxpz@tmpa,#1){\bxpz@body} + \let\bxpz@tmpa\relax + \fi \expandafter\bxpz@putfile@c + \fi} +\def\bxpz@line@par{\par} + +%% \bxpz@dofile@ifexists +\newif\ifbxpz@dofile@ok +\def\bxpz@InputIfFileExists#1#2{% + \IfFileExists{#1}{\bxpz@dofile@ifex@a\bxpz@dofile{#1}}} +\let\bxpz@ltx@InputIfFileExists\InputIfFileExists +\def\bxpz@dofile@ifexists#1{% + \let\InputIfFileExists\bxpz@InputIfFileExists + \bxpz@dofile@okfalse \@iinput{#1}% + \ifbxpz@dofile@ok\else + \bxpz@dofile@ifex@a \bxpz@dofile@skipped \fi} +\def\bxpz@dofile@ifex@a{\bxpz@dofile@oktrue + \let\InputIfFileExists\bxpz@ltx@InputIfFileExists} + +%%------ +\ifbxpz@safe %----<*safe> + +%%<*> \[no]eepicdottedlines +% No-op in safe mode. +\let\eepicdottedlines\relax +\let\noeepicdottedlines\relax + +\else %----<*!safe> + +%%<*> \[no]eepicdottedlines +\let\eepicdottedlines\bxpz@eepic@dotltrue +\let\noeepicdottedlines\bxpz@eepic@dotlfalse + +%% \bxpz@redefine@linestyle\LSCMD{<attr>}{<val>} +\def\bxpz@redefine@linestyle#1#2#3{% + \expandafter\bxpz@redefine@linestyle@a + \csname bxpz@raw@\expandafter\@gobble\string#1\expandafter\endcsname + \csname bxpz@#2\expandafter\endcsname + \csname bxpz@LS/#2/#3\expandafter\endcsname + \csname bxpz@SLS/#2\endcsname #1{#2}{#3}} +\def\bxpz@redefine@linestyle@a#1#2#3#4#5#6#7{% + % \[bxpz@raw@LSCMD]\[bxpz@<attr>]\[bxpz@LS/<attr>/<val>] + % \[bxpz@SLS/<attr>]\LSCMD{<attr>}{<val>} + \let#1#5\let#3#5\def#5{\def#2{#7}#3\aftergroup#4}% + \def#4{\csname bxpz@LS/#6/#2\endcsname}} +% redefine linestyle commands +\bxpz@redefine@linestyle\buttcap{lcap}{0} +\bxpz@redefine@linestyle\roundcap{lcap}{1} +\bxpz@redefine@linestyle\squarecap{lcap}{2} +\bxpz@redefine@linestyle\miterjoin{ljoin}{0} +\bxpz@redefine@linestyle\roundjoin{ljoin}{1} +\bxpz@redefine@linestyle\beveljoin{ljoin}{2} + +% default values of states +\let\bxpz@lcap\bxpz@dflt@linecap +\let\bxpz@ljoin\bxpz@dflt@linejoin + +%% patch to \pIIe@circle +% \buttcap moved one-level outside. +\def\pIIe@circle#1{% + \buttcap + \begingroup + \pIIe@qcircle[1]\z@{#1}\pIIe@qcircle \@ne{#1}% + \pIIe@qcircle \tw@{#1}\pIIe@qcircle\thr@@{#1}% + \endgroup} + + +\fi %----</safe> +\endinput +%%------ +% +% List of epic features not contained in pict2e +% +%\multiputlist(X,Y)(DX,DY)[tbrl]{ITEM,...} +%\matrixput(X,Y)(DX1,DY1){N1}(DX2,DY2){N2}{ITEM} +%\grid(W,H)(DW,DH)[X0,Y0] +%\dottedline[CHAR]{DOTGAP}(X1,Y1)...(XN,YN) +%\dashline[STRETCH]{DASHLEN}[DOTGAP](X1,Y1)...(XN,YN) +%\drawline[STRETCH](X1,Y1)...(XN,YN) +%\jput(X,Y){ITEM} +%\begin{dottedjoin}[C]{G} ... \end{dottedjoin} +%\begin{dashjoin}[S]{D}[G] ... \end{dashjoin} +%\begin{drawjoin}[S] ... \end{drawjoin} +%\picsquare +%\putfile{FILE} +%\dashlinestretch +%\drawlinestretch +% +% List of eepic features not contained in pict2e +% +%\maxovaldimen (for \oval) +%\allinethickness +%\Thicklines +%\path(X1,Y1)..(Xn,Yn) +%\spline(X1,Y1)..(Xn,Yn) +%\ellipse[*]{XDIAM}{YDIAM} +%\arc{DIAM}{SANG}{EANG} *angle in radian, +ve = clockwise +%\filltype{FILL} / \blacken / \whiten / \shade +% +%% EOF diff --git a/macros/latex/contrib/bxeepic/sample-bxeepic.pdf b/macros/latex/contrib/bxeepic/sample-bxeepic.pdf Binary files differnew file mode 100644 index 0000000000..6e66d9bbd7 --- /dev/null +++ b/macros/latex/contrib/bxeepic/sample-bxeepic.pdf diff --git a/macros/latex/contrib/bxeepic/sample-bxeepic.tex b/macros/latex/contrib/bxeepic/sample-bxeepic.tex new file mode 100644 index 0000000000..957b86f4c2 --- /dev/null +++ b/macros/latex/contrib/bxeepic/sample-bxeepic.tex @@ -0,0 +1,11 @@ +\documentclass[a4paper]{article} +\usepackage{bxeepic} +\begin{document} +\begin{picture}(100,100) + \Thicklines + \put(50,50){\ellipse{80}{60}} + \thicklines + \dashline{4}(0,50)(100,50) + \dashline{4}(50,0)(50,100) +\end{picture} +\end{document} |