summaryrefslogtreecommitdiff
path: root/systems/doc/pdftex
diff options
context:
space:
mode:
Diffstat (limited to 'systems/doc/pdftex')
-rw-r--r--systems/doc/pdftex/NEWS21
-rw-r--r--systems/doc/pdftex/manual/ChangeLog45
-rw-r--r--systems/doc/pdftex/manual/Makefile13
-rw-r--r--systems/doc/pdftex/manual/pdftex-a.pdfbin819006 -> 930933 bytes
-rw-r--r--systems/doc/pdftex/manual/pdftex-syntax.txt8
-rw-r--r--systems/doc/pdftex/manual/pdftex-t.tex352
-rw-r--r--systems/doc/pdftex/manual/pdftex-w.tex10
-rw-r--r--systems/doc/pdftex/tests/06-pkmap/Makefile24
-rw-r--r--systems/doc/pdftex/tests/06-pkmap/cmr10.360pkbin0 -> 6408 bytes
-rw-r--r--systems/doc/pdftex/tests/06-pkmap/prepatch.pdfbin3045 -> 2978 bytes
-rw-r--r--systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex31
-rw-r--r--systems/doc/pdftex/tests/08-pdfprimitive/Makefile21
-rw-r--r--systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-non.tex14
-rw-r--r--systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-ok.tex9
-rw-r--r--systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-post.tex9
-rw-r--r--systems/doc/pdftex/tests/09-fontobjnum/Makefile13
-rw-r--r--systems/doc/pdftex/tests/09-fontobjnum/test-fontobjnum.tex9
-rw-r--r--systems/doc/pdftex/tests/10-moddate/Makefile27
-rw-r--r--systems/doc/pdftex/tests/10-moddate/test-moddate-abs.tex9
-rw-r--r--systems/doc/pdftex/tests/10-moddate/test-moddate.tex8
-rw-r--r--systems/doc/pdftex/tests/11-omitcharset/Makefile18
-rw-r--r--systems/doc/pdftex/tests/11-omitcharset/test-omitcharset.tex10
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/Makefile49
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/incl1.tex7
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/incl2.tex13
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/test-compress2.tex12
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/test-doc1incl2.tex9
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/test-doc2incl1.tex10
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/test-doc2incl2.tex10
-rw-r--r--systems/doc/pdftex/tests/12-pdf2/test-pdfmajor.tex7
30 files changed, 603 insertions, 165 deletions
diff --git a/systems/doc/pdftex/NEWS b/systems/doc/pdftex/NEWS
index ddc933be4f..0145824e14 100644
--- a/systems/doc/pdftex/NEWS
+++ b/systems/doc/pdftex/NEWS
@@ -1,6 +1,17 @@
+pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020)
+- changes:
+ - new primitive \pdfmajorversion; this merely changes the version
+ number in the PDF output, has no effect on PDF content.
+ - new \input{...} group-delimited syntax (cross-engine).
+ - new option --cnf-line (cross-engine).
+ - have \pdfximage etc. do same search for image files as for input files,
+ - (un)compress .fmt files with zlib (cross-engine).
+
pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019)
- changes:
- new primitive \expanded (from unreleased pdftex 1.50 branch + luatex).
+ - new primitive parameter \pdfmajorversion; 1 by default, but can be
+ set to any positive integer; affects only the %PDF- line.
- new primitive parameter \pdfomitcharset; zero by default to include
the /CharSet value from the PDF output as usual; setting to 1 omits
it, since it cannot feasibly be guaranteed correct as the PDF/A-2
@@ -29,17 +40,21 @@ pdfTeX 3.14159265-2.6-1.40.19 (TeX Live 2018) (April 14, 2018)
pdftosrc-newpoppler.cc for poppler-0.59.0 upto poppler-0.70.1.
pdftosrc-poppler0.71.0 for poppler-0.71.0.
pdftosrc-poppler0.72.0 for poppler-0.72.0 upto poppler-0.75.0.
- pdftosrc-poppler0.76.0 for poppler-0.76.0 and newer.
+ pdftosrc-poppler0.76.0 for poppler-0.76.0 upto poppler-0.82.0.
+ pdftosrc-poppler0.83.0 for poppler-0.83.0 and newer.
pdftoepdf-poppler0.68.0.cc for poppler-0.59.0 upto poppler-0.68.0.
pdftoepdf-poppler0.69.0.cc for poppler-0.69.0.
pdftoepdf-poppler0.70.0.cc for poppler-0.70.0 and poppler-0.70.1.
pdftoepdf-poppler0.71.0.cc for poppler-0.71.0.
pdftoepdf-poppler0.72.0.cc for poppler-0.72.0 upto poppler-0.74.0.
pdftoepdf-poppler0.75.0.cc for poppler-0.75.0.
- pdftoepdf-poppler0.76.0.cc for poppler-0.76.0 and newer.
+ pdftoepdf-poppler0.76.0.cc for poppler-0.76.0 upto poppler-0.82.0.
+ pdftoepdf-poppler0.83.0.cc for poppler-0.83.0 upto poppler-0.85.0.
+ pdftoepdf-poppler0.86.0.cc for poppler-0.86.0 and newer.
Note that pdftosrc-*.cc and pdftoepdf-*.cc should be
renamed as pdftosrc.cc, and pdftoepdf.cc, respectively, before
- compilation.
+ compilation. Further, POPPLER_VERSION should be defined properly
+ like -DPOPPLER_VERSION='"0.86.0"'.
---------------------------------------------------------------
pdfTeX 3.14159265-2.6-1.40.18 (TeX Live 2017) (April 27, 2017)
diff --git a/systems/doc/pdftex/manual/ChangeLog b/systems/doc/pdftex/manual/ChangeLog
index 3c90f87a7d..307eb5ea5f 100644
--- a/systems/doc/pdftex/manual/ChangeLog
+++ b/systems/doc/pdftex/manual/ChangeLog
@@ -1,3 +1,48 @@
+2020-03-02 Karl Berry <karl@freefriends.org>
+
+ * Makefile (common_deps): don't include pdftex-help.txt,
+ then we always rebuild.
+ * pdftex-w.tex: insert \hfil since this is ini.
+
+2020-03-01 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex (\input): new entry for \input{...}.
+ (History): describe current situation better.
+ Remove teTeX references. Use https.
+
+2019-12-25 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex (\pdfmdfivesum): explain the non-file (string) form too.
+ (\pdffiledump): explain that length defaults to zero.
+ Report from Bruno Le Floch,
+ https://tug.org/pipermail/pdftex/2015-July/008948.html.
+
+ Also:
+ (\MDFIVE): avoid oldstyle numbers.
+ (\Syntax): don't swallow spaces after final \kern.
+ (\Whatever): \kern.75em before, for more separation.
+ (\Somethingtext): new \Something that keeps surrounding spaces in
+ input, to be used in text (vs. syntax lines).
+
+2019-11-25 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex: document \pdfmajorversion. Besides the new
+ primitive description, affects \pdfobjcompresslevel and \pdfhicolor.
+
+2019-01-19 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex (\currentpdftex): 1.40.20 (for TeX Live 2019).
+
+2018-11-13 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex (Invoking \PDFTEX),
+ (\pdffilemoddate): if SOURCE_DATE_EPOCH and FORCE_SOURCE_DATE are
+ both set, return UTC.
+
+2019-05-17 Karl Berry <karl@freefriends.org>
+
+ * pdftex-t.tex (\expanded): primitive imported from 1.50 branch.
+
2018-01-01 Karl Berry <karl@freefriends.org>
* pdftex-t.tex (encodingfile): supported for Type 3 fonts.
diff --git a/systems/doc/pdftex/manual/Makefile b/systems/doc/pdftex/manual/Makefile
index d6589ac1c0..7c1e369ada 100644
--- a/systems/doc/pdftex/manual/Makefile
+++ b/systems/doc/pdftex/manual/Makefile
@@ -1,4 +1,4 @@
-# $Id: Makefile 767 2017-02-18 23:49:54Z karl $
+# $Id: Makefile 822 2020-03-02 16:57:37Z karl $
# Makefile for pdfTeX documentation. Public domain.
# Get version we're documenting from the \def in the manual.
@@ -14,7 +14,7 @@ default: pdftex-a.pdf pdftex-syntax.txt
# the other formats (everything that can be built).
all: pdftex-l.pdf pdftex-s.pdf booklet
-common_deps = pdftex-t.tex pdftex-w.txt pdftex-help.txt pdftex-syntax.tex
+common_deps = pdftex-t.tex pdftex-w.txt pdftex-syntax.tex # pdftex-help.txt
pdftex-a.pdf a: $(common_deps)
$(context) --mode=a4 --result=$@ $<
@@ -53,8 +53,10 @@ pdftex-w.txt: pdftex-w.pdf
wc -l pdftex-w.txt # set titlepagelines=half of this
# PDF for the title page.
-pdftex-w.pdf: pdftex-w.tex
- pdftex $<
+pdftex_binary = ../../source/build-pdftex/texk/web2c/pdftex
+pdftex-w.pdf: pdftex-w.tex Makefile
+ TEXFONTS=/usr/local/texlive/dev/texmf-dist/fonts// \
+ $(pdftex_binary) -ini '\nonstopmode\input $<'
# Too annoying to remake help text every time; check by hand when needed.
@@ -81,7 +83,8 @@ pdftex-syntax.txt: pdftex-t.tex pdftex-syntax.tex syntaxform.awk
# Install from this source directory to TL.
-tltree = /home/texlive/karl/Master/texmf-dist
+# svn co svn://u:pw@tug.org/texlive/trunk/Master/texmf-dist/doc/pdftex
+tltree = /r/tug/home/texlive/karl/Master/texmf-dist
dest = $(tltree)/doc/pdftex/manual
INSTALL_DATA = cp -p
diff --git a/systems/doc/pdftex/manual/pdftex-a.pdf b/systems/doc/pdftex/manual/pdftex-a.pdf
index f29ac5d9a4..66806dfda3 100644
--- a/systems/doc/pdftex/manual/pdftex-a.pdf
+++ b/systems/doc/pdftex/manual/pdftex-a.pdf
Binary files differ
diff --git a/systems/doc/pdftex/manual/pdftex-syntax.txt b/systems/doc/pdftex/manual/pdftex-syntax.txt
index 70a1a454d8..0d9994e5e0 100644
--- a/systems/doc/pdftex/manual/pdftex-syntax.txt
+++ b/systems/doc/pdftex/manual/pdftex-syntax.txt
@@ -27,8 +27,10 @@
\pdfinclusioncopyfonts (integer)
\pdfinclusionerrorlevel (integer)
\pdfinfoomitdate (integer)
+\pdfmajorversion (integer)
\pdfminorversion (integer)
\pdfobjcompresslevel (integer)
+\pdfomitcharset (integer)
\pdfoutput (integer)
\pdfpagebox (integer)
\pdfpkresolution (integer)
@@ -83,17 +85,19 @@
\pdfpkmode (tokens)
%% Expandable commands:
+\expanded <tokens> (expandable)
\ifincsname (expandable)
\ifpdfabsdim (expandable)
\ifpdfabsnum (expandable)
\ifpdfprimitive <control sequence> (expandable)
+\input <general text> (expandable)
\leftmarginkern <box number> (expandable)
\pdfcolorstackinit [page] [direct] <general text> (expandable)
\pdfcreationdate (expandable)
\pdfescapehex <general text> (expandable)
\pdfescapename <general text> (expandable)
\pdfescapestring <general text> (expandable)
-\pdffiledump [offset <number>] [length <number>] <general text> (expandable)
+\pdffiledump [offset <integer>] [length <integer>] <general text> (expandable)
\pdffilemoddate <general text> (expandable)
\pdffilesize <general text> (expandable)
\pdffontname <font> (expandable)
@@ -103,7 +107,7 @@
\pdfinsertht <integer> (expandable)
\pdflastmatch <integer> (expandable)
\pdfmatch [icase] [subcount <integer>] <general text> <general text> (expandable)
-\pdfmdfivesum file <general text> (expandable)
+\pdfmdfivesum [file] <general text> (expandable)
\pdfnormaldeviate (expandable)
\pdfpageref <page number> (expandable)
\pdfstrcmp <general text> <general text> (expandable)
diff --git a/systems/doc/pdftex/manual/pdftex-t.tex b/systems/doc/pdftex/manual/pdftex-t.tex
index da2703fe56..42c0a11099 100644
--- a/systems/doc/pdftex/manual/pdftex-t.tex
+++ b/systems/doc/pdftex/manual/pdftex-t.tex
@@ -1,7 +1,7 @@
% interface=english modes=letter,screen output=pdftex
% vim: tw=79
-% $Id: pdftex-t.tex 790 2018-01-02 00:12:04Z karl $
+% $Id: pdftex-t.tex 821 2020-03-02 02:14:55Z karl $
% The number of lines on the title page depends on exactly
% what \PDF\ code is generated.
@@ -38,15 +38,16 @@
August\or September\or October\or November\or December\else ERROR\fi}
}
-\svnscan $Id: pdftex-t.tex 790 2018-01-02 00:12:04Z karl $
+\svnscan $Id: pdftex-t.tex 821 2020-03-02 02:14:55Z karl $
-\def\currentpdftex{1.40.18}
+\def\currentpdftex{1.40.21}
%***********************************************************************
\def\eTeX{{$\varepsilon$}-\kern-.125em\TeX}
\def\eg{e.g.}
\def\Eg{E.g.}
+\def\MDFIVE{MD5} % not oldstyle 5, capital MD
\def\PDFReference{{\sl PDF Reference}} % PDF with capital letters
\abbreviation [AFM] {afm} {Adobe Font Metrics}
@@ -74,7 +75,6 @@
\abbreviation [MAC] {Macintosh} {Macintosh hardware platform}
\abbreviation [MACOSX] {Mac\,OS\,X} {Macintosh operating system version 10}
\abbreviation [MACTEX] {Mac\TeX} {\MAC\ \WEBC\ distribution}
-\abbreviation [MDFIVE] {md5} {MD5 message-digest algorithm}
\abbreviation [METAFONT] {\MetaFont} {graphic programming environment, bitmap output}
\abbreviation [METAPOST] {\MetaPost} {graphic programming environment, vector output}
\abbreviation [MIKTEX] {MiK\TeX} {\WIN\ distribution}
@@ -85,6 +85,7 @@
\abbreviation [PDFLATEX] {pdf\LaTeX} {\TEX\ extension producing \PDF\ output (\LATEX\ format loaded)}
\abbreviation [PDFTEX] {pdf\TeX} {\TEX\ extension producing \PDF\ output}
\abbreviation [PDF] {pdf} {Portable Document Format}
+\abbreviation [PDFA] {pdf/\kern-.16em a} {PDF A/ standards}
\abbreviation [PERL] {Perl} {Perl programming environment}
\abbreviation [PFA] {PFA} {Adobe PostScript Font format (ASCII)}
\abbreviation [PFB] {PFB} {Adobe PostScript Font format (Binary)}
@@ -98,7 +99,6 @@
\abbreviation [RGB] {rgb} {Red Green Blue color specification}
\abbreviation [TCX] {tcx} {\TEX\ Character Translation}
\abbreviation [TDS] {tds} {\TEX\ Directory Standard}
-\abbreviation [TETEX] {te\TeX} {\TEX\ distribution for \UNIX\ (based on \WEBC)}
\abbreviation [TEXEXEC] {\TeX exec} {\CONTEXT\ command line interface}
\abbreviation [TEXINFO] {Texinfo} {generate typeset documentation from info pages}
\abbreviation [TEXUTIL] {\TeX util} {\CONTEXT\ utility tool}
@@ -112,7 +112,6 @@
\abbreviation [WEBC] {Web2c} {official multi||platform \WEB\ environment}
\abbreviation [WEB] {web} {literate programming environment}
\abbreviation [WIN] {Windows} {Microsoft Windows platform}
-\abbreviation [XEMTEX] {XEm\TeX} {\WIN\ \WEBC\ distribution}
\abbreviation [ZIP] {zip} {compressed file format}
%D It makes sense to predefine the name of the author of \PDFTEX, doesn't it?
@@ -123,23 +122,24 @@
%D appearance of the \TEX\ source, \URL's are defined here.
\useURL [ptex_org] [http://www.pdftex.org] % links to ptex_examples
-\useURL [ptex_ctan] [http://ctan.org/pkg/pdftex]
+\useURL [ptex_ctan] [https://ctan.org/pkg/pdftex]
\useURL [ptex_devel] [http://foundry.supelec.fr/projects/pdftex]
% where bug reports should go:
\useURL [ptex_bugs] [mailto:pdftex@tug.org] [] [pdftex@tug.org]
-\useURL [ptex_listinfo] [http://lists.tug.org/pdftex]
+\useURL [ptex_listinfo] [https://lists.tug.org/pdftex]
-\useURL [kpathsea] [http://tug.org/kpathsea]
-\useURL [texlive] [http://tug.org/texlive]
-\useURL [web2c] [http://tug.org/web2c]
+\useURL [etex_ctan] [https://ctan.org/pkg/etex]
+\useURL [kpathsea] [https://tug.org/kpathsea]
+\useURL [texlive] [https://tug.org/texlive]
+\useURL [web2c] [https://tug.org/web2c]
\useURL [ctan_systems] [http://mirror.ctan.org/systems]
\useURL [win32] [http://mirror.ctan.org/systems/win32]
\useURL [context] [http://www.pragma-ade.com]
-\useURL [tex_showcase] [http://tug.org/texshowcase]
+\useURL [tex_showcase] [https://tug.org/texshowcase]
-\useURL [pdfreference] [http://www.adobe.com/devnet/pdf/pdf_reference.html]
-\useURL [thanh_truetype_tub] [http://tug.org/TUGboat/tb30-1/tb94thanh.pdf]
+\useURL [pdfreference] [https://www.adobe.com/devnet/pdf/pdf_reference.html]
+\useURL [thanh_truetype_tub] [https://tug.org/TUGboat/tb30-1/tb94thanh.pdf]
\useURL [jbig2enc] [https://github.com/agl/jbig2enc]
%D The primitive definitions are specified a bit fuzzy using the next set of
@@ -151,7 +151,7 @@
\let\ifpdfabsnum\relax
\let\ifpdfabsdim\relax
-\def\Syntax #1{\strut\kern-.25em{#1}\kern-.25em}
+\def\Syntax #1{\strut\kern-.25em{#1}\kern-.25em\relax}
\def\Next {\crlf\hbox to 2em{}\nobreak}
\def\Sugar #1{\unskip\unskip\unskip\kern.25em{#1}\kern.25em\ignorespaces}
%
@@ -163,11 +163,17 @@
\def\Or {\Sugar{\mathematics{\vert}}}
\def\Rbrace {\Sugar{\tttf\rightargument}}
\def\Tex #1{\Sugar{\type{#1}}}
-\def\Whatever #1{\Sugar{\mathematics{(\hbox{#1})}}}
+\def\Whatever #1{\Sugar{\kern.75em\mathematics{(\hbox{#1})}}} % parens
+ % a full quad before, more of a separator on
+ % syntax lines.
-% hyphenates
+% hyphenates, angle brackets
\def\Something#1{\Sugar{\mathematics{\langle}\prewordbreak
{#1}\prewordbreak\mathematics{\rangle}}}
+%
+% undoes the .25em spacing of \Sugar, letting before and after spaces in
+% the input stand.
+\def\Somethingtext#1{\Syntax{\Something{#1}}}
\hbadness=10000 % don't care
@@ -574,6 +580,7 @@
Hartmut Henkel\par
Pawe\l\ Jackowski\par
Martin Schr\"oder\par
+ Karl Berry\par
\vskip3ex
@@ -646,21 +653,25 @@ successfully compiled on \UNIX, \WIN\ and \MSDOS\ systems. It is
actively maintained, with new features trickling in. Great care is taken
to keep new \PDFTEX\ versions backward compatible with earlier ones.
-For some years there has been a \quote {conservative} successor to \TEX\
-available, called \ETEX. Because mainstream macro packages such as
-\LATEX\ have started supporting this welcome extension, the \ETEX\
-functionality has also been integrated into the \PDFTEX\ code. For a
-while (\TEXLIVE~2004 and~2005) \PDFTEX\ therefore came in two flavours:
-the \ETEX\ enabled \PDFETEX\ engine and the standard one, \PDFTEX. The
-ability to produce both \PDF\ and \DVI\ output made \PDFETEX\ the
-primary \TEX\ engine in these distributions. Since \PDFTEX\ version 1.40
-now the \ETEX\ extensions are part already of the \PDFTEX\ engine, so
-there is no longer any need to ship \PDFETEX. The \ETEX\ functionality
-of \PDFTEX\ can be disabled if not required. Other extensions are
-\MLTEX\ and \ENCTEX; these are also included in the current \PDFTEX\
-code.
-
-\PDFTEX\ is maintained by \THANH, Martin Schr\"oder, and others. The
+A \quote {conservative} successor to \TEX, named \ETEX, was developed
+in the 1990s. Since \PDFTEX\ version 1.40, the \ETEX\ extensions are
+always part of the \PDFTEX\ engine, so \type{pdfetex} is now simply a
+link to \type{pdftex}; they have identical behavior. For documentation
+on the \ETEX\ extensions, see \from[etex_ctan].
+
+Furthermore, \PDFTEX\ itself has acquired plenty of extensions over the
+years which are not related specifically to \PDF\ output, generally new
+primitives for various features that are inconvenient or impossible to
+implement at the \TEX\ level. Many of these extensions have been adopted
+across all engines (not necessarily by the same name), and some are or
+will be required by \LATEX. Therefore, \type{etex} is also a link to
+\type{pdftex}, the difference being only whether \DVI\ or \PDF\ output
+is generated by default.
+
+Other extensions are \MLTEX\ and \ENCTEX; these are also included in the
+current \PDFTEX\ code, although are little used for new documents.
+
+\PDFTEX\ is maintained by \THANH\ and others. The
\PDFTEX\ homepage is \from [ptex_org]. Please send \PDFTEX\ comments and
bug reports to the mailing list \from [ptex_bugs] (\from [ptex_listinfo]).
@@ -674,14 +685,14 @@ repository for the manual and its sources is at \from[ptex_devel].
Copies in \PDF\ format can also be found on \CTAN\ via \from[ptex_ctan].
Thanks to the many people who have contributed to the manual.
-New errors might have slipped in afterwards by the editor.
+Improvements are always possible, and bugs not unlikely.
Please send questions or suggestions by email to \from[ptex_bugs].
%***********************************************************************
\subsection{Legal Notice}
-Copyright \copyright\ 1996||2017 \THANH.
+Copyright \copyright\ 1996||2020 \THANH.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.2
or any later version published by the Free Software Foundation;
@@ -824,7 +835,7 @@ We now turn to specifics of \PDFTEX.
This section describes the steps needed to get \PDFTEX\ running on
a system where \PDFTEX\ is not yet installed. Nowadays virtually all
\TEX\ distributions have \PDFTEX\ as a component, such as \TEXLIVE,
-\MIKTEX, \TETEX, \XEMTEX, \PROTEXT, and \MACTEX. The ready to run
+\MIKTEX, \PROTEXT, and \MACTEX. The ready to run
\TEXLIVE\ distribution comes with \PDFTEX\ versions for many \UNIX,
\WIN, and \MACOSX\ systems; more information can be found at
\hbox{\from[texlive].} There are also \WIN-specific distributions which
@@ -837,7 +848,7 @@ If there is no precompiled \PDFTEX\ binary for your system, or the version
coming with a distribution is not the current one and you would like to
try out a fresh \PDFTEX\ immediately, you will need to build \PDFTEX\
from sources; read on. You should already have a working \TEX\ system,
-\eg\ \TEXLIVE\ or \TETEX, into which the freshly compiled \PDFTEX\ will
+\eg\ \TEXLIVE, into which the freshly compiled \PDFTEX\ will
be integrated. Note that the installation description in this manual
is \WEBC||specific.
@@ -871,7 +882,7 @@ The binary \filename{pdftex} is then built in the subdirectory
\filename{build/texk/web2c}.
The obsolescent binary \filename{pdfetex} is still generated for backward
-compatibility, but since version 1.40 it is just a file copy
+compatibility, but since version 1.40 it is just a symbolic link to or copy
of the file \filename{pdftex}.
As well as the main \filename{pdftex} binary, binaries for the utilities
@@ -904,15 +915,15 @@ regenerated system-wide with the fresh \filename{pdftex} binary.
configuration file called \filename {texmf.cnf}. The location
of this file is the appropriate position within the \TDS\ tree
relative to the place of the \PDFTEX\ binary; on a \TEXLIVE\ system,
-\filename{texmf.cnf} is typically located either in directory
-\filename{texmf/web2c} or \filename{texmf-local/web2c}. The path to
+\filename{texmf.cnf} is typically located either in the directory
+\filename{texmf-dist/web2c}. The path to
file \filename{texmf.cnf} can also be set up by the environment variable
\type{TEXMFCNF}.
-The \filename{texmf.cnf} files coming with the major \TEX\ distributions
-should already be set up for normal use, so you shouldn't need to edit
-it. You might still like to read it to see where the various bits and
-pieces are going.
+The configuration files in the major \TEX\ distributions (such as
+\filename{texmf.cnf} in \TEXLIVE) should already be set up for normal
+use, so you shouldn't need to edit it. You might still like to read it
+to see where the various bits and pieces are going.
\PDFTEX\ uses the search path variables shown in
\in{table}[tbl:spathvar], among others.
@@ -1056,6 +1067,7 @@ even without setting any parameters.
\NC \type{\pdfuniqueresname} \NC integer \NC 0 \NC \NC\NR
\NC \type{\pdfprotrudechars} \NC integer \NC 0 \NC \NC\NR
\NC \type{\pdfgentounicode} \NC integer \NC 0 \NC \NC\NR
+\NC \type{\pdfmajorversion} \NC integer \NC 1 \NC output \PDF\ 1.4 by default \NC\NR
\NC \type{\pdfminorversion} \NC integer \NC 4 \NC \PDF\ 1.4 \NC\NR
\NC \type{\pdfpagebox} \NC integer \NC 0 \NC \NC\NR
\NC \type{\pdfforcepagebox} \NC integer \NC 0 \NC \NC\NR
@@ -1323,18 +1335,22 @@ builds of documents. (See also \type{\pdfinfoomitdate},
The second, related, environment variable is \type{FORCE_SOURCE_DATE}.
If this is set to~\type{1}, \TEX's time-related primitives are also
-initialized from the value of \type{SOURCE_DATE_EPOCH}. These
-primitives are \type{\year}, \type{\month}, \type{\day}, and
-\type{\time}. If \type{SOURCE_DATE_EPOCH} is not set, setting
-\type{FORCE_SOURCE_DATE} has no effect. If \type{FORCE_SOURCE_DATE} is
-unset, set to the empty string, or set to~\type{0}, the primitives
-reflect the current time as usual. Any other value elicits a warning,
-and the current time is used. (This is useful only if one wants to make
-reproducible \PDF{}s for a set of documents without changing them in any
-way, e.g., an operating system distribution with manuals that use
-\type{\today}. Except in such unusual circumstances, it is better not
-to set this, and let the \TEX\ primitives retain the meaning they have
-always had.)
+initialized from the value of \type{SOURCE_DATE_EPOCH}. These primitives
+are \type{\year}, \type{\month}, \type{\day}, and \type{\time}. If
+\type{SOURCE_DATE_EPOCH} is not set, setting \type{FORCE_SOURCE_DATE}
+has no effect. If \type{FORCE_SOURCE_DATE} is unset, set to the empty
+string, or set to~\type{0}, the primitives reflect the current time as
+usual. Any other value elicits a warning, and the current time is used.
+(This is useful only if one wants to make reproducible \PDF{}s for a set
+of documents without changing them in any way, e.g., an operating system
+distribution with manuals that use \type{\today}. Except in such unusual
+circumstances, it is better not to set this, and let the \TEX\
+primitives retain the meaning they have always had.)
+
+In addition, if both \type{SOURCE_DATE_EPOCH} and
+\type{FORCE_SOURCE_DATE} are set, \type{\pdffilemoddate} returns a value
+in UTC, ending in \type{Z}. (The values of the environment variables are
+irrelevant in this case.)
Finally, just to have the list of options and basic invocation at hand,
here is a verbatim listing of the \type{-}\type{-help} output. All
@@ -2139,27 +2155,38 @@ engine is used in distributions also for non-\PDF\ formats (\eg\
\LATEX), so \type{\pdfoutput} may be defined even when the output format
is \DVI.
+\pdftexprimitive{\Syntax{\Tex{\pdfmajorversion} \Whatever{integer}}}
+\bookmark{\tex{pdfmajorversion}}
+
\pdftexprimitive{\Syntax{\Tex{\pdfminorversion} \Whatever{integer}}}
\bookmark{\tex{pdfminorversion}}
-This primitive sets the \PDF\ version of the generated file and the
-highest \PDF\ version of included \PDF{}s allowed without warning, by
-default (see \type{\pdfinclusionerrorlevel}). The default compiled into
-the \PDFTEX\ program is \type{\pdfminorversion=4}, setting the \PDF\
-version to~1.4 and allowing included \PDF\ files with versions up
-to~1.4. If specified, this primitive must appear before any data is to
-be written to the generated \PDF\ file.
-
-Distributions typically alter the engine's compiled default of~4 when
-building formats; for example, as of 2010, \TEXLIVE\ sets
-\type{\pdfminorversion=5} when formats are built. This is so object
-compression can be enabled (described below).
-
-This was originally a shortened synonym of the
+Together, these two primitives specify the \PDF\ version for generated \PDF\
+output. The defaults compiled into the \PDFTEX\ program are
+\type{\pdfmajorversion=1} and \type{\pdfminorversion=4}, thus \PDF~1.4
+is generated by default.
+
+However, distributions typically alter the engine's compiled default
+minor version of~4 when building formats. For example, as of 2010,
+\TEXLIVE\ sets \type{\pdfminorversion=5} when formats are built. This is
+so object compression can be enabled (see \type{\pdfobjcompress} below).
+
+This value also defines the highest \PDF\ version for included \PDF{}s
+to be allowed without error, by default (see
+\type{\pdfinclusionerrorlevel}).
+
+The values for both must be $\ge\,1$ but are not checked further.
+Furthermore, they are set independently; only setting
+\type{\pdfmajorversion=2} would result in \PDF~2.4 output; it's
+necessary to additionally set \type{\pdfminorversion}.
+
+If specified, these primitives must appear before any data is to be
+written to the generated \PDF\ file. The \type{\pdfmajorversion}
+primitive was introduced in \PDFTEX\ 1.40.21. \type{\pdfminorversion}
+was originally a shortened synonym of the
\type{\pdfoptionpdfminorversion} command, which is now obsolete.
\introduced{1.30.0}
-
\pdftexprimitive{\Syntax{\Tex{\pdfcompresslevel} \Whatever{integer}}}
\bookmark{\tex{pdfcompresslevel}}
@@ -2176,43 +2203,50 @@ is read each time \PDFTEX\ starts a stream. Setting
\bookmark{\tex{pdfobjcompresslevel}}
This integer parameter controls the compression of {\em non-stream}
-objects. In the \PDF-1.4 specification these objects still had to go into
+objects. If specified, the parameter must appear before any data is
+written to the \PDF\ output. \introduced{1.40.0}
+
+In the \PDF-1.4 specification, non-stream objects had to be written in
the \PDF\ file as clear text, uncompressed. The \PDF-1.5 specification
-now allows to collect non-stream objects as ``compressed objects'' into
-``object stream'' objects (\type{/Type /ObjStm}, see \PDF\ Ref.\ 5th~ed.,
-sect.~3.4.6). At the \PDF\ file end instead of the object table then
-an \type{/XRef} cross-reference stream is written out. This results in
-considerably smaller \PDF\ files, particularly if lots of annotations
-and links are used.
-\introduced{1.40.0}
+allows collecting non-stream objects as ``compressed objects'' into
+``object stream'' objects (\type{/Type /ObjStm}, see \PDF\ Ref.\
+5th~ed., sect.~3.4.6). At the end of the \PDF\ file, an \type{/XRef}
+cross-reference stream is then written out instead of the object table.
+This can result in a considerably smaller \PDF\ file, particularly if
+lots of annotations and links are used.
The writing of compressed objects is enabled by setting
-\type{\pdfobjcompresslevel} to a value between~1 and~3; it's
-disabled by value~0 (default). Enabling requires that also
-\type{\pdfminorversion}~$>$~4. If \type{\pdfobjcompresslevel}~$>$~0,
-but \type{\pdfminorversion}~$<$~5, a warning is given and object stream
-writing is disabled. The \type{\pdfobjcompresslevel} value is clipped
-to the range $0..3$. Using values outside this range is not recommended
-(for future extension).
+\type{\pdfobjcompresslevel} to a value between~1 and~3; it's disabled
+if~0 (default). Object compression also requires that
+\type{\pdfminorversion}$\,\ge\,$5 (or
+\type{\pdfmajorversion}$\,\ge\,$2), else a warning is given and the
+compression is disabled. The \type{\pdfobjcompresslevel} value is
+clipped to the range $0..3$. Using values outside this range is not
+recommended (for future extension).
The \type{\pdfobjcompresslevel} settings have the following effects:
-When set to~0, no object streams are generated at all. When set to~1,
+\startitemize[0,packed]
+\item When set to~0, no object streams are generated at all.
+\item When set to~1,
all non-stream objects are compressed with the exception of any objects
coming with embedded \PDF\ files (``paranoid'' mode, to avoid yet unknown
problems), and also the \type{/Info} dictionary is not compressed for
-clear-text legibility. When set to~2, also all non-stream objects coming
+clear-text legibility.
+\item When set to~2, also all non-stream objects coming
with embedded \PDF\ files are compressed, but the \type{/Info} dictionary
-is still not compressed. Finally, when set to~3, all non-stream objects
+is still not compressed.
+\item Finally, when set to~3, all non-stream objects
are compressed, including the \type{/Info} dictionary (this means that
the \type{/Info} can't be read as clear text any more). If object streams
are to be used, currently \type{\pdfobjcompresslevel=2} is recommended,
and is so specified in some distributions, including \TEXLIVE~2010 and later.
+\stopitemize
-\description{Caveat:} \PDF\ files generated with object streams enabled
-can't be read with (sufficiently old) \PDF\ viewers that don't
-understand \PDF-1.5 files. For widest distribution and unknown audience,
-don't activate object stream writing. The \PDF-1.5 standard describes
-also a hybrid object compression mode that gives some backward
+\description{Compatibility caveat:} \PDF\ files generated with object
+streams enabled can't be read with (sufficiently old) \PDF\ viewers that
+don't understand \PDF-1.5 files. For widest distribution and unknown
+audience, don't activate object stream writing. The \PDF-1.5 standard
+describes also a hybrid object compression mode that gives some backward
compatibility, but this is currently not implemented, as \PDF-1.5 was
rather quickly adopted by modern \PDF\ viewers. Also not implemented is
the optional \type{/Extends} key.
@@ -2781,6 +2815,19 @@ text} as if they were used with \Something{font}\unkern, which means that the
corresponding glyphs will be embedded into the font resources in the \PDF\
output. Nothing is appended to the list being built.
+\pdftexprimitive{\Syntax{\Tex{\pdfomitcharset} \Whatever{integer}}}
+\bookmark{\tex{pdfomitcharset}}
+
+If this primitive parameter is zero (the default), the \type{/CharSet}
+entry is included as usual for fonts in the \PDF\ output; if it is set
+to 1, then \type{/CharSet} is omitted. (Other values may have other
+meanings in the future, so do not rely on them.)
+
+Explanation: This parameter was created because the \PDFA-1 standard
+requires \type{/CharSet}, whereas \PDFA-2 and \PDFA-3 allow it to be
+omitted but have extraordinary requirements, which \PDFTEX\ does not
+currently meet, if it is included.\introduced{1.40.20}
+
\pdftexprimitive{\Syntax{\Tex{\pdfuniqueresname} \Whatever{integer}}}
\bookmark{\tex{pdfuniqueresname}}
@@ -2811,7 +2858,7 @@ Normally there is no need for the \PDFTEX\ user to bother about the
\type{\pdfmapfile} or \type{\pdfmapline} primitives, as the main \TEX\
distributions provide nice helper tools that automatically assemble
the default font map file. Prominent tool examples are the scripts
-\type{updmap} and \type{updmap-sys} coming with \TEXLIVE\ and \TETEX.
+\type{updmap} and \type{updmap-sys} coming with \TEXLIVE.
If your map file isn't in the current directory (or a standard system
directory), you will need to set the \type{TEXFONTMAPS} variable (in
\WEBC) or give an explicit path so that it will be found.
@@ -3425,7 +3472,7 @@ box:
Now we can use \type{\wd0} and \type{\ht0} to question the natural size of
the image as determined by \PDFTEX. When dimensions are specified before the
\type{{somefile.png}}, the graphic is scaled to fit these. Note that, unlike
-the \eg\ \type{\input} primitive, the filename is supplied between
+\eg\ the original \type{\input} primitive, the filename is supplied between
braces.
The image type is specified by the extension of the given file name:
@@ -3575,10 +3622,11 @@ now considered obsolete --- a mixture of \type{\pdfpagebox} and
\bookmark{\tex{pdfinclusionerrorlevel}}
This controls the behavior of \PDFTEX\ when a \PDF\ file is included
-that has a newer version than the one specified by
-\type{\pdfminorversion}. If \type{\pdfinclusionerrorlevel} is set to~0
-(the default), \PDFTEX\ gives only a warning; if 1, \PDFTEX\ raises an
-error; if negative, no diagnostic at all is given.
+which has a newer \PDF\ version than the one specified by
+\type{\pdfmajorversion} and \type{\pdfminorversion}. If
+\type{\pdfinclusionerrorlevel} is set to~0 (the default), \PDFTEX\ gives
+only a warning; if 1, \PDFTEX\ raises an error; if negative, no
+diagnostic at all is given.
It was originally a shortened synonym of
\type{\pdfoptionpdfinclusionerrorlevel}, which is now obsolete.
@@ -3587,14 +3635,16 @@ It was originally a shortened synonym of
\pdftexprimitive{\Syntax{\Tex{\pdfimagehicolor} \Whatever{integer}}}
\bookmark{\tex{pdfimagehicolor}}
-This primitive, when set to~1, enables embedding of \PNG\ images with
-16~bit wide color channels at their full color resolution. As such an
-embedding mode is defined only from \PDF\ version~1.5 onwards, the
+This parameter, when set to~1, enables embedding of \PNG\ images with
+16~bit wide color channels at their full color resolution. This
+embedding mode is defined only from \PDF\ version~1.5 onwards, so the
\type{\pdfimagehicolor} functionality is automatically disabled in
-\PDFTEX\ if \type{\pdfminorversion}~$<$~5; then each 16~bit color
-channel is reduced to a width of 8~bit by stripping the lower 8~bits
-before embedding. The same stripping happens when
-\type{\pdfimagehicolor} is set to~0. For \type{\pdfminorversion}~$\ge$~5
+\PDFTEX\ if \type{\pdfminorversion}$\,<\,$5 and
+\type{\pdfmajorversion}$\,=\,$1; in this case, each 16~bit color channel
+is reduced to a width of 8~bits by stripping the lower 8~bits before
+embedding. The same stripping happens when \type{\pdfimagehicolor} is
+set to~0. If \type{\pdfmajorversion}$\,=\,$1 and
+\type{\pdfminorversion}$\,\ge\,$5, or \type{\pdfmajorversion}$\,\ge\,$2,
the default value of \type{\pdfimagehicolor} is~1. If specified, the
parameter must appear before any data is written to the \PDF\ output.
\introduced{1.30.0}
@@ -3603,7 +3653,7 @@ parameter must appear before any data is written to the \PDF\ output.
\bookmark{\tex{pdfimageapplygamma}}
This primitive, when set to~1, enables gamma correction while embedding
-\PNG\ images, taking the values of the primitives \type{\pdfgamma} as
+\PNG\ images, taking the value of the primitive \type{\pdfgamma} as
well as the gamma value embedded in the \PNG\ image into account. When
\type{\pdfimageapplygamma} is set to~0, no gamma correction is
performed. If specified, the parameter must appear before any data is
@@ -3616,7 +3666,7 @@ This primitive defines the `device gamma' for \PDFTEX. Values are in
promilles (same as \type{\mag}). The default value of this primitive
is~1000, defining a device gamma value of~1.0.
-When \type{\pdfimageapplygamma} is set to~1, then whenever a \PNG\ image
+If \type{\pdfimageapplygamma} is set to~1, then whenever a \PNG\ image
is included, \PDFTEX\ applies a gamma correction. This correction is
based on the value of the \type{\pdfgamma} primitive and the `assumed
device gamma' that is derived from the value embedded in the actual
@@ -3822,7 +3872,7 @@ annotations do {\em not} obey transformations issued by \type
The \Something{action spec} specifies the action that should be performed
when the hyperlink is activated while the \Something{user-action spec}
performs a user||defined action. A typical use of the latter is to specify
-a \URL, like \typ {/S /URI /URI (http://www.tug.org/)}, or a named action like
+a \URL, like \typ {/S /URI /URI (https://tug.org/)}, or a named action like
\typ {/S /Named /N /NextPage}.
A \Something{goto-action spec} performs a GoTo action. Here \Something
@@ -4174,9 +4224,12 @@ starts returning micro||time from~0 again. \introduced{1.30.0}
\Whatever{expandable}}}
\bookmark{\tex{pdffilemoddate}}
-Expands to the modification date of file \Something{general text} in the same
-format as for \type{\pdfcreationdate}, \eg\ it's {\tt \pdffilemoddate
-{./pdftex-t.tex}} for the source of this manual.
+Expands to the modification date of file \Something{general text} in the
+same format as for \type{\pdfcreationdate}, \eg\ it's {\tt
+\pdffilemoddate {./pdftex-t.tex}} for the source of this manual. As of
+version 1.40.20, if the \type{SOURCE_DATE_EPOCH} and
+\type{FORCE_SOURCE_DATE} environment variables are both set,
+\type{\pdffilemoddate} returns a value in UTC, ending in \type{Z}.
\introduced{1.30.0}
\pdftexprimitive{\Syntax{\Tex{\pdffilesize} \Something{general text}
@@ -4187,25 +4240,57 @@ Expands to the size of file \Something{general text}, \eg\ it's {\tt
\pdffilesize {./pdftex-t.tex}} for the source of this manual.
\introduced{1.30.0}
-\pdftexprimitive{\Syntax{\Tex{\pdfmdfivesum} file \Something{general text}
- \Whatever{expandable}}}
+\pdftexprimitive{\Syntax{\Tex{\pdfmdfivesum}
+ \Optional{\Literal{file}}
+ \Something{general text} \Whatever{expandable}}}
\bookmark{\tex{pdfmdfivesum\ file}}
-Expands to the \MDFIVE\ of file \Something{general text} in uppercase
-hexadecimal format (same as \type{\pdfescapehex}), \eg\ it's {\tt
-\pdfmdfivesum file {./pdftex-t.tex}} for the source of this manual.
+If the keyword \type{file} is given, expands to the \MDFIVE\ of file
+\Somethingtext{general text} in uppercase hexadecimal format (same as
+\type{\pdfescapehex}). Without \type{file}, expands to the \MDFIVE\ of
+the \Somethingtext{generaltext} taken as a string. For example, it's
+{\tt \pdfmdfivesum file {./pdftex-t.tex}} for the source of this manual.
\introduced{1.30.0}
-\pdftexprimitive{\Syntax{\Tex{\pdffiledump} \Optional{\Literal{offset}
- \Something{number}} \Optional{\Literal{length}
- \Something{number}} \Something{general text} \Whatever{expandable}}}
+\pdftexprimitive{\Syntax{\Tex{\pdffiledump}
+ \Optional{\Literal{offset} \Something{integer}}
+ \Optional{\Literal{length} \Something{integer}}
+ \Something{general text} \Whatever{expandable}}}
\bookmark{\tex{pdffiledump}}
-Expands to the dump of the file \Something{general text} in uppercase
-hexadecimal format (same as \type{\pdfescapehex}), starting at offset
-\Something{number} or 0 with length \Something{number}, if given. The first ten
-bytes of the source of this manual are {\tt \pdffiledump length 10
-{./pdftex-t.tex}}. \introduced{1.30.0}
+Expands to the dump of the first \type{length} \Somethingtext{integer}
+bytes of the file \Somethingtext{general text}, in uppercase hexadecimal
+format (same as \type{\pdfescapehex}), starting at offset
+\type{offset}~\Somethingtext{number}, or the beginning of the file if
+\type{offset}. If \type{length} is not given, the default is zero, so
+expands to nothing. Both \Somethingtext{integer}s must be $\ge0$. For
+example, the first ten bytes of the source of this manual are {\tt
+\pdffiledump length 10 {./pdftex-t.tex}}. \introduced{1.30.0}
+
+\pdftexprimitive{\Syntax{\Tex{\input} \Something{general text}
+ \Whatever{expandable}}}
+\bookmark{\tex{input}}
+
+As of \TEXLIVE\ 2020, the \type{\input} primitive in all \TEX\ engines,
+including \PDFTEX, now also accepts a group-delimited filename argument,
+as a system-dependent extension, as in \type{\input\Lbrace
+foo.tex\Rbrace}. The usage with a standard space/token-delimited
+filename is completely unchanged.
+
+This group-delimited argument was previously implemented in Lua\TEX; now
+it is available in all engines. \ASCII\ double quote characters
+(\type{"}) are removed from the filename, but it is otherwise left
+unchanged after tokenization.
+
+This extension is unlike most others in that it affects a primitive in
+standard \TEX\ (\type{\input}), rather than being related to a new
+primitive, command line option, etc. This is allowed because additional
+methods of recognizing filenames are explicitly mentioned in
+\type{tex.web} as acceptable system-dependent extensions.
+
+Incidentally, this does not currently
+affect \LATEX's \type{\input} command, as that is a macro redefinition
+of the standard \type{\input} primitive. \introduced{1.40.21}
%***********************************************************************
@@ -4278,6 +4363,15 @@ and end at the same group level. \introduced{1.40.0}
\subsection{Miscellaneous}
+\pdftexprimitive{\Syntax{\tex {expanded} \Something{tokens}
+ \Whatever{expandable}}}
+\bookmark{\tex{expanded}}
+
+Expands \Something{tokens} in exactly the same way as \type{\message}.
+In contrast to \type{\edef}, macro parameter characters do not need to
+be doubled. \type{\protected} macros are not expanded.
+\introduced{1.40.20}
+
\pdftexprimitive{\Syntax{\tex {ifincsname} \Whatever{expandable}}}
\bookmark{\tex{ifincsname}}
@@ -4310,7 +4404,9 @@ When set to 1 (or set by the command-line switch \type{-draftmode})
images but does everything else (including writing auxiliary files),
thus speeding up compilations when you know you need an extra run but
don't care about the output, \eg\ just to get the \BIBTEX\ references
-right. \introduced{1.40.0}
+right. If specified, the parameter must appear before any data is written to the
+\PDF\ output.
+\introduced{1.40.0}
\pdftexprimitive{\Syntax{\Tex{\pdfinsertht} \Something{integer}
@@ -4580,7 +4676,7 @@ or \type{\special} primitives, are not subject to \TCX\ output remapping.
Beware: Character translation interferes with the \ENCTEX\ primitives; to
avoid surprises, don't use \ENCTEX\ and \TCX\ mapping at the same time.
-Further details about \TCX\ file loading can be found in the \TETEX\
+Further details about \TCX\ file loading can be found in the \WEBC\
manual.
%***********************************************************************
@@ -5127,7 +5223,7 @@ The Free Software Foundation may publish new, revised versions
of the GNU Free Documentation License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns. See
-http:/\!/www.gnu.org/copyleft/.
+https:/\!/gnu.org/copyleft/.
Each version of the License is given a distinguishing version number.
If the Document specifies that a particular numbered version of this
diff --git a/systems/doc/pdftex/manual/pdftex-w.tex b/systems/doc/pdftex/manual/pdftex-w.tex
index 5afdf9f44a..adc1bef771 100644
--- a/systems/doc/pdftex/manual/pdftex-w.tex
+++ b/systems/doc/pdftex/manual/pdftex-w.tex
@@ -1,9 +1,13 @@
-% $Id: pdftex-w.tex 689 2012-04-15 18:05:10Z karl $
+% $Id: pdftex-w.tex 822 2020-03-02 16:57:37Z karl $
+% run with -ini:
+ \catcode`{=1 \catcode`}=2
+ \def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
+ \hsize=6.5in \vsize=9in
\pdfoutput=1
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\pdfmapline{ptmr8r Times-Roman 2 <8r.enc}
\font\tenrm=ptmr8r
\tenrm
-Welcome to pdf\TeX!
-\bye
+Welcome to pdf\TeX!\hfil
+\end
diff --git a/systems/doc/pdftex/tests/06-pkmap/Makefile b/systems/doc/pdftex/tests/06-pkmap/Makefile
index 853ec0eb2b..c0c16604bd 100644
--- a/systems/doc/pdftex/tests/06-pkmap/Makefile
+++ b/systems/doc/pdftex/tests/06-pkmap/Makefile
@@ -1,24 +1,30 @@
-# $Id: Makefile 777 2017-04-20 23:08:32Z karl $
+# $Id: Makefile 790 2018-01-02 00:12:04Z karl $
# Public domain.
include ../Common.mak
default: test-pkmap
-test-pkenc: # cmr10.3600pk - not used
+test-pkmap: cmr10.360pk cmr10.72pk cmb10.72pk
$(prog) test-pkmap.tex
-#
-# should work when and if patch is applied:
-# grep -q /ffi test-pkenc.pdf # should end up with this encoded char
-# grep -a ToUnicode test-pkenc.pdf
+ grep -q /ffi test-pkmap.pdf # should end up with this encoded char
+ grep -a ToUnicode test-pkmap.pdf
#
# dev convenience:
# pdffonts test-big.pdf
# pdftotext test-big.pdf -
-cmr10.3600pk:
- mf-nowin '\mode:=ljfour;mag:=6;input cmr10'
- gftopk cmr10.3600gf
+cmr10.360pk:
+ mf-nowin '\mode:=ljfour; mag:=0.6; input cmr10'
+ gftopk cmr10.360gf
+
+cmr10.72pk:
+ mf-nowin '\mode:=mactrue; input cmr10'
+ gftopk cmr10.72gf
+
+cmb10.72pk:
+ mf-nowin '\mode:=mactrue; input cmb10'
+ gftopk cmb10.72gf
clean:
$(clean)
diff --git a/systems/doc/pdftex/tests/06-pkmap/cmr10.360pk b/systems/doc/pdftex/tests/06-pkmap/cmr10.360pk
new file mode 100644
index 0000000000..91f9dcf120
--- /dev/null
+++ b/systems/doc/pdftex/tests/06-pkmap/cmr10.360pk
Binary files differ
diff --git a/systems/doc/pdftex/tests/06-pkmap/prepatch.pdf b/systems/doc/pdftex/tests/06-pkmap/prepatch.pdf
index 07617bdba2..d7680bbec0 100644
--- a/systems/doc/pdftex/tests/06-pkmap/prepatch.pdf
+++ b/systems/doc/pdftex/tests/06-pkmap/prepatch.pdf
Binary files differ
diff --git a/systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex b/systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex
index f78d7c095d..66703f0099 100644
--- a/systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex
+++ b/systems/doc/pdftex/tests/06-pkmap/test-pkmap.tex
@@ -1,23 +1,25 @@
-% $Id: test-pkmap.tex 777 2017-04-20 23:08:32Z karl $
+% $Id: test-pkmap.tex 790 2018-01-02 00:12:04Z karl $
% Public domain.
% Test map files with bitmap (i.e., Type 3) fonts.
% A thread starting here:
-% http://tug.org/pipermail/pdftex/2016-July/009064.html
-% and continuing here (and more):
-% http://tug.org/pipermail/pdftex/2016-August/009065.html
-% discusses a patch for supporting an encoding file with Type 3.
-% The patch has not yet been installed.
+% https://tug.org/pipermail/pdftex/2016-July/009064.html
+% and continuing on:
+% https://tug.org/pipermail/pdftex/2016-August/009065.html
+% https://mailman.ntg.nl/pipermail/ntg-pdftex/2017-August/004183.html
+% https://mailman.ntg.nl/pipermail/ntg-pdftex/2017-December/004189.html
+% discusses a patch for supporting an encoding file with Type 3 fnts.
%
% For comparison, the PDF made before the patch was applied is saved
% here as prepatch.pdf.
%
-% The default PK resolution is 72, so we made cmb10.72pk in this directory.
-% (mf-nowin '\mode:=mactrue; input cmb10' && gftopk cmb10.72gf)
-% (mf-nowin '\mode:=mactrue; input cmr10' && gftopk cmr10.72gf)
-%
+% The default PK resolution is 72, so we made cmb10.72pk et al. in this
+% directory; see the Makefile.
+
+% basic typesetting:
\pdfoutput=1 \catcode`\{=1 \catcode`\}=2
\hsize=6pc \parfillskip=0pt plus1fil \vsize=6in \lineskip=1pc
+\pdftrailerid{}
\pdfcompresslevel=0 \pdfobjcompresslevel=0
\pdfglyphtounicode{ffi}{0066 0066 0069} %no need for all: \input glyphtounicode
@@ -26,12 +28,11 @@
\pdfmapline{cmr10}% type3 map without encoding - no ToUnicode, no /ffi.
\font\cmr=cmr10 \noindent \cmr ffi
-% if we install the patch.
-%\pdfmapline{cmb10 <7t.enc}% type3 map with encoding
-%\font\cmb=cmb10 \noindent \cmb ffi
+\pdfmapline{cmb10 <7t.enc}% type3 map with encoding
+\font\cmb=cmb10 \noindent \cmb ffi
-% geometrically-scaled tfm: the Type 3 should be scaled (resulting in
-% blocky blown-up bits), instead of using a separately-generated
+% scaled tfm of previously defined tfm: the Type 3 should not be
+% geometrically scaled, but instead should use a separately-generated
% cmr10.360pk (50*72/10).
\font\big = cmr10 at 50pt \big big
\end
diff --git a/systems/doc/pdftex/tests/08-pdfprimitive/Makefile b/systems/doc/pdftex/tests/08-pdfprimitive/Makefile
new file mode 100644
index 0000000000..cb50384135
--- /dev/null
+++ b/systems/doc/pdftex/tests/08-pdfprimitive/Makefile
@@ -0,0 +1,21 @@
+# $Id: Makefile 784 2017-11-28 23:55:44Z karl $
+# Public domain.
+
+include ../Common.mak
+
+default: test-ok test-non test-post
+
+test-ok:
+ $(prog) test-pdfprimitive-ok.tex
+ grep ' hello ' test-pdfprimitive-ok.log >/dev/null
+
+test-non:
+ $(prog) test-pdfprimitive-non.tex
+ grep 'No pages of output' test-pdfprimitive-non.log >/dev/null
+
+test-post:
+ ! $(prog) test-pdfprimitive-post.tex
+ grep '|||' test-pdfprimitive-post.log >/dev/null
+
+clean:
+ $(clean)
diff --git a/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-non.tex b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-non.tex
new file mode 100644
index 0000000000..9e310bf4b3
--- /dev/null
+++ b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-non.tex
@@ -0,0 +1,14 @@
+% $Id: test-pdfprimitive-non.tex 784 2017-11-28 23:55:44Z karl $
+% Public domain.
+
+% Check that \pdfprimitive silently gives no error when used
+% on a non-primitive, or on an undefined control sequence.
+%
+% This is the behavior which the manual has always documented,
+% although for some years up until the 2018 release, pdftex
+% gave an error instead of making it be a no-op.
+%
+\let\mytestcs=\relax
+\pdfprimitive\mytestcs
+\pdfprimitive\undefinedjunky
+\end
diff --git a/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-ok.tex b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-ok.tex
new file mode 100644
index 0000000000..f02d096db1
--- /dev/null
+++ b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-ok.tex
@@ -0,0 +1,9 @@
+% $Id: test-pdfprimitive-ok.tex 784 2017-11-28 23:55:44Z karl $
+% Public domain.
+
+\catcode`\{=1 \catcode`\}=2
+
+% Check that \pdfprimitive works at all.
+\let\message=\relax
+\pdfprimitive\message{hello}%
+\end
diff --git a/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-post.tex b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-post.tex
new file mode 100644
index 0000000000..9e27f2954f
--- /dev/null
+++ b/systems/doc/pdftex/tests/08-pdfprimitive/test-pdfprimitive-post.tex
@@ -0,0 +1,9 @@
+% $Id: test-pdfprimitive-post.tex 784 2017-11-28 23:55:44Z karl $
+% Public domain.
+
+% Check that \pdfprimitive does not swallow following (possibly
+% undefined) control sequences. So this should output three \vrules and
+% give an undefined error:
+\pdfprimitive\vrule\vrule
+\pdfprimitive\vrule\undefinedjunky
+\end
diff --git a/systems/doc/pdftex/tests/09-fontobjnum/Makefile b/systems/doc/pdftex/tests/09-fontobjnum/Makefile
new file mode 100644
index 0000000000..706c721bca
--- /dev/null
+++ b/systems/doc/pdftex/tests/09-fontobjnum/Makefile
@@ -0,0 +1,13 @@
+# $Id: Makefile 793 2018-01-25 23:21:29Z karl $
+# Public domain.
+
+include ../Common.mak
+
+default: test-ok
+
+test-ok:
+ $(prog) test-fontobjnum.tex
+ grep 'fontobjnum=1' test-fontobjnum.log >/dev/null
+
+clean:
+ $(clean)
diff --git a/systems/doc/pdftex/tests/09-fontobjnum/test-fontobjnum.tex b/systems/doc/pdftex/tests/09-fontobjnum/test-fontobjnum.tex
new file mode 100644
index 0000000000..ba5c5ef735
--- /dev/null
+++ b/systems/doc/pdftex/tests/09-fontobjnum/test-fontobjnum.tex
@@ -0,0 +1,9 @@
+% $Id: test-fontobjnum.tex 793 2018-01-25 23:21:29Z karl $
+% Public domain.
+
+\catcode`\{=1 \catcode`\}=2
+\font\tenit = /usr/local/texlive/2017/texmf-dist/fonts/tfm/public/cm/cmti10.tfm
+\edef\tenitnumber{\pdffontobjnum\tenit}
+\message{fontobjnum=\tenitnumber}
+\tenitnumber
+\end
diff --git a/systems/doc/pdftex/tests/10-moddate/Makefile b/systems/doc/pdftex/tests/10-moddate/Makefile
new file mode 100644
index 0000000000..8f32955d46
--- /dev/null
+++ b/systems/doc/pdftex/tests/10-moddate/Makefile
@@ -0,0 +1,27 @@
+# $Id: Makefile 808 2018-11-13 18:39:00Z karl $
+# Public domain.
+
+include ../Common.mak
+
+default: test-moddate test-moddate-abs
+
+test-moddate:
+ # regular
+ $(prog) test-moddate.tex
+ grep "D:2[0-9].*-.*'" test-moddate.log >/dev/null
+ #
+ # just one envvar, still regular.
+ SOURCE_DATE_EPOCH=1 $(prog) test-moddate.tex
+ grep "D:2[0-9].*-.*'" test-moddate.log >/dev/null
+ #
+ # both envvars, force utc.
+ FORCE_SOURCE_DATE=1 SOURCE_DATE_EPOCH=1 $(prog) test-moddate.tex
+ grep "D:2[0-9].*Z " test-moddate.log >/dev/null
+
+test-moddate-abs:
+ # should fail due to openin_any.
+ openin_any=p $(prog) test-moddate-abs.tex
+ ! grep "D:2[0-9]" test-moddate-abs.log >/dev/null
+
+clean:
+ $(clean)
diff --git a/systems/doc/pdftex/tests/10-moddate/test-moddate-abs.tex b/systems/doc/pdftex/tests/10-moddate/test-moddate-abs.tex
new file mode 100644
index 0000000000..1ddde5267e
--- /dev/null
+++ b/systems/doc/pdftex/tests/10-moddate/test-moddate-abs.tex
@@ -0,0 +1,9 @@
+% $Id: test-moddate-abs.tex 808 2018-11-13 18:39:00Z karl $
+% Public domain.
+
+\catcode`\{=1 \catcode`\}=2
+
+% Check that \pdffilemoddate fails on system filenames
+% with openin_any=p; see Makefile.
+\message{\pdffilemoddate{/etc/issue}}
+\end
diff --git a/systems/doc/pdftex/tests/10-moddate/test-moddate.tex b/systems/doc/pdftex/tests/10-moddate/test-moddate.tex
new file mode 100644
index 0000000000..c55759006b
--- /dev/null
+++ b/systems/doc/pdftex/tests/10-moddate/test-moddate.tex
@@ -0,0 +1,8 @@
+% $Id: test-moddate.tex 808 2018-11-13 18:39:00Z karl $
+% Public domain.
+
+\catcode`\{=1 \catcode`\}=2
+
+% Check that \pdffilemoddate returns UTC with envvars set; see Makefile.
+\message{\pdffilemoddate{\jobname.tex}}
+\end
diff --git a/systems/doc/pdftex/tests/11-omitcharset/Makefile b/systems/doc/pdftex/tests/11-omitcharset/Makefile
new file mode 100644
index 0000000000..a8add64902
--- /dev/null
+++ b/systems/doc/pdftex/tests/11-omitcharset/Makefile
@@ -0,0 +1,18 @@
+# $Id: Makefile 813 2019-01-28 00:04:18Z karl $
+# Public domain.
+
+include ../Common.mak
+
+default: test-omitcharset
+
+test-omitcharset:
+ # by default, CharSet is included.
+ $(prog) test-omitcharset.tex
+ grep "/CharSet" test-omitcharset.pdf >/dev/null
+ #
+ # force CharSet to be omitted.
+ $(prog) '\pdfomitcharset=1 \input test-omitcharset.tex'
+ ! grep "/CharSet" test-omitcharset.pdf >/dev/null
+
+clean:
+ $(clean)
diff --git a/systems/doc/pdftex/tests/11-omitcharset/test-omitcharset.tex b/systems/doc/pdftex/tests/11-omitcharset/test-omitcharset.tex
new file mode 100644
index 0000000000..b1b0a58fd0
--- /dev/null
+++ b/systems/doc/pdftex/tests/11-omitcharset/test-omitcharset.tex
@@ -0,0 +1,10 @@
+% $Id: test-omitcharset.tex 813 2019-01-28 00:04:18Z karl $
+% Public domain.
+\input plain.tex
+\input pdftexconfig.tex
+\input pdftexmagfix.tex
+\pdfcompresslevel=0 % get greppable output
+\pdfobjcompresslevel=0
+
+abc
+\bye
diff --git a/systems/doc/pdftex/tests/12-pdf2/Makefile b/systems/doc/pdftex/tests/12-pdf2/Makefile
new file mode 100644
index 0000000000..46525f91ec
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/Makefile
@@ -0,0 +1,49 @@
+# $Id: Makefile 817 2019-11-27 22:44:59Z karl $
+# Public domain.
+# Test \pdfmajorversion and image inclusion.
+
+include ../Common.mak
+
+default: test-compress test-badver test-pdfmajor test-incl
+
+test-compress: test-compress2.tex
+ $(prog) $<
+ ! grep "warning.*Object streams" test-compress2.log >/dev/null
+
+test-badver: test-pdfmajor.tex
+ ! $(prog) '\pdfmajorversion=0 \input $<'
+ ! $(prog) '\pdfminorversion=-1 \input $<\end'
+
+test-pdfmajor: test-pdfmajor.tex
+ $(prog) $<
+ # by default, first line should start with %PDF-1.
+ sed 1q test-pdfmajor.pdf | grep "%PDF-1" >/dev/null
+ #
+ # go to PDF 2.
+ $(prog) '\pdfmajorversion=2 \input $<'
+ sed 1q test-pdfmajor.pdf | grep "%PDF-2" >/dev/null
+
+test-incl: test-incl22 test-incl21 test-incl12
+#
+test-incl22: test-doc2incl2.tex incl2.pdf
+ $(prog) $< # no pdftex warning
+ ! grep "at most version <" test-doc2incl2.log >/dev/null
+
+test-incl21: test-doc2incl1.tex incl1.pdf
+ $(prog) $< # no pdftex warning
+ ! grep "at most version <" test-doc2incl1.log >/dev/null
+
+test-incl12: test-doc1incl2.tex incl2.pdf
+ $(prog) $< # pdftex warning should be in the log
+ grep "at most version <" test-doc1incl2.log >/dev/null
+ #
+ # Now let's force omission of the warning.
+ $(prog) '\pdfinclusionerrorlevel=-1 \input $<'
+ ! grep "at most version <" test-doc1incl2.log >/dev/null
+
+incl2.pdf: incl2.tex
+ $(prog) incl2.tex
+incl1.pdf: incl1.tex
+ $(prog) incl1.tex
+clean:
+ $(clean)
diff --git a/systems/doc/pdftex/tests/12-pdf2/incl1.tex b/systems/doc/pdftex/tests/12-pdf2/incl1.tex
new file mode 100644
index 0000000000..b3adc3e5da
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/incl1.tex
@@ -0,0 +1,7 @@
+% $Id: incl1.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% Trivial PDF-1 file, with default pdf version.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+\hrule width1pt height1pt depth0pt
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/incl2.tex b/systems/doc/pdftex/tests/12-pdf2/incl2.tex
new file mode 100644
index 0000000000..5937a218e2
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/incl2.tex
@@ -0,0 +1,13 @@
+% $Id: incl2.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% Trivial PDF-2 file.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+
+% let's make a 2.0 document, since that is what is needed in practice.
+% The default would be 2.4, since \pdfminorversion is 4 (from 1.4).
+\pdfmajorversion=2 \pdfminorversion=0
+
+% typeset something.
+\hrule width1pt height1pt depth0pt
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/test-compress2.tex b/systems/doc/pdftex/tests/12-pdf2/test-compress2.tex
new file mode 100644
index 0000000000..00c528caed
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/test-compress2.tex
@@ -0,0 +1,12 @@
+% $Id: test-compress2.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% Check that PDF 2.0 allows object compression.
+%
+% We should also check \pdfimagehicolor, but since its setting and
+% resetting depending on version is silent, too painful.
+%
+\pdfoutput=1
+\pdfmajorversion=2 \pdfminorversion=0
+\pdfobjcompresslevel=2
+\hrule width1pt height1pt depth0pt
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/test-doc1incl2.tex b/systems/doc/pdftex/tests/12-pdf2/test-doc1incl2.tex
new file mode 100644
index 0000000000..4fd77c5c97
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/test-doc1incl2.tex
@@ -0,0 +1,9 @@
+% $Id: test-doc1incl2.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% PDF1 document, include PDF2 image.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+\catcode`\{=1 \catcode`\}=2
+\pdfximage{incl2.pdf}
+\hbox{\pdfrefximage\pdflastximage}
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/test-doc2incl1.tex b/systems/doc/pdftex/tests/12-pdf2/test-doc2incl1.tex
new file mode 100644
index 0000000000..c674ca3733
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/test-doc2incl1.tex
@@ -0,0 +1,10 @@
+% $Id: test-doc2incl1.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% PDF2 document, include PDF1 image.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+\pdfmajorversion=2 \pdfminorversion=0
+\catcode`\{=1 \catcode`\}=2
+\pdfximage{incl1.pdf}
+\hbox{\pdfrefximage\pdflastximage}
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/test-doc2incl2.tex b/systems/doc/pdftex/tests/12-pdf2/test-doc2incl2.tex
new file mode 100644
index 0000000000..ca2bb58b29
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/test-doc2incl2.tex
@@ -0,0 +1,10 @@
+% $Id: test-doc2incl2.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% PDF2 document, include PDF2 image.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+\pdfmajorversion=2 \pdfminorversion=0
+\catcode`\{=1 \catcode`\}=2
+\pdfximage{incl2.pdf}
+\hbox{\pdfrefximage\pdflastximage}
+\end
diff --git a/systems/doc/pdftex/tests/12-pdf2/test-pdfmajor.tex b/systems/doc/pdftex/tests/12-pdf2/test-pdfmajor.tex
new file mode 100644
index 0000000000..797a0e00c7
--- /dev/null
+++ b/systems/doc/pdftex/tests/12-pdf2/test-pdfmajor.tex
@@ -0,0 +1,7 @@
+% $Id: test-pdfmajor.tex 817 2019-11-27 22:44:59Z karl $
+% Public domain.
+% Leave \pdfmajorversion unset, so it can be set on the command line.
+\pdfcompresslevel=0 \pdfobjcompresslevel=0 % get greppable output
+\pdfoutput=1
+\hrule width1pt height1pt depth0pt
+\end