summaryrefslogtreecommitdiff
path: root/systems/doc/pdftex/manual/pdftex-syntax.txt
diff options
context:
space:
mode:
Diffstat (limited to 'systems/doc/pdftex/manual/pdftex-syntax.txt')
-rw-r--r--systems/doc/pdftex/manual/pdftex-syntax.txt551
1 files changed, 549 insertions, 2 deletions
diff --git a/systems/doc/pdftex/manual/pdftex-syntax.txt b/systems/doc/pdftex/manual/pdftex-syntax.txt
index 31b92f29e9..6e8a42a305 100644
--- a/systems/doc/pdftex/manual/pdftex-syntax.txt
+++ b/systems/doc/pdftex/manual/pdftex-syntax.txt
@@ -27,10 +27,12 @@
\pdfinclusioncopyfonts (integer)
\pdfinclusionerrorlevel (integer)
\pdfinfoomitdate (integer)
+\pdfinfoomitdict (integer)
\pdfmajorversion (integer)
\pdfminorversion (integer)
\pdfobjcompresslevel (integer)
\pdfomitcharset (integer)
+\pdfomitprocset (integer)
\pdfoutput (integer)
\pdfpagebox (integer)
\pdfpkresolution (integer)
@@ -139,7 +141,7 @@
\pdfinfo <general text>
\pdfinterwordspaceoff
\pdfinterwordspaceon
-\pdfliteral [<pdfliteral spec>] <general text> (h, v, m)
+\pdfliteral [shipout] [direct | page] <general text> (h, v, m)
\pdfmapfile <map spec>
\pdfmapline <map spec>
\pdfnames <general text>
@@ -159,6 +161,7 @@
\pdfsavepos (h, v, m)
\pdfsetmatrix
\pdfsetrandomseed <number>
+\pdfspacefont <general text>
\pdfstartlink [<rule spec>] [<attr spec>] <action spec> (h, m)
\pdfthread [<rule spec>] [<attr spec>] <id spec> (h, v, m)
\pdftrailer <general text>
@@ -170,6 +173,7 @@
\special {pdf: <text> }
\special {pdf:direct: <text> }
\special {pdf:page: <text> }
+\special [shipout] {<general text> }
\vadjust [<pre spec>] <filler> { <vertical mode material> } (h, m)
%% Syntax rules:
@@ -225,7 +229,6 @@
<shrink> --> <number>
<step> --> <number>
<pre spec> --> pre
-<pdfliteral spec> --> direct | page
<pdfspecial spec> --> { [<pdfspecial id> [<pdfspecial modifier>]] <balanced text> }
<pdfspecial id> --> pdf: | PDF:
<pdfspecial modifier> --> direct:
@@ -235,3 +238,547 @@
| [<file spec>] [<goto-action struct spec>] [<page spec>] <general text>
| <file spec> [<goto-action struct spec>] <nameid> <newwindow spec>
| <file spec> [<goto-action struct spec>] [<page spec>] <general text> <newwindow spec>
+<text> }} is equivalent to \Syntax{\pdfliteral
+shipout { <text> }}.
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Strings}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfescapestring <general text>
+ (expandable)}}
+\bookmark{\pdfescapestring}
+================= ERROR
+Starting with version 1.30.0, \PDFTEX\ provides a mechanism for converting
+a general text into \PDF\ string. Many characters that may be needed inside
+such a text (especially parenthesis), have a special meaning inside a \PDF\
+string object and thus, can't be used literally. The primitive replaces each
+special \PDF\ character by its literal representation by inserting a backslash
+before that character. Some characters (\eg\ space) are also converted into
+3-digit octal number. In example, \type{\pdfescapestring{Text (1)}} will be
+expanded to \type{Text\040\(1\)}. This ensures a literal interpretation of the
+text by the \PDF\ viewer.
+\introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfescapename <general text>
+ (expandable)}}
+\bookmark{\pdfescapename}
+================= ERROR
+In analogy to \type{\pdfescapestring}, \type{\pdfescapename} replaces each
+special \PDF\ character inside the general text by its hexadecimal
+representation preceded by \type{#} character. This ensures the proper
+interpretation of the text if used as a \PDF\ name object. In example,
+\type{Text (1)} will be replaced by \type{Text#20#281#29}.
+\introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfescapehex <general text>
+ (expandable)}}
+\bookmark{\pdfescapehex}
+================= ERROR
+This command converts each character of <general text> into its
+hexadecimal representation. Each character of the argument becomes a pair of
+hexadecimal digits. \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfunescapehex <general text>
+ (expandable)}}
+\bookmark{\pdfunescapehex}
+================= ERROR
+This command treats each character pair of <general text> as
+a hexadecimal number and returns an \ASCII\ character of this code.
+\introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfstrcmp <general text>
+ <general text> (expandable)}}
+\bookmark{\pdfstrcmp}
+================= ERROR
+This command compares two strings and expands to \type{0} if the strings
+are equal, to \type{-1} if the first string ranks before the second, and
+to \type{1} otherwise. \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfmatch [icase]
+ [subcount <integer>] <general text>
+ <general text> (expandable)}}
+\bookmark{\pdfmatch}
+================= ERROR
+This command implements pattern matching (using the syntax of \POSIX\
+extended regular expressions). The first <general text> is a
+pattern and the second is a string. The command expands to \type{-1} if
+the pattern is invalid, to \type{0} if no match is found, and to
+\type{1} if a match is found. With the \type{icase} option, the matching
+is case-insensitive. The \type{subcount} option sets the size of the
+table storing the found (sub)patterns; its default is 10.
+\introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdflastmatch <integer>
+ (expandable)}}
+\bookmark{\pdflastmatch}
+================= ERROR
+The matches found with \type{\pdfmatch} are stored in a table. This
+command returns the entry for <integer>, in the format
+<position>\type{->}<string>; <position> is
+the position of the match (starting at zero) or \type{-1} if no match
+was found, and <string> is the matched substring.
+================= ERROR
+Entry~0 contains the match as a whole; the subsequent entries contain
+submatches corresponding to the subpatterns, up to \type{subcount-1}.
+================= ERROR
+If <integer> is less than zero, an error is given.
+================= ERROR
+For instance:
+================= ERROR
+\starttyping
+\pdfmatch subcount 3 {ab(cd)*ef(gh)(ij)}{abefghij}
+\pdflastmatch0 % "0->abefghij"
+\pdflastmatch1 % "-1->"
+\pdflastmatch2 % "4->gh"
+\pdflastmatch3 % "-1->"
+\stoptyping
+================= ERROR
+Entry~1 is empty because no match was found for \type{cd}, and entry~3
+is empty because it exceeds the table's size as set by \type{subcount}.
+\introduced{1.30.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Numbers}
+================= ERROR
+\pdftexprimitive{\Syntax{\ifpdfabsnum (expandable)}}
+\bookmark{\ifpdfabsnum}
+================= ERROR
+This conditional works like the standard \type{\ifnum}, except that it
+compares absolute values of numbers. Although it seems to be a trivial
+shortcut for a couple of \type{\ifnum x<0} tests, as a primitive it is
+considerably more friendly in usage and works a bit faster.
+\introduced{1.40.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\ifpdfabsdim (expandable)}}
+\bookmark{\ifpdfabsdim}
+================= ERROR
+Analogous to \type{\ifpdfabsnum}, this conditional works like
+\type{\ifdim}, except that it compares absolute values of
+dimensions. \introduced{1.40.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfuniformdeviate <number>
+ (expandable)}}
+\bookmark{\pdfuniformdeviate}
+================= ERROR
+Generate a uniformly-distributed random integer value between 0
+(inclusive) and <number> (exclusive). This primitive expands
+to a list of tokens. \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfnormaldeviate (expandable)}}
+\bookmark{\pdfnormaldeviate}
+================= ERROR
+Generate a normally-distributed random integer with a mean of~0 and
+standard deviation 65\,536. That is, about 68\% of the time, the result
+will be between $-65536$ and $65536$ (one standard deviation away from
+the mean). About 95\% of results will be within two standard
+deviations, and 99.7\% within three. This primitive expands to a list
+of tokens. \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfrandomseed (read-only integer)}}
+\bookmark{\pdfrandomseed}
+================= ERROR
+You can use \type{\the\pdfrandomseed} to query the current seed value,
+so you can \eg\ write the value to the log file. The initial value of
+the seed is derived from the system time, and is not more than
+1\,000\,999\,999 (this ensures that the value can be used with commands
+like \type{\count}). \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfsetrandomseed <number>}}
+\bookmark{\pdfsetrandomseed}
+================= ERROR
+Set the random seed (\type{\pdfrandomseed}) to a specific value,
+allowing you to replay sequences of semi-randoms at a later moment.
+\introduced{1.30.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Timekeeping}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfelapsedtime (read-only integer)}}
+\bookmark{\pdfelapsedtime}
+================= ERROR
+Return a number that represents the time elapsed from the moment of the
+start of the run. The elapsed time is returned in `scaled seconds',
+meaning seconds divided by 65536, \eg\ \PDFTEX\ has run for
+\the\pdfelapsedtime\ `scaled seconds' when this paragraph was
+typeset. Of course, the command will never return a value greater than
+the highest number available in \TeX: if the time exceeds 32767 seconds,
+the constant value $2^{31}-1$ will be returned. \introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfresettimer}}
+\bookmark{\pdfresettimer}
+================= ERROR
+Reset the internal timer so that \type{\pdfelapsedtime}
+starts returning micro-time from~0 again. \introduced{1.30.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Files}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdffilemoddate <general text>
+ (expandable)}}
+\bookmark{\pdffilemoddate}
+================= ERROR
+Expands to the modification date of file <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}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdffilesize <general text>
+ (expandable)}}
+\bookmark{\pdffilesize}
+================= ERROR
+Expands to the size of file <general text>, \eg\ it's {\tt
+\pdffilesize {./pdftex-t.tex}} for the source of this manual.
+\introduced{1.30.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfmdfivesum
+ [file]
+ <general text> (expandable)}}
+\bookmark{\pdfmdfivesum\ file}
+================= ERROR
+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}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdffiledump
+ [offset <integer>]
+ [length <integer>]
+ <general text> (expandable)}}
+\bookmark{\pdffiledump}
+================= ERROR
+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}
+================= ERROR
+\pdftexprimitive{\Syntax{\input <general text>
+ (expandable)}}
+\bookmark{\input}
+================= ERROR
+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} {
+\type{foo.tex} }. The usage of \type{\input} with a standard
+space/token-delimited filename is completely unchanged.
+================= ERROR
+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.
+================= ERROR
+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.
+================= ERROR
+Incidentally, this does not directly affect \LATEX's \type{\input}
+command, as that is a macro redefinition of the standard \type{\input}
+primitive.
+================= ERROR
+\introduced{1.40.21}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Color stack}
+================= ERROR
+\PDFTEX\ 1.40.0 comes with color stack support (actually any graphic state
+stack).
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfcolorstackinit [page]
+ [direct] <general text> (expandable)}}
+\bookmark{\pdfcolorstackinit}
+================= ERROR
+The primitive initializes a new graphic stack and returns its number. Optional
+page keyword instructs \PDFTEX\ to restore the graphic at the
+beginning of every new page. Also optional direct has the same effect
+as for \pdfliteral primitive. \introduced{1.40.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfcolorstack <stack number>
+ <stack action> <general text>}}
+\bookmark{\pdfcolorstack}
+================= ERROR
+The command operates on the stack of a given number. If \Something{stack
+action} is push keyword, the new value provided as
+<general text> is inserted into the top of the graphic stack
+and becomes the current stack value. If followed by pop, the
+top value is removed from the stack and the new top value becomes the
+current. set keyword replaces the current value with
+<general text> without changing the stack size.
+current keyword instructs just to use the current stack value
+without modifying the stack at all. \introduced{1.40.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Transformations}
+================= ERROR
+Since the content of \pdfliteral is not interpreted anyhow, any
+transformation inserted directly into the content stream, as well as saving
+and restoring the current transformation matrix, remains unnoticed by
+\PDFTEX\ positioning mechanism. As a consequence, links and other annotations
+(that are formed in \PDF\ as different layer then the page content) are not
+affected by such user-defined transformations. \PDFTEX\ 1.40.0 solves this
+problem with three new primitives.
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfsetmatrix}}
+\bookmark{\pdfsetmatrix}
+================= ERROR
+Afine transformations are normally expressed with six numbers. First
+four (no unit) values defining scaling, rotating and skewing, plus two
+extra dimensions for shifting. Since the translation is handled by \TeX\
+itself, \pdfsetmatrix primitive expects as an argument a string
+containing just the first four numbers of the transformation separated
+by a space and assumes two position coordinates to be~0. In example,
+\type{\pdfsetmatrix{0.87 -0.5 0.5 0.87}} rotates the current space by 30
+degrees, inserting \type{0.87 -0.5 0.5 0.87 0 0 cm} into the content
+stream. \introduced{1.40.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfsave}}
+\bookmark{\pdfsave}
+================= ERROR
+The command saves the current transformation by inserting \type{q}
+operator into the content stream. \introduced{1.40.0}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfrestore}}
+\bookmark{\pdfrestore}
+================= ERROR
+The command restores previously saved transformation by inserting \type{Q}
+operator into the content stream. One should keep in mind that \pdfsave
+and \pdfrestore pairs should always be properly nested and should start
+and end at the same group level. \introduced{1.40.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Macro programming}
+================= ERROR
+Expansion-related.
+================= ERROR
+\pdftexprimitive{\Syntax{\expanded <tokens>
+ (expandable)}}
+\bookmark{\expanded}
+================= ERROR
+Expands <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}
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\ifincsname (expandable)}}
+\bookmark{\ifincsname}
+================= ERROR
+This conditional is true if evaluated inside \type{\csname ... \endcsname},
+and false otherwise.
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\ifpdfprimitive <control sequence>
+ (expandable)}}
+\bookmark{\ifpdfprimitive}
+================= ERROR
+This condition checks if the following control sequence has its
+primitive meaning. If it has, \type{\ifpdfprimitive} returns true. In
+any other case (redefined, made \type{\undefined}, has never been
+primitive) false is returned. \introduced{1.40.0}
+================= ERROR
+================= ERROR
+flapping\pdftexprimitive{\Syntax{\partokencontext <number>}}
+\bookmark{\partokencontext}
+================= ERROR
+The {\em par-token} (i.e., the token with the name given by
+\type{\partokenname}, or \type{\par} by default; see
+\type{\partokenname}, next) is inserted into the input stream in
+different places, according to the \type{\partokencontext} value. This
+value can be:
+================= ERROR
+0: {\em par-token} is inserted at empty lines (more exactly, when a
+ token category~5 is seen in state~$N$, reading a line); before
+ \type{\end}, \type{\vskip}, \type{\hrule}, \type{\unvbox}, and
+ \type{\halign}, if \TeX{} is in horizontal mode when those commands
+ are seen; and in various error recovery situations. These are the
+ standard cases, and this is the default value.
+================= ERROR
+1: {\em par-token} is inserted as above, and also at the end of
+ \type{\vbox}, \type{\vtop}, and \type{\vcenter}, if \TeX{} is in
+ horizontal mode at the time.
+================= ERROR
+2: {\em par-token} is inserted as above, and also at the end of
+ \type{\insert}, \type{\vadjust}, \type{\output}, \type{\noalign}, and
+ items of \type{\valign}, again if \TeX{} is in horizontal mode at the
+ time.
+================= ERROR
+With the default \type{\partokencontext=0}, \TEX\ behaves in its normal
+way: the situations in cases 1 and 2 are processed by a direct call of
+{\em end-paragraph} routine, with no emitted {\em par-token}.
+================= ERROR
+If \type{\partokencontext=1} then \TeX\ inserts the {\em par-token} in
+additional cases: when vertical boxes are completed but horizontal mode
+is not finished. Since vboxes are not uncommonly inserted directly by
+users, with horizontal mode material, this allows macro programmers to
+control all such boxes being finished by a {\em par-token}. An example:
+================= ERROR
+\starttyping
+\partokenname\_mypar
+\partokencontext=1
+\def\_mypar{Hi there!\endgraf}
+\vbox{Vbox text.}
+\stoptyping
+================= ERROR
+This will output ``\type{Hi there!''}\ after ``\type{Vbox text.}''.
+================= ERROR
+Finally, with \type{\partokencontext=2}, all cases where classical \TeX\
+uses the direct {\em end-paragraph} routine are changed to emit the {\em
+par-token} instead. In contrast to case~1, these commands are rarely
+invoked directly by users with horizontal mode material.
+================= ERROR
+The setting of the register \type{\partokencontext} is local.
+\introduced{1.40.24}
+================= ERROR
+\pdftexprimitive{\Syntax{\partokenname <control sequence>}}
+\bookmark{\partokenname}
+================= ERROR
+\TeX{} internally inserts a control sequence, named \type{\par} by
+default, into the input stream at empty lines, the end of vboxes, and
+various other places (see \type{\partokencontext}, above). Let's call this
+control sequence the {\em par-token}.
+================= ERROR
+Executing \type{\partokenname}<control-sequence> changes the
+name of the {\em par-token} from \type{\par} to the given
+<control-sequence>. The setting performed by
+\type{\partokenname} is global.
+================= ERROR
+This makes it possible to release the name \type{\par} to the ``user's
+name space'', i.e., after \type{\partokenname}, users can define and use
+\type{\par} as they wish without changing the behavior of anything
+internal to \TeX{}. For example:
+================= ERROR
+\starttyping
+\catcode`\_=11
+\partokenname\_mypar % use \_mypar at user level
+\let\_mypar=\par % make \_mypar equivalent to built-in \par
+\def\par{some random text} % redefine \par
+Hello world.
+================= ERROR
+Goodbye.
+\end
+\stoptyping
+================= ERROR
+This will not output ``\type{some random text}'' (the definition of
+\type{\par}), due to the \type{\partokenname} setting.
+================= ERROR
+By default, the meaning of the {\em par-token} is to end a paragraph
+(also named as \type{\endgraf} in the plain \TEX\ format). It can be
+changed as usual with, for example, \type{\def}. Naturally, it is the
+control sequence name given to \type{\partokenname} that must be
+redefined. Continuing the previous example (prior to the \type{\end}):
+================= ERROR
+\starttyping
+\def\_mypar{Hi there!\endgraf}
+Paragraph one.
+================= ERROR
+Paragraph two.\let\_mypar=\endgraf
+\stoptyping
+================= ERROR
+This will output ``\type{Hi there!''}\ after ``\type{Paragraph one.}'',
+before ending the paragraph.
+================= ERROR
+Another behavior of the {\em par-token} built into \TEX\ is that macros
+not defined as \type{\long} cause the error ``runaway argument'' if the
+{\em par-token} is scanned as a parameter. After
+\type{\setpartokenname}, it will be the new control sequence name that
+triggers this error, not \type{\par}. For example (still continuing the
+same example):
+================= ERROR
+\starttyping
+\def\amac#1{}
+\amac{long test, no error: \par}
+\amac{long test, gives error: \_mypar}
+\stoptyping
+================= ERROR
+\introduced{1.40.24}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfprimitive <control sequence>}}
+\bookmark{\pdfprimitive}
+================= ERROR
+This command executes the primitive meaning of the following control
+sequence, regardless of whether the control sequence has been redefined
+or made undefined. If the primitive was expandable, \type{\pdfprimitive}
+expands also. On the other hand, if the following control sequence never
+was a primitive, nothing happens and no error is raised. (In some
+versions of \PDFTEX\ prior to 1.40.19, an error was wrongly given.)
+\introduced{1.40.0}
+================= ERROR
+%***********************************************************************
+================= ERROR
+\subsection{Typesetting}
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfinsertht <integer>
+ (expandable)}}
+\bookmark{\pdfinsertht}
+================= ERROR
+If <integer> is the number of an insertion class, this command
+returns the height of the corresponding box at the current time.
+For instance, the following returns \type{12pt} in plain \TEX:
+================= ERROR
+\starttyping
+Abc\footnote*{Whatever.}\par
+\pdfinsertht\footins
+\stoptyping
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\pdflastxpos (read-only integer)}}
+\bookmark{\pdflastxpos}
+================= ERROR
+This primitive returns an integer number representing the absolute $x$
+coordinate of the last point marked by \type{\pdfsavepos}. The unit is
+`scaled points' (sp).
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\pdflastypos (read-only integer)}}
+\bookmark{\pdflastypos}
+================= ERROR
+Completely analogous to \type{\pdflastxpos}, returning the $y$ coordinate.
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\pdfsavepos (h, v, m)}}
+\bookmark{\pdfsavepos}
+================= ERROR
+This primitive marks the current absolute ($x,y$) position on the
+media, with the reference point in the lower left corner. It is active
+only during page shipout, when the page is finally assembled. The
+position coordinates can then be retrieved by the \type{\pdflastxpos}
+and \type{\pdflastypos} primitives, and \eg\ written out to some
+auxiliary file. The coordinates can be used only after the current
+\type{\shipout} has been finalized, therefore normally two \PDFTEX\
+runs are required to utilize these primitives. Starting with
+\PDFTEX\ 1.40.0, this mechanism can be used also while running
+in \DVI\ mode.
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\quitvmode}}
+\bookmark{\quitvmode}
+================= ERROR
+The primitive instructs \PDFTEX\ to quit vertical mode and start
+typesetting a paragraph. Thus, \type{\quitvmode} has the same basic
+effect as the \type{\leavevmode} macro from \type{plain.tex}. However,
+\type{\leavevmode} expands the \type{\everypar} tokens list, which may
+or may not be desired. \type{\quitvmode} does not expand
+\type{\everypar}. \introduced{1.21a}
+================= ERROR
+================= ERROR
+\pdftexprimitive{\Syntax{\vadjust
+ [<pre spec>]
+ <filler>
+ { <vertical mode material> }
+ (h, m)