diff options
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex')
-rw-r--r-- | Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex b/Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex new file mode 100644 index 00000000000..3fc5f64de2f --- /dev/null +++ b/Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex @@ -0,0 +1,85 @@ +% pdfwebtofront.tex +% Code from knuth.drv in https://github.com/oberdiek/latex-tds +% 2020/06/20 v2.0 by Andreas Scherer. +% +% This file is part of project https://github.com/ascherer/cwebbin +% and may be distributed under the MIT License or the LaTeX Project +% Public License. +% +% Move table-of-contents page to the front in PDF output. +% Works with pdftex and xetex in connection with either 'webmac.tex' +% for Pascal/WEB programs or 'cwebmac.tex' for C/CWEB programs. +% +\ifx\detokenize\undefined\endinput\fi +\def\contentsfile{\jobname.toc} % file that gets table of contents info +\newif\iftexmf\texmffalse % special toc treatment for TeX, Metafont, etc. +\newread\testread +\openin\testread=\contentsfile\relax +\ifeof\testread % First run +\else % Second run + % Redefine '\con' to be invoked before the first '\N' (starred section). + \let\ORGcon\con + \def\con{% + % reduce size of PDF pages for more screen space + \pdfpagewidth=\pagewidth \advance\pdfpagewidth by 2cm + \pdfpageheight=\pageheight \advance\pdfpageheight by 3cm + \ifpdftex \pdfhorigin=1cm \pdfvorigin=1cm + \else \advance\pdfpageheight by 1cm \global\pageshift=-1.54cm + \global\hoffset=-1.54cm \global\voffset=-1.54cm \fi + \begingroup + \let\end\relax + \ORGcon + \endgroup + \let\con\end + }% + % Special variant for 'mf.web' and 'tex.web' (et al.). + % They all define a peculiar version of '\N' in their preamble. + % And they put their tables-of-contents on a sparse 'page 2' and + % start the main body on page '3'. + \edef\x{\jobname}% + \edef\y{\detokenize{tex}}% + \ifx\x\y \texmftrue\else + \edef\y{\detokenize{mf}}% + \ifx\x\y \texmftrue\else + \edef\y{\detokenize{pdftex}}% + \ifx\x\y \texmftrue\else + \edef\y{\detokenize{xetex}}% + \ifx\x\y \texmftrue\fi\fi\fi\fi + \iftexmf + \expandafter\let\csname ORGN\expandafter\endcsname + \csname N\endcsname + \expandafter\outer\expandafter\def\csname N\endcsname{% + \titletrue \con \pageno=2 + \expandafter\let\csname N\expandafter\endcsname + \csname ORGN\endcsname + \csname N\endcsname + }% + \else % Much more general approach for WEB and CWEB programs. + % In fact, '\con' will be invoked _inside_ the first '\N' right _after_ + % '\MN', but _before_ '\eject'. And '\topofcontents' gets in the twist + % as well. + \let\ORGtopofcontents\topofcontents \let\ORGrheader\rheader + \def\topofcontents{% + \def\:{\par\hangindent 2em} % Fix for 'bibtex.web'; from '\def\fin'. + \ORGtopofcontents + \let\topofcontents\relax + }% + % Squeeze '\con' between '\MN' and '\eject' in the very first '\N'. + \expandafter\let\csname ORGvfil\expandafter\endcsname + \csname vfil\endcsname + \expandafter\let\csname ORGeject\expandafter\endcsname + \csname eject\endcsname + \expandafter\outer\expandafter\def\csname vfil\endcsname{% + \let\eject\relax + \titletrue % prepare to output the table of contents + \topofcontents \con + \advance\pageno by -1\relax + \expandafter\let\csname vfil\expandafter\endcsname + \csname ORGvfil\endcsname + \expandafter\let\csname eject\expandafter\endcsname + \csname ORGeject\endcsname + \vfil\eject + \let\rheader\ORGrheader + }% + \fi +\fi |