diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/oberdiek/pdfcolmk.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/oberdiek/pdfcolmk.sty | 531 |
1 files changed, 531 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/oberdiek/pdfcolmk.sty b/Master/texmf-dist/tex/latex/oberdiek/pdfcolmk.sty new file mode 100644 index 00000000000..20f972aede8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/oberdiek/pdfcolmk.sty @@ -0,0 +1,531 @@ +% File: pdfcolmk.sty +% Version: 2005/07/09 v0.7 +% Author: Heiko Oberdiek +% Email: <oberdiek@uni-freiburg.de> +% +% Copyright: Copyright (C) 2000, 2005 Heiko Oberdiek. +% +% This work 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 2003/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Heiko Oberdiek. +% +% Function: This package tries a solution for the missing color +% stack of pdfTeX. +% +% Background: After the Dante meeting (Clausthal 2000) I have started +% to experiment with the eTeX method of a `colour' mark. +% One of the major problems is the understanding of the +% output routine and the need to rewrite it because of +% missing hooks. Currently I have made some tests in +% in onecolumn and twocolumn mode, but the state is +% experimental. +% +% Limitations: * mark limitations: page breaks in math +% * LaTeX's output routine is redefinded. +% * Changes in the output routine of newer versions +% of LaTeX are not detected. +% * Packages that change the output routine are not +% supported. +% * It does not support several independent text +% streams like footnotes. +% +% Recommended: e-TeX (for additional mark register) +% Without e-TeX LaTeX's mark commands are redefined +% to store an additional color value. +% +% Use: Load after package color: +% \usepackage[pdftex]{color} +% \usepackage{pdfcolmk} +% +% Compatibility: +% * Load the following packages after `pdfcolmk': +% mparhack.sty +% * Load the following packages before `pdfcolmk': +% marn.sty +% newmarn.sty +% * Supported \@addmarginpar patch: +% latex/base/latex.ltx +% memoir.cls +% poemscol/marn.sty, poemscol/newmarn.sty +% mparhack.sty +% * Unsupported \@addmarginpar patch: +% lineno.sty +% sttools/marginal.sty +% revtex4.cls +% +% History: 2000/08/27 v0.1: +% first published version +% (comp.text.tex, pdftex@tug.org) +% 2000/09/02 v0.2: +% * next try. +% 2000/09/02 v0.3: +% * solution without e-TeX added. +% 2000/09/06 v0.4: +% * Patch commands added. +% * Patch for seminar.cls added. +% 2000/09/06 v0.5: +% * Bug fix: initialization of \pec@value added. +% 2005/06/15 v0.6: +% * Support for \marginpar added. +% See thread in comp.text.tex +% (Message-ID: d86d3r$kpv$1@news.BelWue.DE). +% 2005/07/09 v0.7: +% * Output support added for memoir, +% provided by Lars Madsen. +% +\NeedsTeXFormat{LaTeX2e}[1997/11/09] +\ProvidesPackage{pdfcolmk}[2005/07/09 v0.7 PDFtex COLor MarK (HO)] + +\@ifundefined{ver@pdftex.def}{% + \PackageWarningNoLine{pdfcolmk}{% + Nothing to fix, because \string`pdftex.def\string' not loaded% + }% + \endinput +}{} +\@ifpackageloaded{color}{}{% + \PackageWarningNoLine{pdfcolmk}{% + Nothing to fix, because \string`color.sty\string' not loaded% + }% + \endinput +} + +\PackageInfo{pdfcolmk}{% + This package tries to simulate dvips's color stack\MessageBreak + for pdfTeX based on a mark register of e-TeX.\MessageBreak + It redefines LaTeX's output routine. Therefore\MessageBreak + use with care, no warranties% +} + +\ifx\marks\@undefined + + \let\pec@mark\mark + \let\pec@value\empty + \long\def\mark#1{% + \protected@xdef\pec@value{#1}% + \pec@setmark + } + \def\pec@setmark{% + \begingroup + \@temptokena\expandafter{\pec@value}% + \pec@mark{{\current@color}\the\@temptokena}% + \endgroup + } + \def\pec@getmark{% + \xdef\pec@botcolor{% + \expandafter\@firstofthree\botmark\@empty\@empty\@empty + }% + } + \long\def\@firstofthree#1#2#3{#1}% + \CheckCommand{\@leftmark}[2]{#1} + \CheckCommand{\@rightmark}[2]{#2} + \CheckCommand*{\leftmark}{% + \expandafter\@leftmark\botmark\@empty\@empty + } + \CheckCommand*{\rightmark}{% + \expandafter\@rightmark\firstmark\@empty\@empty + } + \long\def\@leftmark#1#2#3{#2} + \long\def\@rightmark#1#2#3{#3} + \g@addto@macro\leftmark\@empty + \g@addto@macro\rightmark\@empty + +\else + + \RequirePackage{etex}[1998/03/26] + \newmarks\pec@marks + \def\pec@setmark{\marks\pec@marks{\current@color}} + \def\pec@getmark{\xdef\pec@botcolor{\botmarks\pec@marks}} + +\fi + +% \marginpar fix + +\chardef\pec@result\z@ +\def\pec@temp#1{% + \chardef\pec@result\@ne + \begingroup + \let\on@line\@empty + \PackageInfo{pdfcolmk}{% + Patch for \string\@addmarginpar\space applied (#1)% + }% + \endgroup +} + +% Variant: latex/base/latex.ltx +\def\pec@addmarginpar{% + \@next\@marbox\@currlist{% + \@cons\@freelist\@marbox + \@cons\@freelist\@currbox + }\@latexbug + \@tempcnta\@ne + \if@twocolumn + \if@firstcolumn + \@tempcnta\m@ne + \fi + \else + \if@mparswitch + \ifodd\c@page + \else + \@tempcnta\m@ne + \fi + \fi + \if@reversemargin \@tempcnta -\@tempcnta \fi + \fi + \ifnum\@tempcnta <\z@ \global\setbox\@marbox\box\@currbox \fi + \@tempdima\@mparbottom + \advance\@tempdima -\@pageht + \advance\@tempdima\ht\@marbox + \ifdim\@tempdima >\z@ + \@latex@warning@no@line{Marginpar on page \thepage\space moved}% + \else + \@tempdima\z@ + \fi + \global\@mparbottom\@pageht + \global\advance\@mparbottom\@tempdima + \global\advance\@mparbottom\dp\@marbox + \global\advance\@mparbottom\marginparpush + \advance\@tempdima -\ht\@marbox + \global\setbox\@marbox\vbox{% + \vskip \@tempdima + \box \@marbox + }% + \global \ht\@marbox \z@ + \global \dp\@marbox \z@ + \kern -\@pagedp + \nointerlineskip + \hb@xt@\columnwidth{% + \ifnum \@tempcnta >\z@ + \hskip\columnwidth + \hskip\marginparsep + \else + \hskip -\marginparsep + \hskip -\marginparwidth + \fi + \box\@marbox \hss + }% + \nointerlineskip + \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}% +} +\ifx\pec@addmarginpar\@addmarginpar + \pec@temp{latex/base}% +\fi + +% Variant: memoir.cls +\def\pec@addmarginpar{% + \checkoddpage + \@next\@marbox\@currlist{% + \@cons\@freelist\@marbox + \@cons\@freelist\@currbox + }\@latexbug + \@tempcnta\@ne + \if@twocolumn + \if@firstcolumn + \@tempcnta\m@ne + \fi + \else + \if@mparswitch + \ifoddpage + \else + \@tempcnta\m@ne + \fi + \fi + \if@reversemargin + \@tempcnta -\@tempcnta + \fi + \fi + \ifnum\@tempcnta <\z@ + \global\setbox\@marbox\box\@currbox + \fi + \@tempdima\@mparbottom + \advance\@tempdima -\@pageht + \advance\@tempdima\ht\@marbox + \ifdim\@tempdima >\z@ + \@latex@warning@no@line{% + Marginpar on page \thepage\space moved by \the\@tempdima + }% + \else + \@tempdima\z@ + \fi + \global\@mparbottom\@pageht + \global\advance\@mparbottom\@tempdima + \global\advance\@mparbottom\dp\@marbox + \global\advance\@mparbottom\marginparpush + \advance\@tempdima -\ht\@marbox + \global\setbox\@marbox\vbox{% + \vskip \@tempdima + \box \@marbox + }% + \global \ht\@marbox \z@ + \global \dp\@marbox \z@ + \kern -\@pagedp + \nointerlineskip + \hb@xt@\columnwidth{% + \ifnum \@tempcnta >\z@ + \hskip\columnwidth + \hskip\marginparsep + \else + \hskip -\marginparsep + \hskip -\marginparwidth + \fi + \box\@marbox + \hss + }% + \nointerlineskip + \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}% +}% +\ifx\pec@addmarginpar\@addmarginpar + \pec@temp{memoir.cls}% +\fi + +% Variant: poemscol/marn.sty, poemscol/newmarn.sty +\def\pec@addmarginpar{% + \@next \@marbox\@currlist{% + \@cons\@freelist\@marbox + \@cons\@freelist\@currbox + }\@latexbug + \global\advance\@mpar@count\m@ne + \@ifundefined{@marn@\the\@mpar@count @}{% was location logged last time? + \@tempcnta\@ne % NO: use original LaTeX logic + \if@twocolumn + \if@firstcolumn + \@tempcnta\m@ne + \fi + \else + \if@mparswitch + \ifodd\c@page + \else + \@tempcnta\m@ne + \fi + \fi + \if@reversemargin + \@tempcnta -\@tempcnta + \fi + \fi + }{% + \@tempcnta % YES: use record from last time to decide side. + \@nameuse{@marn@\the\@mpar@count @}% + \if@reversemargin -\fi \@ne + }% + \ifnum\@tempcnta <\z@ + \global\setbox\@marbox\box\@currbox + \global\let\@marnbottom\@mparbottoml + \else + \global\let\@marnbottom\@mparbottom + \fi + \@tempdima\@marnbottom \advance\@tempdima -\@pageht + \advance\@tempdima\ht\@marbox + \ifdim\@tempdima >\z@ + \@@warning{Marginpar on page \thepage\space moved}% + \else + \@tempdima\z@ + \fi + \global\@marnbottom\@pageht + \global\advance\@marnbottom\@tempdima + \global\advance\@marnbottom\dp\@marbox + \global\advance\@marnbottom\marginparpush + \advance\@tempdima -\ht\@marbox + \global\ht\@marbox\z@ + \global\dp\@marbox\z@ + \vskip -\@pagedp + \vskip\@tempdima\nointerlineskip + \hbox to\columnwidth{% + \ifnum \@tempcnta >\z@ + \hskip\columnwidth + \hskip\marginparsep + \else + \hskip -\marginparsep + \hskip -\marginparwidth + \fi + \if@filesw % record where this is for use next time: + \@marn@log\@mpar@count + \fi + \box\@marbox + \hss + }% + \nobreak %% RmS 91/06/21 \nobreak added + \vskip -\@tempdima + \nointerlineskip + \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}% +} +\ifx\pec@addmarginpar\@addmarginpar + \pec@temp{poemscol/(new)marn.sty}% +\fi + +% Variant: refman/refart.cls, refnam/refrep.cls +\def\pec@addmarginpar{% + \@next\@marbox\@currlist{% + \@cons\@freelist\@marbox + \@cons\@freelist\@currbox + }\@latexbug + \@tempcnta\@ne + \if@twocolumn + \if@firstcolumn + \@tempcnta\m@ne + \fi + \else + \@tempcnta\m@ne + \fi + \ifnum\@tempcnta <\z@ + \global\setbox\@marbox\box\@currbox + \fi + \@tempdima\@mparbottom + \advance\@tempdima -\@pageht + \advance\@tempdima\ht\@marbox + \ifdim\@tempdima >\z@ + \@@warning{Marginpar on page \thepage\space moved}% + \else + \@tempdima\z@ + \fi + \global\@mparbottom\@pageht + \global\advance\@mparbottom\@tempdima + \global\advance\@mparbottom\dp\@marbox + \global\advance\@mparbottom\marginparpush + \advance\@tempdima -\ht\@marbox + \global\setbox\@marbox\vbox{% + \vskip \@tempdima \box \@marbox + }% + \global \ht\@marbox \z@ + \global \dp\@marbox \z@ + \kern -\@pagedp + \nointerlineskip + \hb@xt@\columnwidth{% + \ifnum \@tempcnta >\z@ + \hskip\columnwidth + \hskip\marginparsep + \else + \hskip -\marginparsep + \hskip -\marginparwidth + \fi + \box\@marbox + \hss + }% + \nointerlineskip + \hbox{\vrule \@height\z@ \@width\z@ \@depth\@pagedp}% +} +\ifx\pec@addmarginpar\@addmarginpar + \pec@temp{ref(art|rep).cls}% +\fi + +\ifcase\pec@result + \PackageInfo{pdfcolmk}{% + Fix for \string\@addmarginpar\space is omitted, % + because this variant\MessageBreak + of \string\@addmarginpar\space + is not recognized% + }% +\else + % apply patch for \@addmarginpar + \def\pec@PatchAddMarginpar#1\columnwidth#2#3\@nil{% + \pec@PatchAddMarginparI#2\@nil{#1}{#3}% + }% + \def\pec@PatchAddMarginparI#1\box\@marbox\hss#2\@nil#3#4{% + \def\@addmarginpar{% + #3% + \columnwidth{% + #1% + \pdfliteral{q}% + \rlap{% + \box\@marbox + }% + \pdfliteral{Q}% + \hss + #2% + }% + #4% + }% + }% + \expandafter\pec@PatchAddMarginpar\@addmarginpar\@nil +\fi + +% color fix + +\def\set@color{% + \pdfliteral{\current@color}% + \ifinner + \else + \pec@setmark + \fi + \aftergroup\reset@color +} +\def\reset@color{% + \pdfliteral{\current@color}% + \ifinner + \else + \pec@setmark + \fi +} + +\let\pec@botcolor\current@color + +\def\pec@PatchVBoxCCLV{% + \ifx\pec@botcolor\@empty + \else + \setbox\@cclv\vbox{% + \pdfliteral{\pec@botcolor}% + \unvbox\@cclv + }% + \fi + \pec@getmark +} + +\def\pec@PatchAlreadyInBox{% + \ifx\pec@botcolor\@empty + \else + \pdfliteral{\pec@botcolor}% + \fi + \pec@getmark +} + +\@ifclassloaded{memoir}{% + \expandafter\def\expandafter\mem@makecol\expandafter{% + \expandafter\pec@PatchVBoxCCLV + \mem@makecol + }% + \endinput +}{} + +\@ifclassloaded{seminar}{% + \newcommand\pec@org@makeslide{} + \let\pec@org@makeslide\@makeslide + \def\@makeslide{% + \pec@PatchVBoxCCLV + \pec@org@makeslide + }% + \endinput +}{} + +\long\def\pec@output#1\@specialoutput\else#2\pec@end{% + \begingroup + \def\x{#2}% + \expandafter\endgroup + \ifx\x\@empty + \PackageWarningNoLine{pdfcolmk}{% + Unexpected \string\output\space routine detected,% + \MessageBreak + loading of package stopped% + }% + \expandafter\endinput + \fi +} +\expandafter\expandafter\expandafter\pec@output +\expandafter\@firstofone\the\output\@specialoutput\else\pec@end + +\long\def\pec@output#1\@specialoutput\else#2\pec@end{% + \output{% + #1\@specialoutput\else + \pec@PatchVBoxCCLV + #2% + }% +} +\expandafter\expandafter\expandafter\pec@output +\expandafter\@firstofone\the\output\pec@end + +\endinput |