You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
300 lines
8.3 KiB
300 lines
8.3 KiB
% 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 (`<jobname>'). It is needed to build
|
|
% the name of the optional file `<jobname>.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{<</MaxThumbNumber \the\thumbfound>>}
|
|
\edef\CatalogHook{\the\pdflastobj\space 0 R}%
|
|
\immediate\write16{* Looking for extra thumbnails:}
|
|
|
|
\def\END{%
|
|
\ifx\allthumbs\empty
|
|
\else
|
|
\immediate\pdfobj{<</ListThumbs\listthumbs>>}%
|
|
\edef\CatalogHook{\CatalogHook\space\the\pdflastobj\space 0 R}%
|
|
\fi
|
|
\pdfcatalog{/ThumbpdfHook [\CatalogHook]}%
|
|
\vfill\eject
|
|
\csname bye\endcsname % \bye is \outer
|
|
}
|
|
|
|
% <jobname>.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
|
|
|