summaryrefslogtreecommitdiff
path: root/Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex')
-rw-r--r--Build/source/texk/web2c/cwebdir/texinputs/pdfwebtocfront.tex85
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