From c6a479104e5b7267d949f7ffa30a04d66b91dd84 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 27 Mar 2017 21:47:01 +0000 Subject: svg (27mar17) git-svn-id: svn://tug.org/texlive/trunk@43625 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/svg/Fig.1a.pdf | Bin 35786 -> 0 bytes Master/texmf-dist/doc/latex/svg/Fig.1b.eps | 1938 ------- Master/texmf-dist/doc/latex/svg/Fig.2.pdf | Bin 188888 -> 0 bytes Master/texmf-dist/doc/latex/svg/Fig.2.png | Bin 238966 -> 0 bytes Master/texmf-dist/doc/latex/svg/LICENSE.md | 30 + Master/texmf-dist/doc/latex/svg/README | 40 - Master/texmf-dist/doc/latex/svg/README.md | 55 + Master/texmf-dist/doc/latex/svg/example.pdf | Bin 4816 -> 0 bytes Master/texmf-dist/doc/latex/svg/example.pdf_tex | 40 - Master/texmf-dist/doc/latex/svg/example.svg | 363 -- Master/texmf-dist/doc/latex/svg/preamble.tex | 8 - Master/texmf-dist/doc/latex/svg/root.C | 1 + Master/texmf-dist/doc/latex/svg/root.pdf | Bin 166153 -> 0 bytes Master/texmf-dist/doc/latex/svg/root.pdf_tex | 49 - Master/texmf-dist/doc/latex/svg/svg-example.svg | 401 ++ Master/texmf-dist/doc/latex/svg/svg-preamble.tex | 10 + Master/texmf-dist/doc/latex/svg/svg.pdf | Bin 368261 -> 965165 bytes Master/texmf-dist/source/latex/svg/svg.dtx | 5908 +++++++++++++++++++--- Master/texmf-dist/tex/latex/svg/svg-extract.sty | 1147 +++++ Master/texmf-dist/tex/latex/svg/svg.sty | 1253 ++++- Master/tlpkg/libexec/ctan2tds | 1 + 21 files changed, 7997 insertions(+), 3247 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/svg/Fig.1a.pdf delete mode 100644 Master/texmf-dist/doc/latex/svg/Fig.1b.eps delete mode 100644 Master/texmf-dist/doc/latex/svg/Fig.2.pdf delete mode 100644 Master/texmf-dist/doc/latex/svg/Fig.2.png create mode 100644 Master/texmf-dist/doc/latex/svg/LICENSE.md delete mode 100644 Master/texmf-dist/doc/latex/svg/README create mode 100644 Master/texmf-dist/doc/latex/svg/README.md delete mode 100644 Master/texmf-dist/doc/latex/svg/example.pdf delete mode 100644 Master/texmf-dist/doc/latex/svg/example.pdf_tex delete mode 100644 Master/texmf-dist/doc/latex/svg/example.svg delete mode 100644 Master/texmf-dist/doc/latex/svg/preamble.tex delete mode 100644 Master/texmf-dist/doc/latex/svg/root.pdf delete mode 100644 Master/texmf-dist/doc/latex/svg/root.pdf_tex create mode 100644 Master/texmf-dist/doc/latex/svg/svg-example.svg create mode 100644 Master/texmf-dist/doc/latex/svg/svg-preamble.tex create mode 100644 Master/texmf-dist/tex/latex/svg/svg-extract.sty (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/svg/Fig.1a.pdf b/Master/texmf-dist/doc/latex/svg/Fig.1a.pdf deleted file mode 100644 index 8e784b5e9d3..00000000000 Binary files a/Master/texmf-dist/doc/latex/svg/Fig.1a.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/svg/Fig.1b.eps b/Master/texmf-dist/doc/latex/svg/Fig.1b.eps deleted file mode 100644 index c67ba62b463..00000000000 --- a/Master/texmf-dist/doc/latex/svg/Fig.1b.eps +++ /dev/null @@ -1,1938 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: TeX -%%LanguageLevel: 2 -%%DocumentSuppliedResources: (atend) -%%BoundingBox: 0 0 142 105 -%%HiResBoundingBox: 0 0 141.732 104.389 -%%DocumentSuppliedResources: (atend) -%%EndComments -%%BeginProlog -%%BeginResource: procset xpdf 3.00 0 -%%Copyright: Copyright 1996-2004 Glyph & Cog, LLC -/xpdf 75 dict def xpdf begin -% PDF special state -/pdfDictSize 15 def -/pdfSetup { - 3 1 roll 2 array astore - /setpagedevice where { - pop 3 dict begin - /PageSize exch def - /ImagingBBox null def - /Policies 1 dict dup begin /PageSize 3 def end def - { /Duplex true def } if - currentdict end setpagedevice - } { - pop pop - } ifelse -} def -/pdfStartPage { - pdfDictSize dict begin - /pdfFillCS [] def - /pdfFillXform {} def - /pdfStrokeCS [] def - /pdfStrokeXform {} def - /pdfFill [0] def - /pdfStroke [0] def - /pdfFillOP false def - /pdfStrokeOP false def - /pdfLastFill false def - /pdfLastStroke false def - /pdfTextMat [1 0 0 1 0 0] def - /pdfFontSize 0 def - /pdfCharSpacing 0 def - /pdfTextRender 0 def - /pdfTextRise 0 def - /pdfWordSpacing 0 def - /pdfHorizScaling 1 def - /pdfTextClipPath [] def -} def -/pdfEndPage { end } def -% PDF color state -/cs { /pdfFillXform exch def dup /pdfFillCS exch def - setcolorspace } def -/CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def - setcolorspace } def -/sc { pdfLastFill not { pdfFillCS setcolorspace } if - dup /pdfFill exch def aload pop pdfFillXform setcolor - /pdfLastFill true def /pdfLastStroke false def } def -/SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if - dup /pdfStroke exch def aload pop pdfStrokeXform setcolor - /pdfLastStroke true def /pdfLastFill false def } def -/op { /pdfFillOP exch def - pdfLastFill { pdfFillOP setoverprint } if } def -/OP { /pdfStrokeOP exch def - pdfLastStroke { pdfStrokeOP setoverprint } if } def -/fCol { - pdfLastFill not { - pdfFillCS setcolorspace - pdfFill aload pop pdfFillXform setcolor - pdfFillOP setoverprint - /pdfLastFill true def /pdfLastStroke false def - } if -} def -/sCol { - pdfLastStroke not { - pdfStrokeCS setcolorspace - pdfStroke aload pop pdfStrokeXform setcolor - pdfStrokeOP setoverprint - /pdfLastStroke true def /pdfLastFill false def - } if -} def -% build a font -/pdfMakeFont { - 4 3 roll findfont - 4 2 roll matrix scale makefont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /Encoding exch def - currentdict - end - definefont pop -} def -/pdfMakeFont16 { - exch findfont - dup length dict begin - { 1 index /FID ne { def } { pop pop } ifelse } forall - /WMode exch def - currentdict - end - definefont pop -} def -% graphics state operators -/q { gsave pdfDictSize dict begin } def -/Q { - end grestore - /pdfLastFill where { - pop - pdfLastFill { - pdfFillOP setoverprint - } { - pdfStrokeOP setoverprint - } ifelse - } if -} def -/cm { concat } def -/d { setdash } def -/i { setflat } def -/j { setlinejoin } def -/J { setlinecap } def -/M { setmiterlimit } def -/w { setlinewidth } def -% path segment operators -/m { moveto } def -/l { lineto } def -/c { curveto } def -/re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto - neg 0 rlineto closepath } def -/h { closepath } def -% path painting operators -/S { sCol stroke } def -/Sf { fCol stroke } def -/f { fCol fill } def -/f* { fCol eofill } def -% clipping operators -/W { clip newpath } def -/W* { eoclip newpath } def -/Ws { strokepath clip newpath } def -% text state operators -/Tc { /pdfCharSpacing exch def } def -/Tf { dup /pdfFontSize exch def - dup pdfHorizScaling mul exch matrix scale - pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put - exch findfont exch makefont setfont } def -/Tr { /pdfTextRender exch def } def -/Ts { /pdfTextRise exch def } def -/Tw { /pdfWordSpacing exch def } def -/Tz { /pdfHorizScaling exch def } def -% text positioning operators -/Td { pdfTextMat transform moveto } def -/Tm { /pdfTextMat exch def } def -% text string operators -/cshow where { - pop - /cshow2 { - dup { - pop pop - 1 string dup 0 3 index put 3 index exec - } exch cshow - pop pop - } def -}{ - /cshow2 { - currentfont /FontType get 0 eq { - 0 2 2 index length 1 sub { - 2 copy get exch 1 add 2 index exch get - 2 copy exch 256 mul add - 2 string dup 0 6 5 roll put dup 1 5 4 roll put - 3 index exec - } for - } { - dup { - 1 string dup 0 3 index put 3 index exec - } forall - } ifelse - pop pop - } def -} ifelse -/awcp { - exch { - false charpath - 5 index 5 index rmoveto - 6 index eq { 7 index 7 index rmoveto } if - } exch cshow2 - 6 {pop} repeat -} def -/Tj { - fCol - 1 index stringwidth pdfTextMat idtransform pop - sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16 { - fCol - 2 index stringwidth pdfTextMat idtransform pop - sub exch div - pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj16V { - fCol - 2 index stringwidth pdfTextMat idtransform exch pop - sub exch div - 0 pdfWordSpacing pdfTextMat dtransform 32 - 4 3 roll pdfCharSpacing add 0 exch - pdfTextMat dtransform - 6 5 roll Tj1 -} def -/Tj1 { - 0 pdfTextRise pdfTextMat dtransform rmoveto - currentpoint 8 2 roll - pdfTextRender 1 and 0 eq { - 6 copy awidthshow - } if - pdfTextRender 3 and dup 1 eq exch 2 eq or { - 7 index 7 index moveto - 6 copy - currentfont /FontType get 3 eq { fCol } { sCol } ifelse - false awcp currentpoint stroke moveto - } if - pdfTextRender 4 and 0 ne { - 8 6 roll moveto - false awcp - /pdfTextClipPath [ pdfTextClipPath aload pop - {/moveto cvx} - {/lineto cvx} - {/curveto cvx} - {/closepath cvx} - pathforall ] def - currentpoint newpath moveto - } { - 8 {pop} repeat - } ifelse - 0 pdfTextRise neg pdfTextMat dtransform rmoveto -} def -/TJm { pdfFontSize 0.001 mul mul neg 0 - pdfTextMat dtransform rmoveto } def -/TJmV { pdfFontSize 0.001 mul mul neg 0 exch - pdfTextMat dtransform rmoveto } def -/Tclip { pdfTextClipPath cvx exec clip newpath - /pdfTextClipPath [] def } def -/Tclip* { pdfTextClipPath cvx exec eoclip newpath - /pdfTextClipPath [] def } def -% Level 2 image operators -/pdfImBuf 100 string def -/pdfIm { - image - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pdfImM { - fCol imagemask - { currentfile pdfImBuf readline - not { pop exit } if - (%-EOD-) eq { exit } if } loop -} def -/pr { 2 index 2 index 3 2 roll putinterval 4 add } def -/pdfImClip { - gsave - 0 2 4 index length 1 sub { - dup 4 index exch 2 copy - get 5 index div put - 1 add 3 index exch 2 copy - get 3 index div put - } for - pop pop rectclip -} def -/pdfImClipEnd { grestore } def -% shading operators -/colordelta { - false 0 1 3 index length 1 sub { - dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { - pop true - } if - } for - exch pop exch pop -} def -/funcCol { func n array astore } def -/funcSH { - dup 0 eq { - true - } { - dup 6 eq { - false - } { - 4 index 4 index funcCol dup - 6 index 4 index funcCol dup - 3 1 roll colordelta 3 1 roll - 5 index 5 index funcCol dup - 3 1 roll colordelta 3 1 roll - 6 index 8 index funcCol dup - 3 1 roll colordelta 3 1 roll - colordelta or or or - } ifelse - } ifelse - { - 1 add - 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch - 6 index 6 index 4 index 4 index 4 index funcSH - 2 index 6 index 6 index 4 index 4 index funcSH - 6 index 2 index 4 index 6 index 4 index funcSH - 5 3 roll 3 2 roll funcSH pop pop - } { - pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul - funcCol sc - dup 4 index exch mat transform m - 3 index 3 index mat transform l - 1 index 3 index mat transform l - mat transform l pop pop h f* - } ifelse -} def -/axialCol { - dup 0 lt { - pop t0 - } { - dup 1 gt { - pop t1 - } { - dt mul t0 add - } ifelse - } ifelse - func n array astore -} def -/axialSH { - dup 0 eq { - true - } { - dup 8 eq { - false - } { - 2 index axialCol 2 index axialCol colordelta - } ifelse - } ifelse - { - 1 add 3 1 roll 2 copy add 0.5 mul - dup 4 3 roll exch 4 index axialSH - exch 3 2 roll axialSH - } { - pop 2 copy add 0.5 mul - axialCol sc - exch dup dx mul x0 add exch dy mul y0 add - 3 2 roll dup dx mul x0 add exch dy mul y0 add - dx abs dy abs ge { - 2 copy yMin sub dy mul dx div add yMin m - yMax sub dy mul dx div add yMax l - 2 copy yMax sub dy mul dx div add yMax l - yMin sub dy mul dx div add yMin l - h f* - } { - exch 2 copy xMin sub dx mul dy div add xMin exch m - xMax sub dx mul dy div add xMax exch l - exch 2 copy xMax sub dx mul dy div add xMax exch l - xMin sub dx mul dy div add xMin exch l - h f* - } ifelse - } ifelse -} def -/radialCol { - dup t0 lt { - pop t0 - } { - dup t1 gt { - pop t1 - } if - } ifelse - func n array astore -} def -/radialSH { - dup 0 eq { - true - } { - dup 8 eq { - false - } { - 2 index dt mul t0 add radialCol - 2 index dt mul t0 add radialCol colordelta - } ifelse - } ifelse - { - 1 add 3 1 roll 2 copy add 0.5 mul - dup 4 3 roll exch 4 index radialSH - exch 3 2 roll radialSH - } { - pop 2 copy add 0.5 mul dt mul t0 add - radialCol sc - encl { - exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - 0 360 arc h - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - 360 0 arcn h f - } { - 2 copy - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a1 a2 arcn - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a2 a1 arcn h - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a1 a2 arc - dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add - a2 a1 arc h f - } ifelse - } ifelse -} def -end -%%EndResource -%%EndProlog -%%BeginSetup -xpdf begin -%%BeginResource: font XYFSSI+CMTI7 -%!PS-AdobeFont-1.1: CMTI7 1.0 -%%CreationDate: 1991 Aug 18 21:07:18 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMTI7) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /XYFSSI+CMTI7 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 73 /I put -dup 97 /a put -dup 99 /c put -dup 101 /e put -dup 107 /k put -dup 110 /n put -dup 112 /p put -dup 115 /s put -readonly def -/FontBBox{-27 -250 1268 750}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa0529731c99a784ccbe85b4993b2eebde -3b12d472b7cf54651ef21185116a69ab1096ed4bad2f646635e019b6417cc77b -532f85d811c70d1429a19a5307ef63eb5c5e02c89fc6c20f6d9d89e7d91fe470 -b72befda23f5df76be05af4ce93137a219ed8a04a9d7d6fdf37e6b7fcde0d90b -986423e5960a5d9fbb4c956556e8df90cbfaec476fa36fd9a5c8175c9af513fe -d919c2ddd26bdc0d99398b9f4d03d77639df1232a4d6233a9caf69b151dfd33f -c0962cca6faccea6b71beef7c056fbd376f2f0d0bd6be0a0a8259139b28b99c6 -25119b8c60ff7ba002476930dfdc2f6b1b5a80f1c0e544a22e3f0fb2feab64b6 -a509b61e1ab96121fbf7f2bc27cde5b4961048fc2169c8db745fcc7af0eed507 -284038b15ce53e69aa22ca76c2a208f6ad8614cd500d479a5e0fd25e7bb14c7f -c47c503e4cc38975cb0a8f7e109665fb69ebae6eb68b2d6fa3c967d5bde7830e -9ce6f13dfaebc852df1d7d0cdd33dd4d5cd6d94dd8ae0d48ab638013cf75a25c -04fdea8775ec52a13af40fa41f7354624d917ee620318c702237af8c0e1ffa02 -127f862d4dfd0a56774235a881afbb8f7f4bcb33811c581cff38462f669b7f97 -1f97ac09373b8f9b7e653013af8170613e8d7e17235a893be296a0cd2096b71f -16778388993edf1b003ebce23dd02949cbfaaab5d9f6a08178bfb8ed1043fc1b -0b90d9afc27b19783740e8dde0e5e01d116a8cb083c721fbb8ebf71018a9570e -78590cd831116bc0fda4229f79a581874fc3a1f108a4fca80ce27fa54a2a7505 -5bdb3d52e2595512837732322fb5bbe459c0205eb38439e34a39544f0a1567c6 -f29fbb7cf931708c8f92786ccbcbb443d54462b3b4b7bd38e90d325ebc31ba05 -faab393c7ebdb9ec48e4acc15a247d2348a62293a726fca4250b4a407f64270f -923eb516cb8a3b5d19876c8755eb291357e4e4cc5903d1a536a635e267f7a971 -b1c33aa7f58e1ada931c450ea8367b18e20e683cceec1bc079e837ddafff0d16 -23c4aed0dc04dd9458a630fd498794823ffa55705315f0687e7592a5dfc8b8d6 -fe2f3c6f534f499545704b75da313653bcd0673d7d0b265cbc3baf7034153d4f -8e157e5732b8a7d8caaa7d8d05d5bf8f14a443597bbba8d2501ef110cb47acb6 -8961fe3bb685aca9b8b35f0cf7a79e7f326427219c8b8a9b80835bdc78a9aff3 -3e9216d1c92e91b4db244ce02a5c9150273d4e3263e7ce0909f2960106f57c3c -d698212d1e6a29fac15c4ec935d850a119824b79e0fd71aa0a2115064b3da5e5 -8144630ebff91ab0143aef4b663cffc40006fab80a411cc12ddcff2d2ca8be2f -fc517e3b6748440f56ddf6431702927b0aef906926c5283a80a73e954d495fd1 -d9e4167825a273a8ae0f87d7e102a9fb40dd4bafd6122c6a83d133a9ed7d9a0a -b45003c94b789bd98b389ea26b7dee99c1e215568e48e577a43ab04052a7f473 -f6b29e05bdb1bfaa6a959cb642245c550cbf84e05b1e4c2f5e7f84ee724b02d0 -cde74b36d98c14b70c48ac51cbec3c595c59692dc5912295337f3313af2ac3ff -ca3af12d72e48d689572a1a6acb1b2a627da81c28207760abd636444edd87fae -23dffda052ab54f48690d5a7615d9cd4b6d4010abf3f20ce2603f386e1843911 -733a2cdc76ffa60f0120df68fccc40faf197ce13c5bf34b33d220e5af443b60b -c2a55c1faee218a97683d32cf6b6a758f82200bbb9419c376f72d9b131376095 -94065de7dc66b571f62ed2ec5bc2df5e25222fecec15880eb0ce939a3c1648b0 -7f323286ca79f0364d0747939a1a89d3eaccafb732c7e2415374034caa1b8d6d -361f03c941ad5bbbb5831ad371fbfab81fd106714aeb6509ff8d0a8ad5002691 -3869faedfe9c3581e6bd5ed17f4fed5b847354d752ae435cec8443dbb48df400 -425a7902aaaaade7c10f275f18dc2103297049f7a337fb0b75b24ebf007e1f9a -b7a847cb4791ed9bbd376c8a6bb2137185a5f13bfb4b3ca845898811aaf0dc58 -2e5eb07b1a20354264ee70f7a7a8f26d8e1ee1da9cd5d15719716d45ae696cc3 -da6bb5f492e66345c2708c1112cabd7d073658296e13abef28df9a682b877c9e -f42c3c0329b041b7c44e84bbf0932dd40e6e4015b6ae58571b0fb87d970376a2 -a0ff6953d106314ec0aaef3ee6f985f619f8c0520451ed54ecf38ab6e6ba4176 -b0f38261165e3c81ed3f107778024970f4edc4ea89ec88ab92d388c35ea7128d -e0075558146c76fd2e380f2f8e04742dd1e6aef770be18ba87f8ed83170ed6d1 -7a56f6b21ae7be6d20e40443196d165f7d50b59b0ef0cfeb161b7540ba6a47fa -1059c0138beea849df7224e57f74f5c3af34fe57dbeb91efded832ae5451b831 -388563febd9b1f5f31042c0c4a60f562bdcb6b1043bad1b3f21c9eb33b3d1505 -28efd3d74e912fee04513fcd24cf8e9d19dd5d5a69aeb46c3e3051aa38c06fb1 -bfa941c25083771a7769613d4d90da7d1f76409163ce0311a30a735c8becc8cb -239241e2887f764729410248a2ca0791cb44e97fbae93f04fa36ebb62833c699 -52f248d0037eafecd3dd9b2884ce78a7101837e5573aa89d40d4d031134a4de5 -e23ea1878e4ad8ee84892523dbbb76b8a2308dfc89f5115f14825d96d8b7f7f9 -8697ee25a09e682c5b56612a37b5da8760ffedb9451cc2a1dcf7f1b51c4e97f6 -ef198969173712e26033ae1c4d41b46432baa2372d4add2e0498478877d180b2 -5e7f870e71e250e24aea49a2721cb5b453e3afd46d7b6ba99a385031212bdd92 -b653a000059557b795daf4d900ec98c7ebb00a123cc120ff0dece28c18a105a3 -c6d310c2bf4364f202d2104098f93d1a0914021b0c213b5a2b3885e0d931f58d -224a601f16dee9a2df3adb67fbbea6aa999cb131b1f47426b074cc0be23e25cf -eb92877266e3ac20bc453aeeae31502cbc8e6480d59aa2b1b4b0aebc23dc8023 -c02f6ed2318fcbee64300dfee0072cfe57b35a491238516735bacaff8be3249b -f97d070731cd80407d1f4c3ae077935417bab3f431a5ae8fc9cca3a2c82b086a -82def5e5d4064914d3653ed1a1550ef1d65d8d7ae9213cf08d1468c197d568e8 -82af3ddc226563e8db072a36e989ca8e38690247abcab4c7765c37a74f18505b -3253a684571b8dc984cd45e8a5f96ea68bb1865dbc1e514a01da4458df0e945b -3a18c3bded02c644a3cdbdc996c86780e8446d3e0b2a89a377f2cb0e003df225 -66eb734cffaae3e0d90df0dfc3245efcd52e372b1c6af303d27bd0e1a824e8af -2f55e05d63001637d035caa7d31cd07fbda6f0d3d40868ddde21df1b4d1453df -aa49171b6e81598c53efa49f2a63a3a7ce5dcd8667014bbc30d0fa9782192c06 -7827cf55881d72daef6db5bcc87a39457574eefe614f876ea8135fb4700188d5 -8f3d9270081f158283f627cd3d94adf1c41f7a606d6ef516de755858f9909fb2 -14b705472017cb2914f0efda -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F5_0 /XYFSSI+CMTI7 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/I/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/a/.notdef/c/.notdef/e/.notdef/.notdef - /.notdef/.notdef/.notdef/k/.notdef/.notdef/n/.notdef - /p/.notdef/.notdef/s/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font QRFNIX+CMR5 -%!PS-AdobeFont-1.1: CMR5 1.00B -%%CreationDate: 1992 Feb 19 19:55:02 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00B) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMR5) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /QRFNIX+CMR5 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 70 /F put -dup 84 /T put -dup 90 /Z put -dup 97 /a put -dup 98 /b put -dup 100 /d put -dup 101 /e put -dup 61 /equal put -dup 53 /five put -dup 52 /four put -dup 103 /g put -dup 104 /h put -dup 105 /i put -dup 107 /k put -dup 108 /l put -dup 109 /m put -dup 110 /n put -dup 57 /nine put -dup 111 /o put -dup 49 /one put -dup 112 /p put -dup 114 /r put -dup 115 /s put -dup 116 /t put -dup 50 /two put -dup 117 /u put -dup 48 /zero put -readonly def -/FontBBox{-341 -250 1304 965}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa052a014267b7904eb3c0d3bd0b83d891 -016ca6ca4b712adeb258faab9a130ee605e61f77fc1b738abc7c51cd46ef8171 -9098d5fee67660e69a7ab91b58f29a4d79e57022f783eb0fbbb6d4f4ec35014f -d2decba99459a4c59df0c6eba150284454e707dc2100c15b76b4c19b84363758 -469a6c558785b226332152109871a9883487dd7710949204ddcf837e6a8708b8 -2bdbf16fbc7512faa308a093fe5cf7158f1163bc1f3352e22a1452e73feca8a4 -87100fb1ffc4c8af409b2067537220e605da0852ca49839e1386af9d7a1a455f -d1f017ce45884d76ef2cb9bc5821fd25365ddea1f9b0ff4cff25b8e64d0747a3 -7cad14e0dba3e3ca95f10f24b7d5d75451845f1fb7221d7794a860756cfbb3e7 -704a52a22448c34812c3dbedd41892577aaba7d555e9298c1a0f7da638078167 -f56e29672683c51cf1c003764a8e7ad9d8ade77b4983f56fe2d12723aad8bf36 -682cfbb71b1d12210144d39dd841a971f71db82ac6cd815987cdcf29abc3cc96 -5eebd5d661f452c6e0c74f9ed8d0c5b3755551a172e0fe31ea02344176e32666 -14b6853a1c303a5e818c2e455a6cf8fc9a66dc6e279101d61c523bd9db8eb82f -eaf4d7fdf6372383c0794c4568d079648689a199d4b65ba646cf95b7647e4bec -83856c27a8ef177b3a686eda6354fe9573e123c12ec4ba56a7e8bfb8f9b75147 -9dd79a743968f36f7d0d479fa610f0816e6267e5ce327686a5485ab72201525c -fb3b7ca10e1bf26e44c24e1696cb089cb0055bd692c89b237cf269f77a31dc81 -0f4b75c8400abcfdcec6443cd0e81871cd71aa3064abde882c4c52322c27fa8b -41c689f827fb0f8aaf8022cf3c1f41c0b45601190c1328831857cbf9b1e7d1aa -246117e56d6b7938488055f4e63e2a1c8d57c17d213729c68349fec2c3466f41 -171e00413d39df1f67bc15912f30775afdf7fb3312587e20a68cf77ad3906040 -842d63c45e19278622dd228c18abdd024dd9613cdc0b109095db0adc3a3c0cb5 -ab597d490189ea81239e39202cbc7a829eb9b313a8f962f7879d374adf529bd0 -5533ef977142f647ad2f5975ba7e340419116099b19acccc37c55124d25c8b43 -2de7c5683ad4c789e9cda4d508ca9b16f2552ed86ac06f051212bf0267244829 -84de3739fdcd764159289b0cc586d66fea7751aab1dd7909a42c67bb916cd288 -1202148cd0319ca10ec2a0ea5a222a3d9cb6308410e5591f7fa1d1585c1a1aa9 -8f343bfff143cddb91f41f02db52b67579bae62cccdf77c01595edb7c922bc2e -8642bee95c6f8a0b7175b6f1442f18e4d6e889c534159e942421183f4ce14ff8 -b1cb84a0205dc43616093d3ed4535096e33923a3a468bda64515ba9a04e91dc9 -5327216df2cb00239952119aa384cdf13e062076f31222c8a61f1c99927738ca -e9e78f91d8a4c4fdd27f1e3ba8b3f2b9e0226b0570bbd844deac73859514dc85 -2cd6e701600cf1ad6f463b875fc4980879e16cbb58438d5efbfc0dde453c5533 -dbb86504f1ca80d8820a563b5863b82953abeafb5e154b109737510afce23094 -6cf310f7c157356cae3d1a89c3f29d9c066329ed9c21198bc33b9186779cad33 -ea82e9e9e8c6b30b2adfb8ba95a36aa0c66b5f2e4a4dc8a5602371df8be295e9 -d225ebb317f1c0044fcc82eedfe7525969e1a33e32ba0c78d7bcda6f3414052c -56443fe4fcaa7f02d48b59a471a1c093fbcc45afbf572df6f6b9cacff888a8a6 -4c325b2b942d516ec032834165faf117ba72b01a902f00315ea3c09dfbd45c49 -e6f6feac4472280a2fbff531617932ad7b2b183bbc59490ce69456874b9158f7 -0d652a73c9533e1109481e21fef07ce4d43fc07dfa3f6c7ea058a9061da35859 -d0dc3db6ffa64a896eb7be5e87bfa8cf5ddea43aa890bd15ef19cfb7fe4cb244 -d07b115e4a64a09cfc8022b6d212f920cb0ce5581dec47bb14b81f81ea984efc -a20d9af50e1ca1dceec50921a939180062481ddce266a1a418a834c322bdcc25 -4301e5f9bbbc8095b39cf7e5137697a6950a4a7896079f092e0102cb2d07fd33 -884afb693659047fd8fb01208f0fbb1cea985bd1f4260257e08e08be5114314b -c26662d63ef6209277dea2bb654db883be61a680e7fb472a8c698dd1accfddf4 -21e365e8f6da21f203a62ab2c4b43a4380a31e1ced21d0cf5f4ecf153371e0b2 -6becbca5884eb396e133613fb6c4cfd4e3fb13346bd4967180dbce9c9978f4ad -2529d21889367ed56bdf2c36db68304203dd1c57f5a6fd1f83f3d24d804d6ac7 -2745eb909eef9619fbb27bb19c8cc0596eaf5a3ad1303c5e26144c063e89db27 -4509bb03bc85f0cf4d4b4778629b97cfb7012d047d1acb6a5d6763d41979aae2 -7e3c585cb512be758108529a91ae5edf1967cddb1f95d0641a53c30f297a01f4 -999c2f8bdda6eca8fa06d9eaf6a45ce3df5778d4f0c46e00f68494466a2b494a -8785968659259c897babe03aa39fefb2668c21033aa260069aec27eba786bbbd -3e78ac967719736722b5cbf5a101299c325f65b8dfd6a77b1d4c8f5408361e04 -232a89774e6c981f27e7c8da7bf819ca6b0a9b9370c9c831c9f1ec8bc9917c83 -35a383d822d9dc41614bd59376aebecce2a4be03a08bd93096c1f383972a1e37 -f86fafc6b39c9d5d9282b4df315ac2446ab1027802cf1d157191b19d1e3c5052 -ad5e0296acaebd9e7044f523ff92a71a436676466040eaa7352ffa5fbdce8d28 -13d9af3f88940535098f0e0644f6ef8e6fe5d8846126a9082dee75e504cbea32 -ef08cea73ccae9dc3ab6268784228fbb3f5937dea2c7628d527f0ba641fdcd9d -8561093a61c7c8f6bd604ecdd62cfd611be8cbd37edd1c9cd258548c21c2ec35 -142b3b9e723577d6def57be5917b2beabc016eb129cd5ef62c378fbfe5562138 -f3569921279a44ae991a98ee1b4275a976b2e84f341d256effae7496ca1159f4 -812c51e8a19b0756c1071ff7b5949852a7086e75b064f518c6e1660b2b44fe16 -09525127162d679b603f28e6904475609daeecbdd4df5196089a206d0f9985f2 -623a5913aa116470bbbd1686cd7f2b7e719fc9b0652d76ba4a76bbdce34ceffb -b15b52431d6538b629d77c7e844e584d70588c29f1c1d63e467a80d5e26b8a8e -a5863fc25e927a2a3323e17598aa1264bfa54cb4e853fb2d97e4bf90e66a991f -327240b6b7841a2c23041e017fa4b42e2503f67523a0c19da45da01129c9a5e1 -f512a59ff33c0aab13fc4c02a65ef11e28e919926a2a6b962194edd028788832 -64998b3f00d44c15c59cb47585b9ca668e681f25a4301e80bedaa985e815018e -e05d5e175d9cb9628fbd458092dd5fe11d5e2e753de9a755dd55d1f13801876f -409f603a60a83c795608ba34cc0fbafe8fa07c9de4e7b78b7a7b692a3abcf62a -c83e75b8bdadddd9385ad65b4eab95f6800f111c7bc6b8bd68f50375ef9df202 -4e6bfedfcd9c473dfccfb8b72528c4dfa3eac7cfc782ec7309cd148e4b7c1924 -f5b443783a0245842efeaf6bfa53a5ce269985396d6bacdfe62a4dc5e7a7f34c -9257d6d8669eb88258b99f4ea2b494d4b2dd7e88e81d270cdbc03c36823d6b7c -8ed16883092c9163869f25f7847c9e2d495ac21f11f5406fe570f589e7cdd13e -82adfb3a061875bc3e2b846c1a78333c6830670810bd7c23d5e3d5b4e2a74207 -5cdadb6e332e615073eaba1523e4c7f399307b43cc9be6460955607e3e4184d7 -3f75328b88edac3a6d663bfdf367f951b32c120ee221fb52a2112e2ef0bc64a1 -67e6ce17ae4272b9839e052c646b70ff65e7d6e8bc7ca4bac2121de47de227db -8380adb5a65d9bfd890acfaab6c7cc26f417e23472e05a74364e229325bca32a -095b398e5e731e5ab8e92b948b3a368a6cc491ae173a6a1c2484f0943e581858 -25429e9d93ad7e70906c3dc223a7a274266e5d790e06774a8dbc1a8acba4c432 -081658dc71c55ab633ed8c369e64a4183b3414ce2364b30214a93c80f51400ad -e0333d3d0648031134ce44aaef21ef73cef77810a491c05ba8509122a4ef9941 -82ba9991283ca78de50760d7addf9664485c0657a08fe1421b44c2d9bb9ddf0f -7955a3aa8d474f93ce5628e9f3ec88db68d4856709bb36a41a742980279bd70b -fd1f0e6dd3f5892c4267513e8229f6aed69b2ff17d134a548330d922c8f5aad4 -1b8d906800bc0d1e0e6acc313f9f4ed86cf0057b2e44d9e971b156b845b40174 -47852de3c9981482c835e9e692329e026a5073ae74d4c59840bd0b40f9bf3e31 -0ea6f53e47965af08c77027dbb1685f0b72471a7a480b893671d8be0637d2107 -66de6e746bbc563e69ea2cfecc0ef0c91c5199e3a2a46168a11565c2752e2778 -353e51e6dc377b924e041a1fc9ff4ffce25ca896a1963168b227ec3baca4c83f -5385f52e4a6996c90c83a33dcf2ab7400d7f96b4d0c35a546ea183a9b87cc236 -8935398088199a585885911dc6bc8d5c8b6a135da1a5b5c7ac4742deb253c100 -cf40f0f2f603b36c53d4734cb966181ff9bbe61c7ffd8e579f4f9d96b78b2b48 -f077b6dcf987ba03fac13c029062d446ef07aa27aaed38b4cadad944ab755abd -4a5836f94d3fb09bbd54ac64263f3203b6b301b747fc34715997150532425b4d -c5480c50016114c2f36ce167fce159b8732ca3e0f8d6a1185a793f2c4cf3f7a1 -cbac44e981dc02048aeabddeb8bb2387ba608b90c6ce8efb67d17eaadc7474af -446a97d1dcf002364b7232f40992f21b3db8949fea626b8deb57a6298818d4a5 -06e8d1d3753a730e674de5aa639496b85422ba1071533009065fff02bd51ea3a -42687fd464d7004d0a79fde9c4c9e9a861c0557cf1d007b002e46c8dab226ab1 -96e46e193d354a76e7488402aa833435bb7a91388a3a812349fb14ffb002349e -ce53af989e4c32025c6296fcc3ef3e4b5cf5304a8701499011053b35bc7d049c -0bba2e4dfc4f4aea3d11192d526df6a3c3dcf27d66d24e865dfa4c2d49133809 -21c3c5a6c15d263b4dae7b367d4e655870b9887bef55a2d9d66326305f44b2f8 -57738499bd1f55c91b38f0fce0239b2343451dc084e8fbb56ac1578449652756 -ccac510001de0ccf7ca41e57ad078976b7b95f4d4d488c6a88e6cedf2a35ee24 -9042b18069920513845c86d94f286866a89d8beae3c9569fa62b812c4b5a4a3f -ec457d5b71806ac9d5a3e689046baa7e81fcd74372447ba4867ffc86b982af1d -9f843253b04b54165f42464d2d5c47ebfcee9a42cecd3f101db285262fae9731 -37c046c0cdbd546a875aa6a9743ec5faccc41562613180f2e95e0936c0caa2f6 -8c70ec97036c718617d92be2974c6d177a01939039c5e6c9eaed0d86ef223e91 -3ce48391bd33ab03d0375c8b497617165b7a99fc03e1d4df08fa2a960b8a7891 -5f0d99b5de833411e3b69810beb86c6bb5faad366eebe9921d68a512a3be5899 -994ce902e9c6523035ab1a709b7c6e81fb7674b993ed3c874958d41d53b5bc50 -158a319764078a6e05328e509ed56b2e402a51762b7d8560a70283fcddd7a4e4 -d36f379164029e6b6e0b93942fe7a323ffb7704f568d2b780dec775c73fa5595 -e60372bebb0f3ace7aec82a53f9f9fd8233c874e02e82c18dfcdf6e182cfe9dc -c88cd49c9cf7b60294666fc97b5bdfb37590e077424bfb0f3a01e90d697c83e0 -7ade85364db8a50bbb5c9e58b61cbc2d3c07457ef2c3a991cdead367b578ba2e -e3d6e2229c72f0d6ec033fd4c0f9cd6b2e27f673cfc2eaeb9fdc70e0dbdb0c8d -25955330b6371f8f7c98455eaea615cdf341869e3ac90999eaa6000224506702 -7497ba7a8778aab912eacd184c0b1261c0cc18d86429afbe1f28377569b6e08d -1ab20c1b3fa3988027d19d48b7154892cd9c42a3989803b4935eb4c37ce93f05 -48a792cf502ab0b3399b78fbfec425b16ad49f30a361df03b341079fb17e9d7b -8649571fa9f7b8f5c0590514e97b7059e30d5edc48b324a9660bbafc0d811c7b -0435ed1d034f50f1a96f1d0e130beb5beb3c1d2428f7713571b5cd78be570aab -82bfa57371d836dfaf023d6bb7d1e4eeb0375606f5048bae6ec78077c4abb566 -d3dabe4947da86cd9ed93b738b0dfec36de56ae15d226a535d801c91d01f4b8e -e9b9e5e4d6937b183134cfe3ae38bd6e392cf210e9ddf88c38e39a880efded5e -9c4702bca2dcf785af0bff75cbedf7717e13c9d5ccc5553ca4d16a0563537409 -577d4d64db40d7da1f16026974fda3e16c5d5c49cf957d392d38dac4a1727dd6 -dae9a4df8822180d609000bf68606fa4760b14aa9eea5cc81fd2dc909c69348c -a20c546da3f1c70768c395fc1a3068c985605ef265e132658c06205aadeb1fba -13f816b226488cc435c5e19f30bbf2617bf86ed784b2b7e39ad0ae8400f5dffa -1f264ed85824de721d2678b3b4175378cbffcfdfd511642cc7e4680d85c128e9 -4b505d7dd11c240119573305b90ef3e9cadfc751d25dc7b32986afb243c676ac -17194295c564253cf885222396dab284d724f14097d343c9cc7b4b563fd0d9bb -d0da6d5eba2e3d9bc1723611b5336386a1599d6c898b79556ec264f72818e999 -ee3a6dac9f7aede093609c683d8af0b64341f4f5fe40afe64b548f3c7393b460 -601bd7a645fb0dbd437221c05bea5a22faf36effa07e02b5796a37de06be84b6 -65ffaadf9100fb120d32ab58bd11d6d921d94b544ac6b23cc8e0041b2612e797 -459b0c2893be0f1d4b314ad41bd4c869263887dddb0c0024144e6917484a0abe -da7e9a011a9e600d4c4213173c169035a50edd4d378da41fca8dd1d1345a0de4 -3e5e530db0c92402b2c8c685eb85b18e66d21df5b30c1b86a794ec151f0551c1 -ba7d026e774ce77f3e24ac1e3b9f6efc12b2f89e7ebd90520362241d89c7c977 -ea4a4c134b17552e0f8a0cd059b4928185e0e8c4c9b9c52029ae0f97d3d43d55 -f6bc7b5f05aedd574b05dce3bb7524d664fda854ba93719fb006feeb7f181486 -2d14eab6c749050a5e3af7fdd40f2c84f2df0ffe7872dfb3e8026cbedb0156f2 -550ec45a933acb54768ae8e54b9d7ec53bc131cd1e82612d7f5a4fbcd392083d -71ba0458c66937279da6ed39bd01d4195517a3975bb911dcfa1a549007e4c9f9 -89a08d42b6be1e1aab8efcaca21788eab44abeb9ad1b5cdda5 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F6_0 /QRFNIX+CMR5 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /zero/one/two/.notdef/four/five/.notdef/.notdef - /.notdef/nine/.notdef/.notdef/.notdef/equal/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/F/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/T/.notdef/.notdef/.notdef - /.notdef/.notdef/Z/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/a/b/.notdef/d/e/.notdef/g - /h/i/.notdef/k/l/m/n/o - /p/.notdef/r/s/t/u/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font KCZGMI+CMMI5 -%!PS-AdobeFont-1.1: CMMI5 1.100 -%%CreationDate: 1996 Aug 02 08:21:10 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.100) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMMI5) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.04 def -/isFixedPitch false def -end readonly def -/FontName /KCZGMI+CMMI5 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 107 /k put -dup 110 /n put -dup 120 /x put -dup 121 /y put -dup 122 /z put -readonly def -/FontBBox{37 -250 1349 750}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa06da87fc7163a5a2a756a598fab07633 -89de8bb201d5db4627484a80a431b6afdbbbf23d4157d4afe17e6b1c853dd417 -25f84cd55402ab88ab7eefdedbf2c2c731bd25567c53b474ccf739188a930039 -098a197f9c4be7594d79442b2c8a67447de44698321145d7689b91ef235ea80e -b600aa8e238064f154284096c4c2554efe8ddf13aff8d3ce30e0999375c0fee6 -f992dea5fc3897e2cc8b7a90238e61e41622de80f438dd994c73275cc52249d9 -f6686f87f394fb7bb668138b210bec9e46415a1b58c990b81e7d7dd301143517 -4c2a259d2a0a1e200f8101469c10d7d537b0d4d39296a9ab3f132da9a3b459b0 -f850e2b3a03bdcb35aef82285d19c38f474fb414f8ec971b994d1c7dd753b271 -2b71549df497c665df0f266988209d9eb616e4d9ba229ff984e7a886db01fd21 -48ed2e4859fd6416c2ce52537464ea884c8c9c2d1083e2b83be4b766474c23b6 -6e8ec5003200ab10514bb44d14ca700416ab6b2683e80862e7d5b49a05526a32 -554bb23ab8b0824bba198e3825ce82380cc0fecf46651e3e5d77f09465e73164 -20342822f29572bc7f73f2c3bf95ed3bb6fdeadc20c6ac866c4f2c679594d7e8 -8d944704a3c5d771dc39503becab89f34d8cdb8fdb91afe21f3f0260d05e90c5 -73e2c13dfa022c4522e5918ee25038a0498fbb530da33b0ae238b1c6ed03fc04 -2bfed8236e07820c5bab411eae1b31d93a2fa7c374b1725fec359abcb88e2c89 -214529a263d795aacb0b95a3ab2f4e08ef350c282ce521716dbb06e5b8291b3f -5d4aca230fa192f64bc902a4c8842c0f916f92fbd002add408bf0401d0284fbb -f05d4c6db631420747cc902c5e1617e6573612fb26c8378df41ffb5048d3cf06 -4893dba48ef4b043d760f60c75712169d16c83ee020c45369e443e853e1809dd -f395b812067d6fdbd26111b34f42c21036af952d0d767fd17f6959d9fdd46005 -d64fff54772b50bb9b173ae79702981f58f9f235c591f476a31852174df0619c -a470359153dc32610e782b204e7945515464dace9099b81eeecc7ebd4b5126af -c3fd9ddfb329af1c95c41fa4a5f6958869509a23bd7210386329771fa46ff926 -0e54ac35106253ee140449425a8670e1f92b178a02a58eb57540f4bd8110e548 -bb584ea6d625c5f5fe0124a98e49915f1a1b95d2125874360eed1c4379fef3c6 -90e5780c20309f11f2f23fad635c44ba030b39eff083a3eccdd2641dc82d3b44 -b3ab94eca6ceaeff2f4dbb525a310c86946b11105b41f9493cd689b1e11922b7 -219e1f7ba65e2e2ccc6015fd19d921ce9dc268f03d897868790e231255c90036 -86f55e6f1b4877adb855eb6210050bcbb279b58ef95ffdf0e5a5a3eacb53240b -dc7954bea3f762feda04b8d0921502bb112129f7538eeb89f2700842f0d290ae -27e0dd3a8ce35dde516d4a28f78a0308650ffd050d64893c20cca605af49ef60 -07f9a5cbb02fc52ac7f53e825a9faa83281d393fbcfc1889c9809f8b3edf40b6 -e2f95c684b42c206318455d6b07daa05aa9d9307754221c7b8c1d79f6ce91a98 -6b05c7b2a6dbbad0d02fe68d35a484ec3b7a2bcb3310354aa8e5c78200fcd408 -856ea93a1a62a7e039937f753e068ad70842fdb71716c00634e88b3c0dfe1962 -7d9c51333edb72cea21c8a02ab0a405693a6c6b0f8b7eab4ba25d153bfa29e82 -bc55d484b5c7ebb0cad4d037adec25d7df65b06cf8d80a6a164e8874e01c47b9 -5e9e7656790d8d5fea7121a216aa76ff81bf1bed4c7f0819795475b8fbbe254d -060fe03aa8f76874d6691f47bce43ce4413c80bf30cbdae5932ee97c98bbe397 -987268a8ba1f0853dfbfeb9cd1bd98123d0577e478e35bb92ad65ef02a913581 -9061558f9ba4085efaab90fa797612a4c14fa119b9bc095bbb5c3174de026066 -2e9840008e8c468c200cb650c90ecc9e1e06dfdc66a8734301f10ef0c08ed94f -c2b5a85981b10a41b99cf844a812240e1fc3cdd57dc70f8f19371bafbd556fe0 -76f4dee202085f4da73192f5288cd95fbda78515ee60d97f117791691bacfa94 -897efca3987c68cbd4522a30323b386e7c02165737e5ecf901e4a8d2486b90d9 -23b65cb41ed420dce5c54d7be60c3c35a3c6605ee19cb2b55c6d80fced88ae68 -e31f4371d6a20bbcc0109387ef8bfef9ed384cbb5cf4a463f8ad79d8d11218c1 -bef0a6909c1e572017eadaab30387de66b90f7fd89ad2179ce4b7ca2dcf59b01 -2d3d53de2bdd4d73633b71db0b529167b31d3de40330094ab2baa53febfb9f0e -c37d2cd0a824a1c29b612485e9b12ccf2e06f9794ed0ed08030f6b3907fe1916 -521c015b7814a88c88535653667551ad028df3331575d2ef4cce98d96af85d20 -bf1550ed932c6445a5aa2e1fadc6c90cb7a875c84e8d8ba06a21fdfc6d08ac26 -2a04a8342fbeadf0ecb6f20ffd6242004357d97dadc7758a9289b63ad83ffff6 -3e30ca707a3a4173d74a40cc65ecb7db5bcd0e46187b0a1ee03494b92c5354b2 -36c46b713712247b503f744c2c1a76ebfd060587a74c3d6569345ae4a707fc5e -8caa10ccd1711c6c60a909ef393d840149f83ab66bab9f738f4cd2996fc2eab7 -d60468fe3ed8beb50ca3c6a045f174567217a772b18ff39cd3da7f92e6f5c5b9 -b483601e2a7ec42e4c859162e3f55e7d6b4e894f5dc905dec6bdd3a2452eb786 -226610d7ac2d8747cc479f143cb61b511a4e791ed7c45b3058b919ab5985d6bc -bfd3219ad2c1a8eb32ce27742375514f718a246858e3ca13ca0488dc81c11939 -88ed4880bbe669eea349e48aead5e53f458ac0b35629745b11c581e0134d13d5 -8838bffc332c04c30fe39e88c4131a73a05295ecbd11b99fc9744a6fc78671ce -b26638aeb0ca40633d0e3294fc48911889b48287b6f37344aee41067d61164a2 -1a21c80a963d4c316c4ee0680fc4c7ab862e6d6d9b5db0b7fd28b9cef3a9d43f -47aa94805fcfd188c08d6e04a6872d6713224961d1a387bb909a3ef7181b455c -be4fc2359c0d06f54977a78c376fc1f195827080bb59b61271229973b1c22b1f -8582c765e2346cea929124a8fcafc128a3895b8f48900362a5e1dd164f12d454 -894fa78ca4aa5a21c60696ca2a0ced7f4b98fb43269c0445521cf4fc73bd2464 -9a4dc573c98e5ab0370a0c67057bca09 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F7_0 /KCZGMI+CMMI5 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/k/.notdef/.notdef/n/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /x/y/z/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font ZITESQ+CMSY5 -%!PS-AdobeFont-1.1: CMSY5 1.0 -%%CreationDate: 1991 Aug 15 07:21:16 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMSY5) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle -14.035 def -/isFixedPitch false def -end readonly def -/FontName /ZITESQ+CMSY5 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 33 /arrowright put -dup 49 /infinity put -readonly def -/FontBBox{21 -944 1448 791}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa052f09f9c8ade9d907c058b87e9b6964 -7d53359e51216774a4eaa1e2b58ec3176bd1184a633b951372b4198d4e8c5ef4 -a213acb58aa0a658908035bf2ed8531779838a960dfe2b27ea49c37156989c85 -e21b3abf72e39a89232cd9f4237fc80c9e64e8425aa3bef7ded60b122a52922a -221a37d9a807dd01161779dde7d5fc1b2109839e5b52dfbaf552b11effb6a16c -f03fb920c15ae724efdf0ccbf00a838d34440ff9fed532f44036ad22561184c5 -283722ddfa7285e62754372d716d704ac0e00b2f6ab67154241c7449aa047833 -94cedb08e8c92907fe72a0b05ae36a7b9226acd6e7890a0b528fdde84a950fc6 -801de75cf2e739e9121149ccb8b1c87a106822648d84a3d3fbf295ee6c4bf403 -bbe9a1c1f6daedd1e642acc486e609703d7612bffd10c324f5dc710811f7f614 -3691b400e3773987424c0d2b0d8a736873c6371ddb2442f05e018a2b5ca9a4aa -17aabb95d09e5890cfffed5ac01495d89a53d3c9ad5a9c23d5050e53ad0edbcb -74cfd3e229777bb8781fe5ed007f9871d38795a64f1c3fc995bcadbdc26105df -c3791eabd25d9b3dacaa96fbbeb11397e2e1f8ef6b27f15b2e998ed79189f382 -9810144fbbca77ee3f8c02aaedabbc5d1f0b5fb00e06458289545e6c4520aaf0 -a79ac842d6f93252acf4cd7bcf5ba0816321e2ae79ab933383d3c86b180ff1e0 -36209671dbef6acca494b10524f9a7fadb18563987df48c4656da73fcc6f7675 -e773317fca8f725ddbf9dfaf5151ce9a18e02b7fe6ec205ca7eeac7078720fe9 -a77988c3df66720a6c9335e19482f0a845ae35e75f11562fc7bf36d79b339223 -58b261f64e078d8022dcead31ac7ab1f2d032144c00e5cdb6dcc1d75881d3df1 -eb739a6a1b255636b08ae11593eb14ae9f6b94372457571651b6359ee83dafd8 -1fdd27eca478494d2ae4c767d1fa866c562a3c20fe2126adb506355b0765f7a3 -4605c0653837eb7bd73611e4cdb80ba5dfe199fe0f764516f316ec16bf9ad53b -b98f3ada1e31ef3a36079493f943eebb9ce5534a8cf84d7e924c9e2b892ada07 -278daa3976f47c6c00b46bd73b5e423d69527ca16883c654993579e117c7ebea -e9a840968c20594bb3f48bec62ba54176f8e7931ff99ec57b09a037b88d3e6 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F8_0 /ZITESQ+CMSY5 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/arrowright/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/infinity/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font LBWBDW+CMEX10 -%!PS-AdobeFont-1.1: CMEX10 1.00 -%%CreationDate: 1992 Jul 23 21:22:48 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.00) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMEX10) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Medium) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /LBWBDW+CMEX10 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 80 /summationtext put -readonly def -/FontBBox{-24 -2960 1454 772}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa052a014267b7904eb3c0d3bd0b83d891 -016ca6ca4b712adeb258faab9a130ee605e61f77fc1b738abc7c51cd46ef8171 -9098d5fee67660e69a7ab91b58f29a4d79e57022f783eb0fbbb6d4f4ec35014f -d2decba99459a4c59df0c6eba150284454e707dc2100c15b76b4c19b84363758 -469a6c558785b226332152109871a9883487dd7710949204ddcf837e6a8708b8 -2bdbf16fbc7512faa308a093fe5cf5b8cac6a7beb5d02276e511ffaf2ae11910 -de076f24311d94d07cacc323f360887f1ea11bdda7927ff3325986fdb0abdfc8 -8e4b40e7988921d551ec0867ebca44c05657f0dc913e7b3004a5f3e1337b6987 -febc45f989c8dc6dc0ad577e903f05d0d54208a0ae7f28c734f130c133b48422 -bed48639a2b74e4c08f2e710e24a99f347e0f4394ce64eacb549576e89044e52 -eabe595bc964156d9d8c2bab0f49664e951d7c1a3d1789c47f03c7051a63d5e8 -df04faac47351e82cae0794aa9692c6452688a74a7a6a7ad09b8a9783c235ec1 -ea2156261b8fb331827145de315b6ec1b3d8b67b3323f761eaf4c223bb214c4c -6b062d1b281f5041d068319f4911058376d8efba59884ba3318c5bc95684f281 -e0591bc0d1b2a4592a137ff301610019b8ac46ae6e48bc091e888e4487688350 -e9ad5074ee4848271ce4acc38d8cbc8f3db32813ddd5b341af9a6601281aba38 -4a978b98483a63fcc458d0e3bce6fd830e7e09b0db987a6b63b74638fc9f21a5 -8c68479e1a85225670d79cdde5ac0b77f5a994ca700b5f0ff1f97fc63efde023 -8135f04a9d20c31998b12ae06676c362141aaaa395cdef0a49e0141d335965f2 -fb4198499799ceccc8aa5d255264784cd30a3e8295888efbc2060addd7bac45a -eeeecdff7a47a88e69d84c9e572616c1ac69a34b5f0d0de8ee4edf9f4ade0387 -680924d8d5b73ef04ead7f45977ca8ad73d4dd45de1966a3b8251c0386164c35 -5880dd2609c80e96d1ab861c9259748e98f6711d4e241a269ed51ff328344664 -3af9f18dce671611db2f5d3ea77ee734d2bed623f973e6840b8dad1e2c3c2666 -dd4dd1c1c8384f906a7baacdf441bb0aaea2a697e453d89e61340d3a13f615ef -1519bfec00780aa739ca4bbfd4bf4df2e631623030c8343d7b84d3333d9eb1c7 -b8f7b8e4b2300015f84581ef1adeb8927320ff8d70138f099c8a4cfa5cdd00c9 -7028808e83dc31a07859bf1fb09e75461041b1d7fbcd67127398bf4ccf1f5b0d -aca653b6ad3b88aff1852e266f413d704a55e5ca7093acaa6030e39d8f94cc01 -40cc496ff70c94384f50b409e147096fb2a369342aada452f853c4bdb343aca4 -e9f832281381689ca3dcc8c79e7c15a60690f64eed769738b307224c6bb711f8 -4c6145a710444c68df56753e307ccf3eb1157145e10a4f552917bb024f732948 -0cc4af63bf2bba2e43c5f0fe9f03505ebe36c22119fc77127ee189423efb7b71 -85a7b4fa2414a5451dc6b2 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F9_0 /LBWBDW+CMEX10 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /summationtext/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%BeginResource: font NMQKLO+CMBX5 -%!PS-AdobeFont-1.1: CMBX5 1.0 -%%CreationDate: 1991 Aug 20 16:35:12 -% Copyright (C) 1997 American Mathematical Society. All Rights Reserved. -11 dict begin -/FontInfo 7 dict dup begin -/version (1.0) readonly def -/Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def -/FullName (CMBX5) readonly def -/FamilyName (Computer Modern) readonly def -/Weight (Bold) readonly def -/ItalicAngle 0 def -/isFixedPitch false def -end readonly def -/FontName /NMQKLO+CMBX5 def -/PaintType 0 def -/FontType 1 def -/FontMatrix [0.001 0 0 0.001 0 0] readonly def -/Encoding 256 array -0 1 255 {1 index exch /.notdef put} for -dup 63 /question put -readonly def -/FontBBox{-40 -250 1483 756}readonly def -currentdict end -currentfile eexec -d9d66f633b846a97b686a97e45a3d0aa052a014267b7904eb3c0d3bd0b83d891 -016ca6ca4b712adeb258faab9a130ee605e61f77fc1b738abc7c51cd46ef8171 -9098d5fee67660e69a7ab91b58f29a4d79e57022f783eb0fbbb6d4f4ec35014f -d2decba99459a4c59df0c6eba150284454e707dc2100c15b76b4c19b84363758 -469a6c558785b226332152109871a9883487dd7710949204ddcf837e6a8708b8 -2bdbf16fbc7512faa308a093fe5f068f48fd40da38a480ecd24c95aa52d1eb8d -502e7d1e35b648c712f04a3f32986a7d18d3c6d4ac7333184c6d44bdf95915a2 -d64839372f2a0eff251b92139518c8bfb733c1db4b64fcc4671ecc1a9449d442 -f7c1a1c352aa77e522b8a5a7318ab1f49f6f047fd17e71a0c6d6c60a7aeab52f -acef9c20fe28b5e3e70f44baecaf535674eb33af0cad919f2398de641d94c026 -f0edb2bed4c3bccf5e6e5a9dd4a841a660d86b2f0f5fb264f6d76e1e38da6730 -1acd0ec8592584babdeab88e2774b4e8bc60607ca8246a070c8e7f9e54d1742c -6197b85c606b2388d93e3738e0a1feb314a89d61a001b5deb93bff543714623d -e7bb928ae0f16120af220c9c6a5aa1488e1112b810910a9985f63fe46ad1de40 -6c0729362a33538005464d7021f521f8d694a7ebb7e5ee96f28a5232bc5e5dc7 -76cb198dac299dbd399dea79136f3d3a2e0d71014b74522685d59ec157b50996 -1a336950a916c603eab7a2f389b6922f8cd61188950fbc871b9248e2735176a4 -b32e00db4c68064bd43d66448090085c54f799267d517b036c9967c985d397c7 -d035d988c844bb77778330efecba432e16624c0bf61b57c5f16921b819084b09 -b761421484dd7a3470cfed1cfee500282579a7d52fed688c11b6479db5008dbc -6ae39544dbb9fd9952541d8a24a8bcbf9650f2c0d2fe44aff9b9167d7c65e168 -41a0ca8969259abbac0ab3727e1bf348928ae422af55f334d25af14528a3711c -06273b79fbc520330b4f7592ae1ac0dc4634e24b21202783def88e7d5d477462 -2cdd2373a78a3d82aefcf49ffdfdb76a9f085962f96017b703f3f54d8989e323 -c54c4cc3fafa0e66617816cabc334df56118c03a4def8f527684ad30c9b35493 -12c0178d348873a626842970d2a8660c82951ef653618245709a41955b2cd343 -0e6c08318db68640b9813efc09f40403b5da127f2b741b659e384b4bdc264e70 -c6eb003870f0f9a1ed4d40166db6d2c1beab30b9872f4071f5ead05172ba3c52 -281019bbfd8d34a6a505b816273159e6edbcf550bfdd1aabd28ebeffcb02269c -561af4fc5a3e29e24416023a81f6dcead3ae15dc703242524b035737bcf2691c -7c3f48b0ce0ffe9043f9b3284428ad2398efe958c4b27b7b73076bd211420c08 -05d209f4277df231df615279712312216948165c15481bde439f241341fd6d29 -a53774546749566c2d7fdad3226e2d94f0704bfcd8c6838e461370262f6df79f -2e5d911fa0ff7e7d768de61aeb6c06a3bc8000f4219763a2b639984d0c2eb064 -28878bc8007baf55d2f388dad3d522b2d5a32fa6615f39c1778b78f5ab95ebb7 -0763404a937a7556478f8a -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000000000000000000 -cleartomark -%%EndResource -/F10_0 /NMQKLO+CMBX5 1 1 -[ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/question - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef - /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef] -pdfMakeFont -%%EndSetup -pdfStartPage -[] 0 d -1 i -0 j -0 J -10 M -1 w -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -false op -false OP -{} settransfer -q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -[1 0 0 1 0.708 1.047] cm -q -[0.6603 0 0 0.6603 0 0] cm -q -[1 0 0 1 0 0] cm -q -[1 0 0 1 0 0] cm -0 0 212.525 156.525 re -W -q -/DeviceRGB {} cs -[0 0 0] sc -72.684 137.412 m -80.711 108.744 37.551 98.517 47.832 63.166 c -f -192.324 73.892 m -182.941 52.916 162.43 34.298 148.684 20.556 c -f -/DeviceRGB {} CS -[1 0 0] SC -0.8 w -0 J -0 j -[] 0 d -4 M -q -[1 0 0 -1 0 156.525] cm -0.395 0.398 211.727 155.727 re -S -Q -/DeviceRGB {} CS -[0 0 0] SC -q -[1 0 0 -1 0 156.525] cm -173.637 38.398 m -173.637 63.598 l -S -Q -/DeviceRGB {} cs -[0.4 0.4 0.4] sc -23.195 5.81 69.84 4.121 re -f -/DeviceRGB {} cs -[0.702 0.702 0.702] sc -10.059 59.81 28.246 74.539 re -f -/DeviceRGB {} CS -[0 0 0] SC -0.4 w -q -[1 0 0 -1 0 156.525] cm -66.484 135.801 m -69.652 136.258 l -69.926 133.934 70.434 131.668 71.156 129.477 c -68.191 128.477 l -68.191 128.477 67.969 129.551 66.781 130.414 c -66.188 130.844 65.582 130.496 64.988 129.965 c -64.395 129.438 63.82 128.73 63.234 128.559 c -62.652 128.383 61.996 128.504 61.445 128.848 c -60.891 129.188 60.438 129.754 60.27 130.422 c -60.098 131.09 60.23 131.801 60.562 132.363 c -60.891 132.922 61.422 133.332 62.023 133.445 c -62.629 133.555 63.465 133.195 64.238 133 c -65.008 132.805 65.711 132.766 66.078 133.398 c -66.805 134.664 66.484 135.801 66.484 135.801 c -h -68.191 128.477 m -71.156 129.477 l -71.875 127.285 72.805 125.164 73.918 123.117 c -71.172 121.637 l -71.172 121.637 70.766 122.66 69.453 123.301 c -68.797 123.621 68.266 123.176 67.777 122.555 c -67.285 121.938 66.84 121.148 66.297 120.879 c -65.754 120.609 65.098 120.613 64.504 120.855 c -63.91 121.094 63.379 121.562 63.109 122.184 c -62.836 122.801 62.848 123.512 63.078 124.113 c -63.305 124.715 63.746 125.203 64.312 125.414 c -64.875 125.629 65.742 125.43 66.523 125.375 c -67.305 125.32 67.996 125.406 68.234 126.086 c -68.715 127.438 68.191 128.477 68.191 128.477 c -h -71.172 121.637 m -73.918 123.117 l -75.031 121.074 76.328 119.102 77.781 117.215 c -75.266 115.316 l -75.266 115.316 74.695 116.277 73.285 116.711 c -72.578 116.93 72.125 116.398 71.734 115.707 c -71.344 115.016 71.02 114.164 70.523 113.809 c -70.023 113.457 69.367 113.359 68.746 113.5 c -68.121 113.645 67.527 114.023 67.168 114.594 c -66.809 115.16 66.711 115.863 66.844 116.492 c -66.977 117.121 67.336 117.672 67.855 117.977 c -68.379 118.281 69.266 118.227 70.047 118.301 c -70.828 118.375 71.496 118.574 71.621 119.281 c -71.871 120.699 71.172 121.637 71.172 121.637 c -h -75.266 115.316 m -77.781 117.215 l -79.234 115.324 80.844 113.516 82.578 111.793 c -80.305 109.547 l -80.305 109.547 79.598 110.441 78.117 110.68 c -77.379 110.801 77 110.203 76.703 109.457 c -76.406 108.707 76.199 107.809 75.746 107.383 c -75.293 106.957 74.652 106.77 74.008 106.82 c -73.367 106.875 72.723 107.168 72.285 107.684 c -71.414 108.707 71.547 110.398 72.5 111.16 c -72.977 111.543 73.871 111.621 74.641 111.812 c -75.41 112 76.055 112.297 76.074 113.023 c -76.113 114.484 75.266 115.316 75.266 115.316 c -h -80.305 109.547 m -82.578 111.793 l -84.316 110.07 86.184 108.438 88.148 106.895 c -86.133 104.359 l -86.133 104.359 85.309 105.18 83.789 105.238 c -83.027 105.27 82.723 104.621 82.516 103.832 c -82.309 103.043 82.211 102.113 81.809 101.629 c -81.004 100.664 79.305 100.574 78.301 101.484 c -77.301 102.395 77.223 104.105 78.078 105 c -78.508 105.445 79.395 105.645 80.145 105.938 c -80.895 106.227 81.504 106.605 81.43 107.344 c -81.277 108.82 80.305 109.547 80.305 109.547 c -h -86.133 104.359 m -88.148 106.895 l -90.117 105.348 92.188 103.898 94.332 102.543 c -92.582 99.789 l -92.582 99.789 91.668 100.527 90.137 100.422 c -89.367 100.367 89.133 99.684 89.016 98.867 c -88.895 98.055 88.898 97.113 88.547 96.582 c -87.848 95.527 86.156 95.242 85.051 96.035 c -83.949 96.824 83.672 98.527 84.434 99.523 c -84.812 100.023 85.68 100.328 86.398 100.707 c -87.117 101.09 87.688 101.539 87.527 102.273 c -87.199 103.738 86.133 104.359 86.133 104.359 c -h -92.582 99.789 m -94.332 102.543 l -96.477 101.188 98.695 99.93 100.961 98.777 c -99.496 95.867 l -99.496 95.867 98.512 96.516 96.996 96.258 c -96.238 96.129 96.074 95.422 96.035 94.598 c -96 93.773 96.098 92.836 95.801 92.277 c -95.207 91.152 93.555 90.691 92.375 91.359 c -91.195 92.027 90.742 93.691 91.395 94.77 c -91.723 95.309 92.555 95.707 93.234 96.164 c -93.914 96.617 94.441 97.125 94.199 97.844 c -93.723 99.277 92.582 99.789 92.582 99.789 c -h -99.496 95.867 m -100.961 98.777 l -103.23 97.621 105.543 96.57 107.879 95.625 c -106.711 92.629 l -106.711 92.629 105.68 93.18 104.207 92.781 c -103.473 92.582 103.375 91.867 103.418 91.051 c -103.461 90.234 103.645 89.32 103.406 88.742 c -102.926 87.578 101.336 86.957 100.105 87.496 c -98.875 88.035 98.266 89.637 98.809 90.766 c -99.082 91.332 99.867 91.812 100.5 92.328 c -101.129 92.848 101.598 93.398 101.293 94.086 c -100.68 95.465 99.496 95.867 99.496 95.867 c -h -106.711 92.629 m -107.879 95.625 l -108.609 95.332 109.34 95.047 110.074 94.773 c -111.566 94.227 113.117 93.789 114.715 93.445 c -114.031 90.324 l -114.031 90.324 112.969 90.688 111.598 90.102 c -110.91 89.809 110.898 89.098 111.047 88.305 c -111.199 87.512 111.512 86.637 111.359 86.035 c -111.207 85.434 110.758 84.93 110.172 84.629 c -109.586 84.328 108.855 84.238 108.188 84.445 c -107.598 84.629 107.098 85.035 106.773 85.527 c -106.391 86.141 106.27 86.898 106.508 87.551 c -106.738 88.172 107.562 88.754 108.145 89.367 c -108.613 89.855 108.922 90.367 108.699 90.918 c -108.68 90.957 108.66 90.996 108.637 91.039 c -107.91 92.336 106.711 92.629 106.711 92.629 c -h -114.031 90.324 m -114.715 93.445 l -117.035 92.941 119.449 92.629 121.918 92.441 c -121.672 89.246 l -121.672 89.246 120.543 89.461 119.262 88.668 c -118.621 88.27 118.727 87.566 118.996 86.801 c -119.266 86.035 119.703 85.219 119.641 84.598 c -119.578 83.977 119.219 83.41 118.695 83.02 c -118.176 82.633 117.488 82.426 116.816 82.523 c -116.141 82.621 115.535 83.012 115.137 83.535 c -114.738 84.055 114.547 84.703 114.66 85.309 c -114.773 85.914 115.402 86.57 115.867 87.223 c -116.328 87.879 116.625 88.531 116.156 89.102 c -115.223 90.242 114.031 90.324 114.031 90.324 c -h -121.672 89.246 m -121.918 92.441 l -123.234 92.34 124.566 92.273 125.906 92.234 c -127.094 92.207 128.293 92.199 129.512 92.199 c -129.516 89 l -129.516 89 128.34 89.129 127.133 88.211 c -126.531 87.754 126.715 87.062 127.059 86.332 c -127.398 85.598 127.902 84.828 127.898 84.203 c -127.891 83.047 126.859 81.973 125.656 81.855 c -125.566 81.848 125.473 81.844 125.379 81.844 c -124.059 81.875 122.895 83.105 122.965 84.34 c -122.996 84.961 123.535 85.691 123.914 86.398 c -124.293 87.109 124.512 87.789 123.973 88.301 c -122.895 89.324 121.672 89.246 121.672 89.246 c -h -129.516 89 m -129.512 92.199 l -132.117 92.207 134.789 92.258 137.535 92.25 c -137.523 89.047 l -137.523 89.047 136.316 89.184 135.113 88.242 c -133.91 87.301 135.926 85.492 135.934 84.246 c -135.938 83 134.816 81.84 133.57 81.828 c -132.324 81.816 131.148 82.969 131.141 84.207 c -131.129 85.441 133.055 87.254 131.91 88.215 c -130.766 89.176 129.516 89 129.516 89 c -h -137.523 89.047 m -137.535 92.25 l -139.398 92.242 141.297 92.207 143.227 92.109 c -144.141 92.07 145.062 92.008 145.984 91.926 c -145.691 88.73 l -145.691 88.73 144.457 88.973 143.18 88.109 c -143.117 88.066 143.062 88.02 143.012 87.969 c -142.633 87.586 142.719 87.047 142.934 86.465 c -143.234 85.656 143.777 84.754 143.73 84.066 c -143.684 83.344 143.273 82.68 142.719 82.254 c -142.312 81.949 141.832 81.766 141.336 81.785 c -140.156 81.828 139.066 83.004 139.082 84.238 c -139.09 84.855 139.578 85.605 139.934 86.324 c -140.285 87.039 140.508 87.727 139.941 88.223 c -138.812 89.215 137.523 89.047 137.523 89.047 c -h -145.691 88.73 m -145.984 91.926 l -148.863 91.664 151.77 91.207 154.645 90.492 c -153.883 87.387 l -153.883 87.387 152.68 87.82 151.289 87.141 c -150.598 86.801 150.68 86.082 150.883 85.301 c -151.086 84.52 151.398 83.672 151.27 83.062 c -151.145 82.453 150.758 81.922 150.277 81.562 c -149.793 81.203 149.215 81.012 148.656 81.102 c -148.098 81.191 147.602 81.555 147.254 82.047 c -146.906 82.543 146.707 83.172 146.777 83.785 c -146.852 84.402 147.406 85.098 147.836 85.773 c -148.266 86.449 148.57 87.105 148.059 87.664 c -147.031 88.781 145.691 88.73 145.691 88.73 c -h -153.883 87.387 m -154.645 90.492 l -157.246 89.848 159.824 88.992 162.348 87.895 c -162.609 87.777 162.871 87.656 163.133 87.531 c -161.781 84.637 l -161.781 84.637 161.504 84.805 161.031 84.922 c -160.562 85.031 159.91 85.09 159.168 84.887 c -158.422 84.68 158.379 83.957 158.438 83.152 c -158.492 82.352 158.637 81.461 158.398 80.887 c -158.156 80.312 157.688 79.863 157.16 79.594 c -156.633 79.328 156.051 79.242 155.535 79.418 c -155.023 79.598 154.613 80.031 154.363 80.57 c -154.113 81.109 154.02 81.758 154.188 82.352 c -154.355 82.945 155.008 83.547 155.539 84.141 c -156.07 84.73 156.48 85.328 156.062 85.961 c -155.227 87.227 153.883 87.387 153.883 87.387 c -h -161.781 84.637 m -163.133 87.531 l -165.855 86.242 168.418 84.715 170.824 83.008 c -168.965 80.41 l -168.965 80.41 168.008 81.254 166.465 81.137 c -165.695 81.074 165.512 80.379 165.41 79.582 c -165.312 78.785 165.289 77.883 164.941 77.367 c -164.598 76.848 164.047 76.5 163.473 76.344 c -162.898 76.188 162.301 76.219 161.828 76.5 c -161.355 76.777 161.043 77.285 160.902 77.863 c -160.766 78.438 160.805 79.09 161.09 79.637 c -161.371 80.188 162.125 80.645 162.766 81.121 c -163.406 81.598 163.926 82.098 163.645 82.801 c -163.078 84.207 161.781 84.637 161.781 84.637 c -h -168.965 80.41 m -170.824 83.008 l -173.227 81.297 175.469 79.41 177.559 77.395 c -175.328 75.086 l -175.328 75.086 174.512 76.059 172.969 76.18 c -172.199 76.242 171.902 75.582 171.676 74.809 c -171.453 74.031 171.293 73.137 170.871 72.676 c -170.027 71.754 168.473 71.617 167.609 72.348 c -167.18 72.711 166.945 73.277 166.902 73.879 c -166.859 74.48 167.012 75.121 167.387 75.613 c -167.762 76.102 168.594 76.418 169.305 76.777 c -170.02 77.137 170.621 77.543 170.465 78.285 c -170.152 79.766 168.965 80.41 168.965 80.41 c -h -S -Q -Q -Q -Q -Q -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 -0.708 -1.047] cm -[1 0 0 1 0 0] Tm -0 0 Td -90.27 95.653 Td -/F5_0 4.9813 Tf -(Inksc) 13.4067 Tj -59 TJm -(ap) 6.0094 Tj -58 TJm -(e) 2.7123 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[1 0 0] sc -/DeviceRGB {} CS -[1 0 0] SC -118.817 21.74 Td -/F6_0 4.9813 Tf -(red) 9.4784 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 3.928 11.514] cm -q -[0.7071 0.7071 -0.7071 0.7071 0 0] cm -[1 0 0 1 -3.928 -11.514] cm -[1 0 0 1 0 0] Tm -0 0 Td -3.928 11.514 Td -/F6_0 4.9813 Tf -(45) 6.7805 Tj --472 TJm -(graden) 19.9949 Tj -[1 0 0 1 3.928 11.514] cm -Q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 -3.928 -11.514] cm -[1 0 0 1 0 0] Tm -0 0 Td -66.754 85.875 Td -/F6_0 4.9813 Tf -(lim) 9.4784 Tj -76.233 84.879 Td -/F7_0 4.9813 Tf -(n) 4.3875 Tj -80.62 84.879 Td -/F8_0 4.9813 Tf -(!1) 13.5601 Tj -95.901 92.102 Td -/F9_0 9.9626 Tf -(P) 10.5165 Tj -106.417 89.639 Td -/F7_0 4.9813 Tf -(n) 4.3875 Tj -106.417 81.641 Td -(k) 3.7763 Tj -110.274 81.641 Td -/F6_0 4.9813 Tf -(=1) 8.5101 Tj -123.878 87.805 Td -(1) 3.3903 Tj -q -[1 0 0 1 121.7 87.12] cm -[] 0 d -0 J -0.398 w -0 0 m -7.745 0 l -S -Q -[1 0 0 1 0 0] Tm -0 0 Td -121.7 81.846 Td -/F7_0 4.9813 Tf -(k) 3.7763 Tj -125.557 83.313 Td -/F6_0 4.9813 Tf -(2) 3.3903 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -16.708 98.118 Td -(This) 13.2488 Tj --472 TJm -(Figure) 19.1855 Tj -53.847 98.118 Td -/F10_0 4.9813 Tf -(??) 7.1531 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -110.09 68.815 Td -/F6_0 4.9813 Tf -(o) 3.3903 Tj --35 TJm -(o) 3.3903 Tj --34 TJm -(o) 3.3903 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -109.852 9.071 Td -(blue) 12.5225 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 1 0] sc -/DeviceRGB {} CS -[0 1 0] SC -115.432 16.139 Td -(green) 15.9128 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -16.021 7.605 Td -(aligned) 21.3095 Tj --472 TJm -(on) 7.1262 Tj --472 TJm -(baseline) 23.696 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 7.35 81.51] cm -q -[0 -1 1 0 0 0] cm -[1 0 0 1 -7.35 -81.51] cm -[1 0 0 1 0 0] Tm -0 0 Td -7.35 81.51 Td -/F6_0 4.9813 Tf -(90) 6.7805 Tj --472 TJm -(degrees) 21.6896 Tj -[1 0 0 1 7.35 81.51] cm -Q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 18.648 -27.494] cm -q -[0 1 -1 0 0 0] cm -[1 0 0 1 -25.998 -54.016] cm -[1 0 0 1 0 0] Tm -0 0 Td -25.998 54.016 Td -/F6_0 4.9813 Tf -(90) 6.7805 Tj --472 TJm -(degrees) 21.6896 Tj -[1 0 0 1 25.998 54.016] cm -Q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 -25.998 -54.016] cm -[1 0 0 1 0 0] Tm -0 0 Td -115.349 74.183 Td -/F6_0 4.9813 Tf -(o) 3.3903 Tj --35 TJm -(o) 3.3903 Tj --34 TJm -(o) 3.3903 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -104.832 63.961 Td -(o) 3.3903 Tj --35 TJm -(o) 3.3903 Tj --34 TJm -(o) 3.3903 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -72.872 75.953 Td -/F7_0 4.9813 Tf -(x) 3.9437 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -79.137 73.063 Td -(y) 3.6393 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -85.881 69.449 Td -(z) 3.4306 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 0] sc -/DeviceRGB {} CS -[0 0 0] SC -[1 0 0 1 70.962 49.659] cm -q -[0.8085 -0.5885 0.5885 0.8085 0 0] cm -[1 0 0 1 -70.962 -49.659] cm -[1 0 0 1 0 0] Tm -0 0 Td -36.231 49.659 Td -/F6_0 4.9813 Tf -(TikZ) 14.4253 Tj --472 TJm -(this) 11.1736 Tj -64.182 49.659 Td -/F8_0 4.9813 Tf -(!) 6.78 Tj -[1 0 0 1 70.962 49.659] cm -Q -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceRGB {} cs -[0 0 1] sc -/DeviceRGB {} CS -[0 0 1] SC -[1 0 0 1 -70.962 -49.659] cm -[1 0 0 1 0 0] Tm -0 0 Td -103.095 37.083 Td -/F6_0 4.9813 Tf -(transparen) 31.8604 Tj -35 TJm -(t) 2.6984 Tj -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -/DeviceGray {} cs -[0] sc -/DeviceGray {} CS -[0] SC -Q -showpage -%%PageTrailer -pdfEndPage -%%Trailer -end -%%DocumentSuppliedResources: -%%+ font XYFSSI+CMTI7 -%%+ font QRFNIX+CMR5 -%%+ font KCZGMI+CMMI5 -%%+ font ZITESQ+CMSY5 -%%+ font LBWBDW+CMEX10 -%%+ font NMQKLO+CMBX5 -%%EOF diff --git a/Master/texmf-dist/doc/latex/svg/Fig.2.pdf b/Master/texmf-dist/doc/latex/svg/Fig.2.pdf deleted file mode 100644 index 5d04eeb9f13..00000000000 Binary files a/Master/texmf-dist/doc/latex/svg/Fig.2.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/svg/Fig.2.png b/Master/texmf-dist/doc/latex/svg/Fig.2.png deleted file mode 100644 index be7f984194a..00000000000 Binary files a/Master/texmf-dist/doc/latex/svg/Fig.2.png and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/svg/LICENSE.md b/Master/texmf-dist/doc/latex/svg/LICENSE.md new file mode 100644 index 00000000000..3d92561e918 --- /dev/null +++ b/Master/texmf-dist/doc/latex/svg/LICENSE.md @@ -0,0 +1,30 @@ + + svg -- Include SVG pictures in LaTeX documents using Inkscape +---------------------------------------------------------------------------- + svg-extract -- Extract independent graphic files from SVG pictures +---------------------------------------------------------------------------- + + Copyright (C) Philip Ilten , 2012-2016 + Copyright (C) Falk Hanisch , 2017- + +---------------------------------------------------------------------------- + + This work may be distributed and/or modified under the conditions of the + LaTeX Project Public License, version 1.3c of the license. The latest + version of this license is in http://www.latex-project.org/lppl.txt and + version 1.3c or later is part of all distributions of LaTeX 2005/12/01 + or later and of this work. This work has the LPPL maintenance status + "author-maintained". The current maintainer and author of this work + is Falk Hanisch. + +---------------------------------------------------------------------------- + + Dieses Werk darf nach den Bedingungen der LaTeX Project Public Lizenz + in der Version 1.3c, verteilt und/oder veraendert werden. Die aktuelle + Version dieser Lizenz ist http://www.latex-project.org/lppl.txt und + Version 1.3c oder spaeter ist Teil aller Verteilungen von LaTeX 2005/12/01 + oder spaeter und dieses Werks. Dieses Werk hat den LPPL-Verwaltungs-Status + "author-maintained", wird somit allein durch den Autor verwaltet. Der + aktuelle Verwalter und Autor dieses Werkes ist Falk Hanisch. + +---------------------------------------------------------------------------- diff --git a/Master/texmf-dist/doc/latex/svg/README b/Master/texmf-dist/doc/latex/svg/README deleted file mode 100644 index 900be0d35ab..00000000000 --- a/Master/texmf-dist/doc/latex/svg/README +++ /dev/null @@ -1,40 +0,0 @@ -%% ------------------------------------------------------- -%% Copyright (C) 2012 by Philip Ilten -%% ------------------------------------------------------- -%% -%% This file may be distributed and/or modified under the conditions -%% of the LaTeX Project Public License, either version 1.3 of this -%% license or (at your option) any later version. The latest version -%% of this license is in: -%% -%% http://www.latex-project.org/lppl.txt -%% -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Philip Ilten. -%% -%% This work consists of the files README, svg.dtx (with derived files -%% svg.sty, svg.pdf, Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png), -%% preamble.tex, example.svg (with derived files example.pdf and -%% example.pdf_tex), and root.C (with derived files root.svg, -%% root.pdf, and root.pdf_tex). -%% -%% The following files constitute the svg package and should be -%% distributed as a whole: README, svg.dtx, svg.sty, svg.pdf, -%% Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png, preamble.tex -%% example.svg, example.pdf, example.pdf_tex, root.C, root.svg, -%% root.pdf, and root.pdf_tex. - -This package provides a command similar to the \includegraphics command of the -graphicx package, but for the inclusion of SVGs using Inkscape. - - \includesvg[]{} - -A variety of options are available, including width, height, and path of the -SVG. Additionally, it is possible to extract the SVG image to a PDF, EPS, or -PNG, exactly as it is rendered within the LaTeX document. Within the -documentation an example is given using an SVG created from the high energy -particle physics analysis package ROOT. \ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/svg/README.md b/Master/texmf-dist/doc/latex/svg/README.md new file mode 100644 index 00000000000..1f1a6f19757 --- /dev/null +++ b/Master/texmf-dist/doc/latex/svg/README.md @@ -0,0 +1,55 @@ + + svg -- Include SVG pictures in LaTeX documents using Inkscape +---------------------------------------------------------------------------- + svg-extract -- Extract independent graphic files from SVG pictures +---------------------------------------------------------------------------- + + Copyright (C) Philip Ilten , 2012-2016 + Copyright (C) Falk Hanisch , 2017- + + svg 2017/03/27 v2.00 + +---------------------------------------------------------------------------- + + This material is subject to the LaTeX Project Public License version 1.3c + or later. See http://www.latex-project.org/lppl.txt for details. + +---------------------------------------------------------------------------- + + +Summary +------- + +The **svg** package is intended for the automated integration of SVG graphics +into LaTeX documents. Therefor the capabilities provided by ***Inkscape***---or +more precisely its command line tool---are used to export the text within a SVG +graphic to a separate file, which is then rendered by LaTeX. For this purpose +the two commands `\includesvg` and `\includeinkscape` are provided which are +very similar to the `\includegraphics` command of the **graphicx** package. + +In addition, the package **svg-extract** allows the extraction of these +graphics into independent files in different graphic formats, exactly as +it is rendered within the LaTeX document using either ***ImageMagick*** or +***Ghostscript*** + + +Versions +-------- + +**v2.00** (2017/03/27) ++ New maintainer: Falk Hanisch ++ Re-implementation from scratch ++ functionality split in two packages **svg** and **svg-extract** ++ package **svg** intended for including SVG files ++ package **svg-extract** for extracting graphic files rendered with LaTeX ++ **svg-extract**: enhanced support for ***ImageMagick*** ++ **svg-extract**: support for ***Ghostscript*** added ++ package **subfig** not required anymore ++ support of subfigures stopped due to the huge number of packages which deal + with this topic and the large variety of implementing this functionality; + naming exported graphics after their consecutive numbering can't be ensured + for all variants of subfigures, so it's neglected + + +**v1.0** (2016/10/10) ++ initial version by Philip Ilten diff --git a/Master/texmf-dist/doc/latex/svg/example.pdf b/Master/texmf-dist/doc/latex/svg/example.pdf deleted file mode 100644 index 488c5faa0ff..00000000000 Binary files a/Master/texmf-dist/doc/latex/svg/example.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/svg/example.pdf_tex b/Master/texmf-dist/doc/latex/svg/example.pdf_tex deleted file mode 100644 index af114d2b6cf..00000000000 --- a/Master/texmf-dist/doc/latex/svg/example.pdf_tex +++ /dev/null @@ -1,40 +0,0 @@ -\begingroup - \makeatletter - \providecommand\color[2][]{% - \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded} - \renewcommand\color[2][]{}% - } - \providecommand\transparent[1]{% - \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded} - \renewcommand\transparent[1]{}% - } - \providecommand\rotatebox[2]{#2} - \ifx\svgwidth\undefined - \setlength{\unitlength}{212.525pt} - \else - \setlength{\unitlength}{\svgwidth} - \fi - \global\let\svgwidth\undefined - \makeatother - \begin{picture}(1,0.73650159)% - \put(0,0){\includegraphics[width=\unitlength]{example.pdf}}% - \put(0.63829642,0.6742451){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{\emph{Inkscape}}}}% - \put(0.84173702,0.1474823){\color[rgb]{1,0,0}\makebox(0,0)[lb]{\smash{red}}}% - \put(0.02294317,0.07460173){\color[rgb]{0,0,0}\rotatebox{45}{\makebox(0,0)[lb]{\smash{45 graden}}}}% - \put(0.69834718,0.60455928){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{$\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}$}}}% - \put(0.11403042,0.69180401){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{This Figure \ref{fig:example}}}}% - \put(0.81701383,0.48297822){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{ooo}}}% - \put(0.77784162,0.05718502){\color[rgb]{0,0,1}\makebox(0,0)[lb]{\smash{blue}}}% - \put(0.81761682,0.10755617){\color[rgb]{0,1,0}\makebox(0,0)[lb]{\smash{green}}}% - \put(0.10913692,0.04673474){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{aligned on baseline}}}% - \put(0.04733209,0.57343337){\color[rgb]{0,0,0}\rotatebox{-90}{\makebox(0,0)[lb]{\smash{90 degrees}}}}% - \put(0.18024362,0.37750422){\color[rgb]{0,0,0}\rotatebox{90}{\makebox(0,0)[lb]{\smash{90 degrees}}}}% - \put(0.81701383,0.52121809){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{ooo}}}% - \put(0.81701383,0.44838027){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{ooo}}}% - \put(0.51430473,0.53384586){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{$x$}}}% - \put(0.55894148,0.51324431){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{$y$}}}% - \put(0.60701188,0.48749228){\color[rgb]{0,0,0}\makebox(0,0)[lb]{\smash{$z$}}}% - \put(0.5006922,0.34645132){\color[rgb]{0,0,0}\rotatebox{-36.04952341}{\makebox(0,0)[rb]{\smash{TikZ this$\rightarrow$}}}}% - \put(0.72968311,0.2568264){\color[rgb]{0,0,1}\transparent{0.5}\makebox(0,0)[lb]{\smash{transparent}}}% - \end{picture}% -\endgroup diff --git a/Master/texmf-dist/doc/latex/svg/example.svg b/Master/texmf-dist/doc/latex/svg/example.svg deleted file mode 100644 index 59778af4370..00000000000 --- a/Master/texmf-dist/doc/latex/svg/example.svg +++ /dev/null @@ -1,363 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - \emph{Inkscape} - - red - 45 graden - - $\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}$ - This Figure \ref{fig:example} - ooo - - blue - green - - aligned on baseline - - - 90 degrees - 90 degrees - - ooo - ooo - $x$ - $y$ - $z$ - - TikZ this$\rightarrow$ - transparent - - diff --git a/Master/texmf-dist/doc/latex/svg/preamble.tex b/Master/texmf-dist/doc/latex/svg/preamble.tex deleted file mode 100644 index 5f6749ab28d..00000000000 --- a/Master/texmf-dist/doc/latex/svg/preamble.tex +++ /dev/null @@ -1,8 +0,0 @@ -\documentclass{article} -\usepackage{svg} -\usepackage{transparent} -\usepackage{xcolor} -\usepackage{relsize} -\begin{document} - -There can be additional things after the preamble, but they don't matter! \ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/svg/root.C b/Master/texmf-dist/doc/latex/svg/root.C index 3575ff754ec..495fb60dc17 100644 --- a/Master/texmf-dist/doc/latex/svg/root.C +++ b/Master/texmf-dist/doc/latex/svg/root.C @@ -23,4 +23,5 @@ void root() { // Print the plot. gPad->Print("root.svg"); + } diff --git a/Master/texmf-dist/doc/latex/svg/root.pdf b/Master/texmf-dist/doc/latex/svg/root.pdf deleted file mode 100644 index 2dcd5a5e830..00000000000 Binary files a/Master/texmf-dist/doc/latex/svg/root.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/svg/root.pdf_tex b/Master/texmf-dist/doc/latex/svg/root.pdf_tex deleted file mode 100644 index 8d2aae87048..00000000000 --- a/Master/texmf-dist/doc/latex/svg/root.pdf_tex +++ /dev/null @@ -1,49 +0,0 @@ -\begingroup - \makeatletter - \providecommand\color[2][]{% - \errmessage{(Inkscape) Color is used for the text in Inkscape, but the package 'color.sty' is not loaded} - \renewcommand\color[2][]{}% - } - \providecommand\transparent[1]{% - \errmessage{(Inkscape) Transparency is used (non-zero) for the text in Inkscape, but the package 'transparent.sty' is not loaded} - \renewcommand\transparent[1]{}% - } - \providecommand\rotatebox[2]{#2} - \ifx\svgwidth\undefined - \setlength{\unitlength}{453.6pt} - \else - \setlength{\unitlength}{\svgwidth} - \fi - \global\let\svgwidth\undefined - \makeatother - \begin{picture}(1,0.67724868)% - \put(0,0){\includegraphics[width=\unitlength]{root.pdf}}% - \put(0.67372134,0.02645503){\color[rgb]{0,0,0}\rotatebox{9}{\makebox(0,0)[b]{\smash{\larger[2]$x$}}}}% - \put(0.4021164,0.0335097){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{0}}}% - \put(0.46560847,0.04585538){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{0.5}}}% - \put(0.5308642,0.05643739){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{1}}}% - \put(0.59611993,0.0670194){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{1.5}}}% - \put(0.66137566,0.07936508){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{2}}}% - \put(0.72663139,0.08994709){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{2.5}}}% - \put(0.79188713,0.10229277){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{3}}}% - \put(0.85714286,0.11287478){\color[rgb]{0,0,0}\makebox(0,0)[b]{\smash{3.5}}}% - \put(0.17813051,0.07231041){\color[rgb]{0,0,0}\rotatebox{-27}{\makebox(0,0)[b]{\smash{\larger[2]$y$}}}}% - \put(0.37213404,0.03880071){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{0}}}% - \put(0.33333333,0.05820106){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{0.5}}}% - \put(0.2962963,0.07760141){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{1}}}% - \put(0.25925926,0.09700176){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{1.5}}}% - \put(0.22222222,0.11640212){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{2}}}% - \put(0.18342152,0.13580247){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{2.5}}}% - \put(0.14638448,0.15520282){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{3}}}% - \put(0.10934744,0.17460317){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{3.5}}}% - \put(0.08465608,0.20811287){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{0}}}% - \put(0.08465608,0.25220459){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{20}}}% - \put(0.08465608,0.29453263){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{40}}}% - \put(0.08465608,0.33686067){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{60}}}% - \put(0.08465608,0.37918871){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{80}}}% - \put(0.08465608,0.42151675){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{100}}}% - \put(0.08465608,0.46560847){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{120}}}% - \put(0.08465608,0.50793651){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{140}}}% - \put(0.85537919,0.61199295){\color[rgb]{0,0,0}\makebox(0,0)[rb]{\smash{\larger[2]$z(x,y) = \frac{1}{\sigma_x\sigma_y\sqrt{4\pi^2}}\exp\left(- \left(\frac{(x-\mu_x)^2}{2\sigma_x^2} + \frac{(y-\mu_y)^2}{2\sigma_y^2} \right)\right)$}}}% - \end{picture}% -\endgroup diff --git a/Master/texmf-dist/doc/latex/svg/svg-example.svg b/Master/texmf-dist/doc/latex/svg/svg-example.svg new file mode 100644 index 00000000000..1a044b86f7e --- /dev/null +++ b/Master/texmf-dist/doc/latex/svg/svg-example.svg @@ -0,0 +1,401 @@ + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + Inkscape + + red + 45 graden + + $\lim_{n \to \infty}\sum_{k=1}^n \frac{1}{k^2}$ + I am figure \ref{fig:example-tex} + ooo + + \tiny Flowed text also works. This is a test text to see that it does work.But, only for rectangular flow shapes. blue + green + + aligned on baseline + + + 90 degrees + 90 degrees + + ooo + ooo + $x$ + $y$ + $z$ + + TikZ this$\rightarrow$ + transparent + + + diff --git a/Master/texmf-dist/doc/latex/svg/svg-preamble.tex b/Master/texmf-dist/doc/latex/svg/svg-preamble.tex new file mode 100644 index 00000000000..ca93825142d --- /dev/null +++ b/Master/texmf-dist/doc/latex/svg/svg-preamble.tex @@ -0,0 +1,10 @@ +\documentclass{scrartcl} +\usepackage{ifxetex} +\usepackage{ifluatex} +\ifxetex\else\ifluatex\else +\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}} +\usepackage[T1]{fontenc} +\fi\fi +\usepackage{svg} +\usepackage{relsize} +\usepackage{hyperref} diff --git a/Master/texmf-dist/doc/latex/svg/svg.pdf b/Master/texmf-dist/doc/latex/svg/svg.pdf index 212c26d493f..5d21d319c7e 100644 Binary files a/Master/texmf-dist/doc/latex/svg/svg.pdf and b/Master/texmf-dist/doc/latex/svg/svg.pdf differ diff --git a/Master/texmf-dist/source/latex/svg/svg.dtx b/Master/texmf-dist/source/latex/svg/svg.dtx index 09aa510a2d4..8b3aa643cca 100644 --- a/Master/texmf-dist/source/latex/svg/svg.dtx +++ b/Master/texmf-dist/source/latex/svg/svg.dtx @@ -1,467 +1,5078 @@ +% \CheckSum{3474} % \iffalse meta-comment % -% The svg package by Philip Ilten. -% -% To extract package files and create documentation: -% -% pdflatex -shell-escape svg.dtx -% -% Please note that Inkscape generates TeX files with comments, and -% since this document is generated using docstrip which interprets -% comments, special versions of example.pdf_tex and root.pdf_tex have -% been provided with the comments removed. This package will fail to -% compile when example.pdf/example.pdf_tex has an older modification -% date than example.svg and root.pdf/root.pdf_tex has an older -% modification date than root.svg as this package will generate new -% versions of example.pdf_tex and root.pdf_tex with comments. -% -% To finish the installation move the following file into a directory -% searched by LaTeX: -% -% svg.sty -% -%% ------------------------------------------------------- -%% Copyright (C) 2012 by Philip Ilten -%% ------------------------------------------------------- -%% -%% This file may be distributed and/or modified under the conditions -%% of the LaTeX Project Public License, either version 1.3 of this -%% license or (at your option) any later version. The latest version -%% of this license is in: -%% -%% http://www.latex-project.org/lppl.txt -%% -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Philip Ilten. -%% -%% This work consists of the files README, svg.dtx (with derived files -%% svg.sty, svg.pdf, Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png), -%% preamble.tex, example.svg (with derived files example.pdf and -%% example.pdf_tex), and root.C (with derived files root.svg, -%% root.pdf, and root.pdf_tex). -%% -%% The following files constitute the svg package and should be -%% distributed as a whole: README, svg.dtx, svg.sty, svg.pdf, -%% Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png, preamble.tex -%% example.svg, example.pdf, example.pdf_tex, root.C, root.svg, -%% root.pdf, and root.pdf_tex. +% svg -- Include SVG pictures in LaTeX documents using Inkscape +% ---------------------------------------------------------------------------- +% svg-extract -- Extract independent graphic files from SVG pictures +% ---------------------------------------------------------------------------- +% +% Copyright (C) Philip Ilten , 2012-2016 +% Copyright (C) Falk Hanisch , 2017- +% +% ---------------------------------------------------------------------------- +% +% This work may be distributed and/or modified under the conditions of the +% LaTeX Project Public License, version 1.3c of the license. The latest +% version of this license is in http://www.latex-project.org/lppl.txt and +% version 1.3c or later is part of all distributions of LaTeX 2005/12/01 +% or later and of this work. This work has the LPPL maintenance status +% "author-maintained". The current maintainer and author of this work +% is Falk Hanisch. +% +% ---------------------------------------------------------------------------- +% +%<*batchfile> +\ifx\documentclass\@undefined +\input docstrip.tex +\keepsilent + +\begingroup +\catcode`\^^M=13 \catcode`\ =12 % +\gdef\svgpreamble{% +Copyright (C) Philip Ilten , 2012-2016 +Copyright (C) Falk Hanisch , 2017- + +This file was generated from file svg.dtx. +---------------------------------------------------------------------------- + +This work may be distributed and/or modified under the conditions +of the LaTeX Project Public License, version 1.3c of the license. +The latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3c or later is part of all distributions of +LaTeX 2005/12/01 or later and of this work. + +This work has the LPPL maintenance status "author-maintained". + +The current maintainer and author of this work is Falk Hanisch. + +This work consists of the main source file README.md, LICENSE.md, svg.dtx and +the derived documentation svg.pdf as well as the example files svg-example.svg, +svg-preamble.tex and root.C (with derived file root.svg). +} +\endgroup + +\declarepreamble\svgbasepreamble + +svg -- Include SVG pictures in LaTeX documents using Inkscape + +\svgpreamble + +\endpreamble +\declarepreamble\svgextractpreamble + +svg-extract -- Extract independent graphic files from SVG pictures + +\svgpreamble + +\endpreamble +\askforoverwritefalse +\usedir{tex/latex/svg} +\generate{% + \usepreamble\svgbasepreamble + \file{svg.sty}{% + \from{svg.dtx}{package,option,base}% + \from{svg.dtx}{package,body,base}% + } + \usepreamble\svgextractpreamble + \file{svg-extract.sty}{% + \from{svg.dtx}{package,option,extract}% + \from{svg.dtx}{package,body,extract}% + } +% \usepreamble\defaultpreamble +% \file{svg-old.sty}{% +% \from{svg.dtx}{package,old}% +% } +} +\else +\let\endbatchfile\relax +\fi +\endbatchfile +% +% +% \fi +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \iffalse +%<*driver> +\ifx\ProvidesFile\@undefined\def\ProvidesFile#1[#2]{}\fi +\ProvidesFile{svg.dtx}[% +% +%\NeedsTeXFormat{LaTeX2e} +%\ProvidesPackage{svg}[% +%\ProvidesPackage{svg-extract}[% +%<*driver|package&option> + 2017/03/27 v2.00\space% +% (include SVG pictures)% +% (extract independent graphics from SVG pictures)% +] +% +%<*driver> +\documentclass[english,xindy]{tudscrdoc}[2017/03/27] +\usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}} +\usepackage[T1]{fontenc} +\usepackage{babel} +\KOMAoptions{parskip=half-} +\usepackage{marginnote} + +\usepackage{svg} +\usepackage{svg-extract} +\svgpath{{./examples/}} +\svgsetup{extractpreamble=svg-preamble.tex,clean=true} + +\usepackage{xpatch} +\ifdefined\includesvg + \xpretocmd{\includesvg}{\MakePercentComment}{}{} + \xapptocmd{\includesvg}{\MakePercentIgnore}{}{} +\fi +\ifdefined\includeinkscape + \xpretocmd{\includeinkscape}{\MakePercentComment}{}{} + \xapptocmd{\includeinkscape}{\MakePercentIgnore}{}{} +\fi +\pdfsuppresswarningpagegroup=1 + +\usepackage{listings} +\lstset{% + inputencoding=utf8,extendedchars=true, + literate=% + {ä}{{\"a}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {~}{{\textasciitilde}}1 {ß}{{\ss}}1 +} +\newcommand*\svglstbelowskip{\medskipamount} +\AtBeginDocument{% + \edef\svglstbelowskip{\the\glueexpr\medskipamount-\parskip\relax} +} +\lstdefinestyle{svg}{% +% language=[LaTeX]TeX,% + basicstyle=\small\ttfamily,% + columns=flexible,% + frame=single,% + backgroundcolor=\color{yellow!10},% + xleftmargin=\fboxsep,% + xrightmargin=\fboxsep,% + gobble=2,% + escapechar=§, + belowskip=\svglstbelowskip,% +} +\lstnewenvironment{svgexample}[1][]{% + \lstset{style=svg,#1}% +}{} +\usepackage{enumitem} +\newlist{DescribeValues}{description}{1} +\setlist[DescribeValues]{font=\normalfont\val,style=nextline,noitemsep} + +\usepackage{subcaption} +\usepackage{relsize} + +\usepackage{bookmark} +\usepackage[babel]{microtype} + +%\EnableCrossrefs +\CodelineIndex +\RecordChanges +\GetFileInfo{svg.dtx} +\title{The packages \pkg{svg} and \pkg{svg-extract}} +\author{% + Philip Ilten (2012--2016) \\ + Falk Hanisch (2017--) \\ + \url{https://github.com/mrpiggi/svg} \\ + \mailto{hanisch.latex@outlook.com} +} +\date{\fileversion\nobreakspace(\filedate)} + +\begin{document} + \maketitle + \begin{abstract} + \noindent + The \pkg{svg} package is intended for the automated integration of + SVG~graphics into \LaTeX~documents. Therefor the capabilities provided + by \app{Inkscape}---or more precisely its command line tool---are used + to export the text within a SVG~graphic to a separate file, which is + then rendered by \LaTeX. The two commands \cs{includesvg} and + \cs{includeinkscape} are provided as central user\hbox{-}interface, + which are very similar to the \cs{includegraphics} command of the + \pkg{graphicx} package. + + In addition, the package \pkg{svg-extract} allows the extraction of these + graphics into independent files in different graphic formats, exactly as it + is rendered within the document. For the creation of these graphics in the + well\hbox{-}known formats PDF, EPS and~PS, \LaTeX and possibly conversion + tools shipped with the distribution are used. If the graphics are required + in other file formats, either \app{ImageMagick} or \app{Ghostscript} can be + invoked. + \end{abstract} + \tableofcontents + \DocInput{\filename} +\end{document} +% +% \fi +% +% \changes{v1.0}{2004/11/05}{initial version by Philip Ilten} +% \changes{v2.00}{2016/09/23}{new maintainer: Falk Hanisch} +% \changes{v2.00}{2017/03/27}{re-implementation from scratch} +% \changes{v2.00}{2017/03/27}{package \pkg{subfig} not required anymore} +% \changes{v2.00}{2017/03/27}{% +% support of subfigures stopped due to the huge number of packages which deal +% with this topic and the large variety of implementing this functionality; +% naming exported graphics after their consecutive numbering can't be ensured +% for all variants of subfigures, so it's neglected +% } +% +% +% +% \part{User documentation} +% \section{Introduction} +% +% The open source program \app{Inkscape} has provided an excellent resource for +% the simple and easy creation of images and diagrams using a graphical user +% interface. The work by Johan\,B.\,C.~Engelen has further enhanced the ability +% of \app{Inkscape} to split a SVG~file into a text component that can be +% compiled with \LaTeX, and an image component that can be imported as a +% PDF~file. For further information see the documentation of +% \hrfn{http://www.ctan.org/pkg/svg-inkscape}{\pkg{svg-inkscape} on CTAN}. +% The procedure described therein is taken up and consistently expanded. Thus, +% it is now possible to include a SVG~file into a \LaTeX~document where the +% text within the SVG~graphic will be rendered natively by \LaTeX. +% +% Both packages \pkg{svg} and \pkg{svg-extract} rely heavily upon executing +% commands from the shell using the \cs{ShellEscape} command---or respectively +% the old known \cs{write18}---for executing a variety of commands directly to +% the system. So it is necessary to include the flag \file{-{}-shell-escape} +% when compiling documents using \pkg{svg} and/or \pkg{svg-extract}. The +% executed commands and the possibilities to adapt their invocation with the +% appropriate options are described later on in this documentation. All this is +% done automatically with the \cs{includesvg} command. If you don't want to use +% the \file{-{}-shell-escape} flag, either for security reasons or because +% the export of the SVG~files is done in another way, there's also the command +% \cs{includeinkscape} which includes files already exported by \app{Inkscape}. +% +% An working installation of \app{Inkscape} is required for the automated +% integration of SVG~graphics, whereby the installation path must be +% known to the operating system. This can be checked on shell by typing +% \file{inkscape -V}. Moreover, there are some required packages which are +% loaded by packages \pkg{svg} and \pkg{svg-extract} to provide the +% functionallity. These packages are: +% \begin{description}[parsep=.5\smallskipamount] +% \item[\pkg{scrbase}] +% for the definition and handling of options in key-value-syntax +% \item[\pkg{ifluatex}, \pkg{ifpdf}, \pkg{ifxetex}] +% for flow control depending on the used \LaTeX~engine +% \item[\pkg{pdftexcmds}, \pkg{shellesc}] +% to allocate the same primitives independent of the used \LaTeX~engine +% \item[\pkg{ifplatform}] +% to control the file~access depending on the operating system +% \item[\pkg{graphicx}] +% for including the graphic~files after the \app{Inkscape}~export +% \item[\pkg{xcolor},\pkg{transparent}] +% are possibly needed by the separate \LaTeX~files created by \app{Inkscape} +% \item[\pkg{xr}] +% is used by \pkg{svg-extract} in order to include labels within the +% independent graphic~files +% \end{description} +% +% If you want to pass options to package \pkg{graphicx}, you must either load +% it before package \pkg{svg} +% \begin{svgexample} +% \usepackage§\oarg{options}§{graphicx} +% §\dots§ +% \usepackage§\oarg{options}§{svg} +% \end{svgexample} +% or use \cs{PassOptionsToPackage}. +% \begin{svgexample} +% \PassOptionsToPackage§\marg{options}§{graphicx} +% §\dots§ +% \documentclass§\oarg{options}\marg{class}§ +% §\dots§ +% \usepackage§\oarg{options}§{svg} +% \end{svgexample} +% The usage of packages \pkg{xcolor} and \pkg{transparent} can be switched off +% while loading package \pkg{svg}. See the two options \opt{usexcolor} and +% \opt{usetransparent} below. +% +% +% +% \section{Usage of package \pkg{svg}}\label{sec:inkscape} +% +% The purpose of this package is to include SVG~graphics into a \LaTeX~document. +% The command \cs{includesvg} is defined which does all necessarry steps for +% this task. It first launches the export of a SVG~file to a supported +% file~format with Inkscape, if necessary, and includes the exported +% graphic~file afterwards. The usage and the syntax is quite similiar to the +% command \cs{includegraphics} from the \pkg{graphicx} package. In fact, the +% inclusion of the exported graphic~file is done with \cs{includegraphics}. +% +% \DescribeOptions{usexcolor,usetransparent,noxcolor,notransparent} +% The packages \pkg{xcolor} and \pkg{transparent} are loaded by default at the +% end of package \pkg{svg}. The listed options are intended to prevent these +% packages from loading. They are the only options which have to be given while +% loading the \pkg{svg} package. All supported boolean values +% (\val{true/on/yes/false/off/no}) can be assinged to \opt{usexcolor} and +% \opt{usetransparent}, while \opt{noxcolor} and \opt{notransparent} don't +% accept any value. +% \begin{svgexample} +% \usepackage§\oarg{options}§{svg} +% \end{svgexample} +% +% +% +% \subsection{General settings} +% +% \DescribeMacro{\svgsetup} +% All other options described in detail below can also be changed after loading +% the package either in the preamble or within the document. They don't have to +% be given as optional argument to \cs{usepackage}\oarg{options}|{svg}| but can +% be set by using macro \cs{svgsetup}\marg{options} where \marg{options} is a +% comma separated list of options. Settings with \cs{svgsetup} are done in the +% current scope which means globally or within the current group. +% \begin{svgexample} +% \svgsetup§\marg{options}§ +% \end{svgexample} +% Further, it's possible to reset any setting locally with the optional +% argument of the commands \cs{includesvg}\oarg{options}\marg{svg filename} or +% \cs{includesvg}\oarg{options}\marg{graphic filename}. +% +% \DescribeMacro{\svgpath} +% Most likely you want to organize your SVG~files in a separate folder either +% as a subfolder in the working directory or elsewhere in your local folder +% structure. For this purpose, a list of root paths to SVG~files can be +% specified using the \cs{svgpath} command in the same way as \cs{graphicspath} +% is used. Every path has to be given in a group of braces |{}|---even if there +% is only one---and terminate with |/| last. For example: +% \begin{svgexample} +% \svgpath{{svg/}{/usr/local/svg/}} +% \end{svgexample} +% would cause the system to look first in the subdirectory \file{svg/} and +% afterwards in the absolute path \file{/usr/local/svg/}. Further, if no path +% was specified with \cs{svgpath} or the desired file wasn't found, all +% directories given with \cs{graphicspath} are searched too. Please keep in +% mind that the current working directory is browsed first in any case. It's +% recommended to avoid any spaces and/or quotes respectively \cs{dq} both in +% paths and file~names, espacially when DVI~output is active. +% +% +% +% \subsection{Options for the invocation of \app{Inkscape}} +% +% \DescribeOption{inkscape} +% This option controls, when the export with \app{Inkscape} is invoked and is +% set to \val{true} by default. +% \begin{DescribeValues} +% \item[false/off/no] +% \app{Inkscape} won't be invoked in any case, no export is done. +% \item[\textbf{true}/on/yes/newer/onlynewer] +% The export with \app{Inkscape} will only be done, if the exported +% graphic~file either does not exist or the file~modification date of the +% SVG~file is newer than that of the exported graphic~file. Thus the +% compilation time of the \LaTeX~document can be reduced to the necessary +% minimum. Unfortunately a primitive like \cs{pdffilemoddate} is missing for +% XeTeX, so with this engine, the behaviour will be the same as +% \opt{inkscape}|=|\val{forced}. +% \item[forced/force/overwrite] +% The \app{Inkscape}~export will definitely be done, any already existing +% exported file will overwritten regardlessly. +% \end{DescribeValues} +% +% In addition to controlling the export behavior, the option \opt{inkscape} can +% also be used to make additional settings, which then acts as a wrapper for +% the options described below. +% +% \begin{DescribeValues} +% \item[pdf/eps/ps/png] +% see \opt{inkscapeformat}|=|\val{pdf/eps/ps/png} +% \item[latex/nolatex] +% see \opt{inkscapelatex}|=|\val{true/false} +% \item[drawing/page] +% see \opt{inkscapearea}|=|\val{drawing/page} +% \item[\meta{integer}dpi] +% see \opt{inkscapedpi}|=|\val{\meta{integer}} +% \end{DescribeValues} +% +% \DescribeOption{inkscapepath} +% The option \opt{inkscapepath} specifies, where the resulting files of the +% \app{Inkscape}~export should be located. The subfolder \file{./svg-inkscape/} +% within the current working directory is used by default +% (\opt{inkscapepath}|=|\val{basesubdir}). +% \begin{DescribeValues} +% \item[svgdir/svgpath] +% The PDF/EPS/PS/PNG~graphic~files as well as the \LaTeX~files generated by +% \app{Inkscape} will be located in the same directory as the corresponding +% SVG~file. +% \item[svgsubdir/svgsubpath] +% Within the folder of the encountered SVG~file, all exported files will be +% located in a subfolder named \file{svg-inkscape/}. +% \item[basedir/basepath/jobdir/jobpath] +% All exported files will be located in the current working directory. +% \item[\textbf{basesubdir}/basesubpath/jobsubdir/jobsubpath] +% A subfolder named \file{svg-inkscape/} within the current working directory +% will be used for files generated by \app{Inkscape}. +% \item[/path/to/somewhere/] +% It is also possible to give a custom path, either relative to the current +% working directory (\file{./relative/path/}) or as an absolute path. +% \end{DescribeValues} +% +% \DescribeOption{inkscapeexe} +% For the inclusion of a SVG~file, \app{Inkscape} is used to separate the text +% and image from the SVG~file itself. In order to execute the command line tool +% from shell, the path where the executable is located has to be known to the +% operating system. You can check this by typing \file{inkscape -V} into the +% shell. If this check fails and you don't want to change environment variable +% \file{path} on your OS, you can use option \opt{inkscapeexe} to set the +% absolute path where the executable of \app{Inkscape} is located. The option +% is set to \opt{inkscapeexe}|=|\val{inkscape} by default. +% +% \DescribeOption{inkscapeformat} +% With this option, the \app{Inkscape}~export~format can be controlled. Valid +% values are \val{pdf}, \val{eps}, \val{ps} and \val{png}, where a \LaTeX~export +% is not possible for \val{png} and option \opt{inkscapelatex} won't have any +% effect. By default, \opt{inkscapeformat}|=|\val{pdf} is set unless DVI~output +% was detected. In this case \opt{inkscapeformat}|=|\val{eps} is the default +% setting. +% +% \DescribeOption{inkscapelatex} +% If option \opt{inkscapelatex}|=|\val{true} is set, the output is split into +% a seperate PDF/EPS/PS~file (see option \opt{inkscapeformat}) and a +% corresponding \LaTeX~file. This is the default setting. Setting +% \opt{inkscapelatex}|=|\val{false} will result in a single PDF/EPS/PS~file, +% where any contained text won't be rendered by \LaTeX. +% +% \DescribeOption{inkscapearea} +% This option controls which area of the SVG~file should be exported, +% \val{drawing} is set by default. +% \begin{DescribeValues} +% \item[\textbf{drawing}/crop] +% The area exported corresponds to the bounding box of all objects in a +% drawing, including any that are not on the page. +% \item[page/nocrop] +% The area exported will correspond to the defined page~area within the +% SVG~file. +% \end{DescribeValues} +% +% \DescribeOption{inkscapedpi} +% The resolution used either for PNG~export or for fallback rasterization of +% filtered objects when exporting to PDF/EPS/PS~file. For PNG~export it is set +% to 300\,dpi by default, if no value was given. The given value should be a +% positive integer. The default behaviour can be reversed after a given value +% with \opt{inkscapedpi}|=|\val{\cs{relax}}. +% +% \DescribeOption{inkscapeopt} +% You can use this option to pass additional switches to the \app{Inkscape} +% command line tool. For further information see the documentation of +% \hrfn{https://inkscape.org/de/doc/inkscape-man.html}{\app{Inkscape}}. +% +% +% +% \subsection{Options for the graphic inclusion} +% +% \DescribeOptions{width,height,scale} +% The width of the included graphic~file can be specified via the \opt{width} +% option and the height by the \opt{height} option. If both the width and +% height are specified, the figure won't be distort but scaled such that +% neither of the specified dimensions is exceeded. If \opt{width} and/or +% \opt{height} once have been set, this can be reversed by setting them to +% \val{0pt} or \cs{relax}. +% +% If neither \opt{width} nor \opt{height} are set, the included graphic~file +% can also be scaled by setting \opt{scale} to a positive real number. +% +% \DescribeOptions{pretex,apptex} +% Commands prior and post to the inclusion of the graphic~file may be desired, +% such as font or color commands. The options \opt{pretex} and \opt{apptex} are +% provided where the \LaTeX~code given to \opt{pretex} is included before the +% graphic~file and \opt{apptex} right afterwards. For example, to change the +% size of the included text one could use: +% \begin{svgexample} +% \includsvg[pretex=\tiny,§\meta{additional options}§]§\marg{svg filename}§ +% \end{svgexample} +% +% \DescribeOption{draft} +% This option can be used with booelan values and is equal to the identically +% named option of the \pkg{graphicx} package. If the \opt{draft} option is +% given to \pkg{graphicx}, it's activated for \pkg{svg} as well. +% +% \DescribeOption{lastpage} +% A \hrfn{https://bugs.launchpad.net/ubuntu/+source/inkscape/+bug/1417470}{bug} +% concerning the \LaTeX~export has been reported for \app{Inkscape}~0.91. It +% may happen that within the \LaTeX~file exported by \app{Inkscape}, it is +% attempted to include more pages of the PDF~graphics than actually exist. The +% \pkg{svg} package attempts to bypass the resulting error. +% +% Consequently, the total number of pages is read and only existing PDF~pages +% are included, if both options \opt{inkscapeformat}|=|\val{pdf} and +% \opt{lastpage}|=|\val{true} are set. This is the default setting and can be +% switched off with \opt{lastpage}|=|\val{false}. It's also possible to set the +% number of the last page included of a PDF~graphic manually as optional +% parameter for \cs{includesvg} or \cs{includeinkscape}. For details, see the +% description of the respective commands. +% +% +% +% \subsection{Including SVG~files} +% +% \DescribeMacro{\includesvg} +% The command \cs{includesvg} to include a SVG~file is quite similar to the +% \cs{includegraphics} command provided by the \pkg{graphicx} package. +% \begin{svgexample} +% \includesvg§\oarg{parameters}\marg{svg filename}§ +% \end{svgexample} +% +% \begin{DescribeParameterParent}{Macro}{\includesvg} +% \DescribeParameters{% +% inkscape,inkscapeformat,inkscapelatex,inkscapearea,inkscapedpi,inkscapeopt,% +% width,height,scale,pretex,apptex,draft,% +% } +% It is used right in the same way but where \marg{svg filename} is the +% file~name of the SVG~file, where any given file~extension will be replaced +% with \file{.svg} ruthlessly. If this file is not located in the current +% working directory but elsewhere on your file~system, the command \cs{svgpath} +% could be used to specify this path. It is recommended to avoid any spaces +% and/or quotes respectively \cs{dq} both in paths an file~names. Espacially +% when DVI~output is active using quotes will certainly cause an error. +% +% The command \cs{includesvg} is intended to do an automated export with +% \app{Inkscape} at first, where the given SVG~file is exported to a +% PDF/EPS/PS/PNG~file (see~\opt{inkscapeformat}) and perhaps a correlating +% \LaTeX~file (see~\opt{inkscapelatex}). The export with \app{Inkscape} is only +% invoked, if the SVG~file is newer than the exported graphic~file or latter +% doesn't exist at all.\footnote{\ignorespaces% +% Due to the lack of XeTeX to compare file~modification dates, using this +% \LaTeX~engine leads to \app{Inkscape}~exports with every run unless +% \opt{inkscape}|=|\val{false} is used.% +% }% +% Once the export has been done, the graphic~file and maybe the \LaTeX~file are +% included. +% +% All previously described options can also be used as optional parameters to +% \cs{includesvg} and do have the same effect as described before. However, the +% optional parameters specified have an effect only once when \cs{includesvg} +% is executed and remain unchanged afterwards. +% +% \DescribeParameter{lastpage} +% In addition to the use of boolean values, the parameter \prm{lastpage} can +% also be assigned a specific (integer) page number, which defines the last +% used page of a PDF~graphic. This, just like the identically named option, has +% an effect only when \prm{inkscapeformat}|=|\val{pdf} is set. +% +% \DescribeParameters{angle,origin} +% Both parameters correlate to the identically named parameters of the +% \cs{includegraphics} command provided by the \pkg{graphicx} package. However, +% unlike to \cs{includegraphics}, parameters \prm{angle} and \prm{origin} are +% \emph{always evaluated after} the parameters \prm{widht}, \prm{height} and +% \prm{scale} by \cs{includesvg}, regardless of the used order of the given +% parameters. This is mainly due to the inclusion of the \LaTeX~files +% corresponding to the graphic~files generated by \app{Inkscape}. +% \end{DescribeParameterParent} +% +% \DescribeMacro{\includeinkscape} +% If you don't want to make use of the automated export with \app{Inkscape} but +% the user interface provided by the \pkg{svg} package, you can use +% \cs{includeinkscape} instead of \cs{includesvg}. +% \begin{svgexample} +% \includeinkscape§\oarg{parameters}\marg{graphic filename}§ +% \end{svgexample} +% +% \begin{DescribeParameterParent}{Macro}{\includeinkscape} +% \DescribeParameters{% +% inkscapeformat,inkscapelatex,% +% width,height,scale,pretex,apptex,draft,lastpage,angle,origin,% +% } +% You can use it similar to \cs{includesvg} but \marg{graphic filename} has to +% be the filename of the already exported graphic file. If a valid +% file~extension (\file{.pdf/.eps/.ps/.png}) is given, the current setting for +% \opt{inkscapeformat} is overwritten. It's even possible to specify a +% file~extension like \file{.pdf\_tex} to activate \opt{inkscapelatex}. +% Furthermore, all optional parameters for \cs{includeinkscape} do have the +% same effect as described before for command \cs{includesvg} once when +% \cs{includeinkscape} is executed and remain unchanged afterwards. +% \end{DescribeParameterParent} +% +% +% +% \section{Usage of package \pkg{svg-extract}} +% +% This package allows the extraction of independent graphic~files out of +% SVG~files which have been included and rendered with \LaTeX{} by the +% \pkg{svg} package. This is particularly useful when attempting to provide +% images to journals or collaborators, and one wishes the image to appear +% exactly as it does within the original \LaTeX~document. +% +% In order to extract to PDF, EPS, or PS~files the programs \file{pstoeps}, +% \file{pstopdf} and \file{pdftops} are used which are usually provided by most +% of the \LaTeXe~distributions. In additon, the command line tools of +% \app{ImageMagick} and \app{Ghostscript} can be invoked for converting images +% in formats like PNG, JPG, TIF or something else. It's also possible to create +% PDF, EPS or PS~files with one of the two programs. Therefor the desired +% program---\file{magick} and/or \file{gswin32c}/\file{gswin64c} on Windows +% respectively \file{convert} and/or \file{gs} on unix-like operating +% systems---must be installed. By typing \file{\meta{program} -{}-version} on +% shell, this can be checked. +% +% If you want to extract independent graphic~files from included SVG~files, you +% only have to load \pkg{svg-extract}. All actions for the extraction process +% will be done by using \cs{includesvg} or \cs{includeinkscape}. Without any +% additional settings, the extraction will render the SVG~file to the specified +% output formats(s) of choice using the same settings as specified within the +% two commands. Consequently, the scale between the image and text in the +% extracted files will remain identical to the scale within the document from +% which the SVG~file was extracted. +% +% In contrast to package \pkg{svg}, the console commands for graphic extraction +% are executed with each LaTeX run by package \pkg{svg-extract} when +% \file{-{}-shell-escape} mode is activated. This behaviour can be switched of +% with option \opt{extract}|=|\val{false}. +% +% \minisec{Important changes} +% +% In version~v1.0 of package \pkg{svg} the extracted files were named like the +% numbering of the current \env{subfig} environment by default. As package +% \pkg{subfig} sometime causes problems and because of the large amount of +% different \LaTeX~packages which all provide the possibility to include +% subfigures with very different implemetations, this feature can't be provided +% reliably by \pkg{svg-extract}. See option \opt{extractname} for further +% information. +% +% +% +% \subsection{General settings} +% +% \DescribeOptions{on,off} +% This options have to be given while loading the \pkg{svg-extract} package and +% are intended to toggle the functionality of this package. As both extracting +% and converting independent graphic~files is invoked with every \LaTeX~run +% when \file{-{}-shell-escape} is activated, the option \opt{off} can be given +% to save compilation time, once the creation of all desired images has been +% done and they no longer need to be re-generated. The option \opt{on} can be +% used to reactivate functionality of this package. This can also be done by +% using \opt{extract}|=|\val{true}/\val{false}. +% +% \DescribeMacros{\svgsetup,\includesvg,\includeinkscape} +% All option described below can be used togehter with \cs{svgsetup} and are +% then valid in the current scope. There also exist identically named +% parameters for the optional arguments of +% \begin{svgexample} +% \includesvg§\oarg{parameters}\marg{svg filename}§ +% \includeinkscape§\oarg{parameters}\marg{graphic filename}§ +% \end{svgexample} +% These parameters have an effect only once when the commands are executed and +% remain unchanged afterwards. +% \begingroup +% \renewcommand*\marginpar[2][]{}% +% \begin{DescribeParameterParent}{Macro}{\includesvg} +% \DescribeParameters{% +% extract,extractpreamble,extractformat,extractruns,latexopt,% +% extractwidth,extractheight,extractscale,extractpretex,extractapptex,% +% convert,convertformat,convertdpi,% +% magicksetting,magickoperator,gsopt,gsdevice,% +% clean,exclude,% +% }% +% \end{DescribeParameterParent} +% \begin{DescribeParameterParent}{Macro}{\includeinkscape} +% \DescribeParameters{% +% extract,extractpreamble,extractformat,extractruns,latexopt,% +% extractwidth,extractheight,extractscale,extractpretex,extractapptex,% +% convert,convertformat,convertdpi,% +% magicksetting,magickoperator,gsopt,gsdevice,% +% clean,exclude,% +% }% +% \end{DescribeParameterParent} +% \endgroup +% +% +% +% \subsection{Extract independent grahic files}\label{sec:extract} +% \DescribeOption{extract} +% This option can be used with boolean values. Using \opt{extract}|=|\val{true} +% activates the functionality for both extracting and converting which is the +% default setting, whereas \opt{extract}|=|\val{false} turns it off completely. +% +% \DescribeOption{extractpath} +% The path where the extracted and converted files are located can be specified +% with option \opt{extractpath}, whereas \opt{extractpath}|=|\val{basesubdir} +% is set by default. +% \begin{DescribeValues} +% \item[svgdir/svgpath] +% The extracted and converted independent graphic~files are located in the +% same directory as the corresponding SVG~file. +% \item[svgsubdir/svgsubpath] +% Within the folder of the encountered SVG~file, all extracted and converted +% files will be located in a subfolder named \file{svg-extract/}. +% \item[basedir/basepath/jobdir/jobpath] +% All extracted and converted files will be located in the current working +% directory. +% \item[\textbf{basesubdir}/basesubpath/jobsubdir/jobsubpath] +% A subfolder named \file{svg-extract/} within the current working directory +% will be used for all extracted and converted files. +% \item[/path/to/somewhere/] +% It is also possible to give a custom path, either relative to the current +% working directory (\file{./relative/path/}) or as an absolute path. +% \end{DescribeValues} +% +% \DescribeOption{extractname} +% It's also possible to change the name for extracted and converted files. The +% default setting is \opt{extractname}|=|\val{filenamenumbered}. +% \begin{DescribeValues} +% \item[filename/name] +% The name of the exported \app{Inkscape}~file is used and the suffix +% \file{-extract} is attached. +% \item[\textbf{filenamenumbered}/namenumbered/numberedfilename/numberedname] +% Same as above, but a prefix with the count of extracted files is used +% instead of the suffix. +% \item[numbered/section/numberedsection/sectionnumbered] +% The file name is composed by the number of extracted files and the current +% outline numbering. +% \item[\meta{filename}] +% You can use any file name, a given file extension is ignored. Repeatedly +% specifying the same file name will overwrite previously created files. +% \end{DescribeValues} +% +% \DescribeOption{extractformat} +% The included SVG~file can be extracted from the document into a independent +% graphic~file of type PDF, EPS or PS. The option can be used with either a +% single value (\opt{extractformat}|=|\val{pdf}) or a comma separated list. +% For example, +% \begin{svgexample} +% \includesvg[extractformat={pdf,eps,ps}]§\marg{svg filename}§ +% \end{svgexample} +% will extract the SVG~file to both PDF and EPS~formats and generates two +% independent graphic~files. By default, \opt{extractformat}|=|\val{pdf} is set +% unless DVI~output was detected. In this case \opt{extractformat}|=|\val{eps} +% is the default setting. +% +% \DescribeOptions{% +% extractwidth,extractheight,extractscale,extractpretex,extractapptex,% +% } +% These options can be used to overwrite the settings given for the appearance +% of a SVG~file within the document. For example, a SVG~file should cover the +% entire text width within the document but be extracted to a fixed width, this +% can be done with: +% \begin{svgexample} +% \includesvg[width=\textwidth,extractwidth=500pt]§\marg{svg filename}§ +% \end{svgexample} +% Assigning the value \val{inherit} to one of these options---which is set by +% default---leads to the usage of the corresponding option of package \pkg{svg} +% (\opt{width}/\opt{height}/\opt{scale}/\opt{pretex}/\opt{apptex}), whereas +% \opt{extract\dots}|=|\val{\cs{relax}} can be used to ignore a parent option +% utterly. +% +% \DescribeOptions{extractpreamble,extractpreambleend} +% Within the included and extracted SVG~files any \LaTeX~macro can be used +% either defined by the user---this should be done in the preamble of the +% \LaTeX~document in which the SVG~file is to be included---or provided by a +% package which is loaded. As the extraction process of the SVG~files needs an +% auxiliary \LaTeX~file all used packages and commands have to be known within +% this file. Consequently, the preamble of the current \LaTeX~document is used +% for the extraction of the SVG~file by default. +% +% However, it is possible to specify a different \emph{preamble~file} with the +% option \opt{extractpreamble} where the file to use as the preamble is given +% as the argument---including maybe path, but file~name and file~extension in +% any case. The given preamble file is searched similar to SVG~files meaning, +% every path given with \cs{svgpath} or \cs{graphicspath} is examined. The +% default definition of \opt{extractpreamble} is \file{\cs{jobname}.tex}---more +% precisely the file~extension given by option \opt{latexext} is used---and +% should suffice for most cases. The preamble up to the line defined by the +% option \opt{extractpreambleend} will be used, which is set to a default with +% \cs{begin}|{document}|. +% +% \DescribeMacros{\svghidepreamblestart,\svghidepreambleend} +% In case, the preamble of the current \LaTeX~document is used, there are maybe +% packages included or some parts within the preamble, which should not be used +% within the separate auxiliary \LaTeX~file. These parts can be excluded if +% they are enclosed by \cs{svghidepreamblestart} and \cs{svghidepreambleend}. +% +% For example, your current \LaTeX~document uses package \pkg{showframe} which +% causes some problems with the extraction of independent graphic~files. So you +% want to get rid of it within the auxiliary \LaTeX~file. This can be done with: +% \begin{svgexample} +% \documentclass§\marg{documentclassname}§ +% §\dots§ +% \usepackage{svg-extract} +% §\dots§ +% \svghidepreamblestart +% \usepackage{showframe} +% \svghidepreambleend +% §\dots§ +% \end{svgexample} +% +% \DescribeOption{extractruns} +% When extracting independent grahic~files by compiling the generated auxiliary +% \LaTeX~file, it's maybe necessarry to do multiple \LaTeX~runs on this file. +% The number of runs can be controlled with option \opt{extractruns}. It's set +% to \opt{extractruns}|=|\val{2} by default. +% +% \DescribeOptions{latexexe,latexopt,latexext} +% For the extraction of an independent grahic~file, the \LaTeX~program is used +% which is set by the \opt{latexexe} option. Depending on the \LaTeX~processor +% used for the current \LaTeX~document, it is set to either \app{pdflatex}, +% \app{lualatex}, \app{xelatex} or \app{latex} by default. It's also possible +% to specify additional flags or switches for the \LaTeX~runs, which are +% performed during the extraction process by the \opt{latexopt} option. If you +% are used to utilize a other file~extension for \LaTeX~files than \file{.tex}, +% option \opt{latexext} can be used like \opt{latexext}|=|\val{ltx}. +% +% \DescribeOptions{dvipsopt,pstoepsopt,pstopdfopt,pdftoepsopt,pdftopsopt} +% Depending on the used \LaTeX~processor, the file~type of the extracted +% graphic differs. In order to create all formats, requested with option +% \opt{extractformat}, several converting tools provided by most of the +% \LaTeXe~distributions are maybe invoked. These are \file{dvips}, +% \file{ps2eps}, \file{ps2pdf} and/or \file{pdftops} and can't be changed. It's +% only possible to specify additional switches for every single tool with +% \opt{dvipsopt}, \opt{pstoepsopt}, \opt{pstopdfopt}, \opt{pdftoepsopt} and +% \opt{pdftopsopt}. +% +% \DescribeOption{clean} +% During the extraction process many files are generated for each SVG~file +% extraction. So it's oftentimes desirable to automatically remove these +% temporary files. Using the option \opt{clean}|=|\val{true} will remove any +% generated files created other than the extracted output format(s) requested. +% Setting \opt{clean}|=|\val{false} is useful for debugging and set by default. +% Additionally, it's possible to use option \opt{clean} with a list of +% file~extensions in order to specify auxiliary files generated by package +% \pkg{svg-extract} to be deleted, for example \opt{clean}|=|\val{\{log,aux\}}. +% +% \DescribeOption{exclude} +% Sometimes it may be necessary to extract and/or convert a SVG~file without +% including it. If the flag \opt{exclude} is specified, the SVG~file will not +% be rendered in the current \LaTeX~document, but will be extracted and/or +% converted to the requested output format(s). +% +% +% +% \subsection{Convert extracted grahic files}\label{sec:convert} +% +% Based on the extraction of independent graphic~files, the \pkg{svg-extract} +% packages also provides the possibility to convert those extracted graphics in +% another format than PDF, EPS or PS with either \app{ImageMagick}---which is +% set by default---or \app{Ghostscript}. +% +% \DescribeOption{convert} +% This option can be used to control the invocation of the conversion process. +% By default, \opt{convert}|=|\val{false} is set. For Windows, there exist two +% different versions of \app{Ghostscript}, either 64\,bit or 32\,bit. If +% it is selected as converting tool the 64\,bit~executable is set by default. +% \begin{DescribeValues} +% \item[\textbf{false}/off/no] +% No conversion is done. +% \item[true/on/yes] +% The conversion will be done with the current chosen converting tool. +% \item[magick/imagemagick/convert] +% The conversion is activated and \app{ImageMagick} is selected. +% \item[gs/ghostscript] +% The conversion is activated and \app{Ghostscript} is selected. +% \item[gs64/ghostscript64] +% This value activates \app{Ghostscript} as conversion tool and sets +% \opt{gsexe}|=|\val{gswin64c}. On unix-like operating systems, the value for +% \opt{gsexe} remains unchanged. +% \item[gs32/ghostscript32] +% The same as for the latter case applies, only option +% \opt{gsexe}|=|\val{gswin32c} is set on Windows. +% \end{DescribeValues} +% +% \DescribeOption{convertformat} +% With this option, the desired output format(s) can be given. Multiple graphic +% formats can be specified in a list, for example something like +% \opt{convertformat}|=|\val{\{png,jpg,tif\}}. The value specified in +% \opt{extractformat} is used as the source format for the conversion. If +% \opt{extractformat} itself contains a file~list, the first value within this +% list is considered. If \opt{extractformat} is defined empty, the file +% generated anyway during the extraction is used. +% +% \minisec{Settings for specific converting formats} +% +% Maybe it's desired to apply varying settings for different output formats. +% Therefor some options described below can either be set for all converted +% files or for a specific output format. In particular, these are the options +% \opt{convertdpi} as well as \opt{magicksetting}, \opt{magickoperator}, +% \opt{gsdevice} and \opt{gsopt}. All these mentioned options can be used like +% either \opt{\meta{option}}|=|\val{\meta{value}} or +% \opt{\meta{option}}|=|\val{\{\meta{outputformat}=\meta{value}\}} and even +% \opt{\meta{option}}|=|\val{\{\meta{outputformat}+=\meta{value}\}} where the +% desired output~format is trailed with |+| as inner key. +% +% The first variant is applied to all output formats in general. If one of +% these mentioned options is evaluated and a output format specific value was +% given like in the second variant, the general setting is overwritten. If the +% general setting should be used and extended by an additional output format +% specific settings, then the third variant is to be used. In this case, no +% output format specific setting (second variant) must not have been used. +% +% If you want to reverse any setting, you only have to use \cs{relax} as a +% value, either for a general option (\opt{\meta{option}}|=|\val{\cs{relax}}) +% or a specific one +% (\opt{\meta{option}}|=|\val{\{\meta{outputformat}[+]=\cs{relax}\}}). +% +% \DescribeOption{convertdpi} +% This options controls the used density for all file~formats or a specific one, +% whether \app{ImageMagick} or \app{Ghostscript} is used for the graphic +% conversion. The desired resolution of the converted file is given in dots per +% inch~(DPI) either as a scalar value (e.g.~\opt{convertdpi}|=|\val{600}) or +% with different resolutions in x- and y\hbox{-}direction +% (e.g.~\opt{convertdpi}|=|\val{600x400}). +% +% As described before, it's also possible to declare a specific resolution for +% each desired converting format. For example, you want to set different +% resolution for PNG and JPG~formats and something for all other formats: +% \begin{svgexample} +% \svgsetup{% +% convertdpi={png=600},% +% convertdpi={jpg=150},% +% convertdpi=300% +% }% +% \end{svgexample} +% If a setting for a specific output format is given, any unspecific setting is +% overwritten, when the conversion to this format is done. With +% \opt{convertdpi}|=|\val{\{\meta{outputformat}=\cs{relax}\}} a specific +% setting can be reversed. +% +% Please note that not every graphic format support different resolutions in x- +% and y\hbox{-}direction. So using a value like \opt{convertdpi}|=|\val{600x400} +% may not necessarily lead to the desired result. However, this is then due to +% the used conversion tool and not to the processing of the option. +% +% +% \subsubsection{Settings for the invocation of \app{ImageMagick}} +% +% \DescribeOptions{magickexe,magicksetting,magickoperator} +% The conversion with \app{ImageMagick} via the \file{magick} or \file{convert} +% command-line~tool can be controlled with these options. The option +% \opt{magickexe} determines the used executable and is set to \file{magick} on +% Windows and otherwise to \file{convert} by default. Additionally, there are +% the two options \opt{magicksetting} and \opt{magickoperator} which can be +% used to define \emph{settings} and \emph{operators} for the conversion +% process. As described before, the two options \opt{magicksetting} and +% \opt{magickoperator} can be set for all output formats or a \emph{specific} +% one either resetting or extending the general settings. For further +% information see the documentation of +% \hrfn{http://www.imagemagick.org/script/command-line-processing.php}% +% {\app{ImageMagick} command-line tool}. +% +% +% \subsubsection{Settings for the invocation of \app{Ghostscript}} +% +% \DescribeOptions{gsexe,gsdevice,gsopt} +% The conversion with \app{Ghostscript} is done with command-line~tool \file{gs} +% on unix-like operating systems and \file{gswin64c} or \file{gswin32c} on +% Windows. The executable can be changed with option \opt{gsexe}. Because +% \app{Ghostscript} requires the specification of a device, there are some +% predefined for the most common output formats. These are: +% \begin{svgexample} +% \svgsetup{% +% gsdevice={png=png16m},gsdevice={jpeg=jpeg},gsdevice={jpg=jpeg},% +% gsdevice={tif=tiff48nc},gsdevice={tiff=tiff48nc},% +% gsdevice={eps=eps2write},gsdevice={ps=ps2write}% +% }% +% \end{svgexample} +% Furthermore, with \opt{gsopt} additional switches for \app{Ghostscript} can +% be set. As described before, both \opt{gsdevice} and \opt{gsopt} can be +% defined in general or for specific output formats. For further information +% see the documentation of +% \hrfn{https://ghostscript.com/doc/current/Use.htm}{\app{Ghostscript}}. +% +% +% +% \section{Example} +% +% As an minimal example\footnote{\ignorespaces% +% The image used here is a slightly modified version of the image used in the +% initial documentation on how to include a SVG~file in \LaTeX{} by +% Johan\,B.\,C.~Engelen available as package +% \href{http://www.ctan.org/pkg/svg-inkscape}{\pkg{svg-inkscape} on CTAN}. +% } take the following lines of code: +% \begin{svgexample} +% \documentclass{article} +% \usepackage{selinput}\SelectInputMappings{adieresis={ä},germandbls={ß}} +% \usepackage[T1]{fontenc} +% \usepackage{svg} +% \usepackage[off]{svg-extract} +% \svgsetup{clean=true} +% %\pdfsuppresswarningpagegroup=1 +% \usepackage{relsize} +% \usepackage{subcaption} +% \begin{document} +% \begin{figure} +% \begin{minipage}{.5\linewidth} +% \includesvg[width=\linewidth]{svg-example}% +% \subcaption{This text is too large!} +% \end{minipage}% +% \begin{minipage}{.5\linewidth} +% \includesvg[width=\linewidth,pretex=\relscale{0.6}]{svg-example}% +% \subcaption{This text fits better.} +% \end{minipage} +% \caption{An example figure with \LaTeX~support}\label{fig:example} +% \end{figure} +% \begin{figure}\centering +% \includesvg[% +% width=.5\linewidth,inkscapelatex=false,extractformat={pdf,eps}% +% ]{svg-example}% +% \caption{The same example figure without \LaTeX~support} +% \end{figure} +% \end{document} +% \end{svgexample} +% \begin{figure}[tb] +% \null\hfill\ignorespaces% +% \begin{minipage}{.45\linewidth} +% \includesvg[width=\linewidth]{svg-example}% +% \subcaption{This text is too large!}\label{fig:example-tex-a} +% \end{minipage}\hfill\ignorespaces% +% \begin{minipage}{.45\linewidth} +% \includesvg[width=\linewidth,pretex=\relscale{0.6}]{svg-example}% +% \subcaption{This text fits better.}\label{fig:example-tex-b} +% \end{minipage} +% \hfill\null\ignorespaces% +% \caption{An example figure with \LaTeX~support}\label{fig:example-tex} +% \end{figure} +% \begin{figure}[tb]\centering +% \includesvg[% +% width=.5\linewidth,inkscapelatex=false,extractformat={pdf,eps}% +% ]{svg-example}% +% \caption{The same example figure without \LaTeX~support}\label{fig:example} +% \end{figure} +% +% If you are willing to compile the example, there are two aspects to consider. +% First, the included SVG~file \file{svg-example.svg} has to be located in the +% current folder and is located in \file{\meta{texmf}/doc/latex/svg/examples/}. +% Second, you have to run the desired \LaTeX~engine with +% \file{-{}-shell-escape} option enabled. +% +% The output is shown in \autoref{fig:example-tex} and \autoref{fig:example}. +% Within this example the file \file{svg-example.svg} was included three times +% using the \cs{includesvg} command. +% +% As you can see, \autoref{fig:example-tex-a} is created with default settings, +% except for the width specification. So the \app{Inkscape}~export with +% \LaTeX~support is done as well as the extraction of a independent graphic~file +% in PDF~format as the \pkg{svg-extract} package was loaded. +% +% However, the text is slightly overrunning the margins of the image, and so +% \autoref{fig:example-tex-b}---which again uses the same \app{Inkscape}~export +% results---decreases the font size of the text within the image relative +% using the \prm{pretex} option together with the \cs{relscale} command +% provided by the \pkg{relsize} package. +% +% In \autoref{fig:example} the same SVG~file was used but without the export +% of a separate \LaTeX~file containing all text elements. +% +% Feel free to use this given example to try out all the options and +% possibilities described in \autoref{sec:inkscape} for package \pkg{svg}. +% Especially if you want to use package \pkg{svg-extract} for the automated +% extraction of independent graphics (\autoref{sec:extract}) and their +% conversion to different graphic formats with \app{ImageMagick} and/or +% \app{Ghostscript} (\autoref{sec:convert}), this example can be easily used +% for the first steps. +% +% +% +% \section{Troubleshooting and reporting issues} +% +% When using the packages \pkg{svg} and \pkg{svg-extract}, the most likely +% occurring problems will be caused by calling the external programs. For this +% reason, a short package information is written into the log~file right before +% each call of an external program via shell. If a file should have been +% created, both packages check after the external call, whether this file +% exists or not and raise an error or at least a warning, if this file is +% missing. If you got such a message, please check the log~file for lines like: +% \begin{quote} +% |Package svg Info:| or |Package svg-extract Info:| +% \end{quote} +% Right afterwards, there should appear |runsystem()...excuted.| which +% you should try to execute manually from shell in the right directory. In most +% cases, the problem will be an invalid command call. If something goes wrong +% during the extraction/converting process of package \pkg{svg-extract}, it +% would make sense to set option \opt{clean}|=|\val{false} to not delete any +% auxiliary files that might be needed. +% +% If you are sure that the problem is not caused by the configuration of your +% operating system, you can send an error report either via email or create a +% new issue on GitHub. Both addresses can be found on the title. +% +% \minisec{When using pdf\LaTeX{} there are a lot of warnings} +% +% It may happen that several warnings like +% \begin{quote}\ttfamily\raggedright% +% pdfTeX warning:\,pdflatex.exe(file \meta{filename}.pdf):\,PDF inclusion: +% multiple pdfs with page group included in a single page +% \end{quote} +% occur when including the PDF~graphics exported with \app{Inkscape}. This is +% related to the handling of transparency effects within PDF~files. Since +% pdf\TeX~version 1.40.15 or later, you can get rid of these messages by using +% \cs{pdfsuppresswarningpagegroup}|=|\val{1}. See also the discussion on +% \hrfn{http://tex.stackexchange.com/questions/76273/}{LaTeX Stack Exchange} +% for more information. +% +% +% +% \section{Include SVG files created with \app{ROOT}} +% +% This section was originally written by Philip Ilten. In the hope that since +% then nothing has changed fundamentally in the described procedure, this +% passage remains in the documentation, even if it will almost certainly be +% relevant to experimental particle physicists only, who frequently use the +% analysis package \app{ROOT}. +% +% \app{ROOT} has the ability to export directly to a SVG~file, which means that +% it is possible to completely by-pass all of \app{ROOT}'s internal text +% rendering machinery, and let \LaTeX{} handle the text natively. This means +% that all of the ugly fonts that are rendered by \app{ROOT} can now be +% completely avoided, with the additional bonus of being able to add references +% within plots. So how does one go about using this package with \app{ROOT}? +% \begin{enumerate} +% \item +% Create the plot with \app{ROOT} as normal, but turn off all +% \LaTeX~interpretation of text strings. This is a bit tricky, but can be +% accomplished by setting the font in \app{ROOT} to a precision of zero as +% described in the documentation for +% \hrfn{http://root.cern.ch/root/html/TAttText.html}{\texttt{TAttFill}}. +% Remember that the font is set by using the function +% |(TAttFill*)->SetTextFont(i)| with +% \[\texttt{i}=\textrm{(font type)} \times 10 + \textrm{(font precision)}\] +% In the following lines of code, a |TStyle| is defined which sets the font +% to type ``Courier New'' with a precision of zero. +% \begin{svgexample}[backgroundcolor=\color{red!10}] +% TStyle *style = new TStyle("style","style"); int FONT = 80; +% style->SetTextFont(FONT); +% style->SetLabelFont(FONT,"XYZ"); +% style->SetTitleFont(FONT,"XYZ"); +% style->SetTitleFont(FONT,""); +% gROOT->SetStyle("style"); +% gROOT->ForceStyle(); +% \end{svgexample} +% Now, you can just use the well\hbox{-}known standard \LaTeX~syntax for +% creating labels, etc. Note however, that backslashes have to be escaped due +% to interpretation of special characters by \app{C++}. +% \item Print the plot as a SVG~file. +% \begin{svgexample}[backgroundcolor=\color{red!10}] +% gPad->Print("foo.svg"); +% \end{svgexample} +% \item Include the SVG~file within the document using this package. +% \begin{svgexample} +% \usepackage{svg} +% \usepackage{svg-extract} +% \svgsetup{clean=true} +% §\dots§ +% \includesvg[width=\linewidth]{foo} +% \end{svgexample} +% \end{enumerate} +% +% Consider the following example image produced by \app{ROOT} in +% \autoref{fig:root}. This figure was generated by the \app{ROOT} macro +% \file{root.C}, provided within \file{\meta{texmf}/doc/latex/svg/examples/}, +% which produces the file~\file{root.svg} when run. The code used to produce +% this SVG~file from within \app{ROOT} is +% \lstinputlisting[style=svg,backgroundcolor=\color{red!10}]{examples/root.C} +% where the text produced within the \app{ROOT} plot is set to a precision of +% zero. +% +% The plot was then included within this document using the following +% \LaTeX~code +% \begin{svgexample} +% \begin{figure} +% \centering% +% \includesvg[% +% inkscapearea=page,height=6cm,pretex=\tiny,convertformat=png% +% ]{root}% +% \caption{Rendering of a \app{ROOT} plot---no more \emph{Comic CERNs}}% +% \label{fig:root}% +% \end{figure} +% \end{svgexample} +% \begin{figure} +% \centering% +% \includesvg[% +% inkscapearea=page,height=6cm,pretex=\tiny,convertformat=png% +% ]{root}% +% \caption{Rendering of a \app{ROOT} plot---no more \emph{Comic CERNs}}% +% \label{fig:root}% +% \end{figure} +% which includes the graphic as well as the \LaTeX~file exported by +% \app{Inkscape}, produces the extracted PDF~image~(\file{root.pdf}) and +% converts this to a PNG~image~(\file{root.png}) by using \app{ImageMagick}. +% Enjoy plots from \app{ROOT} with natively rendered \LaTeX! +% +% \StopEventually{\PrintIndex\PrintChanges\PrintToDos} +% +% \iffalse +%<*package&option> +% \fi +% +% +% +% \cleardoublepage +% \appendix +% \part{Implementation} +% \section{Initialization} +% +% The package \pkg{svg} requires \pkg{scrbase} for options processing, the +% packages \pkg{ifluatex}, \pkg{ifpdf} and \pkg{ifxetex} for detecting the +% used \LaTeX~engine, \pkg{pdftexcmds} for pdf\TeX{} primitives when using +% Lua\TeX, \pkg{shellesc} and \pkg{ifplatform} for engine independent access to +% systems commands and files as well as \pkg{graphicx} for the inclusion of +% PDF~files. The usage of packages \pkg{xcolor} and \pkg{transparent} +% can be switched of with the corresponding options. Package \pkg{svg-extract} +% only needs package \pkg{svg} itself. +% \begin{macrocode} +%<*base> +\RequirePackage{scrbase}[2016/06/14] +\RequirePackage{ifxetex}[2010/09/12] +\RequirePackage{ifluatex}[2016/05/16] +\RequirePackage{ifpdf}[2016/05/14] +\RequirePackage{pdftexcmds}[2016/05/21] +\RequirePackage{shellesc}[2016/06/07] +\RequirePackage{graphicx}[1999/02/16] +% +%<*extract> +\RequirePackage{svg}[2017/03/27] +% +% \end{macrocode} +% With the interface provided by package \pkg{scrbase} all options, which can +% be set either as package options or with \cs{svgsetup}, as well as the +% optional parameters for both user commands +% \cs{includesvg}\oarg{parameters}\marg{svg filename} and +% \cs{includeinkscape}\oarg{parameters}\marg{graphic filename} are defined. +% \begin{macrocode} +\DefineFamily{SVG} +\DefineFamilyMember{SVG} +% \end{macrocode} +% \begin{macro}{\svg@deprecated@key} +% With version v2.00 the whole user interface was renewed. For reasons of +% compatibility, outdated options and parameters from version~v1.0 are also +% provided. If an old key was given, a warning is issued and the valid key is +% used. +% \begin{macrocode} +%<*base> +\newcommand*\svg@deprecated@key[3][svg]{% + \PackageWarning{#1}{% + The option key `#2' is deprecated.\MessageBreak% + It's recommended to use `#3'\MessageBreak% + instead% + }% + \FamilyOptions{SVG}{#3}% +} +% +% \end{macrocode} +% \end{macro}^^A \svg@deprecated@key +% \begin{macro}{\svg@tempa} +% \begin{macro}{\svg@tempb} +% \begin{macro}{\if@svg@tempswa} +% \begin{macro}{\svg@tempcnt} +% Internal temporary macros. +% \begin{macrocode} +%<*base> +\newcommand*\svg@tempa{} +\newcommand*\svg@tempb{} +\newif\if@svg@tempswa +\newcount\svg@tempcnt +% +% \end{macrocode} +% \end{macro}^^A \svg@tempcnt +% \end{macro}^^A \if@svg@tempswa +% \end{macro}^^A \svg@tempb +% \end{macro}^^A \svg@tempa +% +% \iffalse +% +%<*package&base> +%<*option> +% \fi +% +% +% +% \section{Including SVG files with package \pkg{svg}} +% \subsection{Options} +% +% Within the exported \LaTeX~files of \app{Inkscape}, some commands are used +% out of additional packages. But maybe the user doesn't want to load this +% packages anyways. +% +% \begin{option}{usexcolor} +% \changes{v2.00}{2017/02/17}{new} +% \begin{option}{noxcolor} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\if@svg@use@xcolor} +% \begin{option}{usetransparent} +% \changes{v2.00}{2017/02/17}{new} +% \begin{option}{notransparent} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\if@svg@use@transparent} +% Options for preventing packages \pkg{xcolor} and \pkg{transparent} to be +% loaded. +% \begin{macrocode} +\newif\if@svg@use@xcolor +\FamilyBoolKey{SVG}{usexcolor}{@svg@use@xcolor} +\DeclareOption{noxcolor}{\FamilyOptions{SVG}{usexcolor=false}} +\newif\if@svg@use@transparent +\FamilyBoolKey{SVG}{usetransparent}{@svg@use@transparent} +\DeclareOption{notransparent}{\FamilyOptions{SVG}{usetransparent=false}} +% \end{macrocode} +% They are only available during the loading process of package \pkg{svg}. +% \begin{macrocode} +\AtEndOfPackage{% + \RelaxFamilyKey{SVG}{usexcolor}% + \RelaxFamilyKey{SVG}{usetransparent}% + \if@svg@use@xcolor% + \RequirePackage{xcolor}[2016/05/11]% + \else% + \AfterPackage*{xcolor}{% + \PackageWarning{svg}{Package `xcolor' was loaded anyway}% + }% + \fi% + \if@svg@use@transparent% + \RequirePackage{transparent}[2016/05/16]% + \else% + \AfterPackage*{transparent}{% + \PackageWarning{svg}{Package `transparent' was loaded anyway}% + }% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@svg@use@transparent +% \end{option}^^A notransparent +% \end{option}^^A usetransparent +% \end{macro}^^A \if@svg@use@xcolor +% \end{option}^^A noxcolor +% \end{option}^^A usexcolor +% +% +% +% \subsubsection{The invocation of \app{Inkscape}} +% +% The Application \app{Inkscape} is used to create includable graphic files in +% a desired format (PDF/EPS/PS/PNG) out of files in SVG~format, whereas the +% support of \LaTeX{} can optionally be used. +% +% \begin{option}{inkscape} +% \changes{v2.00}{2017/02/17}{changed/extended} +% \begin{macro}{\svg@ink@mode} +% The intension of option \opt{inkscape} is to control the running behaviour of +% \app{Inkscape}. It can be switched off at all or invoked only if necessarry +% or the command line call can be forced with every \LaTeX~run. Additionally, +% option \opt{inkscape} can be used as wrapper for options \opt{inkscapeformat}, +% \opt{inkscapelatex}, \opt{inkscapearea} and \opt{inkscapedpi}, which are +% declared later. +% \begin{macrocode} +\newcommand*\svg@ink@mode{} +\DefineFamilyKey{SVG}{inkscape}[true]{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{inkscape}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {force}{2},{forced}{2},{overwrite}{2},% + {pdf}{3},{eps}{4},{ps}{5},{png}{6},% + {drawing}{7},{crop}{7},% + {page}{8},{nocrop}{8},% + {tex}{9},{latex}{9},{exportlatex}{9},{latexexport}{9},% + {notex}{10},{nolatex}{10},{noexportlatex}{10},{nolatexexport}{10},% + {latexnoexport}{10},{raw}{10},{plain}{10},{simple}{10}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifnum\svg@tempa<\thr@@\relax% + \let\svg@ink@mode\svg@tempa% + \else% + \ifcase\svg@tempa\relax\or\or\or% pdf + \FamilyOptions{SVG}{inkscapeformat=pdf}% + \or% eps + \FamilyOptions{SVG}{inkscapeformat=eps}% + \or% ps + \FamilyOptions{SVG}{inkscapeformat=ps}% + \or% png + \FamilyOptions{SVG}{inkscapeformat=png}% + \or% drawing + \FamilyOptions{SVG}{inkscapearea=drawing}% + \or% page + \FamilyOptions{SVG}{inkscapearea=page}% + \or% tex + \FamilyOptions{SVG}{inkscapelatex=true}% + \or% notex + \FamilyOptions{SVG}{inkscapelatex=false}% + \fi% + \fi% +% \end{macrocode} +% It's also possible to set the option \opt{inkscapedpi} by passing a number +% followed by \val{dpi} like \opt{inkscape}|=|\val{300dpi}. +% \begin{macrocode} + \else% dpi + \def\svg@tempa##1dpi##2\@nil{% + \ifstr{##2}{dpi}{\FamilyOptions{SVG}{inkscapedpi=##1}}{}% + }% + \lowercase{\svg@tempa#1dpi\@nil}% +% \end{macrocode} +% In version~v1.0 the option \opt{inkscape} was used to set both the executable +% and options for \app{Inkscape}. This is taken into account here. +% \begin{macrocode} + \ifx\FamilyKeyState\FamilyKeyStateProcessed\else% +% \end{macrocode} +% Splitting executable from options with delimitted macros. After calling +% \cs{svg@tempa} with the given value, the part for the executable is stored in +% \cs{svg@tempa} and the option part---which is recognized by the first |-| +% character--- in \cs{svg@tempb}. +% \begin{macrocode} + \def\svg@tempa##1-##2\@nil{% + \IfArgIsEmpty{##2}{\def\svg@tempb{}}{% + \def\svg@tempa##1####1\@nil{\def\svg@tempb{####1}}% + \svg@tempa#1\@nil% + }% + \def\svg@tempa{##1}% + }% + \svg@tempa#1-\@nil% + \PackageWarning{svg}{% + Setting the executable% + \ifx\svg@tempb\@empty\else% + \space and associated options% + \fi% + \MessageBreak% + for Inkscape should be done with options\MessageBreak% + `inkscapeexe=\svg@tempa'% + \ifx\svg@tempb\@empty\else% + \MessageBreak and `inkscapeopt=\svg@tempb'% + \fi.\MessageBreak% + Nevertheless, this was done by now anyway% + }% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{inkscapeexe=\svg@tempa}% + \ifx\svg@tempb\@empty\else% + \noexpand\FamilyOptions{SVG}{inkscapeopt=\svg@tempb}% + \fi% + }% + \svg@tempa% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@ink@mode +% \end{option}^^A inkscape +% \begin{option}{on} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{off} +% \changes{v2.00}{2017/02/24}{new} +% Package options which can be used to switch functionality on or off during +% the loading of package \pkg{svg}. +% \begin{macrocode} +\DeclareOption{on}{\FamilyOptions{SVG}{inkscape=true}} +\DeclareOption{off}{\FamilyOptions{SVG}{inkscape=false}} +% \end{macrocode} +% \end{option}^^A off +% \end{option}^^A on +% \begin{option}{inkscapeformat} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@ink@format} +% With option \opt{inkscapeformat} the output format of the \app{Inkscape} +% export function, which is called via \cs{ShellEscape}, can be configured. +% It is set to \val{pdf} or, if dvi output could be detected, to \val{eps} +% during initialization. +% \begin{macrocode} +\newcommand*\svg@ink@format{pdf} +\ifxetex\else\ifpdf\else + \renewcommand*\svg@ink@format{eps} +\fi\fi +\DefineFamilyKey{SVG}{inkscapeformat}{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{inkscapeformat}{svg@tempa}{% + {pdf}{0},{eps}{1},{ps}{2},{png}{3}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% latex + \renewcommand*\svg@ink@format{pdf}% + \or% eps + \renewcommand*\svg@ink@format{eps}% + \or% ps + \renewcommand*\svg@ink@format{ps}% + \or% png + \renewcommand*\svg@ink@format{png}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@ink@format +% \end{option}^^A inkscapeformat +% \begin{option}{inkscapelatex} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@ink@latex} +% This options controls whether the \app{Inkscape} export will be invoked with +% or without the generation of a seperate \LaTeX~file. +% \begin{macrocode} +\newif\if@svg@ink@latex +\FamilyBoolKey{SVG}{inkscapelatex}{@svg@ink@latex} +% \end{macrocode} +% \end{macro}^^A \svg@ink@latex +% \end{option}^^A inkscapelatex +% \begin{option}{inkscapearea} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@ink@area} +% The exported area for an \app{Inkscape} graphic can be set with this option. +% \begin{macrocode} +\newcommand*\svg@ink@area{} +\DefineFamilyKey{SVG}{inkscapearea}{% + \FamilySetNumerical{SVG}{inkscapearea}{svg@tempa}{% + {drawing}{0},{crop}{0},% + {page}{1},{nocrop}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% drawing + \renewcommand*\svg@ink@area{-D}% + \else% page + \renewcommand*\svg@ink@area{-C}% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@ink@area +% \end{option}^^A inkscapearea +% \begin{option}{inkscapedpi} +% \changes{v2.00}{2017/02/17}{new} +% \begin{option}{inkscapedensity} +% \begin{macro}{\svg@ink@dpi} +% A density can be chosen, which is used during export with \app{Inkscape} for +% bitmaps and rasterization of filters. +% \begin{macrocode} +\newcommand*\svg@ink@dpi{} +\let\svg@ink@dpi\relax +\DefineFamilyKey{SVG}{inkscapedpi}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \let\svg@ink@dpi\relax% + \FamilyKeyStateProcessed% + }{% + \def\svg@tempa##1dpi##2\@nil{\def\svg@tempa{##1}}% + \lowercase{\svg@tempa#1dpi\@nil}% + \ifnumber{\svg@tempa}{% + \edef\svg@ink@dpi{\svg@tempa}% + \FamilyKeyStateProcessed% + }{}% + }% +} +\DefineFamilyKey{SVG}{inkscapedensity}{\FamilyOptions{SVG}{inkscapedpi=#1}} +% \end{macrocode} +% \end{macro}^^A \svg@ink@dpi +% \end{option}^^A inkscapedensity +% \end{option}^^A inkscapedpi +% \begin{option}{inkscapeexe} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@ink@exe} +% \begin{option}{inkscapeopt} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@ink@opt} +% With these options, the terminal command for invoking \app{Inkscape} as well +% as additional options can be defined. +% \begin{macrocode} +\newcommand*\svg@ink@exe{inkscape} +\DefineFamilyKey{SVG}{inkscapeexe}{% + \renewcommand*\svg@ink@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@ink@opt{} +\DefineFamilyKey{SVG}{inkscapeopt}{% + \renewcommand*\svg@ink@opt{#1}% + \FamilyKeyStateProcessed% +} +% \end{macrocode} +% \end{macro}^^A \svg@ink@opt +% \end{option}^^A inkscapeopt +% \end{macro}^^A \svg@ink@exe +% \end{option}^^A inkscapeexe +% +% +% +% \subsubsection{Setting input folder} +% +% \begin{option}{svgpath} +% \changes{v2.00}{2017/02/12}{deprecated} +% In version~v1.0 setting the path to SVG~files was done via option. So +% this method is provided as well. +% \begin{macrocode} +\DefineFamilyKey{SVG}{svgpath}{% + \PackageWarning{svg}{% + The key `svgpath' is deprecated. It's recommended\MessageBreak% + to use `\string\svgpath' instead% + }% + \ifx\svgpath\@undefined% + \AtEndOfPackage{\svgpath{{#1}}}% + \else% + \svgpath{{#1}}% + \fi% + \FamilyKeyStateProcessed% +} +% \end{macrocode} +% \end{option}^^A svgpath +% +% +% +% \subsubsection{Setting output folder} +% +% \begin{option}{inkscapepath} +% \changes{v2.00}{2017/02/17}{new} +% \begin{option}{inkscapename} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@out@path} +% \begin{macro}{\svg@out@name} +% \begin{macro}{\svg@out@base} +% The option \opt{inkscapepath} controls, in which folder the results of the +% \app{Inkscape} export will be located. With option \opt{inkscapename} the +% name of the exported file itself can be changed. +% \begin{macrocode} +\newcommand*\svg@out@path{} +\newcommand*\svg@out@name{\svg@file@name\svg@file@suffix} +\newcommand*\svg@out@base{\svg@out@path\svg@out@name.\svg@ink@format} +\DefineFamilyKey{SVG}{inkscapepath}{% + \FamilySetNumerical{SVG}{inkscapepath}{svg@tempa}{% + {svgpath}{0},{svgdir}{0},% + {svgsubpath}{1},{svgsubdir}{1},% + {basepath}{2},{basedir}{2},{jobpath}{2},{jobdir}{2},% + {basesubpath}{3},{basesubdir}{3},{jobsubpath}{3},{jobsubdir}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% svgpath + \renewcommand*\svg@out@path{\svg@file@path}% + \or% svgsubpath + \renewcommand*\svg@out@path{\svg@file@path svg-inkscape/}% + \or% basepath + \renewcommand*\svg@out@path{./}% + \or% basesubpath + \renewcommand*\svg@out@path{./svg-inkscape/}% + \fi% + \else% + \renewcommand*\svg@out@path{#1}% + \svg@normalize@path{\svg@out@path}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{inkscapename}{% + \renewcommand*\svg@out@name{#1\svg@file@suffix}% + \FamilyKeyStateProcessed% +} +% \end{macrocode} +% \end{macro}^^A \svg@out@base +% \end{macro}^^A \svg@out@name +% \end{macro}^^A \svg@out@path +% \end{option}^^A inkscapename +% \end{option}^^A inkscapepath +% +% +% +% \subsubsection{Options for the inclusion of graphics} +% +% After the graphic export with \app{Inkscape}, the inclusion of those graphics +% can be controlled with the following options. +% +% \begin{option}{width} +% \begin{macro}{\svg@param@width} +% \begin{option}{height} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@param@width} +% \begin{option}{scale} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\svg@param@scale} +% These options determine the size of the included graphics. The usage of +% \val{\cs{relax}} as value resets the respective option to the default +% behavior. +% \begin{macrocode} +\newcommand*\svg@param@width{\z@} +\DefineFamilyKey{SVG}{width}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@width{\z@}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{width}{\svg@param@width}{#1}% + \ifdim\svg@param@width<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% +} +\newcommand*\svg@param@height{\z@} +\DefineFamilyKey{SVG}{height}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@height{\z@}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{height}{\svg@param@height}{#1}% + \ifdim\svg@param@height<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% +} +\newcommand*\svg@param@scale{1} +\DefineFamilyKey{SVG}{scale}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@scale{1}% + \FamilyKeyStateProcessed% + }{% + \ifisdimension{#1\p@}{% + \ifdim\dimexpr#1\p@\relax>\z@\relax% + \renewcommand*\svg@param@scale{#1}% + \FamilyKeyStateProcessed% + \fi% + }{}% + }% +} +% \end{macrocode} +% \end{macro}^^A \svg@param@scale +% \end{option}^^A scale +% \end{macro}^^A \svg@param@height +% \end{option}^^A height +% \end{macro}^^A \svg@param@width +% \end{option}^^A width +% \begin{option}{pretex} +% \begin{macro}{\svg@param@pretex} +% \begin{option}{apptex} +% \begin{macro}{\svg@param@apptex} +% \begin{option}{postex} +% \changes{v2.00}{2017/03/02}{deprecated} +% For executing code right before or after the graphic inclusion, two hooks are +% defined. +% \begin{macrocode} +\newcommand*\svg@param@pretex{} +\let\svg@param@pretex\relax +\DefineFamilyKey{SVG}{pretex}{% + \svg@ifvalueisrelax{#1}{% + \let\svg@param@pretex\relax% + }{% + \def\svg@param@pretex{#1}% + }% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@param@apptex{} +\let\svg@param@apptex\relax +\DefineFamilyKey{SVG}{apptex}{% + \svg@ifvalueisrelax{#1}{% + \let\svg@param@apptex\relax% + }{% + \def\svg@param@apptex{#1}% + }% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{postex}{% + \svg@deprecated@key{postex=#1}{apptex=#1}% +} +% \end{macrocode} +% \end{option}^^A postex +% \end{macro}^^A \svg@param@apptex +% \end{option}^^A apptex +% \end{macro}^^A \svg@param@pretex +% \end{option}^^A pretex +% \begin{option}{lastpage} +% \changes{v2.00}{2017/02/20}{new} +% \begin{counter}{svg@param@lastpage} +% For \app{Inkscape}~0.91 a bug concerning the \LaTeX~export has been reported +% (\url{https://bugs.launchpad.net/ubuntu/+source/inkscape/+bug/1417470}). +% Sometimes the \LaTeX~file created by \app{Inkscape} tries to include more +% pages than actually are present in the PDF~file. To work around this +% problem, a patch is provided. For this purpose, the total page number is read +% from the PDF~file. +% \begin{macrocode} +\newcounter{svg@param@lastpage} +\DefineFamilyKey{SVG}{lastpage}{% + \FamilySetNumerical{SVG}{lastpage}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},{ignore}{0},% + {true}{1},{on}{1},{yes}{1},{auto}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \FamilySetCounter{SVG}{lastpage}{svg@param@lastpage}{\m@ne}% + \or% true + \FamilySetCounter{SVG}{lastpage}{svg@param@lastpage}{\z@}% + \fi% + \fi% +} +% \end{macrocode} +% \end{counter}^^A svg@param@lastpage +% \end{option}^^A lastpage +% \begin{option}{draft} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\if@svg@draft} +% The option \opt{draft} has the same effect as the eponymous option of package +% \pkg{graphicx}. +% \begin{macrocode} +\newif\if@svg@draft +\FamilyBoolKey{SVG}{draft}{@svg@draft} +\AtBeginDocument{\if@svg@draft\else\ifGin@draft\@svg@drafttrue\fi\fi} +% \end{macrocode} +% \end{macro}^^A \if@svg@draft +% \end{option}^^A draft +% +% +% +% \subsection{Handling path information} +% +% Both packages \pkg{svg} and \pkg{svg-extract} should be able to handle +% user-defined input and output paths. As there is the possibility for users to +% provide paths with or without quotes to \LaTeX, this is taken into account. +% +% \begin{macro}{\svg@quotes@remove} +% \begin{macro}{\svg@quotes@@remove} +% These two commands are used to remove all occurring quotes within a string. +% The only argument passed to \cs{svg@quotes@remove} is not the string itself +% but a macro in which a string is stored. +% \begin{macrocode} +\newcommand*\svg@quotes@remove[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \expandafter\svg@quotes@@remove\svg@tempa""\@nil% + \edef\svg@tempb{% + \endgroup% + \noexpand\def\noexpand#1{\unexpanded\expandafter{\svg@tempa}}% + }% + \svg@tempb% +} +\newcommand*\svg@quotes@@remove{} +\def\svg@quotes@@remove#1"#2"#3\@nil{% + \IfArgIsEmpty{#2}{% + \edef\svg@tempa{#1}% + }{% + \svg@quotes@@remove#1#2#3""\@nil% + }% +} +% \end{macrocode} +% \end{macro}^^A \svg@quotes@@remove +% \end{macro}^^A \svg@quotes@remove +% \begin{macro}{\svg@quotes@check} +% \begin{macro}{\svg@quotes@@check} +% \begin{macro}{\if@svg@quotes@found} +% During the treatment of paths, it may be necessary to temporarily remove +% quotes and, if required, add them again later. For this purpose, the switch +% \cs{if@svg@quotes@found} as well as the commands \cs{svg@quotes@check} and +% \cs{svg@quotes@@check}, which controls the switch, are defined. As before, +% the string is passed in a macro to \cs{svg@quotes@check}. +% \begin{macrocode} +\newif\if@svg@quotes@found +\newcommand*\svg@quotes@check[1]{% + \expandafter\svg@quotes@@check#1"\@nil% +} +\newcommand*\svg@quotes@@check{} +\def\svg@quotes@@check#1"#2\@nil{% + \IfArgIsEmpty{#2}{\@svg@quotes@foundfalse}{\@svg@quotes@foundtrue}% +} +% \end{macrocode} +% \end{macro}^^A \if@svg@quotes@found +% \end{macro}^^A \svg@quotes@@check +% \end{macro}^^A \svg@quotes@check +% \begin{macro}{\svg@normalize@path} +% \begin{macro}{\svg@normalize@@path} +% If any path is given, a trailing slash is needed. These two macros ensure +% that this condition is fulfilled in any case, even if this is not considered +% by the user. As before, a macro containing the path string is passed to +% \cs{svg@normalize@path}. +% \begin{macrocode} +\newcommand*\svg@normalize@path[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@check{\svg@tempa}% + \svg@quotes@remove{\svg@tempa}% + \ifx\svg@tempa\@empty\relax% + \def\svg@tempa{./}% + \fi% + \expandafter\svg@normalize@@path\svg@tempa//\@nil% + \edef\svg@tempb{% + \endgroup% + \if@svg@quotes@found% + \noexpand\def\noexpand#1{"\unexpanded\expandafter{\svg@tempa}"}% + \else% + \noexpand\def\noexpand#1{\unexpanded\expandafter{\svg@tempa}}% + \fi% + }% + \svg@tempb% +} +\newcommand*\svg@normalize@@path{} +\def\svg@normalize@@path#1/#2/\@nil{% + \IfArgIsEmpty{#2}{% + \IfArgIsEmpty{#1}{\def\svg@tempa{}}{\def\svg@tempa{#1/}}% + }{% + \svg@normalize@@path#2/\@nil% + \edef\svg@tempa{#1/\unexpanded\expandafter{\svg@tempa}}% + }% +} +% \end{macrocode} +% \end{macro}^^A \svg@normalize@@path +% \end{macro}^^A \svg@normalize@path +% \begin{macro}{\svg@ifvalueisrelax} +% For some keys the usage of \val{\cs{relax}} as a value should lead to a +% special reaction, such as restoring to default behavior or reseting the key. +% Therefore, \cs{svg@ifvalueisrelax} checks, whether \val{\cs{relax}} was used +% as value or not. +% \begin{macrocode} +\newcommand*\svg@ifvalueisrelax[1]{% + \begingroup% + \def\svg@tempa{#1}% + \def\svg@tempb{\relax}% + \ifx\svg@tempa\svg@tempb\relax% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \svg@ifvalueisrelax +% +% \iffalse +% +%<*body> +% \fi +% +% \begin{macro}{\svg@get@path} +% \begin{macro}{\svg@get@@path} +% \begin{macro}{\if@svg@file@found} +% \begin{macro}{\svg@file@path} +% \begin{macro}{\svg@file@name} +% \begin{macro}{\svg@file@base} +% \begin{macro}{\svg@file@suffix} +% The command \cs{svg@get@path} tries to find a given SVG~file. If the +% searched file wasn't found in the current path, all paths given with +% \cs{svgpath} are evaluated. If there was no appropriate file again, all paths +% given by \cs{graphicspath} are examined. In the last step, a given path +% within the second mandatory argument is browsed. The results for file path +% and name are stored in \cs{svg@file@path} and \cs{svg@file@name} as well as +% the compound of both is saved in \cs{svg@file@base}. +% \begin{macrocode} +\newif\if@svg@file@found +\newcommand*\svg@file@path{} +\newcommand*\svg@file@name{} +\newcommand*\svg@file@base{} +\newcommand*\svg@file@suffix{} +\newcommand*\svg@get@path[3][svg]{% + \begingroup% +% \end{macrocode} +% A maybe given, unneeded file extension is removed. +% \begin{macrocode} + \edef\svg@tempa{#2}% + \svg@quotes@check{\svg@tempa}% + \svg@quotes@remove{\svg@tempa}% + \expandafter\svg@filename@parse\expandafter{\svg@tempa}% + \IfArgIsEmpty{#1}{% + \edef\svg@tempa{\filename@area\filename@base.\filename@ext}% + }{% + \edef\svg@tempa{\filename@area\filename@base.#1}% + }% + \if@svg@quotes@found% + \edef\svg@tempa{"\svg@tempa"}% + \fi% +% \end{macrocode} +% If \cs{svgpath} was used, it is searched first. If nothing was found, +% \cs{graphicspath} is considered if defined followed by a path given in the +% third argument. If nothing was found yet, the standard \cs{input@path} is +% searched last. +% \begin{macrocode} + \@svg@file@foundfalse% + \let\input@path\svg@path% + \svg@get@@path{\svg@tempa}% + \if@svg@file@found\else% + \ifx\Ginput@path\@undefined\else% + \let\input@path\Ginput@path% + \svg@get@@path{\svg@tempa}% + \fi% + \fi% + \IfArgIsEmpty{#3}{}{% + \if@svg@file@found\else% + \ifx#3\@undefined\else% + \edef\svg@tempb{{#3}}% + \let\input@path\svg@tempb% + \svg@get@@path{\svg@tempa}% + \fi% + \fi% + }% + \edef\svg@tempa{% + \endgroup% + \if@svg@file@found% + \noexpand\@svg@file@foundtrue% + \noexpand\def\noexpand\svg@file@path{\filename@area}% + \noexpand\def\noexpand\svg@file@name{\filename@base}% + \noexpand\def\noexpand\svg@file@base{\filename@area\filename@base}% + \else% + \noexpand\@svg@file@foundfalse% + \noexpand\def\noexpand\svg@file@path{}% + \noexpand\def\noexpand\svg@file@name{#2}% + \noexpand\def\noexpand\svg@file@base{#2}% + \fi% + }% + \svg@tempa% +} +% \end{macrocode} +% The macro \cs{svg@get@@path} does the actual search job. +% \begin{macrocode} +\newcommand*\svg@get@@path[1]{% +% The specified file is searched with \cs{IfFileExists}. If the file search was +% succesful, the macro \cs{svg@filename@parse} is called with the result. +% \begin{macrocode} + \expandafter\IfFileExists\expandafter{#1}{% + \@svg@file@foundtrue% + \expandafter\svg@filename@parse\expandafter{\@filef@und}% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \svg@file@suffix +% \end{macro}^^A \svg@file@base +% \end{macro}^^A \svg@file@name +% \end{macro}^^A \svg@file@path +% \end{macro}^^A \if@svg@file@found +% \end{macro}^^A \svg@get@@path +% \end{macro}^^A \svg@get@path +% \begin{macro}{\svg@filename@parse} +% As the internal \LaTeXe{} command \cs{filename@parse} is not able to split a +% given file name containing quotes, \cs{svg@filename@parse} is defined to +% resolve this problem. +% \begin{macrocode} +\newcommand*\svg@filename@parse[1]{% + \begingroup% + \def\svg@tempa##1{% + \def\svg@tempb####1####2\@nil{% + \ifstr{####1}{"}{\def\svg@tempb{####2}}{\def\svg@tempb{####1####2}}% + }% + \expandafter\svg@tempb##1\@nil% + \edef##1{\svg@tempb}% + }% +% \end{macrocode} +% The given path and file is parsed with \cs{filename@parse}. If an extension +% was found, it is appended to the file name for a second parsing run. +% \begin{macrocode} + \filename@parse{#1}% + \ifx\filename@ext\relax\else% + \edef\filename@base{\filename@base.\filename@ext}% + \fi% +% \end{macrocode} +% If there are quotes in the file path, the closing one will be found as first +% character in \cs{filename@base} as \cs{filename@area} is splitted at the last +% slash. This leading quote is removed from \cs{filename@base} with +% \cs{svg@tempa}. +% \begin{macrocode} + \svg@quotes@check{\filename@area}% + \if@svg@quotes@found% + \svg@quotes@remove{\filename@area}% + \edef\filename@area{"\filename@area"}% + \svg@tempa{\filename@base}% + \fi% +% \end{macrocode} +% Before the second call of \cs{filename@parse} remaining quotes are removed +% and the path in \cs{filename@area} is temporary stored in \cs{svg@tempa}. +% \begin{macrocode} + \svg@quotes@check{\filename@base}% + \if@svg@quotes@found% + \svg@quotes@remove{\filename@base}% + \fi% + \let\svg@tempa\filename@area% + \expandafter\filename@parse\expandafter{\filename@base}% + \let\filename@area\svg@tempa% + \if@svg@quotes@found% + \edef\filename@base{"\filename@base"}% + \fi% +% \end{macrocode} +% With \cs{svg@tempa} the group is closed and the results are saved in the +% macros \cs{filename@\dots}. +% \begin{macrocode} + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\def\noexpand\filename@area{\filename@area}% + \noexpand\def\noexpand\filename@base{\filename@base}% + \ifx\filename@ext\relax% + \noexpand\let\noexpand\filename@ext\noexpand\relax% + \else% + \noexpand\def\noexpand\filename@ext{\filename@ext}% + \fi% + }% + \svg@tempa% +} +% \end{macrocode} +% \end{macro}^^A \svg@filename@parse +% \begin{macro}{\svg@file@missing} +% The error message, which is raised, if a file is missing either after the +% export with \app{Inkscape} or in general. +% \begin{macrocode} +\newcommand*\svg@file@missing[3][]{% + \begingroup% + \edef\svg@tempa{#2}% + \expandafter\svg@filename@parse\expandafter{\svg@tempa}% + \svg@quotes@remove{\filename@area}% + \svg@quotes@remove{\filename@base}% + \ifx\filename@ext\relax\else% + \svg@quotes@remove{\filename@ext}% + \fi% + \IfArgIsEmpty{#1}{% + \def\svg@tempa{% + Did you run the export with Inkscape? There's no file\MessageBreak% + `\filename@area\filename@base.\filename@ext'% + }% + }{% + \edef\filename@ext{#1}% + \edef\svg@tempb{#3}% + \ifstr{\svg@tempb}{./}{\let\svg@tempb\@empty}{}% + \ifstr{\filename@area}{./}{\let\filename@area\@empty}{}% + \def\svg@tempa{% + There's no file `\filename@base.\filename@ext'\MessageBreak% + \ifx\filename@area\@empty% + neither in the current directory nor\MessageBreak% + any other searched path given by\MessageBreak% + \string\svgpath% + \ifx\svg@path\@undefined\space\else% + \space(\svg@path)\MessageBreak% + \fi% + or \string\graphicspath% + \ifx\Ginput@path\@undefined\else% + \space(\Ginput@path)% + \fi% + \ifx\svg@tempb\@empty\else% + \MessageBreak or even `inkscapepath' (`\svg@tempb')% + \fi.% + \else% + in folder `\filename@area'.% + \fi% + }% + }% + \PackageError{svg}{% + File `\filename@base.\filename@ext' is missing% + }{\svg@tempa}% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \svg@file@missing +% \begin{macro}{\svg@iffilenewer} +% The macro \cs{svg@iffilenewer} is used to decide, whether the export with +% \app{Inkscape} is necessarry due to an updated SVG~file. This can only be +% done, if \cs{pdf@filemoddate} is definied. Unfortunately this functionality +% isn't provided by Xe\TeX. +% \begin{macrocode} +\ifx\pdf@filemoddate\@undefined + \newcommand*\svg@iffilenewer[2]{\@gobbletwo} +\else + \newcommand*\svg@iffilenewer[2]{% + \begingroup% + \edef\svg@tempa{\pdf@filemoddate{#1}}% + \edef\svg@tempb{\pdf@filemoddate{#2}}% + \ifnum\pdf@strcmp{\svg@tempa}{\svg@tempb}>\z@\relax% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% + } +\fi +% \end{macrocode} +% \end{macro}^^A \svg@iffilenewer +% +% +% +% \subsection{Optional Parameters for user commands} +% +% \begin{macro}{\svg@local@param@set} +% \begin{macro}{\svg@local@param@use} +% \begin{macro}{\svg@local@param@def} +% Most of the package options can also be used as optional parameters for +% \cs{includesvg} or \cs{includeinkscape}. Some of them are overloaded for the +% usage as optional argument and there are some keys, which \emph{only} can be +% used as optional parameters. This is realized in such a way that +% \cs{svg@local@param@use} is extended with \cs{svg@local@param@def} by the +% definition of local keys during the loading of package \pkg{svg}. +% \begin{macrocode} +\newcommand*\svg@local@param@set[1]{% + \svg@local@param@use% + \FamilyOptions{SVG}{#1}% +% \end{macrocode} +% As \cs{svg@local@param@set} is always used in a local group, it is possible +% to set \opt{inkscapelatex} to \val{false}, if the output format was set to +% \val{png} with option \opt{inkscapeformat}. +% \begin{macrocode} + \ifstr{\svg@ink@format}{png}{\FamilyOptions{SVG}{inkscapelatex=false}}{}% +} +\newcommand*\svg@local@param@use{} +\newcommand*\svg@local@param@def[1]{% + \edef\svg@local@param@use{% + \unexpanded\expandafter{\svg@local@param@use}\unexpanded{#1}% + }% +} +\DefineFamilyMember[.param]{SVG} +% \end{macrocode} +% \end{macro}^^A \svg@local@param@def +% \end{macro}^^A \svg@local@param@use +% \end{macro}^^A \svg@local@param@set +% +% +% +% \subsection{User commands} +% +% \begin{macro}{\svgsetup} +% \changes{v2.00}{2017/02/17}{new} +% \begin{macro}{\setsvg} +% \changes{v2.00}{2017/02/17}{deprecated} +% The macro \cs{svgsetup} can be used to change options after loading the +% package \pkg{svg} both in preamble and the document body. For compatibility +% reasons, \cs{setsvg} is also defined. +% \begin{macrocode} +\newcommand*\svgsetup{\FamilyOptions{SVG}} +\newcommand*\setsvg{\FamilyOptions{SVG}} +% \end{macrocode} +% \end{macro}^^A \setsvg +% \end{macro}^^A \svgsetup +% \begin{macro}{\svgpath} +% \changes{v2.00}{2017/02/12}{new} +% \begin{macro}{\svg@path} +% With \cs{svgpath} the user can give several root paths to SVG~files in the +% same way as \cs{graphicspath} is used. The only difference is that a missing +% slash is added at the end of the path, if needed. +% \begin{macrocode} +\newcommand*\svg@path{} +\let\svg@path\input@path +\newcommand*\svgpath[1]{% + \def\svg@tempb{}% + \@tfor\svg@tempa:=#1\do{% + \ifx\svg@tempa\@empty\else% + \svg@normalize@path{\svg@tempa}% + \edef\svg@tempb{\svg@tempb{\svg@tempa}}% + \fi% + }% + \ifx\svg@tempb\@empty\else% + \let\svg@path\svg@tempb% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@path +% \end{macro}^^A \svgpath +% \begin{macro}{\includesvg} +% \changes{v2.00}{2017/02/17}{changes, especially to optional parameters} +% For the inclusion of SVG~files the command \cs{includesvg} is defined. +% \begin{macrocode} +\newcommand*{\includesvg}[2][]{% + \begingroup% +% \end{macrocode} +% Checking for deprecated commands \cs{svgwidth} and \cs{svgscale}. +% \begin{macrocode} + \svg@deprecated@param% +% \end{macrocode} +% \begin{parameter}{inkscape} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{inkscapeformat} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{inkscapelatex} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{inkscapearea} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{inkscapedpi} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{inkscapeopt} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{width} +% \begin{parameter}{height} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{scale} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{pretex} +% \begin{parameter}{apptex} +% \begin{parameter}{draft} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{extract} +% \begin{parameter}{extractpreamble} +% \begin{parameter}{extractformat} +% \begin{parameter}{extractwidth} +% \begin{parameter}{extractheight} +% \begin{parameter}{extractscale} +% \begin{parameter}{extractpretex} +% \begin{parameter}{extractapptex} +% \begin{parameter}{extractruns} +% \begin{parameter}{latexopt} +% \begin{parameter}{convert} +% \begin{parameter}{convertformat} +% \begin{parameter}{convertdpi} +% \begin{parameter}{magicksetting} +% \begin{parameter}{magickoperator} +% \begin{parameter}{gsopt} +% \begin{parameter}{gsdevice} +% \begin{parameter}{clean} +% \begin{parameter}{exclude} +% Most of the optional parameters have the same effect as the identically named +% options. Only parameter \prm{lastpage} is extended (see below). Moreover, +% there are some additional parameters, which can only be used as optional +% argument for \cs{includesvg} (\prm{angle} and \prm{origin}) but not as an +% option. Now all parameters are set in local context (within a group). +% \begin{macrocode} + \svg@local@param@set{#1}% +% \end{macrocode} +% \end{parameter}^^A exclude +% \end{parameter}^^A clean +% \end{parameter}^^A gsdevice +% \end{parameter}^^A gsopt +% \end{parameter}^^A magickoperator +% \end{parameter}^^A magicksetting +% \end{parameter}^^A convertdpi +% \end{parameter}^^A convertformat +% \end{parameter}^^A convert +% \end{parameter}^^A latexopt +% \end{parameter}^^A extractruns +% \end{parameter}^^A extractapptex +% \end{parameter}^^A extractpretex +% \end{parameter}^^A extractscale +% \end{parameter}^^A extractheight +% \end{parameter}^^A extractwidth +% \end{parameter}^^A extractformat +% \end{parameter}^^A extractpreamble +% \end{parameter}^^A extract +% \end{parameter}^^A draft +% \end{parameter}^^A apptex +% \end{parameter}^^A pretex +% \end{parameter}^^A scale +% \end{parameter}^^A height +% \end{parameter}^^A width +% \end{parameter}^^A inkscapeopt +% \end{parameter}^^A inkscapedpi +% \end{parameter}^^A inkscapearea +% \end{parameter}^^A inkscapelatex +% \end{parameter}^^A inkscapeformat +% \end{parameter}^^A inkscape +% The file suffix used by both packages \pkg{svg} and \pkg{svg-extract}. +% \begin{macrocode} + \if@svg@ink@latex% + \def\svg@file@suffix{_svg-tex}% + \else% + \def\svg@file@suffix{_svg-raw}% + \fi% + \@onelevel@sanitize\svg@file@suffix% +% \end{macrocode} +% Searching all given paths for the relevant SVG~file. +% \begin{macrocode} + \svg@get@path{#2}{}% + \if@svg@file@found% +% \end{macrocode} +% Running the export with \app{Inkscape} (if necessarry) and checking the +% required files for graphic inclusion. +% \begin{macrocode} + \svg@ink@run% + \IfFileExists{\svg@out@base}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base}{}% + }% + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base_tex}{}% + }% + \fi% +% \end{macrocode} +% Include the resulting graphic file and maybe extract independent files. +% \begin{macrocode} + \if@svg@file@found% + \svg@input{\svg@out@base}% + \svg@extract{\svg@out@base}% + \fi% + \else% +% \end{macrocode} +% Raise an error, if the requested SVG~file wasn't found. +% \begin{macrocode} + \svg@file@missing[svg]{\svg@file@base}{}% + \fi% + \endgroup% +} +% \end{macrocode} +% \begin{parameter}{lastpage} +% \changes{v2.00}{2017/02/17}{new} +% In addition to the automatic finding of the last page, which is included, it +% can also be given directly as parameter. +% \begin{macrocode} +\svg@local@param@def{% + \FamilyCounterKey[.param]{SVG}{lastpage}{svg@param@lastpage}% +} +% \end{macrocode} +% \end{parameter}^^A lastpage +% \begin{parameter}{angle} +% \changes{v2.00}{2017/02/17}{new} +% \begin{parameter}{origin} +% \changes{v2.00}{2017/02/17}{new} +% The parameters \prm{angle} and \prm{origin} are definied as pendants to the +% keys provided by \cs{includegraphics}. +% \begin{macrocode} +\newcommand*\svg@param@angle{0} +\svg@local@param@def{% + \DefineFamilyKey[.param]{SVG}{angle}{% + \renewcommand*\svg@param@angle{#1}% + \FamilyKeyStateProcessed% + }% +} +\newcommand*\svg@param@origin{c} +\svg@local@param@def{% + \DefineFamilyKey[.param]{SVG}{origin}[c]{% + \renewcommand*\svg@param@origin{#1}% + \FamilyKeyStateProcessed% + }% +} +% \end{macrocode} +% \end{parameter}^^A origin +% \end{parameter}^^A angle +% \end{macro}^^A \includesvg +% \begin{macro}{\includeinkscape} +% \changes{v2.00}{2017/02/23}{new} +% The command \cs{includeinkscape} can be used for including the export results +% of \app{Inkscape}, if this part of the job was done in another way. +% \begin{macrocode} +\newcommand*{\includeinkscape}[2][]{% + \begingroup% +% \end{macrocode} +% Checking for deprecated commands \cs{svgwidth} and \cs{svgscale}. +% \begin{macrocode} + \svg@deprecated@param% +% \end{macrocode} +% The given file extension is examined, where a known extension overwrites the +% current setting for \opt{inkscapeformat}. If there's a suffix \file{\_tex}, +% the option \opt{inkscapelatex} is set to \val{true} by default. +% \begin{macrocode} + \filename@parse{#2}% + \ifx\filename@ext\relax\else% + \svg@quotes@remove{\filename@ext}% + \expandafter\lowercase\expandafter{% + \expandafter\def\expandafter\filename@ext\expandafter{\filename@ext}% + }% + \let\svg@tempb\filename@ext% + \def\svg@tempa##1_tex##2\@nil{\def\svg@tempb{##1}}% + \expandafter\svg@tempa\svg@tempb_tex\@nil% + \@for\svg@tempa:={pdf,eps,ps,png}\do{% + \ifstr{\svg@tempb}{\svg@tempa}{% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{inkscapeformat=\svg@tempb}% + }% + \svg@tempa% + }{}% + }% + \ifstr{\filename@ext}{\svg@ink@format_tex}{% + \FamilyOptions{SVG}{inkscapelatex=true}% + }{}% + \fi% +% \end{macrocode} +% \begin{parameter}{inkscapeformat} +% \begin{parameter}{inkscapelatex} +% \begin{parameter}{width} +% \begin{parameter}{height} +% \begin{parameter}{scale} +% \begin{parameter}{pretex} +% \begin{parameter}{apptex} +% \begin{parameter}{draft} +% \begin{parameter}{lastpage} +% \begin{parameter}{angle} +% \begin{parameter}{origin} +% \begin{parameter}{extract} +% \begin{parameter}{extractpreamble} +% \begin{parameter}{extractformat} +% \begin{parameter}{extractwidth} +% \begin{parameter}{extractheight} +% \begin{parameter}{extractscale} +% \begin{parameter}{extractpretex} +% \begin{parameter}{extractapptex} +% \begin{parameter}{extractruns} +% \begin{parameter}{latexopt} +% \begin{parameter}{convert} +% \begin{parameter}{convertformat} +% \begin{parameter}{convertdpi} +% \begin{parameter}{magicksetting} +% \begin{parameter}{magickoperator} +% \begin{parameter}{gsopt} +% \begin{parameter}{gsdevice} +% \begin{parameter}{clean} +% \begin{parameter}{exclude} +% All parameters which are supported by \cs{includesvg} can also be used with +% \cs{includeinkscape} even if some of them---more precisely those that control +% the export with \app{Inkscape}---don't have an effect at all. Nevertheless, +% they are set right now in local context (within a group). +% \begin{macrocode} + \svg@local@param@set{#1}% +% \end{macrocode} +% \end{parameter}^^A exclude +% \end{parameter}^^A clean +% \end{parameter}^^A gsdevice +% \end{parameter}^^A gsopt +% \end{parameter}^^A magickoperator +% \end{parameter}^^A magicksetting +% \end{parameter}^^A convertdpi +% \end{parameter}^^A convertformat +% \end{parameter}^^A convert +% \end{parameter}^^A latexopt +% \end{parameter}^^A extractruns +% \end{parameter}^^A extractapptex +% \end{parameter}^^A extractpretex +% \end{parameter}^^A extractscale +% \end{parameter}^^A extractheight +% \end{parameter}^^A extractwidth +% \end{parameter}^^A extractformat +% \end{parameter}^^A extractpreamble +% \end{parameter}^^A extract +% \end{parameter}^^A origin +% \end{parameter}^^A angle +% \end{parameter}^^A lastpage +% \end{parameter}^^A draft +% \end{parameter}^^A apptex +% \end{parameter}^^A pretex +% \end{parameter}^^A scale +% \end{parameter}^^A height +% \end{parameter}^^A width +% \end{parameter}^^A inkscapelatex +% \end{parameter}^^A inkscapeformat +% Searching all given paths for the relevant PDF/EPS~file. +% \begin{macrocode} + \expandafter\svg@get@path\expandafter[\svg@ink@format]{#2}{\svg@out@path}% + \if@svg@file@found% +% \end{macrocode} +% Checking the required files for graphic inclusion. +% \begin{macrocode} + \edef\svg@out@name{\svg@file@name}% + \edef\svg@out@base{\svg@file@path\svg@file@name.\svg@ink@format}% + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base_tex}{}% + }% + \fi% +% \end{macrocode} +% Include the resulting graphic file and maybe extract independent files. +% \begin{macrocode} + \if@svg@file@found% + \svg@input{\svg@out@base}% + \svg@extract{\svg@out@base}% + \fi% + \else% +% \end{macrocode} +% Raise an error, if the requested PDF/EPS~file wasn't found. +% \begin{macrocode} + \svg@file@missing[\svg@ink@format]{\svg@file@base}{\svg@out@path}% + \fi% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \includeinkscape +% +% +% +% \subsection{Auxiliary macros} +% +% \begin{macro}{\svg@deprecated@param} +% This macro checks, if \cs{svgwidth} or \cs{svgscale} are defined. In this +% case, the given values are passed to the correlating parameters and a warning +% is raised. +% \begin{macrocode} +\newcommand*\svg@deprecated@param{% + \@svg@tempswafalse% + \ifx\svgwidth\@undefined\else% + \edef\svg@tempa{\noexpand\FamilyOptions{SVG}{width=\svgwidth}}% + \svg@tempa% + \@svg@tempswatrue% + \fi% + \ifx\svgscale\@undefined\else% + \edef\svg@tempa{\noexpand\FamilyOptions{SVG}{scale=\svgscale}}% + \svg@tempa% + \@svg@tempswatrue% + \fi% + \if@svg@tempswa% + \PackageWarning{svg}{% + You should specify the image size with parameters\MessageBreak% + `width' and `height' or `scale' instead of using\MessageBreak% + `\string\svgscale' or `\string\svgwidth'% + }% + \let\svgwidth\@undefined% + \let\svgscale\@undefined% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@deprecated@param +% \begin{macro}{\svg@ink@run} +% \begin{macro}{\if@svg@ink@run} +% The command, which performs the call of \app{Inkscape} via \cs{ShellEscape}. +% \begin{macrocode} +\newif\if@svg@ink@run +\newcommand*\svg@ink@run{% + \ifnum\svg@ink@mode>\z@\relax% + \begingroup% +% \end{macrocode} +% If the mode for \opt{inkscape} was set to \val{forced}, \app{Inkscape} will +% be called in any case. Otherwise, some checks are performed to detect, if a +% run of \app{Inkscape} is actually necessarry. +% \begin{macrocode} + \@svg@ink@runtrue% + \ifnum\svg@ink@mode=\tw@\relax\else% +% \end{macrocode} +% This is the case when the SVG~file is newer than the corresponding exported +% file, or if the latter isn't present at all. +% \begin{macrocode} + \svg@iffilenewer{\svg@file@base.svg}{\svg@out@base}{}{% + \@svg@ink@runfalse% + }% +% \end{macrocode} +% The same is true, when the associated \LaTeX~file is missing. But when this +% file already exists, maybe the user did some changes to this file. In this +% case, overwriting this file is maybe not intended. +% \begin{macrocode} + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{% + \ifnum\pdf@shellescape=\@ne\relax\if@svg@ink@run% + \svg@iffilenewer{\svg@out@base_tex}{\svg@out@base}{% + \@svg@ink@runfalse% + \edef\svg@tempa{\svg@out@base}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg}{% + Since the encountered filedate of file\MessageBreak% + `\svg@tempa_tex' is newer than \MessageBreak% + `\svg@tempa' it's supposed that\MessageBreak% + you customized this file. To avoid an accidental\MessageBreak% + overwriting of this file, the Inkscape export\MessageBreak% + won't be done. If you want to overwrite the\MessageBreak% + existing file please choose the parameter\MessageBreak% + `inkscape=force'% + }% + }{}% + \fi\fi% + }{\@svg@ink@runtrue}% + \fi% + \fi% +% \end{macrocode} +% If all checks were positive, the export with \app{Inkscape} can be done in +% case \file{-{}-shell-escape} is enabled. +% \begin{macrocode} + \if@svg@ink@run% + \ifnum\pdf@shellescape=\@ne\relax% +% \end{macrocode} +% For exporting PNG~files, the used density ist set to \val{300dpi}, if no +% value was given. +% \begin{macrocode} + \ifx\svg@ink@dpi\relax% + \ifstr{\svg@ink@format}{png}{% + \FamilyOptions{SVG}{inkscapedpi=300}% + }{}% + \fi% + \PackageInfo{svg}{% + Calling Inkscape% + \ifx\svg@ink@opt\@empty\else% + \space with added options `\svg@ink@opt'% + \fi% + }% +% \end{macrocode} +% Executing \app{Inkscape} on command line. Afterwards, the export results are +% moved into the given output path. +% \begin{macrocode} + \edef\svg@tempa{\svg@file@base}% + \edef\svg@tempb{\svg@out@name}% + \svg@quotes@remove{\svg@tempa}% + \svg@quotes@remove{\svg@tempb}% + \ShellEscape{\svg@ink@cmd{\svg@tempa}{\svg@tempb}}% + \IfFileExists{\svg@out@name.\svg@ink@format}{% + \edef\svg@tempb{\svg@tempb.\svg@ink@format}% + \svg@quotes@remove{\svg@out@base}% + \svg@shell@mkdir{\svg@out@path}% + \svg@shell@move{\svg@tempb}{\svg@out@base}% + \if@svg@ink@latex% + \svg@shell@move{\svg@tempb_tex}{\svg@out@base_tex}% + \fi% + }{% + \PackageWarning{svg}{% + The export with Inkscape failed for file\MessageBreak% + `\svg@tempa.svg'\MessageBreak% + Troubleshooting: Please check in the log file how\MessageBreak% + the invocation of Inkscape took place and try to\MessageBreak% + execute it yourself in the terminal% + }% + }% +% \end{macrocode} +% If \file{-{}-shell-escape} wasn't enabled, a warning is issued. +% \begin{macrocode} + \else% + \edef\svg@tempa{\svg@file@base}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg}{% + You didn't enable `shell escape' (or `write18')\MessageBreak% + so it wasn't possible to launch the Inkscape export\MessageBreak% + for `\svg@tempa.svg'% + }% + \fi% + \fi% + \endgroup% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \if@svg@ink@run +% \end{macro}^^A \svg@ink@run +% \begin{macro}{\svg@ink@cmd} +% The actual call of \app{Inkscape} at command line. +% \begin{macrocode} +\newcommand*\svg@ink@cmd[2]{% + \svg@ink@exe\space-z\space\svg@ink@area\space% + \ifx\svg@ink@dpi\relax\else--export-dpi=\svg@ink@dpi\space\fi% + \if@svg@ink@latex--export-latex\space\fi% + \svg@ink@opt\space% + --file="#1.svg"\space% + --export-\svg@ink@format="#2.\svg@ink@format"\space% +} +% \end{macrocode} +% \end{macro}^^A \svg@ink@cmd +% \begin{macro}{\svg@get@lastpage} +% This macro is used to circumvent the multiple pages bug for PDF~files of +% \app{Inkscape}~0.91, when the the \LaTeX~export was enabled. For this +% purpose, the total page number is read from the PDF~file. +% \begin{macrocode} +\newcommand*\svg@get@lastpage[1]{% + \ifstr{\svg@ink@format}{pdf}{% + \begingroup% + \svg@tempcnt=\m@ne\relax% + \ifx\XeTeXpdfpagecount\@undefined% + \ifpdf% + \ifx\pdfximage\@undefined% + \ifx\saveimageresource\@undefined\else% + \saveimageresource{#1}% + \svg@tempcnt=\lastsavedimageresourcepages\relax% + \fi% + \else% + \pdfximage{#1}% + \svg@tempcnt=\pdflastximagepages\relax% + \fi% + \fi% + \else% + \svg@tempcnt=\XeTeXpdfpagecount#1\relax% + \fi% + \ifnum\svg@tempcnt=\m@ne\relax% + \PackageWarning{svg}{% + It wasn't possible to detect the last page\MessageBreak% + of `#1'% + }% + \else% + \PackageInfo{svg}{Last page of `#1' is \the\svg@tempcnt}% + \fi% + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\FamilyOptions{SVG}{lastpage=\the\svg@tempcnt}% + }% + \svg@tempa% + }{}% +} +% \end{macrocode} +% \end{macro}^^A \svg@get@lastpage +% \begin{macro}{\svg@wrn@scale} +% The option \opt{scale} respectively the parameter \prm{scale} is only +% considered if the size was not specified. +% \begin{macrocode} +\newcommand*\svg@wrn@scale{% + \ifdim\dimexpr\svg@param@scale\p@\relax=\p@\relax\else% + \@svg@tempswafalse% + \ifdim\svg@param@width>\z@\relax% + \@svg@tempswatrue% + \fi% + \ifdim\svg@param@height>\z@\relax% + \@svg@tempswatrue% + \fi% + \if@svg@tempswa% + \PackageWarning{svg}{% + The parameter `scale' is only considered if neither\MessageBreak% + `width' nor `height' are specified% + }% + \fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@wrn@scale +% \begin{macro}{\svg@input} +% \begin{macro}{\svg@@input} +% With \cs{svg@@input} the export results of \app{Inkscape} are included. The +% macro \cs{svg@input} is defined in order to realize the option \opt{exclude} +% for package \pkg{svg-extract}. +% \begin{macrocode} +\newcommand*\svg@input{\svg@@input} +\newcommand*\svg@@input[2][]{% + \IfArgIsEmpty{#1}{}{\svg@local@param@set{#1}}% + \if@svg@draft% + \@svg@ink@latexfalse% + \fi% +% \end{macrocode} +% If the export with \app{Inkscape} was done with \LaTeX~support enabled, the +% corresponding file will be used together with \cs{input}. The necessary +% patches to environment \env{picture} as well as command \cs{includegraphics} +% are made beforehand with \cs{svg@patches}. +% \begin{macrocode} + \edef\svg@tempa{#2}% + \if@svg@ink@latex% + \svg@patches{\svg@tempa}% + \ifnum\value{svg@param@lastpage}=\z@\relax% + \expandafter\svg@get@lastpage\expandafter{\svg@tempa}% + \fi% + \edef\svg@tempa{% + \ifx\svg@param@pretex\relax\else% + \noexpand\svg@param@pretex% + \fi% + \noexpand\input{\svg@tempa_tex}% + \ifx\svg@param@apptex\relax\else% + \noexpand\svg@param@apptex% + \fi% + }% +% \end{macrocode} +% If a rotation angle was given, the input is done within \cs{rotatebox}. +% \begin{macrocode} + \ifdim\dimexpr\svg@param@angle\p@\relax=\z@\relax% + \svg@tempa% + \else% + \edef\svg@tempb{origin=\svg@param@origin}% + \expandafter\rotatebox\expandafter[\svg@tempb]{\svg@param@angle}{% + \svg@tempa% + }% + \fi% + \else% +% \end{macrocode} +% If the export with \app{Inkscape} was done without \LaTeX~support, the +% resulting graphic file will be included with \cs{includegraphics}. +% \begin{macrocode} + \svg@wrn@scale% + \edef\svg@tempb{keepaspectratio,scale=\svg@param@scale}% + \ifdim\svg@param@height>\z@\relax% + \edef\svg@tempb{\svg@tempb,height=\svg@param@height}% + \fi% + \ifdim\svg@param@width>\z@\relax% + \edef\svg@tempb{\svg@tempb,width=\svg@param@width}% + \fi% + \ifdim\dimexpr\svg@param@angle\p@\relax=\z@\relax\else% + \edef\svg@tempb{% + \svg@tempb,origin=\svg@param@origin,angle=\svg@param@angle% + }% + \fi% + \if@svg@draft% + \edef\svg@tempb{\svg@tempb,draft}% + \else% + \edef\svg@tempb{\svg@tempb,draft=false}% + \fi% + \expandafter\includegraphics\expandafter[\svg@tempb]{\svg@tempa}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@@input +% \end{macro}^^A \svg@input +% +% +% +% \subsection{Patches} +% +% \begin{macro}{\svg@patches} +% For including the export results from \app{Inkscape} with \LaTeX~support +% enabled, there are some patches necessarry for environment \env{picture} and +% \cs{includegraphics}. Those patches are done with \cs{svg@patches}. +% \begin{macrocode} +\newcommand*\svg@patches[1]{% + \let\svg@picture@saved\picture% + \let\picture\svg@picture@patched% + \let\svg@includegraphics@saved\includegraphics% + \let\includegraphics\svg@includegraphics@patched% + \edef\svg@includegraphics@file{#1}% +} +% \end{macrocode} +% \end{macro}^^A \svg@patches +% \begin{macro}{\svg@picture@saved} +% \begin{macro}{\svg@pictur@patched} +% In order to provide the possibility specify the desired width of a graphic, +% the appropriate \cs{unitlength} is calculated at the beginning of the +% \env{picture}~environment. +% \begin{macrocode} +\newcommand*\svg@picture@saved{} +\newcommand*\svg@picture@patched{} +\newcommand*\svg@pictur@patched{} +\long\def\svg@picture@patched#1{\svg@pictur@patched@#1} +\def\svg@pictur@patched@(#1,#2){% + \svg@wrn@scale% +% \end{macrocode} +% If a desired height is present, the resulting \cs{unitlength} is calculated +% with the ratio of the coordinates of the \env{picture}~environment given as +% arguments for x- and y-direction by using \cs{Gscale@div}. With this factor, +% \cs{unitlength}---which is connected to the x-coordinate---can be scaled in a +% suitable manner. +% \begin{macrocode} + \ifdim\svg@param@height>\z@\relax% + \Gscale@div\svg@tempa{#1\p@}{#2\p@}% + \setlength\unitlength{\svg@param@height}% + \setlength\unitlength{\svg@tempa\unitlength}% + \ifdim\svg@param@width>\z@\relax% + \ifdim\unitlength>\svg@param@width\relax% + \setlength\unitlength{\svg@param@width}% + \fi% + \fi% + \else% +% \end{macrocode} +% If no height is given, \cs{unitlength} can be set easily. +% \begin{macrocode} + \ifdim\svg@param@width>\z@\relax% + \setlength\unitlength{\svg@param@width}% + \else% + \setlength\unitlength{\svg@param@scale\unitlength}% + \fi% + \fi% +% \end{macrocode} +% After setting \cs{unitlength}, the \env{picture}~environment can be called +% with its original definition. +% \begin{macrocode} + \svg@picture@saved(#1,#2)% +} +% \end{macrocode} +% \end{macro}^^A \svg@pictur@patched +% \end{macro}^^A \svg@picture@saved +% \begin{macro}{\svg@includegraphics@saved} +% \begin{macro}{\svg@includegraphics@patched} +% \begin{macro}{\svg@includegraphics@file} +% The patch to \cs{includegraphics} is meant to dissolve the \app{Inkscape} bug +% concerning the inclusion of more PDF~pages than actually are existing. +% +% The given optional parameters to \cs{includegraphics} are processed and the +% counter \cnt{svg@param@currpage} is set to the value of a given \prm{page}. +% The value of parameter \prm{width} is ignored. +% \begin{macrocode} +\DefineFamily{SVGpatch} +\DefineFamilyMember{SVGpatch} +\newcounter{svg@param@currpage} +\setcounter{svg@param@currpage}{\m@ne} +\FamilyCounterKey{SVGpatch}{page}{svg@param@currpage} +\DefineFamilyKey{SVGpatch}{width}{\FamilyKeyStateProcessed} +\newcommand*\svg@includegraphics@file{} +\newcommand*\svg@includegraphics@saved{} +\newcommand*\svg@includegraphics@patched[2][]{% + \FamilyOptions{SVGpatch}{#1}% +% \end{macrocode} +% If option \opt{lastpage} was set to \val{false}, each page is included---even +% if it doesn't exist, which may cause errors. +% \begin{macrocode} + \ifnum\value{svg@param@lastpage}<\z@\relax% + \FamilySetCounter{SVGpatch}{page}{svg@param@currpage}{% + \the\value{svg@param@lastpage}% + }% + \fi% +% \end{macrocode} +% Pages are only included, if counter \cnt{svg@param@lastpage} is smaller than +% \cnt{svg@param@currpage}, where \cnt{svg@param@lastpage} was either given as +% a number with parameter \prm{lastpage} or was automatically calculated with +% \cs{svg@get@lastpage}. +% \begin{macrocode} + \ifnum\value{svg@param@currpage}>\value{svg@param@lastpage}\relax\else% +% \end{macrocode} +% A page is included with the original definition of \cs{includegraphics}. All +% optional parameters are passed. +% \begin{macrocode} + \svg@includegraphics@saved[{#1}]{\svg@includegraphics@file}% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svg@includegraphics@file +% \end{macro}^^A \svg@includegraphics@patched +% \end{macro}^^A \svg@includegraphics@saved +% +% \iffalse +% +% +%<*package&option> +% \fi +% +% +% +% \section{Extracting independent graphic files with package \pkg{svg-extract}} +% \subsection{Options} +% +% For package \pkg{svg-extract} the user interface is extended. The following +% options can either be set with \cs{svgsetup} or be used as local optional +% parameters for \cs{includesvg} and \cs{includeinkscape}. +% +% \begin{macro}{\svg@dummy@key} +% If package \pkg{svg-extract} wasn't loaded, the following options are defined +% for package \pkg{svg} in order to raise a warning message. Primarily this is +% done for compatibility reasons. +% \begin{macrocode} +%<*base> +\DefineFamilyMember[.dummy]{SVG} +\newcommand*\svg@dummy@key[2][]{% + \IfArgIsEmpty{#1}{% + \DefineFamilyKey[.dummy]{SVG}{#2}{% + \PackageWarning{svg}{% + The option key `#2' can only\MessageBreak% + be used with package `svg-extract', but\MessageBreak% + you didn't load it% + }% + \FamilyKeyStateProcessed% + }% + }{% + \DefineFamilyKey[.dummy]{SVG}{#2}[{#1}]{% + \PackageWarning{svg}{% + The option key `#2' can only\MessageBreak% + be used with package `svg-extract', but\MessageBreak% + you didn't load it% + }% + \FamilyKeyStateProcessed% + }% + }% +% \end{macrocode} +% Before package \pkg{svg-extract} the given key |#2| of family member |.dummy| +% is relaxed. +% \begin{macrocode} + \BeforePackage{svg-extract}{\RelaxFamilyKey[.dummy]{SVG}{#2}}% +} +% +% \end{macrocode} +% \end{macro}^^A \svg@dummy@key +% +% +% +% \subsubsection{Controlling the extract process} +% +% \begin{option}{extract} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\if@svgx@run} +% With option \opt{extract} it can be controlled, if the extraction of +% independent graphic files should be done. +% \begin{macrocode} +%<*base> +\svg@dummy@key[true]{extract} +% +%<*extract> +\newif\if@svgx@run +\DefineFamilyKey{SVG}{extract}[true]{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{extract}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {overwrite}{1},{force}{1},{forced}{1},% + {pdf}{2},{eps}{3},{ps}{4}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \@svgx@runfalse% + \or% true + \@svgx@runtrue% + \or% pdf + \FamilyOptions{SVG}{extractformat=pdf}% + \or% eps + \FamilyOptions{SVG}{extractformat=eps}% + \or% ps + \FamilyOptions{SVG}{extractformat=ps}% + \fi% + \fi% +} +% +% \end{macrocode} +% \end{macro}^^A \if@svgx@run +% \end{option}^^A extract +% \begin{option}{on} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{off} +% \changes{v2.00}{2017/02/24}{new} +% Package options which can be used to switch functionality on or off during +% the loading of package \pkg{svg-extract}. +% \begin{macrocode} +%<*extract> +\DeclareOption{on}{\FamilyOptions{SVG}{extract=true}} +\DeclareOption{off}{\FamilyOptions{SVG}{extract=false}} +% +% \end{macrocode} +% \end{option}^^A off +% \end{option}^^A on +% \begin{option}{extractformat} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@format} +% \begin{option}{pdf} +% \changes{v2.00}{2017/03/02}{deprecated} +% \begin{option}{eps} +% \changes{v2.00}{2017/03/02}{deprecated} +% Option \opt{extractformat} controls the output format (\val{pdf/eps/ps}). It +% is set to \val{pdf} or, if dvi output could be detected, to \val{eps} during +% initialization. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractformat} +\svg@dummy@key[true]{pdf} +\svg@dummy@key[true]{eps} +% +%<*extract> +\newcommand*\svgx@format{pdf} +\ifxetex\else\ifpdf\else + \renewcommand*\svgx@format{eps} +\fi\fi +\DefineFamilyKey{SVG}{extractformat}{% + \lowercase{\edef\svgx@format{#1}}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdf}[true]{% + \FamilySetBool{SVG}{pdf}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{pdf}{\svgx@format}{}{% + \edef\svgx@format{\svgx@format,pdf}% + }% + \svg@deprecated@key{pdf}{extractformat={\svgx@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +\DefineFamilyKey{SVG}{eps}[true]{% + \FamilySetBool{SVG}{eps}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{eps}{\svgx@format}{}{% + \edef\svgx@format{\svgx@format,eps}% + }% + \svg@deprecated@key{eps}{extractformat={\svgx@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +% +% \end{macrocode} +% \end{option}^^A eps +% \end{option}^^A pdf +% \end{macro}^^A \svgx@format +% \end{option}^^A extractformat +% \begin{option}{extractpreamble} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{preamble} +% \changes{v2.00}{2017/02/24}{deprecated} +% \begin{macro}{\svgx@preamble} +% \begin{option}{extractpreambleend} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{end} +% \changes{v2.00}{2017/02/24}{deprecated} +% \begin{macro}{\svgx@endpreamble} +% For the extraction process, a preamble is necessarry for a separate auxiliary +% \LaTeX~file. By default, the preamble of the main document is used, which end +% is detected at \cs{begin}|{document}|. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractpreamble} +\svg@dummy@key{preamble} +\svg@dummy@key{extractpreambleend} +\svg@dummy@key{end} +% +%<*extract> +\newcommand*\svgx@preamble{\jobname.\svgx@latex@ext}% +\DefineFamilyKey{SVG}{extractpreamble}{% + \renewcommand*\svgx@preamble{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{preamble}{% + \svg@deprecated@key[svg-extract]{preamble=#1}{extractpreamble=#1}% +} +\newcommand*\svgx@endpreamble{} +\expandafter\def\expandafter\svgx@endpreamble\expandafter{% + \csname begin\endcsname{document}% +} +\DefineFamilyKey{SVG}{extractpreambleend}{% + \renewcommand*\svgx@endpreamble{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{end}{% + \svg@deprecated@key[svg-extract]{end=#1}{extractpreambleend=#1}% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@endpreamble +% \end{option}^^A end +% \end{option}^^A extractpreambleend +% \end{macro}^^A \svgx@preamble +% \end{option}^^A preamble +% \end{option}^^A extractpreamble +% \begin{option}{extractruns} +% \changes{v2.00}{2017/02/24}{new} +% \begin{counter}{svgx@runs} +% With this option, the number of \LaTeX~runs for the separate auxiliary file +% can be set. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractruns} +% +%<*extract> +\newcounter{svgx@runs} +\DefineFamilyKey{SVG}{extractruns}{% + \FamilySetCounter{SVG}{extractruns}{svgx@runs}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifnum\value{svgx@runs}<\@ne\relax% + \PackageWarning{svg-extract}{% + The count for runs has to be at least one% + }% + \FamilySetCounter{SVG}{extractruns}{svgx@runs}{\@ne}% + \fi% + \fi% +} +% +% \end{macrocode} +% \end{counter}^^A svgx@runs +% \end{option}^^A extractruns +% \begin{option}{latexexe} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{pdflatex} +% \changes{v2.00}{2017/02/24}{deprecated} +% \begin{macro}{\svgx@latex@exe} +% \begin{option}{latexext} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@latex@ext} +% \begin{option}{latexopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@latex@opt} +% The command and facultative options for the \LaTeX~call of the separate +% auxiliary file. The default is set according to the currently used compiler. +% \begin{macrocode} +%<*base> +\svg@dummy@key{latexexe} +\svg@dummy@key{pdflatex} +\svg@dummy@key{latexext} +\svg@dummy@key{latexopt} +% +%<*extract> +\ifxetex + \newcommand*\svgx@latex@exe{xelatex} +\else\ifluatex + \ifpdf + \newcommand*\svgx@latex@exe{lualatex} + \else + \newcommand*\svgx@latex@exe{lualatex --output-format=dvi} + \fi +\else\ifpdf + \newcommand*\svgx@latex@exe{pdflatex} +\else + \newcommand*\svgx@latex@exe{latex} +\fi\fi\fi +\DefineFamilyKey{SVG}{latexexe}{% + \renewcommand*\svgx@latex@exe{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdflatex}{% + \svg@deprecated@key[svg-extract]{pdflatex=#1}{latexexe=#1}% +} +\newcommand*\svgx@latex@ext{tex} +\DefineFamilyKey{SVG}{latexext}{% + \renewcommand*\svgx@latex@ext{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@latex@opt{} +\DefineFamilyKey{SVG}{latexopt}{% + \renewcommand*\svgx@latex@opt{#1}% + \FamilyKeyStateProcessed% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@latex@opt +% \end{option}^^A latexopt +% \end{macro}^^A \svgx@latex@ext +% \end{option}^^A latexext +% \end{macro}^^A \svgx@latex@exe +% \end{option}^^A latexexe +% \end{option}^^A pdflatexexe +% \begin{option}{dvipsopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@dvips@exe} +% \begin{macro}{\svgx@dvips@opt} +% \begin{option}{pstoepsopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@pstoeps@exe} +% \begin{macro}{\svgx@pstoeps@opt} +% \begin{option}{pstopdfopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@pstopdf@exe} +% \begin{macro}{\svgx@pstopdf@opt} +% \begin{option}{pdftoepsopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@pdftoeps@exe} +% \begin{macro}{\svgx@pdftoeps@opt} +% \begin{option}{pdftopsopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@pdftops@exe} +% \begin{macro}{\svgx@pdftops@opt} +% \begin{option}{pdftops} +% \changes{v2.00}{2017/02/24}{deprecated} +% Options and macros for calling convert commands, which are supplied by most +% \LaTeXe~distributions. These are used to generate all files, which are +% supported by option \opt{extractformat}, as they don't need an additional +% application. +% \begin{macrocode} +%<*base> +\svg@dummy@key{dvipsopt} +\svg@dummy@key{pstoepsopt} +\svg@dummy@key{pstopdfopt} +\svg@dummy@key{pdftoepsopt} +\svg@dummy@key{pdftopsopt} +\svg@dummy@key{pdftops} +% +%<*extract> +\newcommand*\svgx@dvips@exe{dvips} +\newcommand*\svgx@dvips@opt{} +\DefineFamilyKey{SVG}{dvipsopt}{% + \renewcommand*\svgx@dvips@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pstoeps@exe{ps2eps} +\newcommand*\svgx@pstoeps@opt{-B -C} +\DefineFamilyKey{SVG}{pstoepsopt}{% + \renewcommand*\svgx@pstoeps@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pstopdf@exe{ps2pdf} +\newcommand*\svgx@pstopdf@opt{} +\DefineFamilyKey{SVG}{pstopdfopt}{% + \renewcommand*\svgx@pstopdf@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pdftoeps@exe{pdftops -eps} +\newcommand*\svgx@pdftoeps@opt{} +\DefineFamilyKey{SVG}{pdftoepsopt}{% + \renewcommand*\svgx@pdftoeps@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pdftops@exe{pdftops} +\newcommand*\svgx@pdftops@opt{} +\DefineFamilyKey{SVG}{pdftopsopt}{% + \renewcommand*\svgx@pdftops@opt{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdftops}{% + \PackageWarning{#1}{% + The option key `pdftops' is deprecated.\MessageBreak% + You should use either `pdftoepsopt' or\MessageBreak% + `pdftopsopt' instead. See the manual for\MessageBreak% + more. Nothing was done% + }% + \FamilyKeyStateProcessed +} +% +% \end{macrocode} +% \end{option}^^A pdftops +% \end{macro}^^A \svgx@pdftops@opt +% \end{macro}^^A \svgx@pdftops@exe +% \end{option}^^A pdftopsopt +% \end{macro}^^A \svgx@pdftoeps@opt +% \end{macro}^^A \svgx@pdftoeps@exe +% \end{option}^^A pdftoepsopt +% \end{macro}^^A \svgx@pstopdf@opt +% \end{macro}^^A \svgx@pstopdf@exe +% \end{option}^^A pstopdfopt +% \end{macro}^^A \svgx@pstoeps@opt +% \end{macro}^^A \svgx@pstoeps@exe +% \end{option}^^A pstoepsopt +% \end{macro}^^A \svgx@dvips@opt +% \end{macro}^^A \svgx@dvips@exe +% \end{option}^^A dvipsopt +% +% +% +% \subsubsection{Invoking external application for graphic conversion} +% +% Besides the use of a conversion tool supplied by \LaTeXe, the applications +% \app{ImageMagick} and \app{Ghostscript} can be used for converting graphics. +% +% \begin{option}{convert} +% \changes{v2.00}{2017/02/24}{changed/extended} +% \begin{macro}{\if@svgx@cnv@run} +% \begin{macro}{\svgx@cnv@cmd} +% The option \opt{convert} can be used to define, which of both applications +% should be use. \app{ImageMagick} is set by default. +% \begin{macrocode} +%<*base> +\svg@dummy@key[true]{convert} +% +%<*extract> +\newif\if@svgx@cnv@run +\newcommand*\svgx@cnv@cmd{} +\DefineFamilyKey{SVG}{convert}[true]{% + \FamilySetNumerical{SVG}{convert}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {overwrite}{1},{force}{1},{forced}{1},% + {magick}{2},{imagemagick}{2},{convert}{2},% + {gs}{3},{ghostscript}{3},% + {gs64}{4},{ghostscript64}{4},% + {gs32}{5},{ghostscript32}{5}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \@svgx@cnv@runfalse% + \or% true + \@svgx@cnv@runtrue% + \or% magick + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@magick@cmd}% + \or% gs + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \or% gs64 + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \svgx@onlywindows{% + \renewcommand*\svgx@gs@exe{gswin64c}% + }% + \or% gs32 + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \svgx@onlywindows{% + \renewcommand*\svgx@gs@exe{gswin32c}% + }% + \fi% +% \end{macrocode} +% In version~v1.0 the option \opt{convert} was used to set both the executable +% and options for the conversion application, meant for the usage of +% \app{ImageMagick}. This is taken into account here. +% \begin{macrocode} + \else% +% \end{macrocode} +% Same doing like with option \opt{inkscape}. +% \begin{macrocode} + \def\svg@tempa##1-##2\@nil{% + \IfArgIsEmpty{##2}{\def\svg@tempb{}}{% + \def\svg@tempa##1####1\@nil{\def\svg@tempb{####1}}% + \svg@tempa#1\@nil% + }% + \def\svg@tempa{##1}% + }% + \svg@tempa#1-\@nil% + \PackageWarning{svg-extract}{% + Setting the executable% + \ifx\svg@tempb\@empty\else% + \space and associated options% + \fi% + \MessageBreak% + for ImageMagick should be done with options\MessageBreak% + `magickexe=\svg@tempa'% + \ifx\svg@tempb\@empty\else% + \MessageBreak and `magicksetting' and/or `magickoperator'% + \fi.\MessageBreak% + Nevertheless, this was done by now% + \ifx\svg@tempb\@empty\else% + , whereby \MessageBreak `magicksetting=\svg@tempb' was used% + \fi% + }% + \FamilyOptions{SVG}{convert=magick}% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{magickexe=\svg@tempa}% + \ifx\svg@tempb\@empty\else% + \noexpand\FamilyOptions{SVG}{magicksetting=\svg@tempb}% + \fi% + }% + \svg@tempa% + \fi% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@cnv@cmd +% \end{macro}^^A \if@svgx@cnv@run +% \end{option}^^A convert +% \begin{option}{convertformat} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@cnv@format} +% \begin{option}{png} +% \changes{v2.00}{2017/03/02}{deprecated} +% Option \opt{convertformat} controls the output format for converted files. It +% is set to \val{png} by default. +% \begin{macrocode} +%<*base> +\svg@dummy@key{convertformat} +\svg@dummy@key[true]{png} +% +%<*extract> +\newcommand*\svgx@cnv@format{png} +\DefineFamilyKey{SVG}{convertformat}{% + \lowercase{\edef\svgx@cnv@format{#1}}% + \ifx\svgx@cnv@format\@empty\else% + \@svgx@cnv@runtrue% + \fi% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{png}[true]{% + \FamilySetBool{SVG}{png}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{png}{\svgx@cnv@format}{}{% + \edef\svgx@cnv@format{\svgx@cnv@format,png}% + }% + \svg@deprecated@key{png}{convertformat={\svgx@cnv@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +% +% \end{macrocode} +% \end{option}^^A png +% \end{macro}^^A \svgx@cnv@format +% \end{option}^^A convertformat +% \begin{option}{convertdpi} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{convertdensity} +% \begin{macro}{\svgx@cnv@dpi} +% The option \opt{convertdpi} is meant to define the used density during the +% conversion process. It can be set either for all designated output formats or +% targeted for a specific format. It's also possible to use something like +% \val{500x300}. Given values are resolved by \cs{svgx@cnv@get@dpi}. It's used +% like \opt{convertdpi}|=|\val{300} or \opt{convertdpi}|=|\val{\{png=600\}} If +% the option is used for a specific or for all output formats is recocnized by +% \cs{svgx@ifkeyandval}. +% \begin{macrocode} +%<*base> +\svg@dummy@key{convertdpi} +\svg@dummy@key{convertdensity} +% +%<*extract> +\newcommand*\svgx@cnv@dpi{} +\let\svgx@cnv@dpi\relax +\DefineFamilyKey{SVG}{convertdpi}{% + \FamilyKeyStateUnknownValue% + \svgx@ifkeyandval{#1}{% + \svgx@cnv@get@dpi{##2}% + \ifx\svg@tempa\relax\else% + \expandafter\edef\csname svgx@cnv@dpi@##1\endcsname{\svg@tempa}% + \FamilyKeyStateProcessed% + \fi% + }{% + \svgx@cnv@get@dpi{##1}% + \ifx\svg@tempa\relax\else% + \edef\svgx@cnv@dpi{\svg@tempa}% + \FamilyKeyStateProcessed% + \fi% + }% +} +\DefineFamilyKey{SVG}{convertdensity}{\FamilyOptions{SVG}{convertdpi=#1}} +% +% \end{macrocode} +% \end{macro}^^A \svgx@cnv@dpi +% \end{option}^^A convertdensity +% \end{option}^^A convertdpi +% \begin{option}{magickexe} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@magick@exe} +% \begin{option}{magicksetting} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@magick@set} +% \begin{option}{magickoperator} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@magick@opr} +% Setting the command including maybe the path to \app{ImageMagick}. The keys +% \opt{magicksetting} and \opt{magickoperator} should be used to add optional +% arguments before (\emph{Settings}) or after (\emph{Operators}) the input +% file. They can either be set for all or a specific output format as like +% option \opt{convertdpi}. For this \cs{svgx@setformatkey} is used. +% \begin{macrocode} +%<*base> +\svg@dummy@key{magickexe} +\svg@dummy@key{magicksetting} +\svg@dummy@key{magickoperator} +% +%<*extract> +\newcommand*\svgx@magick@exe{} +\DefineFamilyKey{SVG}{magickexe}{% + \renewcommand*\svgx@magick@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@magick@set{} +\DefineFamilyKey{SVG}{magicksetting}{% + \svgx@setformatkey{#1}{svgx@magick@set}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@magick@opr{} +\DefineFamilyKey{SVG}{magickoperator}{% + \svgx@setformatkey{#1}{svgx@magick@opr}% + \FamilyKeyStateProcessed% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@magick@opr +% \end{option}^^A magickoperator +% \end{macro}^^A \svgx@magick@set +% \end{option}^^A magicksetting +% \end{macro}^^A \svgx@magick@exe +% \end{option}^^A magickexe +% \begin{option}{gsexe} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@gs@exe} +% \begin{option}{gsopt} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@gs@opt} +% \begin{option}{gsdevice} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svgx@gs@device} +% Options to set the command including maybe the path to \app{Ghostscript}. As +% \app{Ghostscript} needs a specific device defined for different output +% formats, the option \opt{gsdevice} can be used. It can either be set for all +% or a specific output format just like \opt{gsopt} in the same manner like +% option \opt{convertdpi}. +% \begin{macrocode} +%<*base> +\svg@dummy@key{gsexe} +\svg@dummy@key{gsopt} +\svg@dummy@key{gsdevice} +% +%<*extract> +\newcommand*\svgx@gs@exe{} +\DefineFamilyKey{SVG}{gsexe}{% + \renewcommand*\svgx@gs@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@gs@opt{} +\DefineFamilyKey{SVG}{gsopt}{% + \svgx@setformatkey{#1}{svgx@gs@opt}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@gs@device{} +\DefineFamilyKey{SVG}{gsdevice}{% + \svgx@setformatkey{#1}{svgx@gs@device}% + \FamilyKeyStateProcessed% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@gs@device +% \end{option}^^A gsdevice +% \end{macro}^^A \svgx@gs@opt +% \end{option}^^A gsopt +% \end{macro}^^A \svgx@gs@exe +% \end{option}^^A gsexe +% +% +% +% \subsubsection{Setting output folder} +% +% \begin{option}{extractpath} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{path} +% \changes{v2.00}{2017/02/24}{deprecated} +% \begin{option}{extractname} +% \changes{v2.00}{2017/02/24}{new} +% \begin{option}{name} +% \changes{v2.00}{2017/02/24}{deprecated} +% \changes{v2.00}{2017/02/24}{support of \pkg{subfig} removed} +% \begin{macro}{\svgx@out@path} +% \begin{macro}{\svgx@out@name} +% \begin{macro}{\if@svgx@out@sec} +% \begin{counter}{svgx@out@count} +% The option \opt{extractpath} controls, in which folder the results both of +% the extraction as well as the conversion of \app{ImageMagick} or +% \app{Ghostscript} will be located. With option \opt{extractname} the +% name of the extracted and maybe converted file itself can be changed. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractpath} +\svg@dummy@key{path} +\svg@dummy@key{extractname} +\svg@dummy@key{name} +% +%<*extract> +\newcommand*\svgx@out@path{} +\DefineFamilyKey{SVG}{extractpath}{% + \FamilySetNumerical{SVG}{extractpath}{svg@tempa}{% + {svgpath}{0},{svgdir}{0},% + {svgsubpath}{1},{svgsubdir}{1},% + {basepath}{2},{basedir}{2},{jobpath}{2},{jobdir}{2},% + {basesubpath}{3},{basesubdir}{3},{jobsubpath}{3},{jobsubdir}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% svgpath + \renewcommand*\svgx@out@path{\svg@file@path}% + \or% svgsubpath + \renewcommand*\svgx@out@path{\svg@file@path svg-extract/}% + \or% basepath + \renewcommand*\svgx@out@path{./}% + \or% basesubpath + \renewcommand*\svgx@out@path{./svg-extract/}% + \fi% + \else% + \renewcommand*\svgx@out@path{#1}% + \svg@normalize@path{\svgx@out@path}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{path}{% + \svg@deprecated@key[svg-extract]{path=#1}{extractpath=#1}% +} +\newcounter{svgx@out@count} +\newcommand*\svgx@out@name{} +\newif\if@svgx@out@sec +\DefineFamilyKey{SVG}{extractname}{% + \FamilySetNumerical{SVG}{extractname}{svg@tempa}{% + {filename}{0},{name}{0},% + {filenamenumbered}{1},{namenumbered}{1},% + {numberedfilename}{1},{numberedname}{1},% + {numbered}{2},{section}{2},{numberedsection}{2},{sectionnumbered}{2}% + }{#1}% + \@svgx@out@secfalse% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% filename + \renewcommand*\svgx@out@name{\svg@out@name-extract}% + \or% filenamenumbered + \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svg@out@name}% + \or% numbered + \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svgx@out@sec}% + \@svgx@out@sectrue% + \fi% + \else% + \def\svg@tempa##1.##2\@nil{% + \IfArgIsEmpty{##1}{}{\renewcommand*\svgx@out@name{##1}}% + }% + \svg@tempa#1.\@nil% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{name}{% + \svg@deprecated@key[svg-extract]{name=#1}{extractname=#1}% +} +% +% \end{macrocode} +% \end{counter}^^A svgx@out@count +% \end{macro}^^A \if@svgx@out@sec +% \end{macro}^^A \svgx@out@name +% \end{macro}^^A \svgx@out@path +% \end{option}^^A name +% \end{option}^^A extractname +% \end{option}^^A path +% \end{option}^^A extractpath +% +% +% +% \subsubsection{Options for the extraction of graphics} +% +% \begin{option}{extractwidth} +% \changes{v2.00}{2017/02/20}{new} +% \begin{macro}{\svgx@param@width} +% \begin{option}{extractheight} +% \changes{v2.00}{2017/02/20}{new} +% \begin{macro}{\svgx@param@width} +% \begin{option}{extractscale} +% \changes{v2.00}{2017/02/20}{new} +% \begin{macro}{\svgx@param@scale} +% For graphic extraction, the given settings regarding the size for inclusion +% can be overwritten with these options. Using \val{\cs{relax}} as value leads +% to reseting an option as unset, regardless of what was previously given. The +% value \val{inherit} means, that the actual option for including is used for +% extraction as well. This is the default setting. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractwidth} +\svg@dummy@key{extractheight} +\svg@dummy@key{extractscale} +% +%<*extract> +\newcommand*\svgx@param@width{\svg@param@width} +\DefineFamilyKey{SVG}{extractwidth}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@width{\z@}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@width{\svg@param@width}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{extractwidth}{\svgx@param@width}{#1}% + \ifdim\svgx@param@width<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% + }% +} +\newcommand*\svgx@param@height{\svg@param@height} +\DefineFamilyKey{SVG}{extractheight}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@height{\z@}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@height{\svg@param@height}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{extractheight}{\svgx@param@height}{#1}% + \ifdim\svgx@param@height<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% + }% +} +\newcommand*\svgx@param@scale{\svg@param@scale} +\DefineFamilyKey{SVG}{extractscale}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@scale{1}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@scale{\svg@param@scale}% + \FamilyKeyStateProcessed% + }{% + \ifisdimension{#1\p@}{% + \ifdim\dimexpr#1\p@\relax>\z@\relax% + \renewcommand*\svgx@param@scale{#1}% + \FamilyKeyStateProcessed% + \fi% + }{}% + }% + }% +} +% +% \end{macrocode} +% \end{macro}^^A \svgx@param@scale +% \end{option}^^A extractscale +% \end{macro}^^A \svgx@param@height +% \end{option}^^A extractheight +% \end{macro}^^A \svgx@param@width +% \end{option}^^A extractwidth +% \begin{option}{extractpretex} +% \changes{v2.00}{2017/02/20}{new} +% \begin{macro}{\svgx@param@pretex} +% \begin{option}{extractapptex} +% \changes{v2.00}{2017/02/20}{new} +% \begin{macro}{\svgx@param@apptex} +% \begin{option}{extractpostex} +% The similar hooks for executing code right before or after the graphic +% extraction. +% \begin{macrocode} +%<*base> +\svg@dummy@key{extractpretex} +\svg@dummy@key{extractapptex} +\svg@dummy@key{extractpostex} +% +%<*extract> +\newcommand*\svgx@param@pretex{\svg@param@pretex} +\DefineFamilyKey{SVG}{extractpretex}{% + \svg@ifvalueisrelax{#1}{% + \let\svgx@param@pretex\relax% + }{% + \ifstr{#1}{inherit}{% + \def\svgx@param@pretex{\svg@param@pretex}% + }{% + \def\svgx@param@pretex{#1}% + }% + }% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@param@apptex{\svg@param@apptex} +\DefineFamilyKey{SVG}{extractapptex}{% + \svg@ifvalueisrelax{#1}{% + \let\svgx@param@apptex\relax% + }{% + \ifstr{#1}{inherit}{% + \def\svgx@param@apptex{\svg@param@apptex}% + }{% + \def\svgx@param@apptex{#1}% + }% + }% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{extractpostex}{% + \svg@deprecated@key[svg-extract]{extractpostex=#1}{extractapptex=#1}% +} +% +% \end{macrocode} +% \end{option}^^A extractpostex +% \end{macro}^^A \svgx@param@apptex +% \end{option}^^A extractapptex +% \end{macro}^^A \svgx@param@pretex +% \end{option}^^A extractpretex +% +% +% +% \subsubsection{Miscellaneous options} +% +% \begin{option}{clean} +% \changes{v2.00}{2017/02/24}{changes, file list possible} +% \begin{option}{clear} +% \begin{macro}{\svgx@clean} +% With option \opt{clean} files generated during the extraction process can be +% deleted. Setting \val{true} will remove all files, \val{false} won't clear +% any file. Additionally, a specific file list of suffixes can be given. +% \begin{macrocode} +%<*base> +\svg@dummy@key[true]{clean} +\svg@dummy@key[true]{clear} +% +%<*extract> +\newcommand*\svgx@clean{} +\DefineFamilyKey{SVG}{clean}[true]{% + \FamilySetBool{SVG}{clean}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \renewcommand*\svgx@clean{log,aux,dvi,out,ps,eps,pdf,\svgx@latex@ext}% + \else% + \renewcommand*\svgx@clean{}% + \fi% + \else% + \renewcommand*\svgx@clean{#1}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{clear}{\FamilyOptions{SVG}{clean=#1}} +% +% \end{macrocode} +% \end{macro}^^A \svgx@clean +% \end{option}^^A clear +% \end{option}^^A clean +% \begin{option}{exclude} +% If it is desired not to include but only extract graphics with package +% \pkg{svg-extract}, option \opt{exclude} can be used. +% \begin{macrocode} +%<*base> +\svg@dummy@key[true]{exclude} +% +%<*extract> +\DefineFamilyKey{SVG}{exclude}[true]{% + \FamilySetBool{SVG}{exclude}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \renewcommand*\svg@input[2][]{% + \if@svgx@run\else% + \PackageWarning{svg-extract}{% + The image `##2' was\MessageBreak% + neither extracted nor included% + }% + \fi% + }% + \else% + \renewcommand*\svg@input{\svg@@input}% + \fi% + \fi% +} +% +% \end{macrocode} +% \end{option}^^A exclude +% +% \iffalse +% +%<*package&body> +% \fi +% +% +% +% \subsection{User commands} +% +% \begin{macro}{\svghidepreamblestart} +% \changes{v2.00}{2017/02/24}{new} +% \begin{macro}{\svghidepreambleend} +% \changes{v2.00}{2017/02/24}{new} +% Some dummys for package \pkg{svg}. +% \begin{macrocode} +%<*base> +\newcommand*\svghidepreamblestart{% + \PackageWarning{svg}{% + The macro `\string\svghidepreamblestart' is only meant\MessageBreak% + to be used together with package `svg-extract'.\MessageBreak% + Nevertheless, nothing will happen% + }% +} +\newcommand*\svghidepreambleend{% + \PackageWarning{svg}{% + The macro `\string\svghidepreambleend' is only meant\MessageBreak% + to be used together with package `svg-extract'.\MessageBreak% + Nevertheless, nothing will happen% + }% +} +% +% \end{macrocode} +% These two macros can be used to hide some parts of the preamble during +% reading the preamble of the main document. +% \begin{macrocode} +%<*extract> +\let\svghidepreamblestart\relax +\let\svghidepreambleend\relax +% +% \end{macrocode} +% \end{macro}^^A \svghidepreambleend +% \end{macro}^^A \svghidepreamblestart +% +% +% +% \subsection{Auxiliary macros} +% +% \begin{macro}{\svg@extract} +% \begin{macro}{\svgx@stream@in} +% \begin{macro}{\svgx@read@line} +% \begin{macro}{\svgx@stream@out} +% \begin{macro}{\if@svgx@preamble@write} +% The macro \cs{svg@extract} does the actual job of both extracting and +% converting independent graphic files. Since it is necessary to run it with +% \file{-{}-shell-escape} enabled, the command raises a warning if it is not +% activated. Afterwards, the package is finished. +% \begin{macrocode} +%<*base> +\newcommand*\svg@extract[1]{} +% +%<*extract> +\ifnum\pdf@shellescape=\@ne\relax\else% + \renewcommand*\svg@extract[1]{% + \if@svgx@run% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg-extract}{% + You didn't enable `shell escape' (or `write18')\MessageBreak% + so it wasn't possible to run the extraction for\MessageBreak% + file `\svg@tempa'% + }% + \endgroup% + \fi% + }% + \expandafter\endinput% +\fi +% \end{macrocode} +% If \file{-{}-shell-escape} is enabled, the command is defined with its +% intended functionality. Some macros and a input stream as well as a output +% stream are necessary for this. +% \begin{macrocode} +\newread\svgx@stream@in +\newcommand*\svgx@read@line{} +\newwrite\svgx@stream@out +\newif\if@svgx@preamble@write +\renewcommand*\svg@extract[1]{% +% \end{macrocode} +% If option \opt{extract} is enabled\dots +% \begin{macrocode} + \if@svgx@run% +% \end{macrocode} +% \dots the macro \cs{svgx@get@out@sec} is used to get the current level +% numbering within the document and the counter for extracted graphics is +% stepped. After that, a separate auxiliary \LaTeX~file is created for +% extracting independent graphic files. The macro \cs{svgx@get@out@sec} is used +% to get the current level numbering within the document. The specified +% preamble is read for this task, if it exists. It is first searched in the +% same folder as the SVG~file and if it wasn't found, in any other valid folder +% for SVG~files. +% \begin{macrocode} + \if@svgx@out@sec% + \svgx@get@out@sec% + \fi% + \stepcounter{svgx@out@count}% + \begingroup% + \def\svg@tempa##1.##2\@nil{% + \IfArgIsEmpty{##2}{\edef\svgx@preamble{##1.\svgx@latex@ext}}{}% + }% + \expandafter\svg@tempa\svgx@preamble.\@nil% + \IfFileExists{\svg@file@path\svgx@preamble}{% + \@svg@file@foundtrue% + }{% + \svg@get@path[]{\svgx@preamble}{\svg@out@path}% + \def\svg@tempa####1.####2\@nil{% + \edef\svgx@preamble{\svg@file@name.####2}% + }% + \expandafter\svg@tempa\svgx@preamble\@nil% + }% + \edef\svg@tempa{% + \endgroup% + \if@svg@file@found% + \ifx\svg@file@path\@empty% + \def\noexpand\svgx@preamble{./\svgx@preamble}% + \else% + \def\noexpand\svgx@preamble{\svg@file@path\svgx@preamble}% + \fi% + \fi% + }% + \svg@tempa% + \begingroup% + \endlinechar=\m@ne% + \IfFileExists{\svgx@preamble}{% + \PackageInfo{svg-extract}{% + The preamble file `\svgx@preamble'\MessageBreak% + is used for the generation of the auxiliary file\MessageBreak% + `\svgx@out@name.\svgx@latex@ext'% + }% +% \end{macrocode} +% The catcodes for |#| need to be changed to prevent doublification when +% reading the line. +% \begin{macrocode} + \catcode`\#=12\relax% + \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext% + \immediate\openin\svgx@stream@in=\svgx@preamble% + \@svg@tempswatrue% + \@svgx@preamble@writetrue% + \def\svgx@read@line{}% +% \end{macrocode} +% The given preamble file is read line by line and written to the separate +% auxiliary \LaTeX~file \file{\cs{svgx@out@name}.\cs{svgx@latex@ext}} via the +% output stream. +% \begin{macrocode} + \@whilesw\if@svg@tempswa\fi{% + \immediate\read\svgx@stream@in to\svgx@read@line% + \ifx\svgx@read@line\@empty% + \ifeof\svgx@stream@in\@svg@tempswafalse\fi% + \else% +% \end{macrocode} +% With \cs{svghidepreamblestart} and \cs{svghidepreambleend} it is possible for +% the user to omit certain parts of the preamble. Therefor the two macros +% \cs{svgx@read@preamble@till} and \cs{svgx@read@preamble@from} are toggling +% the switch \cs{if@svgx@preamble@write} +% \begin{macrocode} + \svgx@read@preamble@till{\svghidepreamblestart}{}% + \svgx@read@preamble@from{\svghidepreambleend}{}% +% \end{macrocode} +% If the desired end of the preamble (\cs{svgx@endpreamble}) was found, the +% readout is terminated by switching \cs{if@svg@tempswa} to \val{false}. +% \begin{macrocode} + \svgx@read@preamble@till{\svgx@endpreamble}{\@svg@tempswafalse}% + \if@svgx@preamble@write% +% \end{macrocode} +% During the readout process, it is searched with \cs{svgx@documentclass} for +% the appearance of \cs{documentclass} and \cs{if@svgx@classfound} is set to +% \val{true} if it was found. +% \begin{macrocode} + \if@svgx@classfound\else% + \expandafter\svgx@documentclass% + \svgx@read@line\documentclass\documentclass\@nil% + \fi% +% \end{macrocode} +% Writing out the---maybe manipulated---read in line. +% \begin{macrocode} + \ifx\svgx@read@line\@empty\else% + \immediate\write\svgx@stream@out{% + \unexpanded\expandafter{\svgx@read@line}% + }% + \fi% + \fi% + \fi% + }% + \immediate\closein\svgx@stream@in% + \immediate\closeout\svgx@stream@out% + \catcode`\#=6\relax% +% \end{macrocode} +% Once the separate auxiliary \LaTeX~file is written, it is read in again and +% its content is stored in \cs{svg@tempa}, since it is necessary to prepend +% some stuff to the preamble, for example a maybe not existent document class. +% \begin{macrocode} + \immediate\openin\svgx@stream@in=\svgx@out@name.\svgx@latex@ext% + \def\svg@tempa{}% + \loop\unless\ifeof\svgx@stream@in% + \readline\svgx@stream@in to\svgx@read@line% + \ifx\svgx@read@line\@empty\else% + \edef\svg@tempa{% + \unexpanded\expandafter{\svg@tempa}% + \unexpanded\expandafter{\svgx@read@line}^^J% + }% + \fi% + \repeat% + \immediate\closein\svgx@stream@in% + }{% +% \end{macrocode} +% If a file was given that doesn't exist, a warning is issued. +% \begin{macrocode} + \svg@quotes@remove{\svgx@preamble}% + \ifx\svgx@preamble\@empty\else% + \PackageWarning{svg-extract}{% + The preamble file `\svgx@preamble'\MessageBreak% + does not exist% + }% + \fi% + \def\svg@tempa{}% + }% +% \end{macrocode} +% After the preamble was read in and stored in \cs{svg@tempa}, the separate +% auxiliary \LaTeX~file is written again. Some information are written right at +% the beginning of the file. +% \begin{macrocode} + \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext% + \immediate\write\svgx@stream@out{% + \@percentchar\@percentchar\space This file was generated by package + `svg-extract'^^J% + \@percentchar\@percentchar\space from source `\jobname'^^J% + \@percentchar\@percentchar\space It's intended to be compiled with + `\svgx@latex@exe\ifx\svgx@latex@opt\@empty\else\space\svgx@latex@opt\fi' + }% +% \end{macrocode} +% With the intention of passing the correct paper dimensions, the calculating +% of the paper size is executed with \cs{AtBeginDocument} even before the +% document class, so that this is definitely the first thing to happen at the +% beginning of the document. Additionally, it is ensured that the \cs{special} +% command is definitely used with the correct paper size, when creating a +% DVI~file. +% \begin{macrocode} + \immediate\write\svgx@stream@out{% + \string\AtBeginDocument{\@percentchar^^J% + \space\space\string\svgxsetpapersize\@percentchar^^J% + \ifxetex\else\ifpdf\else% + \space\space\string\AtBeginDvi{\string\special{% + papersize=\string\the\string\paperwidth,% + \string\the\string\paperheight% + }}\@percentchar^^J% + \fi\fi% + }^^J% + \string\PassOptionsToPackage{hidelinks}{hyperref}% + }% +% \end{macrocode} +% If no document class was found during reading the preamble file, then class +% \cs{article} is used. +% \begin{macrocode} + \if@svgx@classfound\else% + \immediate\write\svgx@stream@out{\string\documentclass{article}}% + \fi% +% \end{macrocode} +% And now the stored preamble. +% \begin{macrocode} + \ifx\svg@tempa\@empty\else% + \immediate\write\svgx@stream@out{\unexpanded\expandafter{\svg@tempa}}% + \fi% +% \end{macrocode} +% After the given preamble was written, package \pkg{svg-extract} will be +% loaded in case it was forgotten. +% \begin{macrocode} + \immediate\write\svgx@stream@out{\string\usepackage{svg-extract}}% +% \end{macrocode} +% Now all parameters relevant for the extraction are evaluated and appended. +% \begin{macrocode} + \def\svg@tempa##1{% + \immediate\write\svgx@stream@out{\string\svgsetup{##1}}% + }% + \if@svg@ink@latex\else% + \svg@tempa{inkscapelatex=false}% + \fi% + \ifdim\svgx@param@width>\z@\relax% + \svg@tempa{width=\svgx@param@width}% + \fi% + \ifdim\svgx@param@height>\z@\relax% + \svg@tempa{height=\svgx@param@height}% + \fi% + \ifdim\dimexpr\svgx@param@scale\p@\relax=\p@\relax\else% + \svg@tempa{scale=\svgx@param@scale}% + \fi% + \def\svg@tempb{\svg@param@pretex}% + \ifx\svgx@param@pretex\svg@tempb\relax% + \let\svgx@param@pretex\svg@param@pretex% + \fi% + \ifx\svgx@param@pretex\relax\else% + \svg@tempa{pretex=\unexpanded\expandafter{\svgx@param@pretex}}% + \fi% + \def\svg@tempb{\svg@param@apptex}% + \ifx\svgx@param@apptex\svg@tempb\relax% + \let\svgx@param@apptex\svg@param@apptex% + \fi% + \ifx\svgx@param@apptex\relax\else% + \svg@tempa{apptex=\unexpanded\expandafter{\svgx@param@apptex}}% + \fi% +% \end{macrocode} +% Parameter \prm{lastpage} is only considered for including PDF~files with +% \LaTeX~support. +% \begin{macrocode} + \let\svg@tempa\@empty% + \if@svg@ink@latex% + \ifstr{\svg@ink@format}{pdf}{% + \ifnum\value{svg@param@lastpage}>\z@\relax% + \edef\svg@tempa{lastpage=\the\value{svg@param@lastpage}}% + \else% + \ifnum\value{svg@param@lastpage}=\z@\relax% + \def\svg@tempa{lastpage=true}% + \else% + \def\svg@tempa{lastpage=false}% + \fi% + \fi% + }{}% + \fi% +% \end{macrocode} +% As we are now at the end of the preamble and just before the beginning of the +% document, the paper dimension are set again to make sure, that these settings +% are active at the end of the preamble. Additionally, it is executed again at +% the very end of \cs{AtBeginDocument} to ensure, that no other package used +% this hook for manipulating the paper size. +% \begin{macrocode} + \ifx\svg@tempa\@empty% + \def\svg@tempa{\string\svgxsetbox{#1}}% + \else% + \edef\svg@tempa{\noexpand\string\noexpand\svgxsetbox[\svg@tempa]{#1}}% + \fi% + \immediate\write\svgx@stream@out{\svg@tempa}% +% \end{macrocode} +% Package \pkg{xr} is used to evaluate possible labels within the included +% \app{Inkscape}~\LaTeX~file. +% \begin{macrocode} + \if@svg@ink@latex% + \IfFileExists{xr.sty}{% + \immediate\write\svgx@stream@out{% + \string\usepackage{xr}^^J% + \string\externaldocument{\jobname}^^J% + }% + }{}% + \fi% + \immediate\write\svgx@stream@out{% + \string\AtBeginDocument{\@percentchar^^J% + \space\space\svg@tempa\@percentchar^^J% + }^^J^^J% + \string\begin{document}^^J% + \string\pagestyle{empty}^^J% + \string\svgxoutputbox\@percentchar^^J% + \string\end{document}% + }% + \immediate\closeout\svgx@stream@out% + \endgroup% +% \end{macrocode} +% After creating the separate auxiliary \LaTeX~file, the actual extraction and +% conversion can be done. +% \begin{macrocode} + \ifstr{\svgx@format\svgx@cnv@format}{}{% + \PackageWarning{svg-extract}{% + Both keys `extractformat' and `convertformat' are\MessageBreak% + empty, so nothing to do so far% + }% + }{% +% \end{macrocode} +% As the extraction maybe needs to include the main~auxiliary~file with +% \cs{externaldocument} provided by package \pkg{xr} it is necessarry to do all +% related stuff after the main~auxiliary~file was written. This is done with +% \cs{AfterReadingMainAux} provided by package \pkg{scrlfile}. +% \begin{macrocode} + \svg@quotes@remove{\svgx@out@path}% + \svg@quotes@remove{\svgx@out@name}% +% \end{macrocode} +% All generated files will be moved to the desired output folder, which is +% given by option \opt{extractpath}. Therefor, this folder is created. +% \begin{macrocode} + \edef\svg@tempb{% + \noexpand\svg@shell@mkdir{\svgx@out@path}% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% +% \end{macrocode} +% First of all the separate auxiliary \LaTeX~file is compiled with the detected +% \LaTeX~processor (\cs{svgx@latex@exe}) as often as defined by counter option +% \opt{extractruns}. +% \begin{macrocode} + \edef\svg@tempb{% + \noexpand\PackageInfo{svg-extract}{% + Running LaTeX (\svgx@latex@exe) for graphic extraction% + \ifx\svgx@latex@opt\@empty\else% + \MessageBreak with added options `\svgx@latex@opt'% + \fi% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \svgx@latex@exe\space\svgx@latex@opt\space% + "\svgx@out@name.\svgx@latex@ext"% + }% + }% + \loop\ifnum\value{svgx@runs}>\z@\relax% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \advance\c@svgx@runs\m@ne% + \repeat% +% \end{macrocode} +% All files requested with option \opt{extractformat} are created with internal +% conversion tools supplied by most \LaTeXe~distributions if necessarry. +% \begin{macrocode} + \def\svg@tempa##1##2##3{% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \@nameuse{svgx@##1@exe}\space\@nameuse{svgx@##1@opt}\space% + "\svgx@out@name.##2"% + }% + }% + \AfterReadingMainAux{\PackageInfo{svg-extract}{Running ##1}}% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + \@svg@tempswafalse% + \ifxetex\else\ifpdf\else% + \@svg@tempswatrue% + \fi\fi% + \if@svg@tempswa% + \svg@tempa{dvips}{dvi}{ps}% + \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pstoeps}{ps}{eps}}{}% + \svgx@ifinlist{pdf}{\svgx@format}{\svg@tempa{pstopdf}{ps}{pdf}}{}% + \else% + \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pdftoeps}{pdf}{eps}}{}% + \svgx@ifinlist{ps}{\svgx@format}{\svg@tempa{pdftops}{pdf}{ps}}{}% + \fi% +% \end{macrocode} +% Now the desired conversion tool is invoked if requested. +% \begin{macrocode} + \if@svgx@cnv@run% +% \end{macrocode} +% If no density was given at all, the density for PNG~files is set to +% \val{300dpi} by default. +% \begin{macrocode} + \ifx\svgx@cnv@dpi\relax% + \ifx\svgx@cnv@dpi@png\@undefined% + \def\svgx@cnv@dpi@png{300}% + \fi% + \fi% +% \end{macrocode} +% The first given file type with option \opt{extractformat} is used as source +% for the conversion process. +% \begin{macrocode} + \expandafter\svgx@cnv@get@informat\expandafter{\svgx@format}% +% \end{macrocode} +% The conversion is done for each desired file type given in a list by option +% \opt{convertformat}. +% \begin{macrocode} + \@for\svg@tempa:=\svgx@cnv@format\do{% + \ifx\svg@tempa\@empty\else% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@format}{% + \PackageWarning{svg-extract}{% + File type `\svg@tempa' was specified for option\MessageBreak% + `extractformat' (\svgx@format) as well as for \MessageBreak + option `convertformat' (\svgx@cnv@format) so the\MessageBreak% + conversion won't be done% + }% + }{% + \edef\svg@tempb{% + \noexpand\PackageInfo{svg-extract}{% + Converting `\svgx@out@name.\svgx@cnv@informat'\MessageBreak% + to `\svgx@out@name.\svg@tempa'% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \svgx@cnv@cmd{\svgx@out@name}{\svgx@cnv@informat}{\svg@tempa}% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + \fi% + }% + \fi% +% \end{macrocode} +% As both extraction and conversion are done, all files are moved to the +% desired output folder (\opt{extractpath}). +% \begin{macrocode} + \edef\svg@tempa{\svgx@format\if@svgx@cnv@run,\svgx@cnv@format\fi}% + \@for\svg@tempb:=\svg@tempa\do{% + \ifx\svg@tempb\@empty\else% + \edef\svg@tempb{% + \noexpand\svgx@move{\svgx@out@name}{\svg@tempb}{\svgx@out@path}% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \fi% + }% +% \end{macrocode} +% At the very end, all unwanted auxiliary files are deleted. +% \begin{macrocode} + \@for\svg@tempa:=\svgx@clean\do{% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svg@tempb}{}{% + \edef\svg@tempb{% + \noexpand\IfFileExists{"\svgx@out@name".\svg@tempa}{% + \noexpand\svg@shell@rm{\svgx@out@name.\svg@tempa}% + }{}% + }% + \expandafter\AtEndDocument\expandafter{% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + }% + }% + }% + \fi% +} +% +% \end{macrocode} +% \end{macro}^^A \if@svgx@preamble@write +% \end{macro}^^A \svgx@stream@out +% \end{macro}^^A \svgx@read@line +% \end{macro}^^A \svgx@stream@in +% \end{macro}^^A \svg@extract +% +% \iffalse +% +%<*package&extract&body> % \fi +% +% \begin{macro}{\svgx@get@out@sec} +% \begin{macro}{\svgx@out@sec} +% The macro \cs{svgx@get@out@sec} reads all sectioning counters in order to +% get the numbering of the current sectioning level. The value is stored in +% \cs{svgx@out@sec}. +% \begin{macrocode} +\newcommand*\svgx@out@sec{unknown} +\newcommand*\svgx@get@out@sec{% + \begingroup% + \def\svg@tempa{}% + \@for\svg@tempb:={% + part,chapter,section,subsection,subsubsection,paragraph,subparagraph% + }\do{% + \ifx\svg@tempb\@empty\else% + \scr@ifundefinedorrelax{the\svg@tempb}{}{% + \ifnum\value{\svg@tempb}>\z@\relax% + \edef\svg@tempa{\svg@tempb}% + \fi% + }% + \fi% + }% + \edef\svg@tempb{% + \endgroup% + \ifx\svg@tempa\@empty\else% + \def\noexpand\svgx@out@sec{\csname the\svg@tempa\endcsname}% + \fi% + }% + \svg@tempb% +} +% \end{macrocode} +% \end{macro}^^A \svgx@out@sec +% \end{macro}^^A \svgx@get@out@sec +% \begin{macro}{\svgx@documentclass} +% \begin{macro}{\if@svgx@classfound} +% This delimited macro is used to find a occurrence of \cs{documentclass} +% within a read in line. The delinmiter \cs{documentclass} is used twice in +% order to ignore the possible occurrence of white space or anything else right +% before \cs{documentclass}. +% \begin{macrocode} +\newif\if@svgx@classfound +\newcommand*\svgx@documentclass{} +\def\svgx@documentclass#1\documentclass#2\documentclass#3\@nil{% + \IfArgIsEmpty{#2}{}{\@svgx@classfoundtrue}% +} +% \end{macrocode} +% \end{macro}^^A \if@svgx@classfound +% \end{macro}^^A \svgx@documentclass +% \begin{macro}{\svgx@read@preamble@till} +% \begin{macro}{\svgx@read@preamble@from} +% \begin{macro}{\svgx@read@preamble@skip} +% These macros are used to skip some parts of a read in preamble file. +% \begin{macrocode} +\newcommand*\svgx@read@preamble@till[2]{% + \svgx@read@preamble@skip#1\@nil{till}{#2}% +} +\newcommand*\svgx@read@preamble@from[2]{% + \svgx@read@preamble@skip#1\@nil{from}{#2}% +} +% \end{macrocode} +% In principle, the functionality is the same as for \cs{svgx@documentclass}. +% \begin{macrocode} +\newcommand*\svgx@read@preamble@skip{} +\def\svgx@read@preamble@skip#1\@nil#2#3{% +% \end{macrocode} +% A given token is used to create the macro \cs{svg@tempa} delimited by the +% token itself which is used twice to get any stuff right before or after the +% occurrence. +% \begin{macrocode} + \def\svg@tempa##1{% + \def\svg@tempa####1##1####2##1####3\@nil{% + \IfArgIsEmpty{####3}{}{% +% \end{macrocode} +% Write everything which was found right before the macro which starts hiding +% area to the output stream and stop writing with \cs{if@svgx@preamble@write}. +% \begin{macrocode} + \ifstr{#2}{till}{% + \IfArgIsEmpty{####1}{}{% + \immediate\write\svgx@stream@out{####1}% + }% + \@svgx@preamble@writefalse% + }{% +% \end{macrocode} +% Write everything which was found right after the macro which ends the hiding +% area and start writing again with \cs{if@svgx@preamble@write}. +% \begin{macrocode} + \ifstr{#2}{from}{% + \IfArgIsEmpty{####2}{% + \def\svgx@read@line{}% + }{% + \def\svgx@read@line{####2}% + }% + \@svgx@preamble@writetrue% + }{}% + }% +% \end{macrocode} +% Additonal stuff which should be done. +% \begin{macrocode} + #3% + }% + }% + }% +% \end{macrocode} +% Creating the macro \cs{svg@tempa} delimited by the first argument. +% \begin{macrocode} + \edef\svg@tempb{\expandafter\detokenize\expandafter{#1}}% + \expandafter\svg@tempa\expandafter{\svg@tempb}% +% \end{macrocode} +% Calling the created macro. +% \begin{macrocode} + \edef\svg@tempb{% + \expandafter\detokenize\expandafter{\svgx@read@line}\svg@tempb\svg@tempb% + }% + \expandafter\svg@tempa\svg@tempb\@nil% +} +% \end{macrocode} +% \end{macro}^^A \svgx@read@preamble@skip +% \end{macro}^^A \svgx@read@preamble@from +% \end{macro}^^A \svgx@read@preamble@till +% \begin{macro}{\svgx@cnv@informat} +% \begin{macro}{\svgx@cnv@get@informat} +% The first list entry from argument (\cs{svgx@format}) is extracted by +% \cs{svgx@cnv@get@informat}. +% \begin{macrocode} +\newcommand*\svgx@cnv@informat{} +\newcommand*\svgx@cnv@get@informat[1]{% + \begingroup% + \def\svg@tempa##1,##2\@nil{% + \def\svg@tempa{##1}% + }% + \svg@tempa#1,\@nil% + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\def\noexpand\svgx@cnv@informat{\svg@tempa}% + }% + \svg@tempa% +% \end{macrocode} +% If the first argument (\cs{svgx@format}) was empty, \cs{svgx@cnv@informat} is +% set to the a file type, which is generated anyway. +% \begin{macrocode} + \ifx\svgx@cnv@informat\@empty% + \renewcommand*\svgx@cnv@informat{pdf}% + \ifxetex\else\ifpdf\else% + \renewcommand*\svgx@cnv@informat{ps}% + \fi\fi% + \fi% +} +% \end{macrocode} +% \end{macro}^^A \svgx@cnv@get@informat +% \end{macro}^^A \svgx@cnv@informat +% \begin{macro}{\svgx@magick@cmd} +% \begin{macro}{\svgx@gs@cmd} +% Depending on option \opt{convert}, one of these two macros is actually used +% by \cs{svgx@cnv@cmd}. For invoking the conversion process, the required +% platform-dependent executable is set, if nothing was set by a package option. +% \begin{macrocode} +\ifx\svgx@magick@exe\@empty + \ifwindows + \renewcommand*\svgx@magick@exe{magick} + \else + \renewcommand*\svgx@magick@exe{convert} + \fi +\fi +\newcommand*\svgx@magick@cmd[3]{% + \svgx@magick@exe\space% + \svgx@useformatkey{svgx@cnv@dpi}{#3}{-density }% + \svgx@useformatkey{svgx@magick@set}{#3}{}% + "#1.#2"\space% + \svgx@useformatkey{svgx@magick@opr}{#3}{}% + "#1.#3"% +} +% \end{macrocode} +% \begin{macrocode} +\ifx\svgx@gs@exe\@empty + \ifwindows + \renewcommand*\svgx@gs@exe{gswin64c} + \else + \renewcommand*\svgx@gs@exe{gs} + \fi +\fi +\newcommand*\svgx@gs@cmd[3]{% + \svgx@gs@exe\space-dSAFER -dBATCH -dNOPAUSE\space% + \svgx@useformatkey{svgx@gs@device}{#3}{-sDEVICE=}% + \svgx@useformatkey{svgx@cnv@dpi}{#3}{-r}% + \svgx@useformatkey{svgx@gs@opt}{#3}{}% + -sOutputFile="#1.#3"\space"#1.#2"% +} +% \end{macrocode} +% \end{macro}^^A \svgx@gs@cmd +% \end{macro}^^A \svgx@magick@cmd +% \begin{macro}{\svgx@move} +% If the file doesn't exist +% \begin{macrocode} +\newcommand*\svgx@move[3]{% + \begingroup% + \IfFileExists{"#1".#2}{% + \svg@shell@move{#1.#2}{#3#1.#2}% + }{% + \edef\svg@tempa{#2}% + \@svg@tempswafalse% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@cnv@format}{% + \@svg@tempswatrue% + \def\svg@tempb{conversion}% + }{% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{pdf,ps,eps}{% + \@svg@tempswatrue% + \def\svg@tempb{extraction}% + }{}% + }% + \if@svg@tempswa% + \edef\svg@tempb{% + The graphic file \svg@tempb\space failed\MessageBreak% + for `#1.#2'\MessageBreak% + Troubleshooting: Please check the log file how the\MessageBreak% + invocation of the extraction took place and try\MessageBreak% + to execute it yourself in the terminal% + }% + \else% + \def\svg@tempb{% + The extraction to format `#2' failed\MessageBreak% + for `#1.#2'\MessageBreak% + Only file types `pdf,ps,eps' are supported for\MessageBreak% + key `exportformat'% + }% + \fi% + \PackageWarning{svg-extract}{\svg@tempb}% + }% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \svgx@move +% % \iffalse -%<*batchfile> -\begingroup -\input docstrip -\keepsilent -\usedir{tex/latex/svg} -\preamble -\endpreamble -\askforoverwritefalse -\generate{\file{svg.sty}{\from{svg.dtx}{svg}}} -\endgroup -% +% +%<*package&extract&option> % \fi +% +% \begin{macro}{\svgx@ifinlist} +% Check, if the first argument is included in a comma-separated list in the +% second argument. Keep in mind that the first argument is not expanded at all, +% the second one exactly once. +% \begin{macrocode} +\newcommand*\svgx@ifinlist[2]{% + \begingroup% + \def\svg@tempa##1,#1,##2\@nil{% + \IfArgIsEmpty{##2}{% + \aftergroup\@secondoftwo% + }{% + \aftergroup\@firstoftwo% + }% + }% + \expandafter\svg@tempa\expandafter,#2,#1,\@nil% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \svgx@ifinlist +% \begin{macro}{\svgx@onlywindows} +% Do only some stuff, if Windows was detected. +% \begin{macrocode} +\newcommand*\svgx@onlywindows[1]{} +\AfterPackage*{ifplatform}{\renewcommand*\svgx@onlywindows[1]{\ifwindows#1\fi}} +% \end{macrocode} +% \end{macro}^^A \svgx@onlywindows +% \begin{macro}{\svgx@ifkeyandval} +% It is checked whether a key was given as \val{\meta{key}=\meta{value}} or +% like \val{\meta{key}=\{\meta{format}=\meta{value}\}}. +% \begin{macrocode} +\newcommand*\svgx@ifkeyandval[3]{% + \def\svg@tempa##1=##2=##3\@nil{\ifstr{##3}{=}{#2}{#3}}% + \svg@tempa#1==\@nil% +} +% \end{macrocode} +% \end{macro}^^A \svgx@ifkeyandval +% \begin{macro}{\svgx@cnv@get@dpi} +% This macro is used to resolve a given value to set the density for the +% conversion. The delimited macros \cs{svg@tempa} and \cs{svg@tempb} are +% defined to first crop any given suffix \val{dpi} and second to split two +% numbers at |x|, if present. Pay attention how both macros are invoked. In the +% end, a passed value in any of the forms \val{300}, \val{300dpi}, \val{300x400} +% or \val{300x400dpi} and even \val{300dpix400dpi} is possible. The result is +% stored in \cs{svg@tempa}. +% \begin{macrocode} +\newcommand*\svgx@cnv@get@dpi[1]{% + \begingroup% + \def\svg@tempa##1dpi##2x##3dpi##4\@nil{% + \edef\svg@tempa{##1}% +% \end{macrocode} +% Switch \cs{if@svg@tempswa} as \cs{iftrue} means, a valid value was found. +% \begin{macrocode} + \@svg@tempswafalse% +% \end{macrocode} +% If only the first argument is a number and third is empty, a single number +% was given and there's nothing more to do. If the argument is something like +% \val{300dpix400dpi}, the third argument is the second number. +% \begin{macrocode} + \ifnumber{##1}{% + \IfArgIsEmpty{##3}{\@svg@tempswatrue}{% + \ifnumber{##3}{\edef\svg@tempa{##1x##3}}{}% + }% + }{}% + \if@svg@tempswa\else% + \expandafter\svg@tempb\svg@tempa xx\@nil% + \fi% + }% +% \end{macrocode} +% Macro \cs{svg@tempb} splits at |x| and checks, if something valid like +% \val{300x400} was given. If true, the value is stored in \cs{svg@tempa}. +% \begin{macrocode} + \def\svg@tempb##1x##2x##3\@nil{% + \ifstr{##3}{x}{% + \@svg@tempswatrue% + \IfArgIsEmpty{##1}{\@svg@tempswafalse}{% + \ifnumber{##1}{}{\@svg@tempswafalse}% + }% + \IfArgIsEmpty{##2}{\@svg@tempswafalse}{% + \ifnumber{##2}{}{\@svg@tempswafalse}% + }% + \if@svg@tempswa% + \edef\svg@tempa{##1x##2}% + \fi% + }{}% + }% + \IfArgIsEmpty{#1}{% + \let\svg@tempa\@empty% + }{% + \lowercase{\svg@tempa#1dpi#1xdpi\@nil}% + \if@svg@tempswa\else% + \let\svg@tempa\relax% + \fi% + }% + \edef\svg@tempb{% + \noexpand\endgroup% + \ifx\svg@tempa\relax% + \noexpand\let\noexpand\svg@tempa\noexpand\relax% + \else% + \noexpand\def\noexpand\svg@tempa{\svg@tempa}% + \fi% + }% + \svg@tempb% +} +% \end{macrocode} +% \end{macro}^^A \svgx@cnv@get@dpi +% \begin{macro}{\svgx@setformatkey} +% \begin{macro}{\svgx@useformatkey} +% With \cs{svgx@setformatkey} the---maybe output format depend---keys for the +% conversion tools are set. First argument contains the value given to a key, +% second the command sequence name of the macro, to whom the value shall be +% allocated. +% \begin{macrocode} +\newcommand*\svgx@setformatkey[2]{% +% \end{macrocode} +% A key of the form \val{\meta{key}=\{\meta{format}=\meta{value}\}} is given. +% The desired output format can be accessed with |##1|, the value with |##2| +% within the arguments of \cs{svgx@ifkeyandval}. +% \begin{macrocode} + \svgx@ifkeyandval{#1}{% + \svg@ifvalueisrelax{##2}{% + \expandafter\let\csname #2@##1\endcsname\relax% + }{% + \@namedef{#2@##1}{##2}% + }% +% \end{macrocode} +% A key of the form \val{\meta{key}=\{\meta{format}=\meta{value}\}} is given. +% The value can be used with |##1|. +% \begin{macrocode} + }{% + \svg@ifvalueisrelax{##1}{% + \expandafter\let\csname #2\endcsname\relax% + }{% + \@namedef{#2}{##1}% + }% + }% +} +% \end{macrocode} +% The command \cs{svgx@useformatkey} checks, if a format specific key was +% definded with \cs{svgx@setformatkey}, whereas the format is given in the +% second argument. If this is not the case, the setting for all output formats +% is used. After that, a specific key appended with a |+| can be used to do +% some additional stuff. +% \begin{macrocode} +\newcommand*\svgx@useformatkey[3]{% + \scr@ifundefinedorrelax{#1@#2}{% + \scr@ifundefinedorrelax{#1}{}{% + \expandafter\ifx\csname #1\endcsname\@empty\else% + #3\@nameuse{#1}\space% + \fi% + }% + \scr@ifundefinedorrelax{#1@#2+}{}{% + \expandafter\ifx\csname #1@#2+\endcsname\@empty\else% + #3\@nameuse{#1@#2+}\space% + \fi% + }% + }{% +% \end{macrocode} +% If this a format specific key was definded, it is used. +% \begin{macrocode} + \expandafter\ifx\csname #1@#2\endcsname\@empty\else% + #3\@nameuse{#1@#2}\space% + \fi% + }% +} +% \end{macrocode} +% \end{macro}^^A \svgx@useformatkey +% \end{macro}^^A \svgx@setformatkey +% +% +% +% \subsection{Commands for the separate auxiliary \LaTeX-file} +% +% For the extraction of independent graphics, an auxiliary \LaTeX~file is +% needed. Within this file, the following commands are used to include the +% desired graphic. +% +% \begin{macro}{\svgxsetbox} +% \begin{macro}{\svgx@box} +% Within the preamble of the auxiliary \LaTeX~file, the desired grahic is used +% to setup a box, which is used both to define the papersize as well as for the +% output itself. +% \begin{macrocode} +\newbox\svgx@box +\newcommand*\svgxsetbox[2][]{% + \sbox\svgx@box{\svg@@input[{#1},draft=false]{#2}}% +% \end{macrocode} +% Setting crop-mode for the \TUDScript-classes. +% \begin{macrocode} + \csname @tud@x@standalone@croptrue\endcsname% + \svgxsetpapersize% +} +% \end{macrocode} +% \end{macro}^^A \svgx@box +% \end{macro}^^A \svgxsetbox +% \begin{macro}{\svgxsetpapersize} +% This macro sets all well known length macros for defining the paper size as +% well as the type area to the size of \cs{svgx@box}. +% \begin{macrocode} +\newcommand*\svgxsetpapersize{% + \setlength\paperwidth{\the\wd\svgx@box}% + \ifx\stockwidth\@undefined\else% + \setlength\stockwidth{\paperwidth}% + \fi% + \ifx\mediawidth\@undefined\else% + \setlength\mediawidth{\paperwidth}% + \fi% + \setlength\textwidth{\paperwidth}% + \setlength\paperheight{\the\dimexpr\ht\svgx@box+\dp\svgx@box\relax}% + \ifx\stockheight\@undefined\else% + \setlength\stockheight{\paperheight}% + \fi% + \ifx\mediaheight\@undefined\else% + \setlength\mediaheight{\paperheight}% + \fi% + \setlength\textheight{\paperheight}% +% \end{macrocode} +% Any other length regarding the layout is set to have no influence at all. +% Hence the document has the same size as the graphic. +% \begin{macrocode} + \hoffset=-1in% + \oddsidemargin=\z@% + \evensidemargin=\z@% + \voffset=-1in% + \topmargin=\z@% + \headheight=\z@% + \headsep=\z@% + \topskip=\z@% + \footskip=\z@% + \marginparsep=\z@% + \marginparwidth=\z@% + \marginparpush=\z@% +} +\@onlypreamble\svgxsetpapersize +% \end{macrocode} +% \end{macro}^^A \svgxsetpapersize +% \begin{macro}{\svgxoutputbox} +% \begin{macro}{\if@svgx@beamer} +% With \cs{svgxoutputbox} the created box is displayed. +% \begin{macrocode} +\newif\if@svgx@beamer +\@ifclassloaded{beamer}{\@svgx@beamertrue}{}% +\newcommand*\svgxoutputbox{% + \begingroup% + \setlength\parindent{\z@}% + \setlength\parskip{\z@}% + \setlength\parfillskip{\z@}% + \if@svgx@beamer% + \setbeamertemplate{navigation symbols}{}% + \begin{frame}[plain]% + \usebox\svgx@box% + \end{frame}% + \else% + \usebox\svgx@box% + \fi% + \endgraf% + \endgroup% +} +% \end{macrocode} +% \end{macro}^^A \if@svgx@beamer +% \end{macro}^^A \svgxoutputbox +% % \iffalse -%<*driver> -\ProvidesFile{svg.dtx} -\documentclass{ltxdoc} -\usepackage{svg} -\usepackage{relsize} -\usepackage{xcolor} -\usepackage{transparent} -\usepackage{listings} -\usepackage{xspace} -\usepackage[bookmarks=true,colorlinks=true,linkcolor=black,citecolor=black, -urlcolor=blue]{hyperref} -\EnableCrossrefs -\CodelineIndex -\RecordChanges -\begin{document} - \DocInput{svg.dtx} - \PrintChanges - \PrintIndex -\end{document} -% +% +%<*package&option> % \fi % -% \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 -% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z -% Digits \0\1\2\3\4\5\6\7\8\9 -% Exclamation \! Double quote \" Hash (number) \# -% Dollar \$ Percent \% Ampersand \& -% Acute accent \' Left paren \( Right paren \) -% Asterisk \* Plus \+ Comma \, -% Minus \- Point \. Solidus \/ -% Colon \: Semicolon \; Less than \< -% Equals \= Greater than \> Question mark \? -% Commercial at \@ Left bracket \[ Backslash \\ -% Right bracket \] Circumflex \^ Underscore \_ -% Grave accent \` Left brace \{ Vertical bar \| -% Right brace \} Tilde \~} % +% \section{Processing Options} +% +% Setting the default options and processing the given ones during when loading +% the packages. +% \begin{macrocode} +%<*base> +\FamilyExecuteOptions{SVG}{% + inkscape=true,inkscapepath=basesubdir,inkscapelatex=true,% + inkscapearea=drawing,usexcolor=true,usetransparent=true% +} +% +%<*extract> +\FamilyExecuteOptions{SVG}{% + extract=true,extractpath=basesubdir,extractruns=2,extractname=namenumbered,% + convert=magick,convert=false,% + gsdevice={png=png16m},gsdevice={jpeg=jpeg},gsdevice={jpg=jpeg},% + gsdevice={tif=tiff48nc},gsdevice={tiff=tiff48nc},% + gsdevice={eps=eps2write},gsdevice={ps=ps2write}% +} +% +\FamilyProcessOptions{SVG} +% \end{macrocode} % -% \changes{v1.0}{2004/11/05}{Initial version} +% \iffalse +% +%<*package&base&body> +% \fi % -% \GetFileInfo{svg.sty} % -% \DoNotIndex{\newcommand,\newenvironment} -% -% \makeatletter -% \def\DescribeOption#1{\leavevmode\@bsphack -% \marginpar{\raggedleft\PrintDescribeOption{#1}}% -% \SpecialOptionIndex{#1}\@esphack\ignorespaces} -% \def\PrintDescribeOption#1{\strut\emph{option}\\\MacroFont #1\ } -% \def\SpecialOptionIndex#1{\@bsphack -% \index{#1\actualchar{\protect\ttfamily#1} -% (option)\encapchar usage}% -% \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar -% usage}\@esphack} -% \def\DescribeOptions#1{\leavevmode\@bsphack -% \marginpar{\raggedleft\strut\emph{options}% -% \@for\@tempa:=#1\do{% -% \\\strut\MacroFont\@tempa\SpecialOptionIndex\@tempa -% }}\@esphack\ignorespaces} -% \makeatother -% \lstnewenvironment{example}{% -% \lstset{basicstyle=\footnotesize\ttfamily,columns=flexible,frame=single,% -% backgroundcolor=\color{yellow!20},xleftmargin=\fboxsep,% -% xrightmargin=\fboxsep,gobble=1}}{} -% -% \newcommand{\svg}{{\sc svg}\xspace} -% \newcommand{\pdf}{{\sc pdf}\xspace} -% \newcommand{\eps}{{\sc eps}\xspace} -% \newcommand{\png}{{\sc png}\xspace} -% \newcommand{\latex}{\LaTeX\xspace} -% \newcommand{\croot}{{\sc Root}\xspace} -% \newcommand{\pdflatex}{{\sc PdfLatex}\xspace} -% \newcommand{\inkscape}{{\sc Inkscape}\xspace} -% \newcommand{\pdftops}{{\sc PdfToPs}\xspace} -% \newcommand{\convert}{{\sc Convert}\xspace} -% -% \title{The \textsf{svg} Package} -% \author{Philip Ilten \\ \texttt{philten@cern.ch}} -% \date{\fileversion\ (\filedate)} -% \maketitle -% \tableofcontents -% \section{Introduction}\label{sec:intro} -% -% The open source program \inkscape has provided an excellent resource -% for the simple and easy creation of images and diagrams using a -% graphical user interface. The work by Johan B. C. Engelen has -% further enhanced the ability of \inkscape to split an \svg into a -% text component that can be imported into \latex, and an image -% component that can be imported as a \pdf.\footnote{For further -% information see the |svg-inkscape| documentation on -% \href{http://www.ctan.org/tex-archive/info/svg-inkscape}{CTAN}.} -% Consequently it is now possible to include an \svg into a \latex -% document where the text within the \svg has been rendered natively -% by \latex. -% -% The purpose of this package is twofold. First, the syntax of the -% command |\includegraphics| from the |graphicx| package has been -% extended to an |\includesvg| command, which allows the specification -% of the \svg width and height using keys in an optional first -% argument. Second, this package allows for the extraction of the -% \svg, as rendered within the \latex document, to an independent -% image file. This is particularly useful when attempting to provide -% images to journals or collaborators, and one wishes the image to -% appear exactly as it does within the original \latex document. -% -% There is actually a third purpose to this package, which will almost -% certainly be relevant to experimental particle physicists only, who -% frequently use the analysis package \croot. Further details on how to -% obtain beautiful \croot plots using this package are given in Section -% \ref{sec:root}. -% -% This documentation is broken into five parts: an explanation of the -% usage is given in Section \ref{sec:usage}, an example is given in -% Section \ref{sec:example}, further details with use in \croot is -% given in Section \ref{sec:root}, and finally, the full -% implementation is given in Section \ref{sec:implementation} which -% hopefully should not need to be read. -% -% There is one further point which is important to mention. This -% package relies heavily upon executing commands from the shell using -% the |\write18| command, and so it is necessary for the flag -% |-shell-escape| to be included when compiling documents using this -% package. Additionally, this package requires a working installation -% of \inkscape and \pdflatex in order for an \svg to be included or -% extracted to a \pdf. In order to extract to \eps and \png formats, -% the programs \pdftops and \convert (part of ImageMagick) must be -% installed respectively. Finally, this package will not work on -% Windows, but should run on any *nix platform as long as the paths to -% the appropriate programs are correctly defined. -% -% \section{Usage}\label{sec:usage} -% -% \DescribeMacro{\includesvg} The command to include an \svg is -% similar to the |\includegraphics| command provided by the |graphicx| -% package. However, now the command -% \begin{example} -% \includesvg[]{} -% \end{example} -% is used where || is the filename of the \svg without -% the path or the |.svg| postfix. -% -% \DescribeMacro{\setsvg} The ||, described in detail below, -% can be specified globally for the package -% \begin{example} -% \usepackage[]{svg} -% \end{example} -% and reset locally when supplied to the |\includesvg| macro. The -% options can also be reset globally using the macro |\setsvg| -% \begin{example} -% \setsvg{} -% \end{example} -% where || is a comma separated list of options. -% -% \DescribeOptions{width,height,svgpath} The width of the \svg can be -% specified via the |width| option and the height by the |height| -% option. If both the width and height are specified, the width will -% be used and the height will be rescaled to match the aspect ratio of -% the \svg. The path to the \svg can be specified using the |svgpath| -% option, where the path must terminate in a |/|. The default -% |svgpath| is set to the current directory, |./|. -% -% \DescribeOptions{pdf,eps,png} The included \svg can be extracted -% from the document into a \pdf, \eps, or \png independent of the -% document. The |pdf| flag enables \pdf extraction, while the |eps| -% and |png| flags enable \eps and \png extraction respectively. For -% example, -% \begin{example} -% \includesvg[pdf,eps,]{} -% \end{example} -% will extract the \svg to both \pdf and \eps formats By default, all -% of these flags are set to false and no extraction of the \svg is -% performed. The extraction will render the \svg to the specified -% output(s) of choice using the same size as specified within the -% |\includesvg| command. Consequently, the scale between the image and -% text in the extracted output(s) will remain identical to the scale -% within the document from which the \svg was extracted. -% -% \DescribeOptions{name, path} The root name of the extracted -% output can be specified with the |name| option. For example, -% \begin{example} -% \includesvg[name=foo,eps,png,]{} -% \end{example} -% will extract the \svg to the files |foo.eps| and |foo.png| in the -% current directory. By default, |name| is set to -% |Fig.\arabic{svgfigure}\alph{subfigure}| and so any \svg included -% within a |figure| or |subfigure| environment will automatically be -% labeled; i.e. if an \svg is included in the first figure and second -% subfigure of the document, and \pdf extraction was requested, the -% \svg will be extracted to the file |Fig.1b.pdf|. A path for the -% extracted files can also be specified with the |path| option, which -% must terminate with a |/|. The default |path| is set to the current -% directory, |./|. -% -% \DescribeOptions{clean,exclude} Because a large number of files is -% generated for each \svg extraction, it is oftentimes desirable to -% automatically remove the temporary files. Using the option |clean| -% will remove any generated files created other than the extracted -% output(s) requested. The |clean| option is by default set as |false| -% to enable debugging. Additionally, sometimes it may be necessary to -% export an \svg without including it in the current document. If the -% flag |exclude| is specified, the \svg will not be rendered in the -% current document, but will be extracted to the requested output(s). -% -% \DescribeOptions{pretex,postex} Commands prior and post to the -% inclusion of the \svg may be desired, such as font or color -% commands. For example, to change the text size of the include \svg -% text one could use -% \begin{example} -% {\tiny \includsvg[]{}} -% \end{example} -% where now the text will be rendered in the font size specified by -% |\tiny|. In this example, however, the |\tiny| command would not be -% included in the extracted output and so the options |pretex| and -% |postex| are provided where the \latex provided to |pretex| is -% included before the \svg, and |postex| after the \svg. Consequently, -% the example above can be rewritten as -% \begin{example} -% \includsvg[pretex=\tiny,]{} -% \end{example} -% where now the changed font size will be propagated to the extracted -% output. -% -% \DescribeOptions{preamble,end} Specialized \latex macros can be used -% in the \svg which can then be defined in the preamble of the \latex -% document in which the \svg is to be included. Additionally, -% specialized packages such as |\relsize| may be needed by the \latex -% code extracted from the \svg. Consequently, the preamble of the -% current \latex document is used for the extraction of the \svg by -% default. It is possible, however, to specify a different preamble -% with the option |preamble| where the file to use as the preamble -% (including path and postfix) is given as the argument. The default -% definition of |preamble| is |\jobname.tex|, and should suffice for -% most cases. The preamble up to the line defined by the option -% |end| will be used, which is set to a default of -% |\begin{document}|. Notice that an exact match must be made, and so -% if any comments or text are on the same line after the -% |\begin{document}|, the preamble will not be correctly extracted. -% -% \DescribeOptions{inkscape, pdflatex, pdftops, convert} A variety of -% commands are executed directly to the system, via |\write18| using -% this package and consequently, it may be necessary to change the -% binary paths and options for each individual command. For the -% inclusion of an \svg, \inkscape is used to separate the text and -% image from the \svg and can be set using the |inkscape| option. By -% default the |inkscape| option is set to |inkscape -z -C| which -% performs a non-gui export of \svg page (notice that the |-C| option -% indicates page and not drawing). For the extraction of a \pdf, -% the \latex program is used which is set by the |pdflatex| option and -% set to |pdflatex| by default. The extraction of an \eps is performed -% by converting a \pdf to an \eps using \pdftops. This command is set -% with the |pdftops| option and is set by default to -% |pdftops -eps|. Finally, conversion to \png is accomplished via the -% \convert program which is set with the |convert| option and by -% default set to |convert -density 300| where |-density| -% controls the resolution of the extracted \png in dots per inch. -% -% -% \section{Example}\label{sec:example} -% -% As an example\footnote{The image used here is a slightly modified -% version of the image used in the initial documentation on how to -% include an \svg in \latex by J. Engelen available on -% \href{http://www.ctan.org/tex-archive/info/svg-inkscape}{CTAN}.} -% take the following lines of code -% \begin{example} -% \begin{figure} -% \subfloat[This text is too large!]{\includesvg[clean, -% preamble=preamble.tex,pdf,width=5cm]{example}} -% \subfloat[This text fits better.]{\includesvg[clean, -% preamble=preamble.tex,eps,pretex=\relscale{0.5},width=5cm]{example}} -% \caption{An example figure.\label{fig:example}} -% \end{figure} -% \end{example} -% where the \svg |example.svg| within this directory has been included -% twice using the |\svginclude| command. The output is shown in Figure -% \ref{fig:example}. % -% \begin{figure} -% \begin{center} -% \subfloat[This text is too -% large!]{\includesvg[name=Fig.1a,clean, -% preamble=preamble.tex,pdf,width=5cm]{example}} \subfloat[This -% text fits -% better.]{\includesvg[name=Fig.1b,clean,preamble=preamble.tex, -% eps,pretex=\relscale{0.5},width=5cm]{example}} -% \caption{An example figure.\label{fig:example}} -% \end{center} -% \end{figure} +% \section{Macros for file access} % -% The first subfigure is created with the export option |pdf| with the -% default |name|, and so the file |Fig.1a.pdf| is extracted. However, -% the text is overrunning the margins of the image, and so the second -% subfigure decreases the relative size of the text within the image -% using the |pretex| option. Now, an \eps is requested for -% extraction, and so the file |Fig.1b.eps| is created. -% -% Notice that for both subfigures, the |preamble| was set to -% |preamble.tex|, also included in this current directory, rather than -% the default current document. Additionally, the flag |clean| has -% been used which forces the cleanup of any extraneous generated -% files. -% -% \section{ROOT}\label{sec:root} -% -% \croot has the ability to export directly to an \svg, which means -% that it is possible to completely by-pass all of \croot's internal -% text rendering machinery, and let \latex handle the text -% natively. This means that all of the ugly fonts that are rendered by -% \croot can now be completely avoided, with the additional bonus of -% being able to add references within plots. So how does one go about -% using this package with \croot? -% \begin{enumerate} -% \item Create the plot with \croot as normal, but turn off all \latex -% interpretation of text strings. This is a bit tricky, but can be -% accomplished by setting the font in \croot to a precision of zero -% as described in the documentation for -% \href{http://root.cern.ch/root/html/TAttText.html}{\tt -% TAttFill}. Remember that the font is set using the function -% |(TAttFill*)->SetTextFont(i)| where |i| is the (font type) $\times -% ~10 ~+$ (font precision). In the following lines of code, a -% |TStyle| is defined which sets the font to type ``Courier New'' -% with a precision of zero. -% \begin{example} -% TStyle *style = new TStyle("style","style"); int FONT = 80; -% style->SetTextFont(FONT); -% style->SetLabelFont(FONT,"XYZ"); -% style->SetTitleFont(FONT,"XYZ"); -% style->SetTitleFont(FONT,""); -% gROOT->SetStyle("style"); -% gROOT->ForceStyle(); -% \end{example} -% Now, just use the standard \latex syntax for creating labels, -% etc. Note however, that the backslash must be escaped due to -% interpretation of special characters by C++. -% \item Print the plot as an \svg. -% \begin{example} -% gPad->Print("foo.svg"); -% \end{example} -% \item Include the \svg within the document using this package. -% \begin{example} -% \usepackage[clean,pdf]{svg} -% ... -% \includesvg[width=\columnwidth]{foo} -% \end{example} -% \end{enumerate} +% Finally, platform dependend macros for creating directories as well as moving +% and deleting files are provided, if \file{-{}-shell-escape} is enabled. Only +% then package \pkg{ifplatform} is only used in order to do not raise a warning. +% \begin{macrocode} +\ifnum\pdf@shellescape=\@ne\relax\else% + \expandafter\endinput% +\fi +\RequirePackage{ifplatform}[2010/10/22] +% \end{macrocode} +% \begin{macro}{\svg@shell@mkdir} +% \begin{macro}{\svg@shell@@mkdir} +% \begin{macro}{\svg@shell@mv} +% \begin{macro}{\svg@shell@@mv} +% \begin{macro}{\svg@shell@rm} +% \begin{macro}{\svg@shell@@rm} +% The platform dependent commands for file access. +% \begin{macrocode} +\ifwindows + \newcommand*\svg@shell@@mkdir[1]{if not exist "#1" mkdir "#1"} + \newcommand*\svg@shell@@mv{move} + \newcommand*\svg@shell@@rm{del} +\else + \newcommand*\svg@shell@@mkdir[1]{mkdir -p "#1"} + \newcommand*\svg@shell@@mv{mv} + \newcommand*\svg@shell@@rm{rm} +\fi +% \end{macrocode} +% A directory should only be created, if it isn't the current working directory. +% \begin{macrocode} +\newcommand*\svg@shell@mkdir[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@remove{\svg@tempa}% + \@svg@tempswatrue% + \ifstr{\svg@tempa}{}{\@svg@tempswafalse}{% + \ifstr{\svg@tempa}{./}{\@svg@tempswafalse}{% + }}% + \if@svg@tempswa% + \ShellEscape{\svg@shell@@mkdir{\svg@tempa}}% + \fi% + \endgroup% +} +% \end{macrocode} +% Commands for moving and deleting files. +% \begin{macrocode} +\newcommand*\svg@shell@move[2]{% + \ShellEscape{\svg@shell@@mv\space"#1"\space"#2"}% +} +\newcommand*\svg@shell@rm[1]{% + \ShellEscape{\svg@shell@@rm\space"#1"}% +} +% \end{macrocode} +% \end{macro}^^A \svg@shell@@rm +% \end{macro}^^A \svg@shell@rm +% \end{macro}^^A \svg@shell@@mv +% \end{macro}^^A \svg@shell@mv +% \end{macro}^^A \svg@shell@@mkdir +% \end{macro}^^A \svg@shell@mkdir % -% \begin{figure} -% \begin{center} -% \includesvg[clean,preamble=preamble.tex,pdf,png,height=6cm,pretex=\tiny] -% {root} -% \end{center} -% \caption{Rendering of a \croot plot (no more ``Comic -% CERNs'').\label{fig:root}} -% \end{figure} +% \iffalse +% +% \fi +% +% \Finale +% +\endinput % -% Consider the example image produced by \croot in Figure -% \ref{fig:root}. This figure was generated by the \croot macro -% |root.C|, provided within this directory, which produces the \svg -% |root.svg| when run. The code used to produce this \svg from within -% \croot is -% \lstinputlisting[basicstyle=\footnotesize\ttfamily,columns=flexible, -% frame=single,backgroundcolor=\color{yellow!20},xleftmargin=\fboxsep, -% xrightmargin=\fboxsep,gobble=1]{root.C} where the text produced -% within the \croot plot is set to a precision of zero. The plot was -% then included within this document using the \latex code -% \begin{example} -% \begin{figure} -% \begin{center} -% \includesvg[clean,preamble=preamble.tex,pdf,png,height=6cm,pretex=\tiny] -% {root} -% \end{center} -% \caption{Rendering of a \croot plot (no more ``Comic -% CERNs'').\label{fig:root}} -% \end{figure} -% \end{example} -% which produces the extracted images |Fig.2.pdf| and -% |Fig.2.png|. Enjoy plots from \croot with natively rendered \latex! -% -% \StopEventually{\section{Thanks} Thanks to my lovely wife \'Eadaoin -% for being a very patient beta tester and important -% collaborator. Thanks is also due to J. Engelen for creating this -% functionality within \inkscape, and of course to all the developers -% of \inkscape.} -% -% \section{Implementation}\label{sec:implementation} -% -% \begin{macro}{initialization} -% The package, which requires the packages |xkeyval| for the -% options, |subfig| for automatic labeling within the subfigure -% command, the |import| package for correct handling of paths, -% |graphicx| for the \pdf inclusion commands, |transparent| for -% transparency, and |xcolor| for color, is initialized. % \iffalse -%<*svg> +%<*package&old> % \fi +% +% +% +% \section{Old Implementation} +% +% The package, which requires the packages \pkg{xkeyval} for the options, +% \pkg{subfig} for automatic labeling within the subfigure command, the +% \pkg{import} package for correct handling of paths, \pkg{graphicx} for the +% PDF~file inclusion commands, \pkg{transparent} for transparency, and +% \pkg{xcolor} for color, is initialized. % \begin{macrocode} \ProvidesPackage{svg}[2012/09/05 v1.0 SVG inclusion and extraction]% \@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}}% @@ -471,14 +5082,15 @@ urlcolor=blue]{hyperref} \@ifpackageloaded{transparent}{}{\RequirePackage{transparent}}% \@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{input definition} -% All commands used for input (i.e. for the \svg and preamble) are -% defined within the |\SVG@in| prefix, and set by the key definition -% of the line following their definition. The |exclude| boolean, -% used to stop the inclusion of the \svg within the document is also -% defined. +% +% +% \subsection{Input definition} +% +% All commands used for input (i.e. for the SVG~file and preamble) are +% defined within the \cs{SVG@in} prefix, and set by the key definition of the +% line following their definition. The \opt{exclude} boolean, used to stop the +% inclusion of the SVG~file within the document is also defined. % \begin{macrocode} \def\SVG@in@preamble{\jobname.tex}% \define@key[SVG]{svg.sty}{preamble}{\def\SVG@in@preamble{#1}}% @@ -488,29 +5100,36 @@ urlcolor=blue]{hyperref} \define@key[SVG]{svg.sty}{end}{\def\SVG@in@end{#1}}% \define@boolkey[SVG]{svg.sty}[SVG@in@]{exclude}[true]{}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{length definition} -% All commands used for output are defined within the |\SVG@out| -% prefix, beginning with the dimensions of the extracted image. If no -% dimensions are supplied both |useheight| and |usewidth| are -% |false|, and so the natural dimensions of the \svg are used. If -% both |usewidth| and |useheight| are |true|, the width is used. +% +% +% \subsection{Length definition} +% +% All commands used for output are defined within the \cs{SVG@out} prefix, +% beginning with the dimensions of the extracted image. If no dimensions are +% supplied both \cs{ifSVG@out@usewidth} and \cs{ifSVG@out@useheight} are +% \val{false}, and so the natural dimensions of the SVG~file are used. +% If both \cs{ifSVG@out@usewidth} and \cs{ifSVG@out@useheight} are +% \val{true}, the width is used. % \begin{macrocode} \newlength\SVG@out@width% \newif\ifSVG@out@usewidth% -\define@key[SVG]{svg.sty}{width}% -{\setlength{\SVG@out@width}{#1}\SVG@out@usewidthtrue}% +\define@key[SVG]{svg.sty}{width}{% + \setlength{\SVG@out@width}{#1}\SVG@out@usewidthtrue% +}% \newlength\SVG@out@height% \newif\ifSVG@out@useheight% -\define@key[SVG]{svg.sty}{height}% -{\setlength{\SVG@out@height}{#1}\SVG@out@useheighttrue}% +\define@key[SVG]{svg.sty}{height}{% + \setlength{\SVG@out@height}{#1}\SVG@out@useheighttrue% +}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{extract booleans} +% +% +% \subsection{Extract booleans} +% % The booleans for the extraction formats are defined. Additionally, -% the global export variable is defined, which is set to |true| +% the global export variable is defined, which is set to \val{true} % whenever any extraction is requested. % \begin{macrocode} \define@boolkey[SVG]{svg.sty}[SVG@out@]{pdf}[true]{}% @@ -518,11 +5137,13 @@ urlcolor=blue]{hyperref} \define@boolkey[SVG]{svg.sty}[SVG@out@]{png}[true]{}% \newif\ifSVG@out@extract % \end{macrocode} -% \end{macro} % -% \begin{macro}{output definitions} +% +% +% \subsection{Output definitions} +% % The extraction path, extraction root name, clean boolean, -% pre-\latex commands, and post-\latex commands are defined. +% pre-\LaTeX~commands, and post-\LaTeX~commands are defined. % \begin{macrocode} \def\SVG@out@path{./}% \define@key[SVG]{svg.sty}{path}{\def\SVG@out@path{#1}}% @@ -534,10 +5155,12 @@ urlcolor=blue]{hyperref} \def\SVG@out@postex{}% \define@key[SVG]{svg.sty}{postex}{\def\SVG@out@postex{#1}}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{command definitions} -% The command options are defined within the prefix |\SVG@cmd| and +% +% +% \subsection{Command definitions} +% +% The command options are defined within the prefix \cs{SVG@cmd} and % are set by the key definition following each command definition. % \begin{macrocode} \def\SVG@cmd@inkscape{inkscape -z -C}% @@ -549,29 +5172,32 @@ urlcolor=blue]{hyperref} \def\SVG@cmd@convert{convert -density 300}% \define@key[SVG]{svg.sty}{convert}{\def\SVG@cmd@convert{#1}}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{process options} -% All the options for the package are processed, and the \svg -% counter is defined. The \svg counter is used to correctly handle -% the |subfigure| counting. +% +% +% \subsection{Process options} +% +% All the options for the package are processed, and a counter is defined, +% which is used to correctly handle the \cnt{subfigure} counting. % \begin{macrocode} \ProcessOptionsX[SVG]% \newcounter{svgfigure}[figure]% % \end{macrocode} -% \end{macro} % -% \begin{macro}{\setsvg} +% +% +% \subsection{User interface} +% % Define the macro to globally set keys. % \begin{macrocode} \def\setsvg#1{\setkeys[SVG]{svg.sty}{#1}}% % \end{macrocode} -% \end{macro} % -% \begin{macro}{\includesvg} -% Define the macro used to include an \svg. Set the keys and +% Define the macro used to include a SVG~file. Set the keys and % determine if extraction should occur. % \begin{macrocode} +\newread\SVG@in@file% +\newwrite\SVG@out@file% \def\includesvg{\@ifnextchar[\@includesvg{\@includesvg[]}}% \def\@includesvg[#1]#2{% \setkeys[SVG]{svg.sty}{#1}% @@ -580,154 +5206,202 @@ urlcolor=blue]{hyperref} \ifSVG@out@eps \SVG@out@extracttrue \fi% \ifSVG@out@png \SVG@out@extracttrue \fi% % \end{macrocode} -% Run \inkscape to separate the \svg into text and image. Only run -% \inkscape if the \svg is newer than the generated text and image. -% \begin{macrocode} -\ifnum\pdfstrcmp% -{\pdffilemoddate{\SVG@in@path#2.svg}}% -{\pdffilemoddate{\SVG@in@path#2.pdf}}>0% -\immediate\write18{\SVG@cmd@inkscape \space -f\SVG@in@path#2.svg% - \space-A\SVG@in@path#2.pdf --export-latex}% -\fi% -% \end{macrocode} -% Determine the image width and height using |\includegraphics|. -% \begin{macrocode} -\ifSVG@out@usewidth% -\settoheight\SVG@out@height% -{\includegraphics[width=\SVG@out@width]{\SVG@in@path#2}}% -\else\ifSVG@out@useheight% -\settowidth\SVG@out@width% -{\includegraphics[height=\SVG@out@height]{\SVG@in@path#2}}% -\else% -\settoheight\SVG@out@height{\includegraphics{\SVG@in@path#2}}% -\settowidth\SVG@out@width{\includegraphics{\SVG@in@path#2}}% -\fi% -\fi% +% Run \app{Inkscape} to separate the SVG~file into text and image. Only +% run \app{Inkscape} if the SVG~file is newer than the generated text +% and image. +% \begin{macrocode} + \ifnum\pdfstrcmp{% + \pdffilemoddate{\SVG@in@path#2.svg}% + }{% + \pdffilemoddate{\SVG@in@path#2.pdf}% + }>0\relax% + \immediate\write18{% + \SVG@cmd@inkscape\space% + -f \SVG@in@path#2.svg\space% + -A \SVG@in@path#2.pdf\space% + --export-latex% + }% + \fi% +% \end{macrocode} +% Determine the image width and height using \cs{includegraphics}. +% \begin{macrocode} + \ifSVG@out@usewidth% + \settoheight\SVG@out@height{% + \includegraphics[width=\SVG@out@width]{\SVG@in@path#2}% + }% + \else% + \ifSVG@out@useheight% + \settowidth\SVG@out@width{% + \includegraphics[height=\SVG@out@height]{\SVG@in@path#2}% + }% + \else% + \settoheight\SVG@out@height{% + \includegraphics{\SVG@in@path#2}% + }% + \settowidth\SVG@out@width{\includegraphics{\SVG@in@path#2}}% + \fi% + \fi% % \end{macrocode} % Open the output file for extraction. -% \begin{macrocode} +% \begin{macrocode} % Open the output file. -\ifSVG@out@extract% -\newwrite\SVG@out@file% -\setcounter{svgfigure}{\value{figure}}% -\stepcounter{svgfigure}% -\def\SVG@out@filename{\SVG@out@name}% -\immediate\openout\SVG@out@file=\SVG@out@path\SVG@out@filename.tex% -\fi% + \ifSVG@out@extract% + \setcounter{svgfigure}{\value{figure}}% + \stepcounter{svgfigure}% + \def\SVG@out@filename{\SVG@out@name}% + \immediate\openout\SVG@out@file=\SVG@out@path\SVG@out@filename.tex% + \fi% % \end{macrocode} % Open and write the preamble. Notice that the catcodes for |#| need % to be changed to prevent double expansion when reading the line. -% \begin{macrocode} -\ifSVG@out@extract% -\def\SVG@in@line{}% -\newread\SVG@in@file% -\immediate\openin\SVG@in@file=\SVG@in@preamble% -\fi% -\newif\ifSVG@in@read% -\ifSVG@out@extract \SVG@in@readtrue \fi% -\@whilesw\ifSVG@in@read\fi{% - \catcode`\#=12\relax\endlinechar=-1% - \immediate\read\SVG@in@file to \SVG@in@line% - \ifx\SVG@in@end\SVG@in@line% - \SVG@in@readfalse% - \else% - \immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@in@line}}% +% \begin{macrocode} + \ifSVG@out@extract% + \def\SVG@in@line{}% + \immediate\openin\SVG@in@file=\SVG@in@preamble% \fi% - \ifeof\SVG@in@file\SVG@in@readfalse\fi% - \endlinechar=13\catcode`\#=6\relax}% -\ifSVG@out@extract \immediate\closein\SVG@in@file \fi% + \newif\ifSVG@in@read% + \ifSVG@out@extract \SVG@in@readtrue \fi% + \@whilesw\ifSVG@in@read\fi{% + \catcode`\#=12\relax\endlinechar=-1% + \immediate\read\SVG@in@file to \SVG@in@line% + \ifx\SVG@in@end\SVG@in@line% + \SVG@in@readfalse% + \else% + \immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@in@line}}% + \fi% + \ifeof\SVG@in@file\SVG@in@readfalse\fi% + \endlinechar=13\catcode`\#=6\relax% + }% + \ifSVG@out@extract \immediate\closein\SVG@in@file \fi% % \end{macrocode} % Now write everything needed after the preamble. This includes -% requiring the |import| package and defining all the dimensions need +% requiring the \pkg{import} package and defining all the dimensions need % to match the document size with the image size. -% \begin{macrocode} -\ifSVG@out@extract% -\def\SVG@out@defpack{\makeatletter% - \@ifpackageloaded{import}{}{\RequirePackage{import}}% - \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}% - \@ifpackageloaded{transparent}{}{\RequirePackage{transparent}}% - \@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}\makeatother}% -\def\SVG@out@defwidth{\def\svgwidth{0.99\textwidth}}% -\def\SVG@out@definput{\import{\SVG@in@path}{#2.pdf_tex}}% -\immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@out@defpack}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\pdfpagewidth}{\the\SVG@out@width}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\pdfpageheight}{\the\SVG@out@height}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\paperheight}{\pdfpageheight}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\paperwidth}{\pdfpagewidth}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textheight}{\paperheight}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textwidth}{\paperwidth}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textheight}{\paperheight}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\oddsidemargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\evensidemargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\topmargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\headheight}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\headsep}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\topskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\footskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parindent}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parsep}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\begin{document}}% - \immediate\write\SVG@out@file{% - \noexpand\pagestyle{empty}% - \noexpand\begin{center}% - \unexpanded\expandafter{\SVG@out@defwidth}% - \unexpanded\expandafter{\SVG@out@pretex}% - \expandafter\noexpand\SVG@out@definput% - \unexpanded\expandafter{\SVG@out@postex}% - \noexpand\end{center}}% - \immediate\write\SVG@out@file{\noexpand\end{document}}% -\immediate\closeout\SVG@out@file% -\fi% -% \end{macrocode} -% Run \latex on the extracted file and create the \pdf. -% \begin{macrocode} -\ifSVG@out@extract% -\immediate\write18{\SVG@cmd@pdflatex\space\SVG@out@path\SVG@out@filename.tex}% -\fi% -% \end{macrocode} -% Convert the \pdf to \eps if requested. -% \begin{macrocode} -\ifSVG@out@eps% -\immediate\write18{\SVG@cmd@pdftops\space\SVG@out@filename.pdf}% -\immediate\write18{mv \SVG@out@filename.eps% - \space\SVG@out@path\SVG@out@filename.eps}% -\fi% -% \end{macrocode} -% Convert the \pdf to \png if requested. -% \begin{macrocode} -\ifSVG@out@png% -\immediate\write18{\SVG@cmd@convert\space\SVG@out@filename.pdf% - \space\SVG@out@filename.png}% -\immediate\write18{mv \SVG@out@filename.png% - \space\SVG@out@path\SVG@out@filename.png}% -\fi% +% \begin{macrocode} + \ifSVG@out@extract% + \def\SVG@out@defpack{% + \makeatletter% + \@ifpackageloaded{import}{}{\RequirePackage{import}}% + \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}% + \@ifpackageloaded{transparent}{}{\RequirePackage{transparent}}% + \@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}% + \makeatother% + }% + \def\SVG@out@defwidth{\def\svgwidth{0.99\textwidth}}% + \def\SVG@out@definput{\import{\SVG@in@path}{#2.pdf_tex}}% + \immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@out@defpack}}% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\pdfpagewidth}{\the\SVG@out@width}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\pdfpageheight}{\the\SVG@out@height}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\paperheight}{\pdfpageheight}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\paperwidth}{\pdfpagewidth}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\textheight}{\paperheight}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\textwidth}{\paperwidth}% + }% + \immediate\write\SVG@out@file{% + \noexpand\setlength{\textheight}{\paperheight}% + }% + \immediate\write\SVG@out@file{\noexpand\setlength{\oddsidemargin}{-1in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\evensidemargin}{-1in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\topmargin}{-1in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\headheight}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\headsep}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\topskip}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\footskip}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\parindent}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\parsep}{0in}}% + \immediate\write\SVG@out@file{\noexpand\setlength{\parskip}{0in}}% + \immediate\write\SVG@out@file{% + \noexpand\begin{document}% + \noexpand\pagestyle{empty}% + \noexpand\begin{center}% + \unexpanded\expandafter{\SVG@out@defwidth}% + \unexpanded\expandafter{\SVG@out@pretex}% + \expandafter\noexpand\SVG@out@definput% + \unexpanded\expandafter{\SVG@out@postex}% + \noexpand\end{center}% + \noexpand\end{document}% + }% + \immediate\closeout\SVG@out@file% + \fi% +% \end{macrocode} +% Run \LaTeX{} on the extracted file and create the PDF~file. +% \begin{macrocode} + \ifSVG@out@extract% + \immediate\write18{% + \SVG@cmd@pdflatex\space\SVG@out@path\SVG@out@filename.tex% + }% + \fi% +% \end{macrocode} +% Convert the PDF~file to EPS~file if requested. +% \begin{macrocode} + \ifSVG@out@eps% + \immediate\write18{\SVG@cmd@pdftops\space\SVG@out@filename.pdf}% + \immediate\write18{% + mv \SVG@out@filename.eps\space\SVG@out@path\SVG@out@filename.eps% + }% + \fi% +% \end{macrocode} +% Convert the PDF~file to PNG~file if requested. +% \begin{macrocode} + \ifSVG@out@png% + \immediate\write18{% + \SVG@cmd@convert\space% + \SVG@out@filename.pdf\space\SVG@out@filename.png% + }% + \immediate\write18{% + mv \SVG@out@filename.png\space\SVG@out@path\SVG@out@filename.png% + }% + \fi% % \end{macrocode} % Clean up if requested. -% \begin{macrocode} -\ifSVG@out@extract% -\ifSVG@out@pdf% -\immediate\write18{mv \SVG@out@filename.pdf% - \space\SVG@out@path\SVG@out@filename.pdf}% -\else \ifSVG@out@clean \immediate\write18{rm \SVG@out@filename.pdf} \fi% -\fi% -\ifSVG@out@clean% -\immediate\write18{rm \SVG@out@path\SVG@out@filename.tex% - \space\SVG@out@filename.aux \SVG@out@filename.log \SVG@out@filename.out}% -\fi\fi% -% \end{macrocode} -% Finally, include the \svg in the current document and end the package. -% \begin{macrocode} -\ifSVG@in@exclude \else {\def\svgwidth{\the\SVG@out@width}% -\SVG@out@pretex\import{\SVG@in@path}{#2.pdf_tex}\SVG@out@postex} \fi% +% \begin{macrocode} + \ifSVG@out@extract% + \ifSVG@out@pdf% + \immediate\write18{% + mv \SVG@out@filename.pdf\space\SVG@out@path\SVG@out@filename.pdf% + }% + \else% + \ifSVG@out@clean \immediate\write18{rm \SVG@out@filename.pdf} \fi% + \fi% + \ifSVG@out@clean% + \immediate\write18{% + rm + \SVG@out@path\SVG@out@filename.tex\space% + \SVG@out@filename.aux\space% + \SVG@out@filename.log\space% + \SVG@out@filename.out% + }% + \fi% + \fi% +% \end{macrocode} +% Finally, include the SVG~file in the current document and end the package. +% \begin{macrocode} + \ifSVG@in@exclude\else% + {% + \def\svgwidth{\the\SVG@out@width}% + \SVG@out@pretex% + \import{\SVG@in@path}{#2.pdf_tex}% + \SVG@out@postex% + }% + \fi% }% % \end{macrocode} -% \end{macro} +% % \iffalse -% +% % \fi -% \Finale \ No newline at end of file +% +% \Finale +% +\endinput diff --git a/Master/texmf-dist/tex/latex/svg/svg-extract.sty b/Master/texmf-dist/tex/latex/svg/svg-extract.sty new file mode 100644 index 00000000000..b3d1a728880 --- /dev/null +++ b/Master/texmf-dist/tex/latex/svg/svg-extract.sty @@ -0,0 +1,1147 @@ +%% +%% This is file `svg-extract.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% svg.dtx (with options: `package,option,extract') +%% svg.dtx (with options: `package,body,extract') +%% +%% svg-extract -- Extract independent graphic files from SVG pictures +%% +%% Copyright (C) Philip Ilten , 2012-2016 +%% Copyright (C) Falk Hanisch , 2017- +%% +%% This file was generated from file svg.dtx. +%% ---------------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the conditions +%% of the LaTeX Project Public License, version 1.3c of the license. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3c or later is part of all distributions of +%% LaTeX 2005/12/01 or later and of this work. +%% +%% This work has the LPPL maintenance status "author-maintained". +%% +%% The current maintainer and author of this work is Falk Hanisch. +%% +%% This work consists of the main source file README.md, LICENSE.md, svg.dtx and +%% the derived documentation svg.pdf as well as the example files svg-example.svg, +%% svg-preamble.tex and root.C (with derived file root.svg). +%% +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{svg-extract}[% + 2017/03/27 v2.00\space% + (extract independent graphics from SVG pictures)% +] +\RequirePackage{svg}[2017/03/27] +\DefineFamily{SVG} +\DefineFamilyMember{SVG} +\newif\if@svgx@run +\DefineFamilyKey{SVG}{extract}[true]{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{extract}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {overwrite}{1},{force}{1},{forced}{1},% + {pdf}{2},{eps}{3},{ps}{4}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \@svgx@runfalse% + \or% true + \@svgx@runtrue% + \or% pdf + \FamilyOptions{SVG}{extractformat=pdf}% + \or% eps + \FamilyOptions{SVG}{extractformat=eps}% + \or% ps + \FamilyOptions{SVG}{extractformat=ps}% + \fi% + \fi% +} +\DeclareOption{on}{\FamilyOptions{SVG}{extract=true}} +\DeclareOption{off}{\FamilyOptions{SVG}{extract=false}} +\newcommand*\svgx@format{pdf} +\ifxetex\else\ifpdf\else + \renewcommand*\svgx@format{eps} +\fi\fi +\DefineFamilyKey{SVG}{extractformat}{% + \lowercase{\edef\svgx@format{#1}}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdf}[true]{% + \FamilySetBool{SVG}{pdf}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{pdf}{\svgx@format}{}{% + \edef\svgx@format{\svgx@format,pdf}% + }% + \svg@deprecated@key{pdf}{extractformat={\svgx@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +\DefineFamilyKey{SVG}{eps}[true]{% + \FamilySetBool{SVG}{eps}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{eps}{\svgx@format}{}{% + \edef\svgx@format{\svgx@format,eps}% + }% + \svg@deprecated@key{eps}{extractformat={\svgx@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +\newcommand*\svgx@preamble{\jobname.\svgx@latex@ext}% +\DefineFamilyKey{SVG}{extractpreamble}{% + \renewcommand*\svgx@preamble{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{preamble}{% + \svg@deprecated@key[svg-extract]{preamble=#1}{extractpreamble=#1}% +} +\newcommand*\svgx@endpreamble{} +\expandafter\def\expandafter\svgx@endpreamble\expandafter{% + \csname begin\endcsname{document}% +} +\DefineFamilyKey{SVG}{extractpreambleend}{% + \renewcommand*\svgx@endpreamble{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{end}{% + \svg@deprecated@key[svg-extract]{end=#1}{extractpreambleend=#1}% +} +\newcounter{svgx@runs} +\DefineFamilyKey{SVG}{extractruns}{% + \FamilySetCounter{SVG}{extractruns}{svgx@runs}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifnum\value{svgx@runs}<\@ne\relax% + \PackageWarning{svg-extract}{% + The count for runs has to be at least one% + }% + \FamilySetCounter{SVG}{extractruns}{svgx@runs}{\@ne}% + \fi% + \fi% +} +\ifxetex + \newcommand*\svgx@latex@exe{xelatex} +\else\ifluatex + \ifpdf + \newcommand*\svgx@latex@exe{lualatex} + \else + \newcommand*\svgx@latex@exe{lualatex --output-format=dvi} + \fi +\else\ifpdf + \newcommand*\svgx@latex@exe{pdflatex} +\else + \newcommand*\svgx@latex@exe{latex} +\fi\fi\fi +\DefineFamilyKey{SVG}{latexexe}{% + \renewcommand*\svgx@latex@exe{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdflatex}{% + \svg@deprecated@key[svg-extract]{pdflatex=#1}{latexexe=#1}% +} +\newcommand*\svgx@latex@ext{tex} +\DefineFamilyKey{SVG}{latexext}{% + \renewcommand*\svgx@latex@ext{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@latex@opt{} +\DefineFamilyKey{SVG}{latexopt}{% + \renewcommand*\svgx@latex@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@dvips@exe{dvips} +\newcommand*\svgx@dvips@opt{} +\DefineFamilyKey{SVG}{dvipsopt}{% + \renewcommand*\svgx@dvips@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pstoeps@exe{ps2eps} +\newcommand*\svgx@pstoeps@opt{-B -C} +\DefineFamilyKey{SVG}{pstoepsopt}{% + \renewcommand*\svgx@pstoeps@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pstopdf@exe{ps2pdf} +\newcommand*\svgx@pstopdf@opt{} +\DefineFamilyKey{SVG}{pstopdfopt}{% + \renewcommand*\svgx@pstopdf@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pdftoeps@exe{pdftops -eps} +\newcommand*\svgx@pdftoeps@opt{} +\DefineFamilyKey{SVG}{pdftoepsopt}{% + \renewcommand*\svgx@pdftoeps@opt{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@pdftops@exe{pdftops} +\newcommand*\svgx@pdftops@opt{} +\DefineFamilyKey{SVG}{pdftopsopt}{% + \renewcommand*\svgx@pdftops@opt{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{pdftops}{% + \PackageWarning{#1}{% + The option key `pdftops' is deprecated.\MessageBreak% + You should use either `pdftoepsopt' or\MessageBreak% + `pdftopsopt' instead. See the manual for\MessageBreak% + more. Nothing was done% + }% + \FamilyKeyStateProcessed +} +\newif\if@svgx@cnv@run +\newcommand*\svgx@cnv@cmd{} +\DefineFamilyKey{SVG}{convert}[true]{% + \FamilySetNumerical{SVG}{convert}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {overwrite}{1},{force}{1},{forced}{1},% + {magick}{2},{imagemagick}{2},{convert}{2},% + {gs}{3},{ghostscript}{3},% + {gs64}{4},{ghostscript64}{4},% + {gs32}{5},{ghostscript32}{5}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \@svgx@cnv@runfalse% + \or% true + \@svgx@cnv@runtrue% + \or% magick + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@magick@cmd}% + \or% gs + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \or% gs64 + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \svgx@onlywindows{% + \renewcommand*\svgx@gs@exe{gswin64c}% + }% + \or% gs32 + \@svgx@cnv@runtrue% + \renewcommand*\svgx@cnv@cmd{\svgx@gs@cmd}% + \svgx@onlywindows{% + \renewcommand*\svgx@gs@exe{gswin32c}% + }% + \fi% + \else% + \def\svg@tempa##1-##2\@nil{% + \IfArgIsEmpty{##2}{\def\svg@tempb{}}{% + \def\svg@tempa##1####1\@nil{\def\svg@tempb{####1}}% + \svg@tempa#1\@nil% + }% + \def\svg@tempa{##1}% + }% + \svg@tempa#1-\@nil% + \PackageWarning{svg-extract}{% + Setting the executable% + \ifx\svg@tempb\@empty\else% + \space and associated options% + \fi% + \MessageBreak% + for ImageMagick should be done with options\MessageBreak% + `magickexe=\svg@tempa'% + \ifx\svg@tempb\@empty\else% + \MessageBreak and `magicksetting' and/or `magickoperator'% + \fi.\MessageBreak% + Nevertheless, this was done by now% + \ifx\svg@tempb\@empty\else% + , whereby \MessageBreak `magicksetting=\svg@tempb' was used% + \fi% + }% + \FamilyOptions{SVG}{convert=magick}% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{magickexe=\svg@tempa}% + \ifx\svg@tempb\@empty\else% + \noexpand\FamilyOptions{SVG}{magicksetting=\svg@tempb}% + \fi% + }% + \svg@tempa% + \fi% +} +\newcommand*\svgx@cnv@format{png} +\DefineFamilyKey{SVG}{convertformat}{% + \lowercase{\edef\svgx@cnv@format{#1}}% + \ifx\svgx@cnv@format\@empty\else% + \@svgx@cnv@runtrue% + \fi% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{png}[true]{% + \FamilySetBool{SVG}{png}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \svgx@ifinlist{png}{\svgx@cnv@format}{}{% + \edef\svgx@cnv@format{\svgx@cnv@format,png}% + }% + \svg@deprecated@key{png}{convertformat={\svgx@cnv@format}}% + \else% + \FamilyKeyStateUnknownValue + \fi% + \fi% +} +\newcommand*\svgx@cnv@dpi{} +\let\svgx@cnv@dpi\relax +\DefineFamilyKey{SVG}{convertdpi}{% + \FamilyKeyStateUnknownValue% + \svgx@ifkeyandval{#1}{% + \svgx@cnv@get@dpi{##2}% + \ifx\svg@tempa\relax\else% + \expandafter\edef\csname svgx@cnv@dpi@##1\endcsname{\svg@tempa}% + \FamilyKeyStateProcessed% + \fi% + }{% + \svgx@cnv@get@dpi{##1}% + \ifx\svg@tempa\relax\else% + \edef\svgx@cnv@dpi{\svg@tempa}% + \FamilyKeyStateProcessed% + \fi% + }% +} +\DefineFamilyKey{SVG}{convertdensity}{\FamilyOptions{SVG}{convertdpi=#1}} +\newcommand*\svgx@magick@exe{} +\DefineFamilyKey{SVG}{magickexe}{% + \renewcommand*\svgx@magick@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@magick@set{} +\DefineFamilyKey{SVG}{magicksetting}{% + \svgx@setformatkey{#1}{svgx@magick@set}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@magick@opr{} +\DefineFamilyKey{SVG}{magickoperator}{% + \svgx@setformatkey{#1}{svgx@magick@opr}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@gs@exe{} +\DefineFamilyKey{SVG}{gsexe}{% + \renewcommand*\svgx@gs@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@gs@opt{} +\DefineFamilyKey{SVG}{gsopt}{% + \svgx@setformatkey{#1}{svgx@gs@opt}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@gs@device{} +\DefineFamilyKey{SVG}{gsdevice}{% + \svgx@setformatkey{#1}{svgx@gs@device}% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@out@path{} +\DefineFamilyKey{SVG}{extractpath}{% + \FamilySetNumerical{SVG}{extractpath}{svg@tempa}{% + {svgpath}{0},{svgdir}{0},% + {svgsubpath}{1},{svgsubdir}{1},% + {basepath}{2},{basedir}{2},{jobpath}{2},{jobdir}{2},% + {basesubpath}{3},{basesubdir}{3},{jobsubpath}{3},{jobsubdir}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% svgpath + \renewcommand*\svgx@out@path{\svg@file@path}% + \or% svgsubpath + \renewcommand*\svgx@out@path{\svg@file@path svg-extract/}% + \or% basepath + \renewcommand*\svgx@out@path{./}% + \or% basesubpath + \renewcommand*\svgx@out@path{./svg-extract/}% + \fi% + \else% + \renewcommand*\svgx@out@path{#1}% + \svg@normalize@path{\svgx@out@path}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{path}{% + \svg@deprecated@key[svg-extract]{path=#1}{extractpath=#1}% +} +\newcounter{svgx@out@count} +\newcommand*\svgx@out@name{} +\newif\if@svgx@out@sec +\DefineFamilyKey{SVG}{extractname}{% + \FamilySetNumerical{SVG}{extractname}{svg@tempa}{% + {filename}{0},{name}{0},% + {filenamenumbered}{1},{namenumbered}{1},% + {numberedfilename}{1},{numberedname}{1},% + {numbered}{2},{section}{2},{numberedsection}{2},{sectionnumbered}{2}% + }{#1}% + \@svgx@out@secfalse% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% filename + \renewcommand*\svgx@out@name{\svg@out@name-extract}% + \or% filenamenumbered + \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svg@out@name}% + \or% numbered + \renewcommand*\svgx@out@name{\the\value{svgx@out@count}-\svgx@out@sec}% + \@svgx@out@sectrue% + \fi% + \else% + \def\svg@tempa##1.##2\@nil{% + \IfArgIsEmpty{##1}{}{\renewcommand*\svgx@out@name{##1}}% + }% + \svg@tempa#1.\@nil% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{name}{% + \svg@deprecated@key[svg-extract]{name=#1}{extractname=#1}% +} +\newcommand*\svgx@param@width{\svg@param@width} +\DefineFamilyKey{SVG}{extractwidth}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@width{\z@}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@width{\svg@param@width}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{extractwidth}{\svgx@param@width}{#1}% + \ifdim\svgx@param@width<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% + }% +} +\newcommand*\svgx@param@height{\svg@param@height} +\DefineFamilyKey{SVG}{extractheight}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@height{\z@}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@height{\svg@param@height}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{extractheight}{\svgx@param@height}{#1}% + \ifdim\svgx@param@height<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% + }% +} +\newcommand*\svgx@param@scale{\svg@param@scale} +\DefineFamilyKey{SVG}{extractscale}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svgx@param@scale{1}% + \FamilyKeyStateProcessed% + }{% + \ifstr{#1}{inherit}{% + \renewcommand*\svgx@param@scale{\svg@param@scale}% + \FamilyKeyStateProcessed% + }{% + \ifisdimension{#1\p@}{% + \ifdim\dimexpr#1\p@\relax>\z@\relax% + \renewcommand*\svgx@param@scale{#1}% + \FamilyKeyStateProcessed% + \fi% + }{}% + }% + }% +} +\newcommand*\svgx@param@pretex{\svg@param@pretex} +\DefineFamilyKey{SVG}{extractpretex}{% + \svg@ifvalueisrelax{#1}{% + \let\svgx@param@pretex\relax% + }{% + \ifstr{#1}{inherit}{% + \def\svgx@param@pretex{\svg@param@pretex}% + }{% + \def\svgx@param@pretex{#1}% + }% + }% + \FamilyKeyStateProcessed% +} +\newcommand*\svgx@param@apptex{\svg@param@apptex} +\DefineFamilyKey{SVG}{extractapptex}{% + \svg@ifvalueisrelax{#1}{% + \let\svgx@param@apptex\relax% + }{% + \ifstr{#1}{inherit}{% + \def\svgx@param@apptex{\svg@param@apptex}% + }{% + \def\svgx@param@apptex{#1}% + }% + }% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{extractpostex}{% + \svg@deprecated@key[svg-extract]{extractpostex=#1}{extractapptex=#1}% +} +\newcommand*\svgx@clean{} +\DefineFamilyKey{SVG}{clean}[true]{% + \FamilySetBool{SVG}{clean}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \renewcommand*\svgx@clean{log,aux,dvi,out,ps,eps,pdf,\svgx@latex@ext}% + \else% + \renewcommand*\svgx@clean{}% + \fi% + \else% + \renewcommand*\svgx@clean{#1}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{clear}{\FamilyOptions{SVG}{clean=#1}} +\DefineFamilyKey{SVG}{exclude}[true]{% + \FamilySetBool{SVG}{exclude}{@svg@tempswa}{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \if@svg@tempswa% + \renewcommand*\svg@input[2][]{% + \if@svgx@run\else% + \PackageWarning{svg-extract}{% + The image `##2' was\MessageBreak% + neither extracted nor included% + }% + \fi% + }% + \else% + \renewcommand*\svg@input{\svg@@input}% + \fi% + \fi% +} +\newcommand*\svgx@ifinlist[2]{% + \begingroup% + \def\svg@tempa##1,#1,##2\@nil{% + \IfArgIsEmpty{##2}{% + \aftergroup\@secondoftwo% + }{% + \aftergroup\@firstoftwo% + }% + }% + \expandafter\svg@tempa\expandafter,#2,#1,\@nil% + \endgroup% +} +\newcommand*\svgx@onlywindows[1]{} +\AfterPackage*{ifplatform}{\renewcommand*\svgx@onlywindows[1]{\ifwindows#1\fi}} +\newcommand*\svgx@ifkeyandval[3]{% + \def\svg@tempa##1=##2=##3\@nil{\ifstr{##3}{=}{#2}{#3}}% + \svg@tempa#1==\@nil% +} +\newcommand*\svgx@cnv@get@dpi[1]{% + \begingroup% + \def\svg@tempa##1dpi##2x##3dpi##4\@nil{% + \edef\svg@tempa{##1}% + \@svg@tempswafalse% + \ifnumber{##1}{% + \IfArgIsEmpty{##3}{\@svg@tempswatrue}{% + \ifnumber{##3}{\edef\svg@tempa{##1x##3}}{}% + }% + }{}% + \if@svg@tempswa\else% + \expandafter\svg@tempb\svg@tempa xx\@nil% + \fi% + }% + \def\svg@tempb##1x##2x##3\@nil{% + \ifstr{##3}{x}{% + \@svg@tempswatrue% + \IfArgIsEmpty{##1}{\@svg@tempswafalse}{% + \ifnumber{##1}{}{\@svg@tempswafalse}% + }% + \IfArgIsEmpty{##2}{\@svg@tempswafalse}{% + \ifnumber{##2}{}{\@svg@tempswafalse}% + }% + \if@svg@tempswa% + \edef\svg@tempa{##1x##2}% + \fi% + }{}% + }% + \IfArgIsEmpty{#1}{% + \let\svg@tempa\@empty% + }{% + \lowercase{\svg@tempa#1dpi#1xdpi\@nil}% + \if@svg@tempswa\else% + \let\svg@tempa\relax% + \fi% + }% + \edef\svg@tempb{% + \noexpand\endgroup% + \ifx\svg@tempa\relax% + \noexpand\let\noexpand\svg@tempa\noexpand\relax% + \else% + \noexpand\def\noexpand\svg@tempa{\svg@tempa}% + \fi% + }% + \svg@tempb% +} +\newcommand*\svgx@setformatkey[2]{% + \svgx@ifkeyandval{#1}{% + \svg@ifvalueisrelax{##2}{% + \expandafter\let\csname #2@##1\endcsname\relax% + }{% + \@namedef{#2@##1}{##2}% + }% + }{% + \svg@ifvalueisrelax{##1}{% + \expandafter\let\csname #2\endcsname\relax% + }{% + \@namedef{#2}{##1}% + }% + }% +} +\newcommand*\svgx@useformatkey[3]{% + \scr@ifundefinedorrelax{#1@#2}{% + \scr@ifundefinedorrelax{#1}{}{% + \expandafter\ifx\csname #1\endcsname\@empty\else% + #3\@nameuse{#1}\space% + \fi% + }% + \scr@ifundefinedorrelax{#1@#2+}{}{% + \expandafter\ifx\csname #1@#2+\endcsname\@empty\else% + #3\@nameuse{#1@#2+}\space% + \fi% + }% + }{% + \expandafter\ifx\csname #1@#2\endcsname\@empty\else% + #3\@nameuse{#1@#2}\space% + \fi% + }% +} +\newbox\svgx@box +\newcommand*\svgxsetbox[2][]{% + \sbox\svgx@box{\svg@@input[{#1},draft=false]{#2}}% + \csname @tud@x@standalone@croptrue\endcsname% + \svgxsetpapersize% +} +\newcommand*\svgxsetpapersize{% + \setlength\paperwidth{\the\wd\svgx@box}% + \ifx\stockwidth\@undefined\else% + \setlength\stockwidth{\paperwidth}% + \fi% + \ifx\mediawidth\@undefined\else% + \setlength\mediawidth{\paperwidth}% + \fi% + \setlength\textwidth{\paperwidth}% + \setlength\paperheight{\the\dimexpr\ht\svgx@box+\dp\svgx@box\relax}% + \ifx\stockheight\@undefined\else% + \setlength\stockheight{\paperheight}% + \fi% + \ifx\mediaheight\@undefined\else% + \setlength\mediaheight{\paperheight}% + \fi% + \setlength\textheight{\paperheight}% + \hoffset=-1in% + \oddsidemargin=\z@% + \evensidemargin=\z@% + \voffset=-1in% + \topmargin=\z@% + \headheight=\z@% + \headsep=\z@% + \topskip=\z@% + \footskip=\z@% + \marginparsep=\z@% + \marginparwidth=\z@% + \marginparpush=\z@% +} +\@onlypreamble\svgxsetpapersize +\newif\if@svgx@beamer +\@ifclassloaded{beamer}{\@svgx@beamertrue}{}% +\newcommand*\svgxoutputbox{% + \begingroup% + \setlength\parindent{\z@}% + \setlength\parskip{\z@}% + \setlength\parfillskip{\z@}% + \if@svgx@beamer% + \setbeamertemplate{navigation symbols}{}% + \begin{frame}[plain]% + \usebox\svgx@box% + \end{frame}% + \else% + \usebox\svgx@box% + \fi% + \endgraf% + \endgroup% +} +\FamilyExecuteOptions{SVG}{% + extract=true,extractpath=basesubdir,extractruns=2,extractname=namenumbered,% + convert=magick,convert=false,% + gsdevice={png=png16m},gsdevice={jpeg=jpeg},gsdevice={jpg=jpeg},% + gsdevice={tif=tiff48nc},gsdevice={tiff=tiff48nc},% + gsdevice={eps=eps2write},gsdevice={ps=ps2write}% +} +\FamilyProcessOptions{SVG} +\let\svghidepreamblestart\relax +\let\svghidepreambleend\relax +\ifnum\pdf@shellescape=\@ne\relax\else% + \renewcommand*\svg@extract[1]{% + \if@svgx@run% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg-extract}{% + You didn't enable `shell escape' (or `write18')\MessageBreak% + so it wasn't possible to run the extraction for\MessageBreak% + file `\svg@tempa'% + }% + \endgroup% + \fi% + }% + \expandafter\endinput% +\fi +\newread\svgx@stream@in +\newcommand*\svgx@read@line{} +\newwrite\svgx@stream@out +\newif\if@svgx@preamble@write +\renewcommand*\svg@extract[1]{% + \if@svgx@run% + \if@svgx@out@sec% + \svgx@get@out@sec% + \fi% + \stepcounter{svgx@out@count}% + \begingroup% + \def\svg@tempa##1.##2\@nil{% + \IfArgIsEmpty{##2}{\edef\svgx@preamble{##1.\svgx@latex@ext}}{}% + }% + \expandafter\svg@tempa\svgx@preamble.\@nil% + \IfFileExists{\svg@file@path\svgx@preamble}{% + \@svg@file@foundtrue% + }{% + \svg@get@path[]{\svgx@preamble}{\svg@out@path}% + \def\svg@tempa####1.####2\@nil{% + \edef\svgx@preamble{\svg@file@name.####2}% + }% + \expandafter\svg@tempa\svgx@preamble\@nil% + }% + \edef\svg@tempa{% + \endgroup% + \if@svg@file@found% + \ifx\svg@file@path\@empty% + \def\noexpand\svgx@preamble{./\svgx@preamble}% + \else% + \def\noexpand\svgx@preamble{\svg@file@path\svgx@preamble}% + \fi% + \fi% + }% + \svg@tempa% + \begingroup% + \endlinechar=\m@ne% + \IfFileExists{\svgx@preamble}{% + \PackageInfo{svg-extract}{% + The preamble file `\svgx@preamble'\MessageBreak% + is used for the generation of the auxiliary file\MessageBreak% + `\svgx@out@name.\svgx@latex@ext'% + }% + \catcode`\#=12\relax% + \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext% + \immediate\openin\svgx@stream@in=\svgx@preamble% + \@svg@tempswatrue% + \@svgx@preamble@writetrue% + \def\svgx@read@line{}% + \@whilesw\if@svg@tempswa\fi{% + \immediate\read\svgx@stream@in to\svgx@read@line% + \ifx\svgx@read@line\@empty% + \ifeof\svgx@stream@in\@svg@tempswafalse\fi% + \else% + \svgx@read@preamble@till{\svghidepreamblestart}{}% + \svgx@read@preamble@from{\svghidepreambleend}{}% + \svgx@read@preamble@till{\svgx@endpreamble}{\@svg@tempswafalse}% + \if@svgx@preamble@write% + \if@svgx@classfound\else% + \expandafter\svgx@documentclass% + \svgx@read@line\documentclass\documentclass\@nil% + \fi% + \ifx\svgx@read@line\@empty\else% + \immediate\write\svgx@stream@out{% + \unexpanded\expandafter{\svgx@read@line}% + }% + \fi% + \fi% + \fi% + }% + \immediate\closein\svgx@stream@in% + \immediate\closeout\svgx@stream@out% + \catcode`\#=6\relax% + \immediate\openin\svgx@stream@in=\svgx@out@name.\svgx@latex@ext% + \def\svg@tempa{}% + \loop\unless\ifeof\svgx@stream@in% + \readline\svgx@stream@in to\svgx@read@line% + \ifx\svgx@read@line\@empty\else% + \edef\svg@tempa{% + \unexpanded\expandafter{\svg@tempa}% + \unexpanded\expandafter{\svgx@read@line}^^J% + }% + \fi% + \repeat% + \immediate\closein\svgx@stream@in% + }{% + \svg@quotes@remove{\svgx@preamble}% + \ifx\svgx@preamble\@empty\else% + \PackageWarning{svg-extract}{% + The preamble file `\svgx@preamble'\MessageBreak% + does not exist% + }% + \fi% + \def\svg@tempa{}% + }% + \immediate\openout\svgx@stream@out=\svgx@out@name.\svgx@latex@ext% + \immediate\write\svgx@stream@out{% + \@percentchar\@percentchar\space This file was generated by package + `svg-extract'^^J% + \@percentchar\@percentchar\space from source `\jobname'^^J% + \@percentchar\@percentchar\space It's intended to be compiled with + `\svgx@latex@exe\ifx\svgx@latex@opt\@empty\else\space\svgx@latex@opt\fi' + }% + \immediate\write\svgx@stream@out{% + \string\AtBeginDocument{\@percentchar^^J% + \space\space\string\svgxsetpapersize\@percentchar^^J% + \ifxetex\else\ifpdf\else% + \space\space\string\AtBeginDvi{\string\special{% + papersize=\string\the\string\paperwidth,% + \string\the\string\paperheight% + }}\@percentchar^^J% + \fi\fi% + }^^J% + \string\PassOptionsToPackage{hidelinks}{hyperref}% + }% + \if@svgx@classfound\else% + \immediate\write\svgx@stream@out{\string\documentclass{article}}% + \fi% + \ifx\svg@tempa\@empty\else% + \immediate\write\svgx@stream@out{\unexpanded\expandafter{\svg@tempa}}% + \fi% + \immediate\write\svgx@stream@out{\string\usepackage{svg-extract}}% + \def\svg@tempa##1{% + \immediate\write\svgx@stream@out{\string\svgsetup{##1}}% + }% + \if@svg@ink@latex\else% + \svg@tempa{inkscapelatex=false}% + \fi% + \ifdim\svgx@param@width>\z@\relax% + \svg@tempa{width=\svgx@param@width}% + \fi% + \ifdim\svgx@param@height>\z@\relax% + \svg@tempa{height=\svgx@param@height}% + \fi% + \ifdim\dimexpr\svgx@param@scale\p@\relax=\p@\relax\else% + \svg@tempa{scale=\svgx@param@scale}% + \fi% + \def\svg@tempb{\svg@param@pretex}% + \ifx\svgx@param@pretex\svg@tempb\relax% + \let\svgx@param@pretex\svg@param@pretex% + \fi% + \ifx\svgx@param@pretex\relax\else% + \svg@tempa{pretex=\unexpanded\expandafter{\svgx@param@pretex}}% + \fi% + \def\svg@tempb{\svg@param@apptex}% + \ifx\svgx@param@apptex\svg@tempb\relax% + \let\svgx@param@apptex\svg@param@apptex% + \fi% + \ifx\svgx@param@apptex\relax\else% + \svg@tempa{apptex=\unexpanded\expandafter{\svgx@param@apptex}}% + \fi% + \let\svg@tempa\@empty% + \if@svg@ink@latex% + \ifstr{\svg@ink@format}{pdf}{% + \ifnum\value{svg@param@lastpage}>\z@\relax% + \edef\svg@tempa{lastpage=\the\value{svg@param@lastpage}}% + \else% + \ifnum\value{svg@param@lastpage}=\z@\relax% + \def\svg@tempa{lastpage=true}% + \else% + \def\svg@tempa{lastpage=false}% + \fi% + \fi% + }{}% + \fi% + \ifx\svg@tempa\@empty% + \def\svg@tempa{\string\svgxsetbox{#1}}% + \else% + \edef\svg@tempa{\noexpand\string\noexpand\svgxsetbox[\svg@tempa]{#1}}% + \fi% + \immediate\write\svgx@stream@out{\svg@tempa}% + \if@svg@ink@latex% + \IfFileExists{xr.sty}{% + \immediate\write\svgx@stream@out{% + \string\usepackage{xr}^^J% + \string\externaldocument{\jobname}^^J% + }% + }{}% + \fi% + \immediate\write\svgx@stream@out{% + \string\AtBeginDocument{\@percentchar^^J% + \space\space\svg@tempa\@percentchar^^J% + }^^J^^J% + \string\begin{document}^^J% + \string\pagestyle{empty}^^J% + \string\svgxoutputbox\@percentchar^^J% + \string\end{document}% + }% + \immediate\closeout\svgx@stream@out% + \endgroup% + \ifstr{\svgx@format\svgx@cnv@format}{}{% + \PackageWarning{svg-extract}{% + Both keys `extractformat' and `convertformat' are\MessageBreak% + empty, so nothing to do so far% + }% + }{% + \svg@quotes@remove{\svgx@out@path}% + \svg@quotes@remove{\svgx@out@name}% + \edef\svg@tempb{% + \noexpand\svg@shell@mkdir{\svgx@out@path}% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \noexpand\PackageInfo{svg-extract}{% + Running LaTeX (\svgx@latex@exe) for graphic extraction% + \ifx\svgx@latex@opt\@empty\else% + \MessageBreak with added options `\svgx@latex@opt'% + \fi% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \svgx@latex@exe\space\svgx@latex@opt\space% + "\svgx@out@name.\svgx@latex@ext"% + }% + }% + \loop\ifnum\value{svgx@runs}>\z@\relax% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \advance\c@svgx@runs\m@ne% + \repeat% + \def\svg@tempa##1##2##3{% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \@nameuse{svgx@##1@exe}\space\@nameuse{svgx@##1@opt}\space% + "\svgx@out@name.##2"% + }% + }% + \AfterReadingMainAux{\PackageInfo{svg-extract}{Running ##1}}% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + \@svg@tempswafalse% + \ifxetex\else\ifpdf\else% + \@svg@tempswatrue% + \fi\fi% + \if@svg@tempswa% + \svg@tempa{dvips}{dvi}{ps}% + \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pstoeps}{ps}{eps}}{}% + \svgx@ifinlist{pdf}{\svgx@format}{\svg@tempa{pstopdf}{ps}{pdf}}{}% + \else% + \svgx@ifinlist{eps}{\svgx@format}{\svg@tempa{pdftoeps}{pdf}{eps}}{}% + \svgx@ifinlist{ps}{\svgx@format}{\svg@tempa{pdftops}{pdf}{ps}}{}% + \fi% + \if@svgx@cnv@run% + \ifx\svgx@cnv@dpi\relax% + \ifx\svgx@cnv@dpi@png\@undefined% + \def\svgx@cnv@dpi@png{300}% + \fi% + \fi% + \expandafter\svgx@cnv@get@informat\expandafter{\svgx@format}% + \@for\svg@tempa:=\svgx@cnv@format\do{% + \ifx\svg@tempa\@empty\else% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@format}{% + \PackageWarning{svg-extract}{% + File type `\svg@tempa' was specified for option\MessageBreak% + `extractformat' (\svgx@format) as well as for \MessageBreak + option `convertformat' (\svgx@cnv@format) so the\MessageBreak% + conversion won't be done% + }% + }{% + \edef\svg@tempb{% + \noexpand\PackageInfo{svg-extract}{% + Converting `\svgx@out@name.\svgx@cnv@informat'\MessageBreak% + to `\svgx@out@name.\svg@tempa'% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \noexpand\ShellEscape{% + \svgx@cnv@cmd{\svgx@out@name}{\svgx@cnv@informat}{\svg@tempa}% + }% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + \fi% + }% + \fi% + \edef\svg@tempa{\svgx@format\if@svgx@cnv@run,\svgx@cnv@format\fi}% + \@for\svg@tempb:=\svg@tempa\do{% + \ifx\svg@tempb\@empty\else% + \edef\svg@tempb{% + \noexpand\svgx@move{\svgx@out@name}{\svg@tempb}{\svgx@out@path}% + }% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + \fi% + }% + \@for\svg@tempa:=\svgx@clean\do{% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svg@tempb}{}{% + \edef\svg@tempb{% + \noexpand\IfFileExists{"\svgx@out@name".\svg@tempa}{% + \noexpand\svg@shell@rm{\svgx@out@name.\svg@tempa}% + }{}% + }% + \expandafter\AtEndDocument\expandafter{% + \expandafter\AfterReadingMainAux\expandafter{\svg@tempb}% + }% + }% + }% + }% + \fi% +} +\newcommand*\svgx@out@sec{unknown} +\newcommand*\svgx@get@out@sec{% + \begingroup% + \def\svg@tempa{}% + \@for\svg@tempb:={% + part,chapter,section,subsection,subsubsection,paragraph,subparagraph% + }\do{% + \ifx\svg@tempb\@empty\else% + \scr@ifundefinedorrelax{the\svg@tempb}{}{% + \ifnum\value{\svg@tempb}>\z@\relax% + \edef\svg@tempa{\svg@tempb}% + \fi% + }% + \fi% + }% + \edef\svg@tempb{% + \endgroup% + \ifx\svg@tempa\@empty\else% + \def\noexpand\svgx@out@sec{\csname the\svg@tempa\endcsname}% + \fi% + }% + \svg@tempb% +} +\newif\if@svgx@classfound +\newcommand*\svgx@documentclass{} +\def\svgx@documentclass#1\documentclass#2\documentclass#3\@nil{% + \IfArgIsEmpty{#2}{}{\@svgx@classfoundtrue}% +} +\newcommand*\svgx@read@preamble@till[2]{% + \svgx@read@preamble@skip#1\@nil{till}{#2}% +} +\newcommand*\svgx@read@preamble@from[2]{% + \svgx@read@preamble@skip#1\@nil{from}{#2}% +} +\newcommand*\svgx@read@preamble@skip{} +\def\svgx@read@preamble@skip#1\@nil#2#3{% + \def\svg@tempa##1{% + \def\svg@tempa####1##1####2##1####3\@nil{% + \IfArgIsEmpty{####3}{}{% + \ifstr{#2}{till}{% + \IfArgIsEmpty{####1}{}{% + \immediate\write\svgx@stream@out{####1}% + }% + \@svgx@preamble@writefalse% + }{% + \ifstr{#2}{from}{% + \IfArgIsEmpty{####2}{% + \def\svgx@read@line{}% + }{% + \def\svgx@read@line{####2}% + }% + \@svgx@preamble@writetrue% + }{}% + }% + #3% + }% + }% + }% + \edef\svg@tempb{\expandafter\detokenize\expandafter{#1}}% + \expandafter\svg@tempa\expandafter{\svg@tempb}% + \edef\svg@tempb{% + \expandafter\detokenize\expandafter{\svgx@read@line}\svg@tempb\svg@tempb% + }% + \expandafter\svg@tempa\svg@tempb\@nil% +} +\newcommand*\svgx@cnv@informat{} +\newcommand*\svgx@cnv@get@informat[1]{% + \begingroup% + \def\svg@tempa##1,##2\@nil{% + \def\svg@tempa{##1}% + }% + \svg@tempa#1,\@nil% + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\def\noexpand\svgx@cnv@informat{\svg@tempa}% + }% + \svg@tempa% + \ifx\svgx@cnv@informat\@empty% + \renewcommand*\svgx@cnv@informat{pdf}% + \ifxetex\else\ifpdf\else% + \renewcommand*\svgx@cnv@informat{ps}% + \fi\fi% + \fi% +} +\ifx\svgx@magick@exe\@empty + \ifwindows + \renewcommand*\svgx@magick@exe{magick} + \else + \renewcommand*\svgx@magick@exe{convert} + \fi +\fi +\newcommand*\svgx@magick@cmd[3]{% + \svgx@magick@exe\space% + \svgx@useformatkey{svgx@cnv@dpi}{#3}{-density }% + \svgx@useformatkey{svgx@magick@set}{#3}{}% + "#1.#2"\space% + \svgx@useformatkey{svgx@magick@opr}{#3}{}% + "#1.#3"% +} +\ifx\svgx@gs@exe\@empty + \ifwindows + \renewcommand*\svgx@gs@exe{gswin64c} + \else + \renewcommand*\svgx@gs@exe{gs} + \fi +\fi +\newcommand*\svgx@gs@cmd[3]{% + \svgx@gs@exe\space-dSAFER -dBATCH -dNOPAUSE\space% + \svgx@useformatkey{svgx@gs@device}{#3}{-sDEVICE=}% + \svgx@useformatkey{svgx@cnv@dpi}{#3}{-r}% + \svgx@useformatkey{svgx@gs@opt}{#3}{}% + -sOutputFile="#1.#3"\space"#1.#2"% +} +\newcommand*\svgx@move[3]{% + \begingroup% + \IfFileExists{"#1".#2}{% + \svg@shell@move{#1.#2}{#3#1.#2}% + }{% + \edef\svg@tempa{#2}% + \@svg@tempswafalse% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{\svgx@cnv@format}{% + \@svg@tempswatrue% + \def\svg@tempb{conversion}% + }{% + \expandafter\svgx@ifinlist\expandafter{\svg@tempa}{pdf,ps,eps}{% + \@svg@tempswatrue% + \def\svg@tempb{extraction}% + }{}% + }% + \if@svg@tempswa% + \edef\svg@tempb{% + The graphic file \svg@tempb\space failed\MessageBreak% + for `#1.#2'\MessageBreak% + Troubleshooting: Please check the log file how the\MessageBreak% + invocation of the extraction took place and try\MessageBreak% + to execute it yourself in the terminal% + }% + \else% + \def\svg@tempb{% + The extraction to format `#2' failed\MessageBreak% + for `#1.#2'\MessageBreak% + Only file types `pdf,ps,eps' are supported for\MessageBreak% + key `exportformat'% + }% + \fi% + \PackageWarning{svg-extract}{\svg@tempb}% + }% + \endgroup% +} +\endinput +%% +%% End of file `svg-extract.sty'. diff --git a/Master/texmf-dist/tex/latex/svg/svg.sty b/Master/texmf-dist/tex/latex/svg/svg.sty index a40b54daaf6..f0689b8e64f 100644 --- a/Master/texmf-dist/tex/latex/svg/svg.sty +++ b/Master/texmf-dist/tex/latex/svg/svg.sty @@ -4,201 +4,1070 @@ %% %% The original source files were: %% -%% svg.dtx (with options: `svg') +%% svg.dtx (with options: `package,option,base') +%% svg.dtx (with options: `package,body,base') %% -%% ------------------------------------------------------- -%% Copyright (C) 2012 by Philip Ilten -%% ------------------------------------------------------- -%% -%% This file may be distributed and/or modified under the conditions -%% of the LaTeX Project Public License, either version 1.3 of this -%% license or (at your option) any later version. The latest version -%% of this license is in: -%% +%% svg -- Include SVG pictures in LaTeX documents using Inkscape +%% +%% Copyright (C) Philip Ilten , 2012-2016 +%% Copyright (C) Falk Hanisch , 2017- +%% +%% This file was generated from file svg.dtx. +%% ---------------------------------------------------------------------------- +%% +%% This work may be distributed and/or modified under the conditions +%% of the LaTeX Project Public License, version 1.3c of the license. +%% The latest version of this license is in %% http://www.latex-project.org/lppl.txt -%% -%% and version 1.3 or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has the LPPL maintenance status "maintained". -%% -%% The Current Maintainer of this work is Philip Ilten. -%% -%% This work consists of the files README, svg.dtx (with derived files -%% svg.sty, svg.pdf, Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png), -%% preamble.tex, example.svg (with derived files example.pdf and -%% example.pdf_tex), and root.C (with derived files root.svg, -%% root.pdf, and root.pdf_tex). -%% -%% The following files constitute the svg package and should be -%% distributed as a whole: README, svg.dtx, svg.sty, svg.pdf, -%% Fig.1a.pdf, Fig.1b.eps, Fig.2.pdf, Fig.2.png, preamble.tex -%% example.svg, example.pdf, example.pdf_tex, root.C, root.svg, -%% root.pdf, and root.pdf_tex. -\ProvidesPackage{svg}[2012/09/05 v1.0 SVG inclusion and extraction]% -\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}}% -\@ifpackageloaded{subfig}{}{\RequirePackage{subfig}}% -\@ifpackageloaded{import}{}{\RequirePackage{import}}% -\@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}% -\@ifpackageloaded{transparent}{}{\RequirePackage{transparent}}% -\@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}% -\def\SVG@in@preamble{\jobname.tex}% -\define@key[SVG]{svg.sty}{preamble}{\def\SVG@in@preamble{#1}}% -\def\SVG@in@path{./}% -\define@key[SVG]{svg.sty}{svgpath}{\def\SVG@in@path{#1}}% -\def\SVG@in@end{\begin{document}}% -\define@key[SVG]{svg.sty}{end}{\def\SVG@in@end{#1}}% -\define@boolkey[SVG]{svg.sty}[SVG@in@]{exclude}[true]{}% -\newlength\SVG@out@width% -\newif\ifSVG@out@usewidth% -\define@key[SVG]{svg.sty}{width}% -{\setlength{\SVG@out@width}{#1}\SVG@out@usewidthtrue}% -\newlength\SVG@out@height% -\newif\ifSVG@out@useheight% -\define@key[SVG]{svg.sty}{height}% -{\setlength{\SVG@out@height}{#1}\SVG@out@useheighttrue}% -\define@boolkey[SVG]{svg.sty}[SVG@out@]{pdf}[true]{}% -\define@boolkey[SVG]{svg.sty}[SVG@out@]{eps}[true]{}% -\define@boolkey[SVG]{svg.sty}[SVG@out@]{png}[true]{}% -\newif\ifSVG@out@extract -\def\SVG@out@path{./}% -\define@key[SVG]{svg.sty}{path}{\def\SVG@out@path{#1}}% -\def\SVG@out@name{Fig.\arabic{svgfigure}\alph{subfigure}}% -\define@key[SVG]{svg.sty}{name}{\def\SVG@out@name{#1}}% -\define@boolkey[SVG]{svg.sty}[SVG@out@]{clean}[true]{}% -\def\SVG@out@pretex{}% -\define@key[SVG]{svg.sty}{pretex}{\def\SVG@out@pretex{#1}}% -\def\SVG@out@postex{}% -\define@key[SVG]{svg.sty}{postex}{\def\SVG@out@postex{#1}}% -\def\SVG@cmd@inkscape{inkscape -z -C}% -\define@key[SVG]{svg.sty}{inkscape}{\def\SVG@cmd@inkscape{#1}}% -\def\SVG@cmd@pdflatex{pdflatex}% -\define@key[SVG]{svg.sty}{pdflatex}{\def\SVG@cmd@pdflatex{#1}}% -\def\SVG@cmd@pdftops{pdftops -eps}% -\define@key[SVG]{svg.sty}{pdftops}{\def\SVG@cmd@pdftops{#1}}% -\def\SVG@cmd@convert{convert -density 300}% -\define@key[SVG]{svg.sty}{convert}{\def\SVG@cmd@convert{#1}}% -\ProcessOptionsX[SVG]% -\newcounter{svgfigure}[figure]% -\def\setsvg#1{\setkeys[SVG]{svg.sty}{#1}}% -\def\includesvg{\@ifnextchar[\@includesvg{\@includesvg[]}}% -\def\@includesvg[#1]#2{% - \setkeys[SVG]{svg.sty}{#1}% - \SVG@out@extractfalse% - \ifSVG@out@pdf \SVG@out@extracttrue \fi% - \ifSVG@out@eps \SVG@out@extracttrue \fi% - \ifSVG@out@png \SVG@out@extracttrue \fi% -\ifnum\pdfstrcmp% -{\pdffilemoddate{\SVG@in@path#2.svg}}% -{\pdffilemoddate{\SVG@in@path#2.pdf}}>0% -\immediate\write18{\SVG@cmd@inkscape \space -f\SVG@in@path#2.svg% - \space-A\SVG@in@path#2.pdf --export-latex}% -\fi% -\ifSVG@out@usewidth% -\settoheight\SVG@out@height% -{\includegraphics[width=\SVG@out@width]{\SVG@in@path#2}}% -\else\ifSVG@out@useheight% -\settowidth\SVG@out@width% -{\includegraphics[height=\SVG@out@height]{\SVG@in@path#2}}% -\else% -\settoheight\SVG@out@height{\includegraphics{\SVG@in@path#2}}% -\settowidth\SVG@out@width{\includegraphics{\SVG@in@path#2}}% -\fi% -\fi% -\ifSVG@out@extract% -\newwrite\SVG@out@file% -\setcounter{svgfigure}{\value{figure}}% -\stepcounter{svgfigure}% -\def\SVG@out@filename{\SVG@out@name}% -\immediate\openout\SVG@out@file=\SVG@out@path\SVG@out@filename.tex% -\fi% -\ifSVG@out@extract% -\def\SVG@in@line{}% -\newread\SVG@in@file% -\immediate\openin\SVG@in@file=\SVG@in@preamble% -\fi% -\newif\ifSVG@in@read% -\ifSVG@out@extract \SVG@in@readtrue \fi% -\@whilesw\ifSVG@in@read\fi{% - \catcode`\#=12\relax\endlinechar=-1% - \immediate\read\SVG@in@file to \SVG@in@line% - \ifx\SVG@in@end\SVG@in@line% - \SVG@in@readfalse% +%% and version 1.3c or later is part of all distributions of +%% LaTeX 2005/12/01 or later and of this work. +%% +%% This work has the LPPL maintenance status "author-maintained". +%% +%% The current maintainer and author of this work is Falk Hanisch. +%% +%% This work consists of the main source file README.md, LICENSE.md, svg.dtx and +%% the derived documentation svg.pdf as well as the example files svg-example.svg, +%% svg-preamble.tex and root.C (with derived file root.svg). +%% +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{svg}[% + 2017/03/27 v2.00\space% + (include SVG pictures)% +] +\RequirePackage{scrbase}[2016/06/14] +\RequirePackage{ifxetex}[2010/09/12] +\RequirePackage{ifluatex}[2016/05/16] +\RequirePackage{ifpdf}[2016/05/14] +\RequirePackage{pdftexcmds}[2016/05/21] +\RequirePackage{shellesc}[2016/06/07] +\RequirePackage{graphicx}[1999/02/16] +\DefineFamily{SVG} +\DefineFamilyMember{SVG} +\newcommand*\svg@deprecated@key[3][svg]{% + \PackageWarning{#1}{% + The option key `#2' is deprecated.\MessageBreak% + It's recommended to use `#3'\MessageBreak% + instead% + }% + \FamilyOptions{SVG}{#3}% +} +\newcommand*\svg@tempa{} +\newcommand*\svg@tempb{} +\newif\if@svg@tempswa +\newcount\svg@tempcnt +\newif\if@svg@use@xcolor +\FamilyBoolKey{SVG}{usexcolor}{@svg@use@xcolor} +\DeclareOption{noxcolor}{\FamilyOptions{SVG}{usexcolor=false}} +\newif\if@svg@use@transparent +\FamilyBoolKey{SVG}{usetransparent}{@svg@use@transparent} +\DeclareOption{notransparent}{\FamilyOptions{SVG}{usetransparent=false}} +\AtEndOfPackage{% + \RelaxFamilyKey{SVG}{usexcolor}% + \RelaxFamilyKey{SVG}{usetransparent}% + \if@svg@use@xcolor% + \RequirePackage{xcolor}[2016/05/11]% \else% - \immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@in@line}}% - \fi% - \ifeof\SVG@in@file\SVG@in@readfalse\fi% - \endlinechar=13\catcode`\#=6\relax}% -\ifSVG@out@extract \immediate\closein\SVG@in@file \fi% -\ifSVG@out@extract% -\def\SVG@out@defpack{\makeatletter% - \@ifpackageloaded{import}{}{\RequirePackage{import}}% - \@ifpackageloaded{graphicx}{}{\RequirePackage{graphicx}}% - \@ifpackageloaded{transparent}{}{\RequirePackage{transparent}}% - \@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}\makeatother}% -\def\SVG@out@defwidth{\def\svgwidth{0.99\textwidth}}% -\def\SVG@out@definput{\import{\SVG@in@path}{#2.pdf_tex}}% -\immediate\write\SVG@out@file{\unexpanded\expandafter{\SVG@out@defpack}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\pdfpagewidth}{\the\SVG@out@width}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\pdfpageheight}{\the\SVG@out@height}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\paperheight}{\pdfpageheight}}% -\immediate\write\SVG@out@file% -{\noexpand\setlength{\paperwidth}{\pdfpagewidth}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textheight}{\paperheight}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textwidth}{\paperwidth}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\textheight}{\paperheight}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\oddsidemargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\evensidemargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\topmargin}{-1in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\headheight}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\headsep}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\topskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\footskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parindent}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parsep}{0in}}% -\immediate\write\SVG@out@file{\noexpand\setlength{\parskip}{0in}}% -\immediate\write\SVG@out@file{\noexpand\begin{document}}% - \immediate\write\SVG@out@file{% - \noexpand\pagestyle{empty}% - \noexpand\begin{center}% - \unexpanded\expandafter{\SVG@out@defwidth}% - \unexpanded\expandafter{\SVG@out@pretex}% - \expandafter\noexpand\SVG@out@definput% - \unexpanded\expandafter{\SVG@out@postex}% - \noexpand\end{center}}% - \immediate\write\SVG@out@file{\noexpand\end{document}}% -\immediate\closeout\SVG@out@file% -\fi% -\ifSVG@out@extract% -\immediate\write18{\SVG@cmd@pdflatex\space\SVG@out@path\SVG@out@filename.tex}% -\fi% -\ifSVG@out@eps% -\immediate\write18{\SVG@cmd@pdftops\space\SVG@out@filename.pdf}% -\immediate\write18{mv \SVG@out@filename.eps% - \space\SVG@out@path\SVG@out@filename.eps}% -\fi% -\ifSVG@out@png% -\immediate\write18{\SVG@cmd@convert\space\SVG@out@filename.pdf% - \space\SVG@out@filename.png}% -\immediate\write18{mv \SVG@out@filename.png% - \space\SVG@out@path\SVG@out@filename.png}% -\fi% -\ifSVG@out@extract% -\ifSVG@out@pdf% -\immediate\write18{mv \SVG@out@filename.pdf% - \space\SVG@out@path\SVG@out@filename.pdf}% -\else \ifSVG@out@clean \immediate\write18{rm \SVG@out@filename.pdf} \fi% -\fi% -\ifSVG@out@clean% -\immediate\write18{rm \SVG@out@path\SVG@out@filename.tex% - \space\SVG@out@filename.aux \SVG@out@filename.log \SVG@out@filename.out}% -\fi\fi% -\ifSVG@in@exclude \else {\def\svgwidth{\the\SVG@out@width}% -\SVG@out@pretex\import{\SVG@in@path}{#2.pdf_tex}\SVG@out@postex} \fi% -}% + \AfterPackage*{xcolor}{% + \PackageWarning{svg}{Package `xcolor' was loaded anyway}% + }% + \fi% + \if@svg@use@transparent% + \RequirePackage{transparent}[2016/05/16]% + \else% + \AfterPackage*{transparent}{% + \PackageWarning{svg}{Package `transparent' was loaded anyway}% + }% + \fi% +} +\newcommand*\svg@ink@mode{} +\DefineFamilyKey{SVG}{inkscape}[true]{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{inkscape}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},% + {true}{1},{on}{1},{yes}{1},{onlynewer}{1},{newer}{1},% + {force}{2},{forced}{2},{overwrite}{2},% + {pdf}{3},{eps}{4},{ps}{5},{png}{6},% + {drawing}{7},{crop}{7},% + {page}{8},{nocrop}{8},% + {tex}{9},{latex}{9},{exportlatex}{9},{latexexport}{9},% + {notex}{10},{nolatex}{10},{noexportlatex}{10},{nolatexexport}{10},% + {latexnoexport}{10},{raw}{10},{plain}{10},{simple}{10}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifnum\svg@tempa<\thr@@\relax% + \let\svg@ink@mode\svg@tempa% + \else% + \ifcase\svg@tempa\relax\or\or\or% pdf + \FamilyOptions{SVG}{inkscapeformat=pdf}% + \or% eps + \FamilyOptions{SVG}{inkscapeformat=eps}% + \or% ps + \FamilyOptions{SVG}{inkscapeformat=ps}% + \or% png + \FamilyOptions{SVG}{inkscapeformat=png}% + \or% drawing + \FamilyOptions{SVG}{inkscapearea=drawing}% + \or% page + \FamilyOptions{SVG}{inkscapearea=page}% + \or% tex + \FamilyOptions{SVG}{inkscapelatex=true}% + \or% notex + \FamilyOptions{SVG}{inkscapelatex=false}% + \fi% + \fi% + \else% dpi + \def\svg@tempa##1dpi##2\@nil{% + \ifstr{##2}{dpi}{\FamilyOptions{SVG}{inkscapedpi=##1}}{}% + }% + \lowercase{\svg@tempa#1dpi\@nil}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed\else% + \def\svg@tempa##1-##2\@nil{% + \IfArgIsEmpty{##2}{\def\svg@tempb{}}{% + \def\svg@tempa##1####1\@nil{\def\svg@tempb{####1}}% + \svg@tempa#1\@nil% + }% + \def\svg@tempa{##1}% + }% + \svg@tempa#1-\@nil% + \PackageWarning{svg}{% + Setting the executable% + \ifx\svg@tempb\@empty\else% + \space and associated options% + \fi% + \MessageBreak% + for Inkscape should be done with options\MessageBreak% + `inkscapeexe=\svg@tempa'% + \ifx\svg@tempb\@empty\else% + \MessageBreak and `inkscapeopt=\svg@tempb'% + \fi.\MessageBreak% + Nevertheless, this was done by now anyway% + }% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{inkscapeexe=\svg@tempa}% + \ifx\svg@tempb\@empty\else% + \noexpand\FamilyOptions{SVG}{inkscapeopt=\svg@tempb}% + \fi% + }% + \svg@tempa% + \fi% + \fi% +} +\DeclareOption{on}{\FamilyOptions{SVG}{inkscape=true}} +\DeclareOption{off}{\FamilyOptions{SVG}{inkscape=false}} +\newcommand*\svg@ink@format{pdf} +\ifxetex\else\ifpdf\else + \renewcommand*\svg@ink@format{eps} +\fi\fi +\DefineFamilyKey{SVG}{inkscapeformat}{% + \lowercase{\def\svg@tempa{#1}}% + \FamilySetNumerical{SVG}{inkscapeformat}{svg@tempa}{% + {pdf}{0},{eps}{1},{ps}{2},{png}{3}% + }{\svg@tempa}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% latex + \renewcommand*\svg@ink@format{pdf}% + \or% eps + \renewcommand*\svg@ink@format{eps}% + \or% ps + \renewcommand*\svg@ink@format{ps}% + \or% png + \renewcommand*\svg@ink@format{png}% + \fi% + \fi% +} +\newif\if@svg@ink@latex +\FamilyBoolKey{SVG}{inkscapelatex}{@svg@ink@latex} +\newcommand*\svg@ink@area{} +\DefineFamilyKey{SVG}{inkscapearea}{% + \FamilySetNumerical{SVG}{inkscapearea}{svg@tempa}{% + {drawing}{0},{crop}{0},% + {page}{1},{nocrop}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% drawing + \renewcommand*\svg@ink@area{-D}% + \else% page + \renewcommand*\svg@ink@area{-C}% + \fi% + \fi% +} +\newcommand*\svg@ink@dpi{} +\let\svg@ink@dpi\relax +\DefineFamilyKey{SVG}{inkscapedpi}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \let\svg@ink@dpi\relax% + \FamilyKeyStateProcessed% + }{% + \def\svg@tempa##1dpi##2\@nil{\def\svg@tempa{##1}}% + \lowercase{\svg@tempa#1dpi\@nil}% + \ifnumber{\svg@tempa}{% + \edef\svg@ink@dpi{\svg@tempa}% + \FamilyKeyStateProcessed% + }{}% + }% +} +\DefineFamilyKey{SVG}{inkscapedensity}{\FamilyOptions{SVG}{inkscapedpi=#1}} +\newcommand*\svg@ink@exe{inkscape} +\DefineFamilyKey{SVG}{inkscapeexe}{% + \renewcommand*\svg@ink@exe{#1}% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@ink@opt{} +\DefineFamilyKey{SVG}{inkscapeopt}{% + \renewcommand*\svg@ink@opt{#1}% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{svgpath}{% + \PackageWarning{svg}{% + The key `svgpath' is deprecated. It's recommended\MessageBreak% + to use `\string\svgpath' instead% + }% + \ifx\svgpath\@undefined% + \AtEndOfPackage{\svgpath{{#1}}}% + \else% + \svgpath{{#1}}% + \fi% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@out@path{} +\newcommand*\svg@out@name{\svg@file@name\svg@file@suffix} +\newcommand*\svg@out@base{\svg@out@path\svg@out@name.\svg@ink@format} +\DefineFamilyKey{SVG}{inkscapepath}{% + \FamilySetNumerical{SVG}{inkscapepath}{svg@tempa}{% + {svgpath}{0},{svgdir}{0},% + {svgsubpath}{1},{svgsubdir}{1},% + {basepath}{2},{basedir}{2},{jobpath}{2},{jobdir}{2},% + {basesubpath}{3},{basesubdir}{3},{jobsubpath}{3},{jobsubdir}{3}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% svgpath + \renewcommand*\svg@out@path{\svg@file@path}% + \or% svgsubpath + \renewcommand*\svg@out@path{\svg@file@path svg-inkscape/}% + \or% basepath + \renewcommand*\svg@out@path{./}% + \or% basesubpath + \renewcommand*\svg@out@path{./svg-inkscape/}% + \fi% + \else% + \renewcommand*\svg@out@path{#1}% + \svg@normalize@path{\svg@out@path}% + \FamilyKeyStateProcessed% + \fi% +} +\DefineFamilyKey{SVG}{inkscapename}{% + \renewcommand*\svg@out@name{#1\svg@file@suffix}% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@param@width{\z@} +\DefineFamilyKey{SVG}{width}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@width{\z@}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{width}{\svg@param@width}{#1}% + \ifdim\svg@param@width<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% +} +\newcommand*\svg@param@height{\z@} +\DefineFamilyKey{SVG}{height}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@height{\z@}% + \FamilyKeyStateProcessed% + }{% + \FamilySetLengthMacro{SVG}{height}{\svg@param@height}{#1}% + \ifdim\svg@param@height<\z@\relax% + \FamilyKeyStateUnknownValue% + \fi% + }% +} +\newcommand*\svg@param@scale{1} +\DefineFamilyKey{SVG}{scale}{% + \FamilyKeyStateUnknownValue% + \svg@ifvalueisrelax{#1}{% + \renewcommand*\svg@param@scale{1}% + \FamilyKeyStateProcessed% + }{% + \ifisdimension{#1\p@}{% + \ifdim\dimexpr#1\p@\relax>\z@\relax% + \renewcommand*\svg@param@scale{#1}% + \FamilyKeyStateProcessed% + \fi% + }{}% + }% +} +\newcommand*\svg@param@pretex{} +\let\svg@param@pretex\relax +\DefineFamilyKey{SVG}{pretex}{% + \svg@ifvalueisrelax{#1}{% + \let\svg@param@pretex\relax% + }{% + \def\svg@param@pretex{#1}% + }% + \FamilyKeyStateProcessed% +} +\newcommand*\svg@param@apptex{} +\let\svg@param@apptex\relax +\DefineFamilyKey{SVG}{apptex}{% + \svg@ifvalueisrelax{#1}{% + \let\svg@param@apptex\relax% + }{% + \def\svg@param@apptex{#1}% + }% + \FamilyKeyStateProcessed% +} +\DefineFamilyKey{SVG}{postex}{% + \svg@deprecated@key{postex=#1}{apptex=#1}% +} +\newcounter{svg@param@lastpage} +\DefineFamilyKey{SVG}{lastpage}{% + \FamilySetNumerical{SVG}{lastpage}{svg@tempa}{% + {false}{0},{off}{0},{no}{0},{ignore}{0},% + {true}{1},{on}{1},{yes}{1},{auto}{1}% + }{#1}% + \ifx\FamilyKeyState\FamilyKeyStateProcessed% + \ifcase\svg@tempa\relax% false + \FamilySetCounter{SVG}{lastpage}{svg@param@lastpage}{\m@ne}% + \or% true + \FamilySetCounter{SVG}{lastpage}{svg@param@lastpage}{\z@}% + \fi% + \fi% +} +\newif\if@svg@draft +\FamilyBoolKey{SVG}{draft}{@svg@draft} +\AtBeginDocument{\if@svg@draft\else\ifGin@draft\@svg@drafttrue\fi\fi} +\newcommand*\svg@quotes@remove[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \expandafter\svg@quotes@@remove\svg@tempa""\@nil% + \edef\svg@tempb{% + \endgroup% + \noexpand\def\noexpand#1{\unexpanded\expandafter{\svg@tempa}}% + }% + \svg@tempb% +} +\newcommand*\svg@quotes@@remove{} +\def\svg@quotes@@remove#1"#2"#3\@nil{% + \IfArgIsEmpty{#2}{% + \edef\svg@tempa{#1}% + }{% + \svg@quotes@@remove#1#2#3""\@nil% + }% +} +\newif\if@svg@quotes@found +\newcommand*\svg@quotes@check[1]{% + \expandafter\svg@quotes@@check#1"\@nil% +} +\newcommand*\svg@quotes@@check{} +\def\svg@quotes@@check#1"#2\@nil{% + \IfArgIsEmpty{#2}{\@svg@quotes@foundfalse}{\@svg@quotes@foundtrue}% +} +\newcommand*\svg@normalize@path[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@check{\svg@tempa}% + \svg@quotes@remove{\svg@tempa}% + \ifx\svg@tempa\@empty\relax% + \def\svg@tempa{./}% + \fi% + \expandafter\svg@normalize@@path\svg@tempa//\@nil% + \edef\svg@tempb{% + \endgroup% + \if@svg@quotes@found% + \noexpand\def\noexpand#1{"\unexpanded\expandafter{\svg@tempa}"}% + \else% + \noexpand\def\noexpand#1{\unexpanded\expandafter{\svg@tempa}}% + \fi% + }% + \svg@tempb% +} +\newcommand*\svg@normalize@@path{} +\def\svg@normalize@@path#1/#2/\@nil{% + \IfArgIsEmpty{#2}{% + \IfArgIsEmpty{#1}{\def\svg@tempa{}}{\def\svg@tempa{#1/}}% + }{% + \svg@normalize@@path#2/\@nil% + \edef\svg@tempa{#1/\unexpanded\expandafter{\svg@tempa}}% + }% +} +\newcommand*\svg@ifvalueisrelax[1]{% + \begingroup% + \def\svg@tempa{#1}% + \def\svg@tempb{\relax}% + \ifx\svg@tempa\svg@tempb\relax% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% +} +\DefineFamilyMember[.dummy]{SVG} +\newcommand*\svg@dummy@key[2][]{% + \IfArgIsEmpty{#1}{% + \DefineFamilyKey[.dummy]{SVG}{#2}{% + \PackageWarning{svg}{% + The option key `#2' can only\MessageBreak% + be used with package `svg-extract', but\MessageBreak% + you didn't load it% + }% + \FamilyKeyStateProcessed% + }% + }{% + \DefineFamilyKey[.dummy]{SVG}{#2}[{#1}]{% + \PackageWarning{svg}{% + The option key `#2' can only\MessageBreak% + be used with package `svg-extract', but\MessageBreak% + you didn't load it% + }% + \FamilyKeyStateProcessed% + }% + }% + \BeforePackage{svg-extract}{\RelaxFamilyKey[.dummy]{SVG}{#2}}% +} +\svg@dummy@key[true]{extract} +\svg@dummy@key{extractformat} +\svg@dummy@key[true]{pdf} +\svg@dummy@key[true]{eps} +\svg@dummy@key{extractpreamble} +\svg@dummy@key{preamble} +\svg@dummy@key{extractpreambleend} +\svg@dummy@key{end} +\svg@dummy@key{extractruns} +\svg@dummy@key{latexexe} +\svg@dummy@key{pdflatex} +\svg@dummy@key{latexext} +\svg@dummy@key{latexopt} +\svg@dummy@key{dvipsopt} +\svg@dummy@key{pstoepsopt} +\svg@dummy@key{pstopdfopt} +\svg@dummy@key{pdftoepsopt} +\svg@dummy@key{pdftopsopt} +\svg@dummy@key{pdftops} +\svg@dummy@key[true]{convert} +\svg@dummy@key{convertformat} +\svg@dummy@key[true]{png} +\svg@dummy@key{convertdpi} +\svg@dummy@key{convertdensity} +\svg@dummy@key{magickexe} +\svg@dummy@key{magicksetting} +\svg@dummy@key{magickoperator} +\svg@dummy@key{gsexe} +\svg@dummy@key{gsopt} +\svg@dummy@key{gsdevice} +\svg@dummy@key{extractpath} +\svg@dummy@key{path} +\svg@dummy@key{extractname} +\svg@dummy@key{name} +\svg@dummy@key{extractwidth} +\svg@dummy@key{extractheight} +\svg@dummy@key{extractscale} +\svg@dummy@key{extractpretex} +\svg@dummy@key{extractapptex} +\svg@dummy@key{extractpostex} +\svg@dummy@key[true]{clean} +\svg@dummy@key[true]{clear} +\svg@dummy@key[true]{exclude} +\FamilyExecuteOptions{SVG}{% + inkscape=true,inkscapepath=basesubdir,inkscapelatex=true,% + inkscapearea=drawing,usexcolor=true,usetransparent=true% +} +\FamilyProcessOptions{SVG} +\newif\if@svg@file@found +\newcommand*\svg@file@path{} +\newcommand*\svg@file@name{} +\newcommand*\svg@file@base{} +\newcommand*\svg@file@suffix{} +\newcommand*\svg@get@path[3][svg]{% + \begingroup% + \edef\svg@tempa{#2}% + \svg@quotes@check{\svg@tempa}% + \svg@quotes@remove{\svg@tempa}% + \expandafter\svg@filename@parse\expandafter{\svg@tempa}% + \IfArgIsEmpty{#1}{% + \edef\svg@tempa{\filename@area\filename@base.\filename@ext}% + }{% + \edef\svg@tempa{\filename@area\filename@base.#1}% + }% + \if@svg@quotes@found% + \edef\svg@tempa{"\svg@tempa"}% + \fi% + \@svg@file@foundfalse% + \let\input@path\svg@path% + \svg@get@@path{\svg@tempa}% + \if@svg@file@found\else% + \ifx\Ginput@path\@undefined\else% + \let\input@path\Ginput@path% + \svg@get@@path{\svg@tempa}% + \fi% + \fi% + \IfArgIsEmpty{#3}{}{% + \if@svg@file@found\else% + \ifx#3\@undefined\else% + \edef\svg@tempb{{#3}}% + \let\input@path\svg@tempb% + \svg@get@@path{\svg@tempa}% + \fi% + \fi% + }% + \edef\svg@tempa{% + \endgroup% + \if@svg@file@found% + \noexpand\@svg@file@foundtrue% + \noexpand\def\noexpand\svg@file@path{\filename@area}% + \noexpand\def\noexpand\svg@file@name{\filename@base}% + \noexpand\def\noexpand\svg@file@base{\filename@area\filename@base}% + \else% + \noexpand\@svg@file@foundfalse% + \noexpand\def\noexpand\svg@file@path{}% + \noexpand\def\noexpand\svg@file@name{#2}% + \noexpand\def\noexpand\svg@file@base{#2}% + \fi% + }% + \svg@tempa% +} +\newcommand*\svg@get@@path[1]{% + \expandafter\IfFileExists\expandafter{#1}{% + \@svg@file@foundtrue% + \expandafter\svg@filename@parse\expandafter{\@filef@und}% + }{}% +} +\newcommand*\svg@filename@parse[1]{% + \begingroup% + \def\svg@tempa##1{% + \def\svg@tempb####1####2\@nil{% + \ifstr{####1}{"}{\def\svg@tempb{####2}}{\def\svg@tempb{####1####2}}% + }% + \expandafter\svg@tempb##1\@nil% + \edef##1{\svg@tempb}% + }% + \filename@parse{#1}% + \ifx\filename@ext\relax\else% + \edef\filename@base{\filename@base.\filename@ext}% + \fi% + \svg@quotes@check{\filename@area}% + \if@svg@quotes@found% + \svg@quotes@remove{\filename@area}% + \edef\filename@area{"\filename@area"}% + \svg@tempa{\filename@base}% + \fi% + \svg@quotes@check{\filename@base}% + \if@svg@quotes@found% + \svg@quotes@remove{\filename@base}% + \fi% + \let\svg@tempa\filename@area% + \expandafter\filename@parse\expandafter{\filename@base}% + \let\filename@area\svg@tempa% + \if@svg@quotes@found% + \edef\filename@base{"\filename@base"}% + \fi% + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\def\noexpand\filename@area{\filename@area}% + \noexpand\def\noexpand\filename@base{\filename@base}% + \ifx\filename@ext\relax% + \noexpand\let\noexpand\filename@ext\noexpand\relax% + \else% + \noexpand\def\noexpand\filename@ext{\filename@ext}% + \fi% + }% + \svg@tempa% +} +\newcommand*\svg@file@missing[3][]{% + \begingroup% + \edef\svg@tempa{#2}% + \expandafter\svg@filename@parse\expandafter{\svg@tempa}% + \svg@quotes@remove{\filename@area}% + \svg@quotes@remove{\filename@base}% + \ifx\filename@ext\relax\else% + \svg@quotes@remove{\filename@ext}% + \fi% + \IfArgIsEmpty{#1}{% + \def\svg@tempa{% + Did you run the export with Inkscape? There's no file\MessageBreak% + `\filename@area\filename@base.\filename@ext'% + }% + }{% + \edef\filename@ext{#1}% + \edef\svg@tempb{#3}% + \ifstr{\svg@tempb}{./}{\let\svg@tempb\@empty}{}% + \ifstr{\filename@area}{./}{\let\filename@area\@empty}{}% + \def\svg@tempa{% + There's no file `\filename@base.\filename@ext'\MessageBreak% + \ifx\filename@area\@empty% + neither in the current directory nor\MessageBreak% + any other searched path given by\MessageBreak% + \string\svgpath% + \ifx\svg@path\@undefined\space\else% + \space(\svg@path)\MessageBreak% + \fi% + or \string\graphicspath% + \ifx\Ginput@path\@undefined\else% + \space(\Ginput@path)% + \fi% + \ifx\svg@tempb\@empty\else% + \MessageBreak or even `inkscapepath' (`\svg@tempb')% + \fi.% + \else% + in folder `\filename@area'.% + \fi% + }% + }% + \PackageError{svg}{% + File `\filename@base.\filename@ext' is missing% + }{\svg@tempa}% + \endgroup% +} +\ifx\pdf@filemoddate\@undefined + \newcommand*\svg@iffilenewer[2]{\@gobbletwo} +\else + \newcommand*\svg@iffilenewer[2]{% + \begingroup% + \edef\svg@tempa{\pdf@filemoddate{#1}}% + \edef\svg@tempb{\pdf@filemoddate{#2}}% + \ifnum\pdf@strcmp{\svg@tempa}{\svg@tempb}>\z@\relax% + \aftergroup\@firstoftwo% + \else% + \aftergroup\@secondoftwo% + \fi% + \endgroup% + } +\fi +\newcommand*\svg@local@param@set[1]{% + \svg@local@param@use% + \FamilyOptions{SVG}{#1}% + \ifstr{\svg@ink@format}{png}{\FamilyOptions{SVG}{inkscapelatex=false}}{}% +} +\newcommand*\svg@local@param@use{} +\newcommand*\svg@local@param@def[1]{% + \edef\svg@local@param@use{% + \unexpanded\expandafter{\svg@local@param@use}\unexpanded{#1}% + }% +} +\DefineFamilyMember[.param]{SVG} +\newcommand*\svgsetup{\FamilyOptions{SVG}} +\newcommand*\setsvg{\FamilyOptions{SVG}} +\newcommand*\svg@path{} +\let\svg@path\input@path +\newcommand*\svgpath[1]{% + \def\svg@tempb{}% + \@tfor\svg@tempa:=#1\do{% + \ifx\svg@tempa\@empty\else% + \svg@normalize@path{\svg@tempa}% + \edef\svg@tempb{\svg@tempb{\svg@tempa}}% + \fi% + }% + \ifx\svg@tempb\@empty\else% + \let\svg@path\svg@tempb% + \fi% +} +\newcommand*{\includesvg}[2][]{% + \begingroup% + \svg@deprecated@param% + \svg@local@param@set{#1}% + \if@svg@ink@latex% + \def\svg@file@suffix{_svg-tex}% + \else% + \def\svg@file@suffix{_svg-raw}% + \fi% + \@onelevel@sanitize\svg@file@suffix% + \svg@get@path{#2}{}% + \if@svg@file@found% + \svg@ink@run% + \IfFileExists{\svg@out@base}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base}{}% + }% + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base_tex}{}% + }% + \fi% + \if@svg@file@found% + \svg@input{\svg@out@base}% + \svg@extract{\svg@out@base}% + \fi% + \else% + \svg@file@missing[svg]{\svg@file@base}{}% + \fi% + \endgroup% +} +\svg@local@param@def{% + \FamilyCounterKey[.param]{SVG}{lastpage}{svg@param@lastpage}% +} +\newcommand*\svg@param@angle{0} +\svg@local@param@def{% + \DefineFamilyKey[.param]{SVG}{angle}{% + \renewcommand*\svg@param@angle{#1}% + \FamilyKeyStateProcessed% + }% +} +\newcommand*\svg@param@origin{c} +\svg@local@param@def{% + \DefineFamilyKey[.param]{SVG}{origin}[c]{% + \renewcommand*\svg@param@origin{#1}% + \FamilyKeyStateProcessed% + }% +} +\newcommand*{\includeinkscape}[2][]{% + \begingroup% + \svg@deprecated@param% + \filename@parse{#2}% + \ifx\filename@ext\relax\else% + \svg@quotes@remove{\filename@ext}% + \expandafter\lowercase\expandafter{% + \expandafter\def\expandafter\filename@ext\expandafter{\filename@ext}% + }% + \let\svg@tempb\filename@ext% + \def\svg@tempa##1_tex##2\@nil{\def\svg@tempb{##1}}% + \expandafter\svg@tempa\svg@tempb_tex\@nil% + \@for\svg@tempa:={pdf,eps,ps,png}\do{% + \ifstr{\svg@tempb}{\svg@tempa}{% + \edef\svg@tempa{% + \noexpand\FamilyOptions{SVG}{inkscapeformat=\svg@tempb}% + }% + \svg@tempa% + }{}% + }% + \ifstr{\filename@ext}{\svg@ink@format_tex}{% + \FamilyOptions{SVG}{inkscapelatex=true}% + }{}% + \fi% + \svg@local@param@set{#1}% + \expandafter\svg@get@path\expandafter[\svg@ink@format]{#2}{\svg@out@path}% + \if@svg@file@found% + \edef\svg@out@name{\svg@file@name}% + \edef\svg@out@base{\svg@file@path\svg@file@name.\svg@ink@format}% + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{}{% + \@svg@file@foundfalse% + \svg@file@missing{\svg@out@base_tex}{}% + }% + \fi% + \if@svg@file@found% + \svg@input{\svg@out@base}% + \svg@extract{\svg@out@base}% + \fi% + \else% + \svg@file@missing[\svg@ink@format]{\svg@file@base}{\svg@out@path}% + \fi% + \endgroup% +} +\newcommand*\svg@deprecated@param{% + \@svg@tempswafalse% + \ifx\svgwidth\@undefined\else% + \edef\svg@tempa{\noexpand\FamilyOptions{SVG}{width=\svgwidth}}% + \svg@tempa% + \@svg@tempswatrue% + \fi% + \ifx\svgscale\@undefined\else% + \edef\svg@tempa{\noexpand\FamilyOptions{SVG}{scale=\svgscale}}% + \svg@tempa% + \@svg@tempswatrue% + \fi% + \if@svg@tempswa% + \PackageWarning{svg}{% + You should specify the image size with parameters\MessageBreak% + `width' and `height' or `scale' instead of using\MessageBreak% + `\string\svgscale' or `\string\svgwidth'% + }% + \let\svgwidth\@undefined% + \let\svgscale\@undefined% + \fi% +} +\newif\if@svg@ink@run +\newcommand*\svg@ink@run{% + \ifnum\svg@ink@mode>\z@\relax% + \begingroup% + \@svg@ink@runtrue% + \ifnum\svg@ink@mode=\tw@\relax\else% + \svg@iffilenewer{\svg@file@base.svg}{\svg@out@base}{}{% + \@svg@ink@runfalse% + }% + \if@svg@ink@latex% + \IfFileExists{\svg@out@base_tex}{% + \ifnum\pdf@shellescape=\@ne\relax\if@svg@ink@run% + \svg@iffilenewer{\svg@out@base_tex}{\svg@out@base}{% + \@svg@ink@runfalse% + \edef\svg@tempa{\svg@out@base}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg}{% + Since the encountered filedate of file\MessageBreak% + `\svg@tempa_tex' is newer than \MessageBreak% + `\svg@tempa' it's supposed that\MessageBreak% + you customized this file. To avoid an accidental\MessageBreak% + overwriting of this file, the Inkscape export\MessageBreak% + won't be done. If you want to overwrite the\MessageBreak% + existing file please choose the parameter\MessageBreak% + `inkscape=force'% + }% + }{}% + \fi\fi% + }{\@svg@ink@runtrue}% + \fi% + \fi% + \if@svg@ink@run% + \ifnum\pdf@shellescape=\@ne\relax% + \ifx\svg@ink@dpi\relax% + \ifstr{\svg@ink@format}{png}{% + \FamilyOptions{SVG}{inkscapedpi=300}% + }{}% + \fi% + \PackageInfo{svg}{% + Calling Inkscape% + \ifx\svg@ink@opt\@empty\else% + \space with added options `\svg@ink@opt'% + \fi% + }% + \edef\svg@tempa{\svg@file@base}% + \edef\svg@tempb{\svg@out@name}% + \svg@quotes@remove{\svg@tempa}% + \svg@quotes@remove{\svg@tempb}% + \ShellEscape{\svg@ink@cmd{\svg@tempa}{\svg@tempb}}% + \IfFileExists{\svg@out@name.\svg@ink@format}{% + \edef\svg@tempb{\svg@tempb.\svg@ink@format}% + \svg@quotes@remove{\svg@out@base}% + \svg@shell@mkdir{\svg@out@path}% + \svg@shell@move{\svg@tempb}{\svg@out@base}% + \if@svg@ink@latex% + \svg@shell@move{\svg@tempb_tex}{\svg@out@base_tex}% + \fi% + }{% + \PackageWarning{svg}{% + The export with Inkscape failed for file\MessageBreak% + `\svg@tempa.svg'\MessageBreak% + Troubleshooting: Please check in the log file how\MessageBreak% + the invocation of Inkscape took place and try to\MessageBreak% + execute it yourself in the terminal% + }% + }% + \else% + \edef\svg@tempa{\svg@file@base}% + \svg@quotes@remove{\svg@tempa}% + \PackageWarning{svg}{% + You didn't enable `shell escape' (or `write18')\MessageBreak% + so it wasn't possible to launch the Inkscape export\MessageBreak% + for `\svg@tempa.svg'% + }% + \fi% + \fi% + \endgroup% + \fi% +} +\newcommand*\svg@ink@cmd[2]{% + \svg@ink@exe\space-z\space\svg@ink@area\space% + \ifx\svg@ink@dpi\relax\else--export-dpi=\svg@ink@dpi\space\fi% + \if@svg@ink@latex--export-latex\space\fi% + \svg@ink@opt\space% + --file="#1.svg"\space% + --export-\svg@ink@format="#2.\svg@ink@format"\space% +} +\newcommand*\svg@get@lastpage[1]{% + \ifstr{\svg@ink@format}{pdf}{% + \begingroup% + \svg@tempcnt=\m@ne\relax% + \ifx\XeTeXpdfpagecount\@undefined% + \ifpdf% + \ifx\pdfximage\@undefined% + \ifx\saveimageresource\@undefined\else% + \saveimageresource{#1}% + \svg@tempcnt=\lastsavedimageresourcepages\relax% + \fi% + \else% + \pdfximage{#1}% + \svg@tempcnt=\pdflastximagepages\relax% + \fi% + \fi% + \else% + \svg@tempcnt=\XeTeXpdfpagecount#1\relax% + \fi% + \ifnum\svg@tempcnt=\m@ne\relax% + \PackageWarning{svg}{% + It wasn't possible to detect the last page\MessageBreak% + of `#1'% + }% + \else% + \PackageInfo{svg}{Last page of `#1' is \the\svg@tempcnt}% + \fi% + \edef\svg@tempa{% + \noexpand\endgroup% + \noexpand\FamilyOptions{SVG}{lastpage=\the\svg@tempcnt}% + }% + \svg@tempa% + }{}% +} +\newcommand*\svg@wrn@scale{% + \ifdim\dimexpr\svg@param@scale\p@\relax=\p@\relax\else% + \@svg@tempswafalse% + \ifdim\svg@param@width>\z@\relax% + \@svg@tempswatrue% + \fi% + \ifdim\svg@param@height>\z@\relax% + \@svg@tempswatrue% + \fi% + \if@svg@tempswa% + \PackageWarning{svg}{% + The parameter `scale' is only considered if neither\MessageBreak% + `width' nor `height' are specified% + }% + \fi% + \fi% +} +\newcommand*\svg@input{\svg@@input} +\newcommand*\svg@@input[2][]{% + \IfArgIsEmpty{#1}{}{\svg@local@param@set{#1}}% + \if@svg@draft% + \@svg@ink@latexfalse% + \fi% + \edef\svg@tempa{#2}% + \if@svg@ink@latex% + \svg@patches{\svg@tempa}% + \ifnum\value{svg@param@lastpage}=\z@\relax% + \expandafter\svg@get@lastpage\expandafter{\svg@tempa}% + \fi% + \edef\svg@tempa{% + \ifx\svg@param@pretex\relax\else% + \noexpand\svg@param@pretex% + \fi% + \noexpand\input{\svg@tempa_tex}% + \ifx\svg@param@apptex\relax\else% + \noexpand\svg@param@apptex% + \fi% + }% + \ifdim\dimexpr\svg@param@angle\p@\relax=\z@\relax% + \svg@tempa% + \else% + \edef\svg@tempb{origin=\svg@param@origin}% + \expandafter\rotatebox\expandafter[\svg@tempb]{\svg@param@angle}{% + \svg@tempa% + }% + \fi% + \else% + \svg@wrn@scale% + \edef\svg@tempb{keepaspectratio,scale=\svg@param@scale}% + \ifdim\svg@param@height>\z@\relax% + \edef\svg@tempb{\svg@tempb,height=\svg@param@height}% + \fi% + \ifdim\svg@param@width>\z@\relax% + \edef\svg@tempb{\svg@tempb,width=\svg@param@width}% + \fi% + \ifdim\dimexpr\svg@param@angle\p@\relax=\z@\relax\else% + \edef\svg@tempb{% + \svg@tempb,origin=\svg@param@origin,angle=\svg@param@angle% + }% + \fi% + \if@svg@draft% + \edef\svg@tempb{\svg@tempb,draft}% + \else% + \edef\svg@tempb{\svg@tempb,draft=false}% + \fi% + \expandafter\includegraphics\expandafter[\svg@tempb]{\svg@tempa}% + \fi% +} +\newcommand*\svg@patches[1]{% + \let\svg@picture@saved\picture% + \let\picture\svg@picture@patched% + \let\svg@includegraphics@saved\includegraphics% + \let\includegraphics\svg@includegraphics@patched% + \edef\svg@includegraphics@file{#1}% +} +\newcommand*\svg@picture@saved{} +\newcommand*\svg@picture@patched{} +\newcommand*\svg@pictur@patched{} +\long\def\svg@picture@patched#1{\svg@pictur@patched@#1} +\def\svg@pictur@patched@(#1,#2){% + \svg@wrn@scale% + \ifdim\svg@param@height>\z@\relax% + \Gscale@div\svg@tempa{#1\p@}{#2\p@}% + \setlength\unitlength{\svg@param@height}% + \setlength\unitlength{\svg@tempa\unitlength}% + \ifdim\svg@param@width>\z@\relax% + \ifdim\unitlength>\svg@param@width\relax% + \setlength\unitlength{\svg@param@width}% + \fi% + \fi% + \else% + \ifdim\svg@param@width>\z@\relax% + \setlength\unitlength{\svg@param@width}% + \else% + \setlength\unitlength{\svg@param@scale\unitlength}% + \fi% + \fi% + \svg@picture@saved(#1,#2)% +} +\DefineFamily{SVGpatch} +\DefineFamilyMember{SVGpatch} +\newcounter{svg@param@currpage} +\setcounter{svg@param@currpage}{\m@ne} +\FamilyCounterKey{SVGpatch}{page}{svg@param@currpage} +\DefineFamilyKey{SVGpatch}{width}{\FamilyKeyStateProcessed} +\newcommand*\svg@includegraphics@file{} +\newcommand*\svg@includegraphics@saved{} +\newcommand*\svg@includegraphics@patched[2][]{% + \FamilyOptions{SVGpatch}{#1}% + \ifnum\value{svg@param@lastpage}<\z@\relax% + \FamilySetCounter{SVGpatch}{page}{svg@param@currpage}{% + \the\value{svg@param@lastpage}% + }% + \fi% + \ifnum\value{svg@param@currpage}>\value{svg@param@lastpage}\relax\else% + \svg@includegraphics@saved[{#1}]{\svg@includegraphics@file}% + \fi% +} +\newcommand*\svghidepreamblestart{% + \PackageWarning{svg}{% + The macro `\string\svghidepreamblestart' is only meant\MessageBreak% + to be used together with package `svg-extract'.\MessageBreak% + Nevertheless, nothing will happen% + }% +} +\newcommand*\svghidepreambleend{% + \PackageWarning{svg}{% + The macro `\string\svghidepreambleend' is only meant\MessageBreak% + to be used together with package `svg-extract'.\MessageBreak% + Nevertheless, nothing will happen% + }% +} +\newcommand*\svg@extract[1]{} +\ifnum\pdf@shellescape=\@ne\relax\else% + \expandafter\endinput% +\fi +\RequirePackage{ifplatform}[2010/10/22] +\ifwindows + \newcommand*\svg@shell@@mkdir[1]{if not exist "#1" mkdir "#1"} + \newcommand*\svg@shell@@mv{move} + \newcommand*\svg@shell@@rm{del} +\else + \newcommand*\svg@shell@@mkdir[1]{mkdir -p "#1"} + \newcommand*\svg@shell@@mv{mv} + \newcommand*\svg@shell@@rm{rm} +\fi +\newcommand*\svg@shell@mkdir[1]{% + \begingroup% + \edef\svg@tempa{#1}% + \svg@quotes@remove{\svg@tempa}% + \@svg@tempswatrue% + \ifstr{\svg@tempa}{}{\@svg@tempswafalse}{% + \ifstr{\svg@tempa}{./}{\@svg@tempswafalse}{% + }}% + \if@svg@tempswa% + \ShellEscape{\svg@shell@@mkdir{\svg@tempa}}% + \fi% + \endgroup% +} +\newcommand*\svg@shell@move[2]{% + \ShellEscape{\svg@shell@@mv\space"#1"\space"#2"}% +} +\newcommand*\svg@shell@rm[1]{% + \ShellEscape{\svg@shell@@rm\space"#1"}% +} \endinput %% %% End of file `svg.sty'. diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index e835ea596dd..8747151f231 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -2465,6 +2465,7 @@ my $core_latex = "$Master/texmf-dist/tex/latex"; 'silence' => 'latex -translate-file=empty.tcx', # no 8-bit 'skdoc' => 'tex', 'skrapport' => 'pdflatex', # as with download + 'svg' => 'etex -interaction=nonstopmode', 'svn-multi' => 'latex', # interaction for .pl 'teubner' => 'latex', # interaction 'termlist' => 'tex', # interaction for .pl -- cgit v1.2.3