summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfsync/pdfsync.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/pdfsync/pdfsync.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/pdfsync/pdfsync.sty')
-rw-r--r--macros/latex/contrib/pdfsync/pdfsync.sty293
1 files changed, 293 insertions, 0 deletions
diff --git a/macros/latex/contrib/pdfsync/pdfsync.sty b/macros/latex/contrib/pdfsync/pdfsync.sty
new file mode 100644
index 0000000000..a016948c6d
--- /dev/null
+++ b/macros/latex/contrib/pdfsync/pdfsync.sty
@@ -0,0 +1,293 @@
+% 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.
+%
+% Version
+% -------
+% - 01/25/2008: This is the second version officially available.
+% Some internals were modified in order to provide a stronger
+% \pdfsyncstart, \pdfsyncstop pair.
+% Anticipating over pdftex improvements, this package will load with option "off" if the \synchronize macro is defined
+%
+% 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-2008, 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\synchronize\undefined\else
+\message{**** pdfsync.sty: WARNING, the package is obsolete with this version of pdftex.}%
+\c@nfigPDFSYNC@ff
+\let\c@nfigPDFSYNC@ff=\undefined
+\expandafter\endinput
+\fi
+\ifx\pdfsavepos\undefined
+\message{**** pdfsync.sty: WARNING, synchronization is only available with pdftex like engines.}%
+\c@nfigPDFSYNC@ff
+\let\c@nfigPDFSYNC@ff=\undefined
+\expandafter\endinput
+\fi
+% Defining the preamble of the style file:
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{pdfsync}[2008/01/26 v1.1]%
+% 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{\PDFSYNCeveryhb@xcontent}%
+\def\PDFSYNCeveryhb@xon{\ifPDFSYNC@unblocked
+ \begingroup
+ \PDFSYNC@unblockedfalse
+ \setbox\z@\hbox\bgroup
+ \@PDFSYNC
+ \setbox\z@\hbox\bgroup\bgroup
+ \aftergroup\PDFSYNC@endhbox
+ \the\PDFSYNCeveryhb@x
+ \PDFSYNC@unblockedtrue\fi}
+\def\PDFSYNCeveryhb@xoff{\the\PDFSYNCeveryhb@x}
+\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{\PDFSYNCeveryvb@xcontent}%
+\def\PDFSYNCeveryvb@xon{\ifPDFSYNC@unblocked
+ \begingroup
+ \PDFSYNC@unblockedfalse
+ \setbox\z@\vbox\bgroup
+ \@PDFSYNC
+ \setbox\z@\vtop\bgroup\bgroup
+ \aftergroup\PDFSYNC@endvbox
+ \the\PDFSYNCeveryvb@x\PDFSYNC@unblockedtrue\fi}
+\def\PDFSYNCeveryvb@xoff{\the\PDFSYNCeveryvb@x}
+\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%
+\let\PDFSYNCeveryhb@xcontent\PDFSYNCeveryhb@xon
+\let\PDFSYNCeveryvb@xcontent\PDFSYNCeveryvb@xon
+}%
+\def\pdfsyncstop{%
+%\let\shipout\PDFSYNCship@ut@ld%
+\let\pdfsync\relax%
+\let\@PDFSYNC\relax%
+\let\InputIfFileExists\PDFSYNCInputIfFileExists@ff%
+\let\PDFSYNCeveryhb@xcontent\PDFSYNCeveryhb@xoff
+\let\PDFSYNCeveryvb@xcontent\PDFSYNCeveryvb@xoff
+}%
+%
+\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%