From aa45ba1499aaf07b7a63694d5a9853ab4b6a92a4 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 17 Jan 2007 22:14:38 +0000 Subject: new latex package pdfsync git-svn-id: svn://tug.org/texlive/trunk@3557 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/pdfsync/pdfsync.sty | 273 ++++++++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/pdfsync/pdfsync.sty (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/pdfsync/pdfsync.sty b/Master/texmf-dist/tex/latex/pdfsync/pdfsync.sty new file mode 100644 index 00000000000..c7eb74c49d8 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pdfsync/pdfsync.sty @@ -0,0 +1,273 @@ +% LaTeX package pdfsync.sty +% ========================= +% +% Presentation +% ------------ +% pdfsync.sty allows one to synchronize between LaTeX source and pdf output. +% When used with a text editor and a PDF viewer that both support pdfsync, +% you can navigate from the source to the output and vice versa. +% This is some kind of srcltx ported from dvi to pdf. +% +% When you typeset foo.tex with pdfsync.sty and either pdfetex or xetex, a foo.pdfsync auxiliary file is created. +% It only contains geometrical information used by text editors or PDF viewers for synchronization. +% You can delete this file when you are done. +% +% Actually, iTeXMac, iTeXMac2, TeXShop, TextMate, AucTeX are text editors implementing pdfsync support at various level. +% iTeXMac, iTeXMac2, TeXShop, TeXniscope, PDFView are PDF viewers implementing pdfsync support at various level. +% +% Install +% ------- +% If this package is not already included in you TeX distribution, just copy the pdfsync.sty file to the proper location. +% On Mac OS X, it can be +% YOUR_HOME_DIRECTORY/Library/texmf/tex/latex/graphics/graphics.sty +% where you should replace YOUR_HOME_DIRECTORY by its actual value. +% +% Usage +% ----- +% Put \usepackage{pdfsync} in your LaTeX preamble. +% +% In case of sever conflicts with another package, try \usepackage[novbox]{pdfsync} instead. +% +% If pdfsync only breaks some part of your LaTeX code, you can try to enclose it in a \pdfsyncstop \pdfsyncstart pair. +% If you want to add more control point add \pdfsync at sensible locations in your code. +% In that case, \usepackage[off]{pdfsync} will disable pdf synchronization and \relax the above commands. +% +% Use option nohbox (resp nocr, nopar, nomath, nodisplay) in order not to add control points every hbox (resp cr, par, math,display) +% +% Bugs +% ---- +% pdfsync uses extremely severe code. You should not use pdfsync on final documents because it can change the layout rather significantly +% (different page/line breaks are the most obvious changes), despite this is rather rare, +% 17.8th Murphy's law states that it will happen to you when it absolutely must not... +% +% You should report bugs and package conflicts to jlaurens AT users DOT sourceforge DOT net. +% +% The accuracy of pdf synchronization depends on the editor/viewer used for that purpose. +% iTeXMac2 is actually the most accurate implementation because it combines pdfsync with pdf searching. +% So, the lack of accuracy is not a bug in pdfsync a priori. +% +% Credits: +% ------- +% The original idea of pdfsync was proposed by Piero D'Ancona in the summer of 2003. +% He and Jerome Laurens (jlaurens AT usersDOT sourceforge DOT net) both created the first working package. +% Hans Hagen and David Kastrup made very significant enhancements to the original code. +% +% License +% ------- +% This program is free software; you can redistribute it and/or modify +% it under the terms of the The LaTeX Project Public License version 1.3c at least +% http://www.latex-project.org/lppl.txt +% +% Home page +% --------- +% The official site is +% +% http://itexmac.sourceforge.net/pdfsync.html +% +% copyright 2006, jlaurens AT users DOT sourceforge DOT net +% +\ifx\pdfsync\undefined\else\message{**** pdfsync.sty: WARNING, the package is already loaded.}\expandafter\endinput\fi +\def\c@nfigPDFSYNC@ff{% + \let\pdfsync\relax% + \let\pdfsyncstart\relax% + \let\pdfsyncstop\relax% +}% +\ifx\pdfsavepos\undefined +\message{**** pdfsync.sty: WARNING, synchronization is only available with pdfetex like engines.}% +\c@nfigPDFSYNC@ff +\let\c@nfigPDFSYNC@ff=\undefined +\expandafter\endinput +\fi +% Defining the preamble of the style file: +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{pdfsync}[2007/01/15 v1.0]% +% start of the code +\let\c@nfigPDFSYNCp@r\relax% +\let\c@nfigPDFSYNCm@th\relax% +\let\c@nfigPDFSYNCdispl@y\relax% +\let\c@nfigPDFSYNChb@x\relax% +\let\c@nfigPDFSYNCvb@x\relax% +\let\c@nfigPDFSYNC@cr\relax% +% Subverting |\everypar| to prepend pdfsync |\@PDFSYNC| specific code that will +% be executed for each new paragraph. +%This was primarly suggested by Curtis Clifton on 12/17/2004 (google "subvert token" for details). +\def\c@nfigPDFSYNCp@r{\wlog{**** pdfsync.sty: Synchronizing at \string\everypar}% +\newtoks\PDFSYNCeveryp@r +\PDFSYNCeveryp@r\everypar +\everypar{\bgroup\setbox\z@\lastbox\@PDFSYNC\box\z@\egroup + \the\PDFSYNCeveryp@r}% +\let\everypar\PDFSYNCeveryp@r +}% +% +\def\c@nfigPDFSYNCdispl@y{\wlog{**** pdfsync.sty: Synchronizing at \string\everydisplay}% +\newtoks\PDFSYNCeverydispl@y +\PDFSYNCeverydispl@y\frozen@everydisplay +\frozen@everydisplay{\@PDFSYNC\the\PDFSYNCeverydispl@y}% +\let\frozen@everydisplay\PDFSYNCeverydispl@y +}% +% +\def\c@nfigPDFSYNCm@th{\wlog{**** pdfsync.sty: Synchronizing at \string\everymath}% +\newtoks\PDFSYNCeverym@th +\PDFSYNCeverym@th\frozen@everymath +\frozen@everymath{\@PDFSYNC\the\PDFSYNCeverym@th}% +\let\frozen@everymath\PDFSYNCeverym@th +}% +% +\def\c@nfigPDFSYNChb@x{\wlog{**** pdfsync.sty: Synchronizing at \string\everyhbox}% +\newtoks\PDFSYNCeveryhb@x +\PDFSYNCeveryhb@x\everyhbox +\everyhbox{\ifPDFSYNC@unblocked + \begingroup + \PDFSYNC@unblockedfalse + \setbox\z@\hbox\bgroup + \@PDFSYNC + \setbox\z@\hbox\bgroup\bgroup + \aftergroup\PDFSYNC@endhbox\the\PDFSYNCeveryhb@x + \PDFSYNC@unblockedtrue + \fi}% +\let\everyhbox\PDFSYNCeveryhb@x +\def\PDFSYNC@endhbox{\ifnum\lastnodetype>\m@ne + \egroup \unhbox\z@ \egroup \unhbox\z@ + \else \egroup \egroup \fi \endgroup \egroup}% +}% +% +\def\c@nfigPDFSYNCvb@x{\wlog{**** pdfsync.sty: Synchronizing at \string\everyvbox}% +\newtoks\PDFSYNCeveryvb@x +\PDFSYNCeveryvb@x\everyvbox +\everyvbox{\ifPDFSYNC@unblocked + \begingroup + \PDFSYNC@unblockedfalse + \setbox\z@\vbox\bgroup + \@PDFSYNC + \setbox\z@\vtop\bgroup\bgroup + \aftergroup\PDFSYNC@endvbox\the\PDFSYNCeveryvb@x + \PDFSYNC@unblockedtrue + \fi}% +\let\everyvbox\PDFSYNCeveryvb@x +\def\PDFSYNC@endvbox{\ifnum\lastnodetype>\m@ne + \egroup + \edef\next{\egroup\hrule\@height\the\ht\z@\@depth-\the\ht\z@\relax}% + \unvbox\z@ \next \unvbox\z@ + \else \egroup \egroup \fi \endgroup \egroup}% +}% +% +\def\c@nfigPDFSYNC@cr{\wlog{**** pdfsync.sty: Synchronizing at \string\everycr}% +\newtoks\PDFSYNCevery@cr +\PDFSYNCevery@cr\everycr +\everycr{\the\PDFSYNCevery@cr\@PDFSYNC}% +\let\everycr\PDFSYNCevery@cr +}% +% Configure pdsync +\def\c@nfigPDFSYNC{\wlog{Configuring pdfsync}% +\newwrite\PDFSYNC@ut% +\immediate\openout\PDFSYNC@ut\jobname.pdfsync% +\immediate\write\PDFSYNC@ut{\jobname}% control info +\immediate\write\PDFSYNC@ut{version 1}% control info +% patching \shipout +\let\PDFSYNCship@ut@ld\shipout% +\gdef\PDFSYNCship@utn@w{% +\afterassignment\PDFSYNC@utput% +\setbox\@cclv= % +}% +\def\PDFSYNC@utput{% +\relax% +\ifvoid\@cclv\relax% +\aftergroup\PDFSYNC@@utput% +\else% +\PDFSYNC@@utput% +\fi% +}% +\gdef\PDFSYNC@@utput{% +\global\advance\PDFSYNCf@li@ by 1% +\immediate\write\PDFSYNC@ut{s\space\the\PDFSYNCf@li@}% +\PDFSYNCship@ut@ld\box\@cclv% +}% +% +% patching LaTeX \InputIfFileExists for \include and \input +\let\PDFSYNCInputIfFileExists@ff\InputIfFileExists% +\long\def\PDFSYNCInputIfFileExists@n##1##2##3{% +\immediate\write\PDFSYNC@ut{(##1}% +\PDFSYNCInputIfFileExists@ff{##1}{##2}{##3}% +\immediate\write\PDFSYNC@ut{)}}% +% +\def\PDFSYNCP@siti@n{\the\pdflastxpos\space\the\pdflastypos}% +% +\newif\ifPDFSYNCst@r% +\newif\ifPDFSYNCvb@x% +\newcount\PDFSYNCf@li@\PDFSYNCf@li@=0% +\newcount\PDFSYNC@rder\PDFSYNC@rder=0% +\newif\ifPDFSYNC@unblocked +\PDFSYNC@unblockedtrue +% defining \@@PDFSYNC: the macro that writes to the .pdfsync file +\def\@@PDFSYNC{% +\relax% +\immediate\write\PDFSYNC@ut{l\space\the\PDFSYNC@rder\space\the\inputlineno}% +\pdfsavepos% +\edef\next{\write\PDFSYNC@ut{p\ifPDFSYNCst@r*\else\ifPDFSYNCvb@x+\fi\fi\space\the\PDFSYNC@rder\space\noexpand\PDFSYNCP@siti@n}}% +\next% +\global\advance\PDFSYNC@rder by 1% +\relax% +}% +% +\def\@pdfsync{\bgroup\PDFSYNCst@rtrue\@PDFSYNC\egroup}% +% +\def\pdfsyncstart{% +\let\shipout\PDFSYNCship@utn@w% +\let\pdfsync\@pdfsync% +\let\@PDFSYNC\@@PDFSYNC% +\let\InputIfFileExists\PDFSYNCInputIfFileExists@n% +}% +\def\pdfsyncstop{% +\let\shipout\PDFSYNCship@ut@ld% +\let\pdfsync\relax% +\let\@PDFSYNC\relax% +\let\InputIfFileExists\PDFSYNCInputIfFileExists@ff% +}% +% +\c@nfigPDFSYNCp@r% +\let\c@nfigPDFSYNCp@r\undefined% +\c@nfigPDFSYNCm@th% +\let\c@nfigPDFSYNCm@th\undefined% +%\c@nfigPDFSYNCdispl@y% This does not work with amsmath +\let\c@nfigPDFSYNCdispl@y\undefined% +\c@nfigPDFSYNChb@x% +\let\c@nfigPDFSYNChb@x\undefined% +\c@nfigPDFSYNCvb@x% +\let\c@nfigPDFSYNCvb@x\undefined% +%\c@nfigPDFSYNC@cr% This does not work "Missing \cr inserted" in maketitle +\let\c@nfigPDFSYNC@cr\undefined% +% the problem of the soul package + \ifx\SOUL@\undefined\relax\else% + \message{! pdfsync is patching the soul package} + \let\PDFSYNC@SOUL@\SOUL@ + \def\SOUL@##1{% + \bgroup\pdfsyncstop\PDFSYNC@SOUL@{##1}\egroup + }% + \fi% +\pdfsyncstart% +\wlog{**** pdfsync.sty: started}% +}% +% +\AtBeginDocument{% +\c@nfigPDFSYNC% +\let\c@nfigPDFSYNC\undefined% +}% +% end of the core code +% Declaring the option 'nopar' to disable this feature +\DeclareOption{nopar}{\let\c@nfigPDFSYNCp@r\relax}% +% Declaring the option 'nomath' to disable this feature +\DeclareOption{nomath}{\let\c@nfigPDFSYNCm@th\relax}% +% Declaring the option 'nodisplay' to disable this feature +\DeclareOption{nodisplay}{\let\c@nfigPDFSYNCdispl@y\relax}% +% Declaring the option 'nohbox' to disable this feature +\DeclareOption{nohbox}{\let\c@nfigPDFSYNChb@x\relax}% +% Declaring the option 'novbox' to disable this feature +\DeclareOption{novbox}{\let\c@nfigPDFSYNCvb@x\relax}% +% Declaring the option 'nocr' to disable this feature +\DeclareOption{nocr}{\let\c@nfigPDFSYNC@cr\relax}% +% Declaring the option 'off', all the macros are set to \relax +\DeclareOption{off}{\let\c@nfigPDFSYNC\c@nfigPDFSYNC@ff}% +% Beamer problem +\ifx\beamer@version\undefined\relax\else\let\c@nfigPDFSYNCvb@x\relax\fi +\ProcessOptions% +\endinput% -- cgit v1.2.3