diff options
author | Karl Berry <karl@freefriends.org> | 2010-03-28 00:38:32 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2010-03-28 00:38:32 +0000 |
commit | 49b4790fd92979a66a8024fe83a0338c0c0b3949 (patch) | |
tree | 64b94b3a1c8b4c954e1798ca111ed69b958487a7 /Master/texmf-dist/tex/latex/standalone/standalone.sty | |
parent | c71375a46696c8f462ab9901b685971bce3810a5 (diff) |
standalone 0.3 (27mar10)
git-svn-id: svn://tug.org/texlive/trunk@17579 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/standalone/standalone.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/standalone/standalone.sty | 472 |
1 files changed, 450 insertions, 22 deletions
diff --git a/Master/texmf-dist/tex/latex/standalone/standalone.sty b/Master/texmf-dist/tex/latex/standalone/standalone.sty index e6ad6db56ed..8333ee65eec 100644 --- a/Master/texmf-dist/tex/latex/standalone/standalone.sty +++ b/Master/texmf-dist/tex/latex/standalone/standalone.sty @@ -25,27 +25,465 @@ %% This work consists of the files standalone.dtx, standalone.ins %% and the derived file standalone.sty. %% -% $Id: standalone.dtx 1714 2010-03-22 14:44:37Z martin $ +% $Id: standalone.dtx 1772 2010-03-27 13:50:59Z martin $ \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{standalone} [2010/03/22 v0.2 Package to include TeX sub-files which use the 'standalone' class] +\ProvidesPackage{standalone} [2010/03/27 v0.3a Package to include TeX sub-files with preambles] \expandafter\newif\csname ifstandalone\endcsname \standalonefalse \@ifundefined{ifstandalonebeamer}{% \expandafter\newif\csname ifstandalonebeamer\endcsname \standalonebeamerfalse }{}% +\@ifundefined{onlyifstandalone} + {\let\onlyifstandalone\@gobble} + {} +\newif\ifsa@subpreambles +\newif\ifsa@sortsubpreambles +\newif\ifsa@printsubpreambles +\DeclareOption{subpreambles}{% + \sa@subpreamblestrue +} +\DeclareOption{sort}{% + \sa@subpreamblestrue + \sa@sortsubpreamblestrue +} +\DeclareOption{print}{% + \sa@subpreamblestrue + \sa@printsubpreamblestrue +} +\DeclareOption{comments}{% + \def\sa@percent{\@makeother\%}% +} +\DeclareOption{nocomments}{% + \def\sa@percent{}% +} +\ProcessOptions*\relax +\ifsa@printsubpreambles + \ifsa@sortsubpreambles\else + \@ifundefined{sa@percent}{% + \def\sa@percent{\@makeother\%}% + }{}% + \fi +\fi +\@ifundefined{finkpath}{% + \def\sa@rmspace#1 \empty{#1}% + \def\sa@chkext#1.#2 \empty#3{% + \ifx\empty#3\empty + \sa@rmspace#1\empty.#2% + \else + #1.#2% + \expandafter\sa@rmrest + \fi + }% + \def\sa@rmrest tex \empty{}% + \def\sa@filepath{\expandafter\sa@chkext\@filef@und\empty.tex \empty\empty}% +}{% + \def\sa@filepath{\expandafter\expandafter\expandafter\sa@rmdotslash\expandafter\finkdir\finkfile\empty./\empty}% + \def\sa@rmdotslash#1./#2\empty{% + \ifx\empty#1\empty + \sa@@rmdotslash#2% + \else + \ifx\empty#2\empty + #1% + \else + \sa@@rmdotslash#1./#2% + \fi + \fi + } + \def\sa@@rmdotslash#1./\empty{#1}% +} +\ifsa@subpreambles +\newwrite\sa@out +\def\sa@write{\immediate\write\sa@out}% +\ifsa@printsubpreambles +\long\def\sa@removeonlyifstandalone#1\onlyifstandalone{% + \g@addto@macro\sa@preamble{#1}% + \@ifnextchar\sa@endmarker + {\@gobble}% + {\expandafter\sa@gobbleeol\expandafter\sa@removeonlyifstandalone\expandafter^^J\@gobble}% +} +\fi +\ifsa@sortsubpreambles +\newcommand{\sa@usepackagewithoutoptions}[2][]{% + \sa@orig@usepackage{#2}% +} +\def\sa@endmarker{% + \@gobble{sa@endmarker}% +} +\ifsa@printsubpreambles +\AtEndDocument{% + \sa@write{\@percentchar\space Packages required by sub-files:}% + \expandafter\@for\expandafter\pkg\expandafter:\expandafter=\sa@collpkgs\do{% + \ifx\pkg\empty\else + \sa@write{% + \string\usepackage% + \expandafter\ifx\csname sa@pkgopts@\pkg\endcsname\empty\else% + [\csname sa@pkgopts@\pkg\endcsname]% + \fi + {\pkg}% + \expandafter\ifx\csname sa@pkgdate@\pkg\endcsname\relax\else% + [\csname sa@pkgdate@\pkg\endcsname]% + \fi + }% + \fi + }% + \ifx\sa@collpgflibs\empty\else + \sa@write{^^J\@percentchar\space PGF libraries required by sub-files:}% + \expandafter\@for\expandafter\lib\expandafter:\expandafter=\sa@collpgflibs\do{% + \ifx\lib\empty\else + \sa@write{\string\usepgflibrary{\lib}}% + \fi + }% + \fi + \ifx\sa@colltikzlibs\empty\else + \sa@write{^^J\@percentchar\space TikZ libraries required by sub-files:}% + \expandafter\@for\expandafter\lib\expandafter:\expandafter=\sa@colltikzlibs\do{% + \ifx\lib\empty\else + \sa@write{\string\usetikzlibrary{\lib}}% + \fi + }% + \fi + \ifx\sa@colltikztiminglibs\empty\else + \sa@write{^^J\@percentchar\space TikZ-Timing libraries required by sub-files:}% + \expandafter\@for\expandafter\lib\expandafter:\expandafter=\sa@colltikztiminglibs\do{% + \ifx\lib\empty\else + \sa@write{% + \string\usetikztiminglibrary% + \expandafter\ifx\csname sa@tikztimingopts@\lib\endcsname\empty\else% + [\csname sa@tikztimingopts@\lib\endcsname]% + \fi + {\lib}% + \expandafter\ifx\csname sa@tikztimingdate@\lib\endcsname\relax\else% + [\csname sa@tikztimingdate@\lib\endcsname]% + \fi + }% + \fi + }% + \fi + \sa@write{\expandafter\unexpanded\expandafter{\sa@preamble}}% + \message{^^JPackage 'standalone' INFO: See file '\jobname.stp' for list of sub-preambles.^^J}% + \immediate\closeout\sa@out +} +\long\def\sa@removepackages#1\usepackage{% + \sa@removepgflibs#1\usepgflibrary\sa@endmarker + \@ifnextchar\sa@endmarker + {\@gobble}% + {\sa@sortpackages}% +} +\long\def\sa@removepgflibs#1\usepgflibrary{% + \sa@removetikzlibs#1\usetikzlibrary\sa@endmarker + \@ifnextchar\sa@endmarker + {\@gobble}% + {\sa@sortpgflibs}% +} +\long\def\sa@removetikzlibs#1\usetikzlibrary{% + \sa@removetikztiminglibs#1\usetikztiminglibrary\sa@endmarker + \@ifnextchar\sa@endmarker + {\@gobble}% + {\sa@sorttikzlibs}% +} +\long\def\sa@removetikztiminglibs#1\usetikztiminglibrary{% + \sa@removeonlyifstandalone#1\onlyifstandalone\sa@endmarker + \@ifnextchar\sa@endmarker + {\@gobble}% + {\sa@sorttikztiminglibs}% +} +\def\sa@collpkgs{}% +\newcommand\sa@sortpackages[2][]{% + \@ifnextchar[%] + {\sa@@sortpackages{#1}{#2}}% + {\sa@@sortpackages{#1}{#2}[]}% +} +\def\sa@@sortpackages#1#2[#3]{% + \@for\pkg:=#2\do {% + \@ifundefined{sa@pkgopts@\pkg}% + {% + \expandafter\g@addto@macro\expandafter\sa@collpkgs\expandafter{\expandafter,\pkg}% + \global\@namedef{sa@pkgopts@\pkg}{#1}% + \global\@namedef{sa@pkgopt@\pkg @}{}% + \ifx\relax#1\relax\else + \@for\opt:=#1\do{\global\@namedef{sa@pkgopt@\pkg @\opt}{}}% + \fi + }% + {% + \ifx\relax#1\relax\else + \@for\opt:=#1\do{% + \@ifundefined{sa@pkgopt@\pkg @\opt}% + {% + \expandafter\g@addto@macro\csname sa@pkgopts@\pkg\expandafter\endcsname\expandafter{\expandafter,\opt}% + \global\@namedef{sa@pkgopt@\pkg @\opt}{}% + }{}% + }% + \fi + }% + \ifx\relax#3\relax\else + \@ifundefined{sa@pkgdate@\pkg}% + {\global\@namedef{sa@pkgdate@\pkg}{#3}}% + {% + \begingroup + \edef\@tempa{{\csname sa@pkgdate@\pkg\endcsname}{#3}}% + \expandafter\sa@getlargerdate\@tempa + \expandafter\xdef\csname sa@pkgdate@\pkg\endcsname{\sa@thedate}% + \endgroup + }% + \fi + }% + \sa@gobbleeol\sa@removepackages^^J% +} +\def\sa@getlargerdate#1#2{% + \sa@@getdate#1\relax\relax0/0/0\relax\empty\relax + \let\sa@datea\sa@date + \sa@@getdate#2\relax\relax0/0/0\relax\empty\relax + \ifdim\sa@datea pt>\sa@date pt + \def\sa@thedate{#1}% + \else + \def\sa@thedate{#2}% + \fi +} +\def\sa@@getdate#1/#2/#3\relax{% + \@ifnextchar\relax + {% + \def\sa@date{#1.#2#3}% + \sa@@rmdate + }% + {% + \def\sa@date{0}% + \sa@@rmdate + }% +} +\def\sa@@rmdate#1\empty\relax{} +\def\sa@collpgflibs{}% +\def\sa@sortpgflibs#1{% + \@for\lib:=#1\do {% + \@ifundefined{sa@pgflib@\lib}% + {% + \expandafter\g@addto@macro\expandafter\sa@collpgflibs\expandafter{\expandafter,\lib}% + \global\@namedef{sa@pgflib@\lib}{}% + }% + {}% + }% + \sa@gobbleeol\sa@removepgflibs^^J% +} +\def\sa@colltikzlibs{}% +\def\sa@sorttikzlibs#1{% + \@for\lib:=#1\do {% + \@ifundefined{sa@tikzlib@\lib}% + {% + \expandafter\g@addto@macro\expandafter\sa@colltikzlibs\expandafter{\expandafter,\lib}% + \global\@namedef{sa@tikzlib@\lib}{}% + }% + {}% + }% + \sa@gobbleeol\sa@removetikzlibs^^J% +} +\def\sa@colltikztiminglibs{}% +\newcommand\sa@sorttikztiminglibs[2][]{% + \@ifnextchar[%] + {\sa@@sorttikztiminglibs{#1}{#2}}% + {\sa@@sorttikztiminglibs{#1}{#2}[]}% +} +\def\sa@@sorttikztiminglibs#1#2[#3]{% + \@for\lib:=#2\do {% + \@ifundefined{sa@tikztimingopts@\lib}% + {% + \expandafter\g@addto@macro\expandafter\sa@colltikztiminglibs\expandafter{\expandafter,\lib}% + \global\@namedef{sa@tikztimingopts@\lib}{#1}% + \global\@namedef{sa@tikztimingopt@\lib @}{}% + \ifx\relax#1\relax\else + \@for\opt:=#1\do{\global\@namedef{sa@tikztimingopt@\lib @\opt}{}}% + \fi + }% + {% + \ifx\relax#1\relax\else + \@for\opt:=#1\do{% + \@ifundefined{sa@tikztimingopt@\lib @\opt}% + {% + \expandafter\g@addto@macro\csname sa@tikztimingopts@\lib\expandafter\endcsname\expandafter{\expandafter,\opt}% + \global\@namedef{sa@tikztimingopt@\lib @\opt}{}% + }{}% + }% + \fi + }% + \ifx\relax#3\relax\else + \@ifundefined{sa@tikztimingdate@\lib}% + {\global\@namedef{sa@tikztimingdate@\lib}{#3}}% + {% + \begingroup + \edef\@tempa{{\csname sa@tikztimingdate@\lib\endcsname}{#3}}% + \expandafter\sa@getlargerdate\@tempa + \expandafter\xdef\csname sa@tikztimingdate@\lib\endcsname{\sa@thedate}% + \endgroup + }% + \fi + }% + \sa@gobbleeol\sa@removetikztiminglibs^^J% +} +\def\sa@gobbleopt#1[#2]{% + \@ifnextchar^^J% + {\sa@gobbleeol{#1}}{#1}% +} +\else +\def\sa@scanpackages#1\usepackage{% + \@ifnextchar\sa@endmarker + {\@gobble}% + {\sa@collectpackage} +} +\newcommand\sa@collectpackage[2][]{% + \ifx\relax#1\relax\else + \g@addto@macro\sa@collopts{\PassOptionsToPackage{#1}{#2}}% + \fi + \sa@scanpackages +} +\fi +\def\sa@collopts{} +\AtEndOfPackage{\sa@collopts\let\sa@collopts\relax} +\fi +\def\standalonepreambles{% + \begingroup + \endlinechar=\m@ne + \@makeother\#% +} +\def\endstandalonepreambles{% + \endgroup + \endinput +} +\long\gdef\subpreamble#1#2\endsubpreamble{% + \expandafter\gdef\csname prevsubpreamble@#1\endcsname{#2}% + \ifsa@sortsubpreambles + \sa@scanpackages#2\usepackage\sa@endmarker + \fi +} +\def\endsubpreamble{}% +\ifsa@printsubpreambles + \immediate\openout\sa@out=\jobname.stp\relax +\else +\begingroup + \setbox\@tempboxa\hbox{% + \InputIfFileExists{\jobname.sta}{}{\PackageInfo{standalone}{STA file not found!}{}{}}% + }% +\endgroup + +\AtBeginDocument{% + \let\subpreamble\@gobble + \let\endsubpreamble\relax + \let\standalonepreambles\relax + \let\endstandalonepreambles\relax + \ifsa@sortsubpreambles + \let\sa@orig@usepackage\usepackage + \let\usepackage\sa@usepackagewithoutoptions + \fi + \InputIfFileExists{\jobname.sta}{}{}% + \ifsa@sortsubpreambles + \let\usepackage\sa@orig@usepackage + \fi + \immediate\openout\sa@out=\jobname.sta\relax + \immediate\write\sa@out{\string\standalonepreambles}% +} +\AtEndDocument{% + \sa@write{\string\endstandalonepreambles}% + \immediate\closeout\sa@out +} +\fi +\fi +\def\sa@gobbleeol#1^^J{% + \@ifnextchar^^J% + {\sa@gobbleeol{#1}}{#1}% +} +\long\def\standaloneignore#1\documentclass{% + \sa@documentclass +} +\@namedef{standaloneignore\space}{\standaloneignore} \newcommand{\sa@documentclass}[2][]{% \let\document\sa@document - \expandafter\sa@@documentclass -} -\def\sa@@documentclass{% - \begingroup\def\sa@gobbleto{document}\sa@gobble + \begingroup + \ifsa@subpreambles + \@ifundefined{sa@written@\sa@filepath}% + {% + \ifsa@printsubpreambles + \ifsa@sortsubpreambles + \begingroup + \edef\@tempa{^^J\@percentchar\space Preamble from file '\sa@filepath'^^J}% + \expandafter\g@addto@macro\expandafter\sa@preamble\expandafter{\@tempa}% + \endgroup + \else + \sa@write{^^J\@percentchar\space Preamble from file '\sa@filepath'}% + \fi + \else + \sa@write{\string\subpreamble{\sa@filepath}}% + \fi + }{}% + \global\@namedef{subpreamble@\sa@filepath}{}% + \ifsa@printsubpreambles + \endlinechar=`\^^J% + \else + \endlinechar=\m@ne + \fi + \@makeother\#% + \@nameuse{sa@percent}% + \fi + \def\sa@gobbleto{document}% + \sa@gobbleeol\sa@gobble^^J% } +\def\sa@preamble{}% \long\def\sa@gobble#1\begin#2{% \def\@tempa{#2}% \ifx\@tempa\sa@gobbleto - \def\next{\expandafter\endgroup\expandafter\begin\expandafter{\sa@gobbleto}}% + \ifsa@subpreambles + \expandafter\g@addto@macro\csname subpreamble@\sa@filepath\endcsname{#1}% + \@ifundefined{sa@written@\sa@filepath}% + {% + \ifsa@printsubpreambles + \ifsa@sortsubpreambles + \sa@removepackages#1\usepackage\sa@endmarker + \else + \begingroup + \let\sa@preamble\empty + \sa@removeonlyifstandalone#1\onlyifstandalone\sa@endmarker + \expandafter\sa@write\expandafter{\expandafter\unexpanded\expandafter{\sa@preamble}}% + \endgroup + \fi + \else + \sa@write{\unexpanded{#1}}% + \sa@write{\string\endsubpreamble}% + \fi + }{}% + \global\@namedef{sa@written@\sa@filepath}{}% + \ifsa@printsubpreambles + \def\next{% + \endgroup + \PackageWarning{standalone}{Running 'standalone' package in sub-preamble print mode. All body content of file `\sa@filepath' is ignored!}{}{}% + \null + \endinput + } + \else + \expandafter + \ifx + \csname prevsubpreamble@\sa@filepath \expandafter\endcsname + \csname subpreamble@\sa@filepath \endcsname + \def\next{\expandafter\endgroup\expandafter\begin\expandafter{\sa@gobbleto}}% + \else + %\expandafter\show\csname prevsubpreamble@\sa@filepath \endcsname + %\expandafter\show\csname subpreamble@\sa@filepath \endcsname + \def\next{% + \endgroup + \PackageWarning{standalone}{Sub-preamble of file '\sa@filepath' has changed. Content will be ignored. Please rerun LaTeX!}{}{}% + \immediate\write\@mainaux{% + \@percentchar\space standalone package info: Rerun LaTeX! + } + \null + \endinput + } + \fi + \fi + \else + \def\next{\expandafter\endgroup\expandafter\begin\expandafter{\sa@gobbleto}}% + \fi \else + \ifsa@subpreambles + \expandafter\g@addto@macro\csname subpreamble@\sa@filepath\endcsname{#1\begin{#2}}% + \@ifundefined{sa@written@\sa@filepath}% + {\sa@write{\unexpanded{#1\begin{#2}}}}{}% + \fi \def\next{\sa@gobble}% \fi \next @@ -91,27 +529,17 @@ \sa@atenddocument \aftergroup\sa@@enddocument } +\def\sa@@enddocument{% + %\let\document\sa@orig@document + \let\enddocument\sa@orig@enddocument + \endinput +} \def\sa@atbegindocument{% \ignorespaces }% \def\sa@atenddocument{% \unskip }% -\def\sa@@enddocument{% - %\let\document\sa@orig@document - \let\enddocument\sa@orig@enddocument - \endinput -} -\def\sa@processpreamble{% - \renewcommand\usepackage[2][]{% - \message{^^J% - INFO: Sub-file requires the following package(s):^^J - \space\space[##1]{##2}^^J% - }% - }% - \let\RequirePackage\usepackage -} -%%\def\sa@@documentclass{\sa@processpreamble} \endinput %% %% End of file `standalone.sty'. |