% File: thumbpdf.tex % Project: thumbpdf % Version: 2018/09/07 v3.17 % Author: Heiko Oberdiek % % Copyright: Copyright (C) 1999-2018 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. % % See file "readme.txt" for a list of files that % belong to this project. % % Function: Program to include thumbnails as images. % It looks for thumbnail files `thb*.png' and % includes them as images in the output pdf file % `thumbpdf.pdf'. The perl script `thumbpdf(.pl)' % automatically calls pdftex with this file to % generate `thumbpdf.pdf' and produces the data % files, that contains the necessary pdf image objects % for package `thumbpdf.sty'. % % Requirement: * pdftex % * thumbnails `thb*.png' % % Use: * Syntax: pdftex thumbpdf % * \thumbmax: % Because it takes some time to look for 1000 thumbnail % files, a maximum number can be specified: % pdftex \def\thumbmax{20}\input thumbpdf % * \thumbjob: % This macro contains the name of the user's TeX file % without extension (`'). It is needed to build % the name of the optional file `.tno', that % contains extra thumbnail declarations: % pdftex \def\thumbjob{example}\input thumbpdf % Then `example.tno' are read to get additional % thumbnails. % % History: 1999/02/14 v1.0: first public release % 1999/02/23 v1.1 % 1999/03/01 v1.2 % 1999/03/12 v1.3: Copyright: LPPL % 1999/05/05 v1.4 % 1999/06/13 v1.5 % 1999/07/27 v1.6 % 1999/08/08 v1.7: pdfTeX 0.14a % 1999/09/09 v1.8 % 1999/09/16 v1.9 % 2000/01/11 v1.10: \immediate before \pdfximage removed, % because it is obsolete and because of a problem with % a pre-release version of pdfTeX 0.14d. % 2000/01/19 v1.11 % 2000/02/11 v1.12: \thumbjob added. % 2000/02/22 v2.0: Looking for `\thumbjob.tno' only, the % file name `thumbopt.tex' is not supported anymore. % 2000/02/28 v2.1 % 2000/03/07 v2.2 % 2000/03/22 v2.3 % 2000/04/10 v2.4: Version is also printed on screen. % 2000/07/29 v2.5 % 2000/09/27 v2.6 % 2000/10/27 v2.7 % 2001/01/12 v2.8 % 2001/03/29 v2.9 % 2001/04/02 v2.10 % 2001/04/26 v2.11 % 2002/01/11 v3.0 % 2002/05/26 v3.1 % 2002/05/26 v3.2 % 2003/03/19 v3.3 % 2003/06/06 v3.4 % 2004/10/24 v3.5: LPPL 1.3. % 2004/11/19 v3.6 % 2004/11/19 v3.7: For easier debugging, the special % thumbpdf objects are now valid PDF objects that % are referenced in the Catalog. % 2005/07/06 v3.8 % 2007/11/07 v3.9 % 2008/04/16 v3.10 % 2010/07/07 v3.11: \pdfcompresslevel=0 and % \pdfminorversion=4 added. % 2011/08/09 v3.12 % 2011/08/10 v3.13 % 2012/04/09 v3.14 % 2012/04/18 v3.15 % 2014/07/15 v3.16 % 2018/09/07 v3.17 https://github.com/ho-tex/thumbpdf \immediate\write16{% File: thumbpdf.tex 2018/09/07 v3.17 % Including thumbnails as images (HO)% } \immediate\write16{% ****************************************************************} \immediate\write16{% * Generating `thumbpdf.pdf', each page with a found thumbnail. *} \immediate\write16{% ****************************************************************} \def\END{\csname @@end\endcsname\end} % Check, if LaTeX format \ifx\mbox\undefined \else \immediate\write16{% !!! Process this file `\jobname.tex' with pdf(e)tex % (plain format) !!!% }% \expandafter\END \fi % Check if pdfTeX \ifx\pdfoutput\undefined \immediate\write16{% !!! Process this file `\jobname.tex' with pdf(e)tex % (NOT tex) !!!% }% \expandafter\END \fi \pdfoutput=1 % Disable \pdfobjcompresslevel \ifx\pdfobjcompresslevel\undefined \else \pdfobjcompresslevel=0 % \fi \ifx\pdfminorversion\undefined \else \ifnum\pdfminorversion>4 % \pdfminorversion=4 % \fi \fi % this file is tested with pdfTeX 0.13a % but for downward compatibilty a trick from Hans Hagen: \ifnum\pdftexversion<13 \ifnum\expandafter `\pdftexrevision<`s \let\normalpdfimage\pdfimage \def\grabpdfimage#1#2{\normalpdfimage#1 #2\relax} \def\pdfimage#1#{\grabpdfimage{#1}} \fi\fi % syntax has changed with pdfTeX 0.14a: \ifnum\pdftexversion>13 \def\pdfimage#1#{\grabpdfimage{#1}} \def\grabpdfimage#1#2{% \pdfximage#1{#2}\pdfrefximage\pdflastximage } \fi % max. 106x106 / 72 dpi \hsize 1.5in \vsize 1.5in \nopagenumbers \newcount\thumbcount \def\thumbcountstep{\advance\thumbcount by 1 } \def\thumbfilename{thb\the\thumbcount.png} \newread\thumbread \def\ifthumbexists{% \openin\thumbread=\thumbfilename\relax \ifeof\thumbread \expandafter\noneofone \else \closein\thumbread \expandafter\firstofone \fi } \def\noneofone#1{} \def\firstofone#1{#1} \def\iffileexists#1{% \openin\thumbread=#1\relax \ifeof\thumbread \expandafter\secondoftwo \else \closein\thumbread \expandafter\firstoftwo \fi } \long\def\firstoftwo#1#2{#1} \long\def\secondoftwo#1#2{#2} \let\listthumbs\empty \def\printthumbfile{% \vfill\eject \centerline{% \pdfimage height \vsize {\thumbfilename}% }% } \newcount\thumbfound \thumbfound=0 \def\processthumb{% \edef\listthumbs{\listthumbs\space\the\thumbcount}% \printthumbfile \pageno=\thumbcount \advance\thumbfound by 1 } \expandafter\ifx\csname thumbmax\endcsname\relax \def\thumbmax{999}% \fi \immediate\write16{* Looking for thumbnails 0..\thumbmax:} \thumbcount=\thumbmax\relax \advance\thumbcount by 1 \edef\thumbmax{\the\thumbcount}% \thumbcount=0 \loop \ifnum\thumbcount<\thumbmax\relax \ifthumbexists\processthumb \thumbcountstep \repeat \break \immediate\write16{==> \the\thumbfound\space thumbnail(s) found.} \immediate\pdfobj{<>} \edef\CatalogHook{\the\pdflastobj\space 0 R}% \immediate\write16{* Looking for extra thumbnails:} \def\END{% \ifx\allthumbs\empty \else \immediate\pdfobj{<>}% \edef\CatalogHook{\CatalogHook\space\the\pdflastobj\space 0 R}% \fi \pdfcatalog{/ThumbpdfHook [\CatalogHook]}% \vfill\eject \csname bye\endcsname % \bye is \outer } % .tno \ifx\thumbjob\UnDeFiNeD \immediate\write16{!!! Warning: \string\thumbjob\space undefined, search for extra thumbnails skipped!% } \expandafter\END \fi \def\optfile{\thumbjob.tno}% \iffileexists{\optfile}{}{% \immediate\write16{==> No optional thumbnail file.}% \END }% \thumbfound=0 \def\thumb{\futurelet\nexttoken\thumbA} \let\braceleft=[ \def\thumbA{% \if\nexttoken\braceleft \expandafter\thumbB \else \expandafter\thumbC \fi } \def\thumbC#1{\thumbB[#1]{#1}} \def\thumbB[#1]#2{% #1: label, #2: file[.png] \iffileexists{#2.png}{% \def\thumbfilename{#2.png}% }{% \iffileexists{#2}{% \def\thumbfilename{#2}% }{% \let\thumbfilename\empty }% }% \ifx\thumbfilename\empty \immediate\write16{% !!! Warning: Thumbnail `#2' does not exist!"}% \else \edef\listthumbs{\listthumbs\space{#1}}% \printthumbfile \advance\thumbcount by -1 \pageno=\thumbcount \advance\thumbfound by 1 \fi } \thumbcount=0 \input \optfile \break \immediate\write16{==> \the\thumbfound\space extra thumbnail(s) found.}% \END