From 45753dabbb93091efcea2a70996bcbdc51a39761 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 24 Jul 2015 21:32:13 +0000 Subject: pdfpagediff (24jul15) git-svn-id: svn://tug.org/texlive/trunk@37946 c570f23f-e606-0410-a88d-b1316a301751 --- .../tex/latex/pdfpagediff/pdfpagediff.sty | 261 +++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/pdfpagediff/pdfpagediff.sty (limited to 'Master/texmf-dist/tex/latex/pdfpagediff') diff --git a/Master/texmf-dist/tex/latex/pdfpagediff/pdfpagediff.sty b/Master/texmf-dist/tex/latex/pdfpagediff/pdfpagediff.sty new file mode 100644 index 00000000000..75dfefe87b8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pdfpagediff/pdfpagediff.sty @@ -0,0 +1,261 @@ +%% +%% +%% This is file 'pdfpagediff.sty'. +%% +%% File: pdfpagediff.sty Copyright (c) 2010-2015, C. V. Radhakrishnan +%% JWRA 34, Jagathy, Trivandrum 695014 +%% http://www.cvr.cc Email: +%% +%% This package may be distributed under the terms of the LaTeX Project +%% Public License, as described in lppl.txt in the base LaTeX distribution. +%% Either version 1.0 or, at your option, any later version. +%% +%% $Id: pdfpagediff.sty,v 1.4 2015/07/24 09:39:20 cvr Exp cvr $ +%% +\NeedsTeXFormat{LaTeX2e} +\def\Fileversion$#1: #2 ${\gdef\fileversion{#2}} +\def\Filedate$#1: #2 #3 ${\gdef\filedate{#2}} +\Fileversion$Revision: 1.4 $ +\Filedate$Date: 2015/07/24 09:39:20 $ +\ProvidesPackage{pdfpagediff} + [\filedate\space\fileversion\space Page diff of 2 PDFs (CVR)] +\PackageWarningNoLine{pdfpagediff} + {****************************************\MessageBreak + Package pdfpagediff v,\fileversion\space loaded\MessageBreak + [Page diff of two PDFs (CVR)]\MessageBreak + ****************************************} +% +% Load needed packages: +% +\RequirePackage[margin=0pt,headsep=0pt,headheight=0pt,footskip=0pt]{geometry} +\RequirePackage{graphicx,color} +\pagestyle{empty} + +\@ifundefined{pdfoutput} + {\PackageError{pdfpagediff} + {You're either not using pdfLaTeX\MessageBreak + or have turn off PDF output.\MessageBreak + 'pdfpagediff' only works with pdfLaTeX\MessageBreak + and PDF output} + {Use 'pdflatex' instead of 'latex'\MessageBreak + and set output to PDF (usage: \pdfoutput = 1)!} + \endinput + } + {\ifnum\pdfoutput=\z@ + \PackageError{pdfpagediff} + {PdfTeX is set to DVI output, but\MessageBreak + PDF is required for 'pdfpagediff' package} + {Set output to PDF. (usage: \pdfoutput = 1)} + \expandafter\endinput + \fi} + +\def\obj{\immediate\pdfobj} + +\def\objref#1{\space\expandafter\doobjref\number#1\relax} +\def\doobjref#1\relax{#1 0 R} + +\def\objrefs#1{% + \ifx#1\relax + \space + \else + \objref{#1}\expandafter\objrefs + \fi} + +\def\lastobjref{\objref\pdflastobj} +\def\thisobjref{\objref{\numexpr\pdflastobj+1\relax}} +\def\nextobjref{\objref{\numexpr\pdflastobj+2\relax}} % eTeX needed + +% +% We will make two layers +% +\def\FirstDoc#1{\gdef\@FirstDoc{#1}} +\def\SecondDoc#1{\gdef\@SecondDoc{#1}} +\def\@FirstDoc{First} +\def\@SecondDoc{Second} + +\def\openlayer{ BDC} +\def\closelayer{ EMC} + +\obj{<< /Type /OCG /Name (\@FirstDoc) >>} +\def\PPDonercname{/OC1} +\edef\PPDoneobjnum{\the\pdflastobj} +\edef\PPDone{ /OC \PPDonercname} + +\obj{<< /Type /OCG /Name (\@SecondDoc) >>} +\def\PPDtworcname{/OC2} +\edef\PPDtwoobjnum{\the\pdflastobj} +\edef\PPDtwo{ /OC \PPDtworcname} + +\obj{% +<< + \PPDonercname\space\objref\PPDoneobjnum \space + \PPDtworcname\space\objref\PPDtwoobjnum \space +>> +} + +\edef\layersnames{\lastobjref} + +\edef\next{\pdfpageresources={/Properties \layersnames}} +\next + +\edef\layersorder{\objrefs\PPDoneobjnum\PPDtwoobjnum\relax} +\edef\layerson{\objrefs\PPDoneobjnum\relax} +\edef\layersoff{\objrefs\PPDtwoobjnum\relax} + +\obj{% +<< + /Order [\layersorder] \space + /ON [\layerson ] \space +% /OFF [\layersoff ] \space + /ON [\layersoff ] \space +>> +} + +\edef\layersconfig{\lastobjref} + +\obj{% +<< +/S /SetOCGState +/State [ /ON \objrefs\PPDoneobjnum\PPDtwoobjnum\relax ] +>>} + +\edef\layersOn{\lastobjref} + +\pdfcatalog{% +/OCProperties +<< + /OCGs [\layersorder ]\space + /D \layersconfig \space +>> +} + +\parindent=0pt + +\newcounter{cpages} +\newcounter{pages} +\newdimen\vlength +\newdimen\hoddlength +\newdimen\hevenlength + +\vlength=-12pt +\hoddlength=0pt +\hevenlength=0pt + +% +% Let's load substr package to parse various kinds of page numbers +% +\RequirePackage{substr} + +\def\buildPageList#1{\IfSubStringInString{,}{#1}% + {\processComma{#1}}{\processOther{#1}}} + +\def\processNormal#1{\pdf@addtolist{#1}} + +\def\processComma#1{\@for\@comma:=#1\do{% + {\IfSubStringInString{-}{\@comma}% + {{\expandafter\@processHyphen\@comma\END}}% + {\processNormal{\@comma}}% + }% + }% +} + +\def\processOther#1{\IfSubStringInString{-}{#1}% + {\processHyphen{#1}}{\processNormal{#1}}} + +\def\processHyphen#1{\@processHyphen#1\END} +\def\@processHyphen#1-#2\END{\def\next{#2}\ifx\next\@empty + \@tempcntb=\pdflastpage \else \@tempcntb=#2\fi + \@tempcnta=#1 + \global\advance\@tempcntb by 1 + \loop\ifnum\@tempcnta<\@tempcntb + \pdf@addtolist{\the\@tempcnta} + \advance\@tempcnta by 1 + \repeat} + +\let\pdf@pagelist\@empty + +\gdef\pdf@addtolist#1{% + \let\savepdf@pagelist\pdf@pagelist + \ifnum#1<\numexpr\pdflastpage+1 + \xdef\pdf@pagelist{\ifx\savepdf@pagelist\@empty + \else\savepdf@pagelist,\fi#1}\fi} + +\def\findPages#1{\pdfximage{#1}% + \@tempcntb=\the\pdflastximagepages\relax + \edef\lastpage{\the\@tempcntb}% +} + +\newif\ifFiles \Filestrue + +\def\layerPages{\@ifnextchar[{\@@layerPages}{\@@layerPages[1-]}}%] + +\long\def\@@layerPages[#1]#2#3{% + \filename@parse{#2}% + \IfFileExists{\filename@base.pdf}% + {\xdef\PPDfirstdoc{\filename@base.pdf}}{\global\Filesfalse} + \filename@parse{#3}% + \IfFileExists{\filename@base.pdf}% + {\xdef\PPDseconddoc{\filename@base.pdf}}{\global\Filesfalse}% + \ifFiles + \findPages{\PPDfirstdoc} \edef\PPDfirstlastpage{\lastpage}% + \findPages{\PPDseconddoc} \edef\PPDsecondlastpage{\lastpage}% + \ifnum\PPDfirstlastpage<\PPDsecondlastpage + \xdef\pdflastpage{\PPDfirstlastpage}\else% + \ifnum\PPDsecondlastpage<\PPDfirstlastpage + \xdef\pdflastpage{\PPDsecondlastpage}\else + \ifnum\PPDfirstlastpage=\PPDsecondlastpage + \xdef\pdflastpage{\PPDfirstlastpage}\fi\fi\fi + \buildPageList{#1}% +% + \@for\pdfpage:=\pdf@pagelist\do{{% + {\placepages}}}% + \else + \PackageError{pdfpagediff}{Not all PDF docs are available, exiting ...}{} + \expandafter\enddocument\fi +} + +\long\def\placepages{% + \vbox to\z@{\pdfliteral{\PPDone\openlayer}% + \includegraphics[page=\pdfpage]{\PPDfirstdoc}% + \pdfliteral{\closelayer}\vspace{-\textheight}\vfill}% + \par\vskip\vlength + \vbox to\z@{\pdfliteral{\PPDtwo\openlayer}% + \ifodd\thecpages \hspace*{\hoddlength}\else + \hspace*{\hevenlength}\fi + \includegraphics[page=\pdfpage]{\PPDseconddoc}% + \pdfliteral{\closelayer}\vspace{-\textheight}\vfill}% + \clearpage +} + +%% +%% For River Valley to adjust horizontal or vertical shifts +%% between documents. This happens while making CRC's +%% when the first version starts from odd page while +%% second version might start from even page since +%% \openright is not followed by all journals. +%% +\def\definejnldata{\@ifstar{\starjnldata}{\normaljnldata}} +\def\normaljnldata#1#2#3#4{\@namedef{#1normal}{\vlength=#2 + \hoddlength=#3 \hevenlength=#4}} +\def\starjnldata#1#2#3#4{\@namedef{#1even}{\vlength=#2 + \hoddlength=#3 \hevenlength=#4}} +% +% \definedata{}{}{}{} +% +\definejnldata{aml}{-12pt}{0pt}{0pt} +\definejnldata*{aml}{-7pt}{-4pt}{4pt} + +\def\nameUse#1{\@nameuse{#1}% + \typeout{[vlength = \the\vlength]}% + \typeout{[hoddlength = \the\hoddlength]}% + \typeout{[hevenlength = \the\hevenlength]}% +} +%% +%% An example of usage will be: +%% \nameUse{amlnormal} or \nameUse{amleven} +%% +\endinput + +%% +%% End of file, 'pdfpagediff.sty' +%% -- cgit v1.2.3