\input pitex \input navigator \setparameter page: left = 5cm top = 3cm hsize = 27pc width = "\dimexpr 10cm + 27pc\relax" baselineskip = 14pt \setparameter navigator: author = "Paul Isambert" title = "Navigator's documentation" mode = bookmarks layout = onecolumn pre = "\longcolor{.8 .2 .2}" post = \endlongcolor \def\longcolor#1#2\endlongcolor{% \color{#1}{#2}% } \setparameter font: command = \mainfont type = ttf name = lucidastd roman = "" italic = i bold = b big = 15pt \setparameter font: command = \codefont type = ttf name = lucon roman = "" features = "" \setparameter section: font = "\sc\bf" number = none color = \comcolor \setparameter describebookmark: meta = navigator left = 12em \def\beforedescribe{% \vskip-\lastskip \vskip\baselineskip \iflines1{}{\clearpage}% \noindent \bgroup\codefont \hfuzz=\maxdimen} \def\afterdescribe{\par\egroup\noindent\ignorespaces} \def\desclap#1{\llap{#1\kern.25em}} \def\comcolor{.75 0 0} \def\attrcolor{.3 .3 .3} \def\describe#1#2.{% \beforedescribe \outline[meta = describebookmark]{3}[\commandtoname#1]{\noexpand#1}% \desclap{\color{\comcolor}{\string#1}}#2% \ifemptystring{#2}{\egroup\ignorespaces}{\afterdescribe}% } \def\jumpcom#1{\jumplink{\commandtoname#1}{\com#1}\antigobblespace} \def\name{\arg{name}\antigobblespace} \def\code{\arg{code}\antigobblespace} \freedef\param#1{{\codefont#1}} \freedef\attr#1{{\codefont\color{\attrcolor}{#1}}} \freedef\value#1{{\codefont#1}} \def\describeattr#1#2(#3).{% \beforedescribe \outline[meta = describebookmark, italic]{4}{#1}% \desclap{\attr{#1}}<\valueloop{}{#2 }> (\ifemptystring{#3}{No default}{Default: #3}.)% \afterdescribe } \newfornoempty\valueloop{1}#2 {% \ifemptystring{#1} {#2\passarguments{x}} {\kern1pt\char"007C\kern1pt#2}% } \newverbatim\verbatim {\vskip\baselineskip \codefont \hfuzz=\maxdimen \parindent=0pt\relax} {\printverbatim \vskip\baselineskip\removenextindent} \newblock*\description {\it\rightskip=0pt plus 1fil\relax}{\par} \newblock*\values {\parindent=0pt \everypar{\getvalue}% \getleftskip }{\par} \def\getleftskip[#1]{\leftskip=#1\relax} \def\getvalue#1 {\llap{\value"#1"\kern.6em}} \gates def {headers}{% \setbox255=\vbox to \dimexpr\outputsize+4\baselineskip{% \box255 \vfil \hbox to \hsize{\it\normalsize\hfil \the\pageno \hfil}}% } \urlaction{pdf}{http://www.adobe.com/content/dam/Adobe/en/devnet/pdf/pdfs/PDF32000_2008.pdf} \def\tex{\TeX\antigobblespace} \def\pdftex{\scap{pdf}\tex} \def\luatex{Lua\kern-1pt\tex} \def\xetex{Xe\kern-1pt\tex} \def\navigator{\emph{Navigator}\antigobblespace} \pdfdef\navigator{Navigator} \bgroup \vbox to 4\baselineskip{% \leftskip=0pt plus 1fil \parfillskip=0pt \parindent=0pt \vfil\obeylines {\big\color{\comcolor}{\navigator}}\hfill Paul Isambert \verb"zappathustra@free.fr" 01/25/2010 } \egroup \section"Introduction" \navigator offers access to PDF features such as outlines (bookmarks), links, actions and embedded files; it differs from other existing packages on two main points: first, it doesn't depend on any format and can be used with plain \tex, La\tex, ConTeXt (with some limitations, see \jumplink{files}{here} and \jumplink{features}{here}), and anywhere else; second, it defines commands to create PDF objects, and can be used as a base to produce raw PDF code across \pdftex, \luatex and \xetex. Note that PDF is a description language, and that not all PDF viewers render it completely (not even Adobe Acrobat, actually); thus, some of the features in \navigator might seem to produce nothing when the file is read with a reader which doesn't fully support PDF. Fortunately, the most common and useful features, such as links and outlines, are generally supported. \section"Using \navigator" \navigator is loaded in the usual fashion, depending on the format: \verb"\usepackage{navigator}" in La\tex, \verb"\usemodule[navigator]" in Con\tex{}t, and \verb"\input navigator" anywhere else. \describe\finishpdffile. Some of \navigator's operations can take place only at the end of the file. These include producing the outline's hierarchy, sorting embedded files, and writing some information about the document. However, there are exceptions: first in La\tex and Con\tex{}t, this is done automatically (and for Con\tex{}t anyway file embedding document settings aren't properly supported; you can do what \navigator does with the Con\tex{}t core, though); second, even if you don't use La\tex or Con\tex t, in \xetex the outline hierarchy is built at once, so this command isn't needed unless you embed files or want to write some infos to the document's properties. Anyway the command can also be systematically issued harmlessly. \section"Anchors"[anchors] \description Anchors are positions used as the targets of links for navigation within a PDF file (they are called \emph"destinations" in PDF parlance). They are to be used in association with the \jumpcom\jumplink command or with \jumplink{outlines}{outlines}. \description/ \describe\anchor\oarg{options}\name. This defines \name as an anchor. In vertical mode, the destination is were the command is issued; in horizontal mode, it also depends on the \attr"up" and \attr"left" attributes below. In both cases, however, the value of \attr"fit" might make a difference. The options that follow are also used in the \jumpcom\outline command when it defines an implicit anchor. \describeattr{up} dimension (\com\baselineskip). In horizontal mode, anchors are placed on the baseline; it means they send below the intended line (more precisely: with the intended line's baseline at the top of the screen). This attribute makes a vertical correction, so the intended line is shown. \describeattr{left} dimension (0pt). Similar to \attr"up", but in the horizontal direction (moving leftward). \describeattr{fit} xyz fit fith fitv fitb fitbh fitbv fitr (xyz). All anchors target the page where they appear (fortunately), but when jumping to an anchor how the page is displayed depends on this parameter. The values have the following effect: \values[4em] xyz The page is displayed so that the anchor is positioned at the upper-left corner of the window. Also, if \attr"zoom" is specified, it is enforced. fit The page is displayed so that it fits entirely in the window. fith Same as \value"fit", but only horizontally. fitv Same as \value"fit", vertically. fitb The page is displayed so that its bounding box fits entirely in the window. A page's bounding box is the smallest rectancle enclosing its contents (including headers and footers or marginal material, if any). fitbh Same as \value"fith" for the bounding box. fitbv Same as \value"fitv" for the bounding box. fitr Displays the page so that the box where the anchor appears fits entirely in the window. This is disabled with \xetex, and subtler things might be possible in the future. \values/ \describeattr{zoom} number (). Sets the viewer's zoom when jumping to a destination. The number provided should be 1000 times the intended zoom (like magnification in \tex); hence \verb"zoom = 1000" is the normal magnification, i.e. a 100\%~zoom. The use of this attribute, as well as any value but \value"xyz" for the previous one, might be extremely annoying for the reader, because s/he might need to reset his or her zoom after each jump. (Most viewers implement \value"xyz" so that it performs its operation as best as possible without zooming; hence, unless the reader already uses a powerful zoom, the way the page is displayed is predictable.) \describe\anchorname\name. To avoid possible conflicts, \navigator tweaks the names you give it for anchors; if you ever need it, this command returns the real PDF names of the anchor you call \name. \section"Outlines (aka bookmarks)"[outlines] \description Don't hold it against me if I use the words \emph"outline" and \emph"bookmarks" alternatively. They are the same things, even though the command is \com\outline. There is no need for a second run to get bookmarks right. \description/ \describe\outline\oarg{options}\arg{level}\oarg{name}\arg{title}. This creates a bookmark with title \arg{title}. In \luatex, \arg{title} is converted to UTF\nobreak-16 (in octal form, so \luatex doesn't complain), so you can use any character of Unicode (although the font used by your reader is very unlikely to display anything besides the basic plane). \xetex seems to spot the right encoding sometimes. As for \pdftex, no conversion is performed, so Latin-1 at best may succeed (the string is escaped nonetheless for characters with special meanings in PDF). The \arg{level} defines how the bookmark fits in the hierarchy. It is a number, and the smaller it is, the higher the bookmark. A bookmark is a child to the nearest preceding bookmark with a smaller \arg{level}. The following example illustrates that (hopefully): \verbatim \outline{1}{A chapter} \outline{2}{A section} \outline{3}{A subsection} \outline{2}{Another section} \verbatim/ Now, there is a difference between \pdftex and \luatex on the one hand and \xetex on the other. First, when using \xetex, \arg{level} should be an integer; no such restriction applies with the other engines. That means that if you suddenly want to insert a bookmark halfway between a chapter and a section in the hierarchy, you don't need to renumber everything: just assign a decimal number to it, for instance \verb"1.5" in the previous example. That is impossible with \xetex (which will ignore the decimal part, so it is also harmless). Second, with the latter engine, it is also impossible to skip levels, i.e. the following example isn't allowed: \verbatim \outline{1}{A chapter} \outline{3}{A subsection} \verbatim/ In that case, \xetex (i.e. \verb"xdvipdfmx") will insert an intermediate bookmark, called \verb"", in red and italics (so you definitely can't miss it). With \pdftex and \luatex, since levels are a continuum, skipping a level doesn't make sense and the previous example is perfectly legitimate (however, if a section follows the subsection, its bookmark will appear at the same level as the subsection's). Finally, with all engines, \arg{level} can be zero or negative. Among the \arg{options}, those pertaining to a bookmark's appearance are: \describeattr{open} true false (false). If set to \verb"true", the bookmark diplays its immediate children. (You don't need to type `\verb"open = true"'; as with all other boolean attributes, `\verb"open"' suffices.) \describeattr{bold} true false (false). If \verb"true", the bookmark is displayed in a bold font. \describeattr{italic} true false (false). If \verb"true", the bookmark is displayed in an italic font (this is not incompatible with the previous attribute). \describeattr{color} {red green blue} (0 0 0, i.e. black). A triplet of numbers between between \verb"0" and \verb"1" setting the bookmark's color. \describeattr{outlinecolor} {red green blue} (0 0 0, i.e. black). Alias for \attr"color". (This name should be used when setting attributes globally in the \param"navigator" parameter or elsewhere.) \vskip\baselineskip By default, a bookmark creates an anchor, and clicking it jumps to the position thus defined. If the optional \arg{name} is present, then you can refer to that anchor and reuse it, as if you'd issued the \jumpcom\anchor command. Such an anchor, named or not, can take the same options as seen above for the \jumpcom\anchor command, for instance: \verbatim \outline[zoom = fith]{1}{A chapter} ... \outline[left = 2em]{2}[mysection]{A section} \verbatim/ Two other options can modify a bookmark's behavior: \describeattr{anchor} name (). As just said, a bookmark creates an anchor. However, this is not true if this attribute is set; in this case, when clicked the bookmark sends to the anchor called \name, which need not be already defined, of course. The attributes pertaining to anchor settings, if any, are ignored, as is the optional name in the \com\outline command. In other words, the following two bookmarks are equivalent: \verbatim \outline[anchor = mydest, fit = fitv]{1}[aname]{A title} \outline[anchor = mydest]{1}{A title} \verbatim/ \describeattr{action} name (). Like \attr"anchor", except the bookmark executes action \name (and doesn't send you anywhere). If both \attr"anchor" and \attr"action" are given, the former wins. See the section on \jumplink{actions}{actions}. \describe\pdfdef\string{replacement text\string}. Most of the commands used in \tex will yield nothing good in a bookmark's title. However, you may want to reuse the same text to set that title and, say, a section heading. When redefined with \com\pdfdef, \arg{command} will expand to \arg{replacement text}, but only in a bookmark's title. For instance, after: \verbatim \pdfdef\TeX{TeX} \pdfdef\emph#1{#1} \pdfdef\whatever{\noexpand\whatever} \verbatim/ \com\TeX will produce ``\verb"TeX"'' in a bookmark, \com\emph will simply return its argument, and \com\whatever will represent itself. Note that unexpandable commands and \com\protected commands don't require any special treatment to represent themselves. \section"Links"[links] \description Links (and annotations more generally) are clickable zones of a PDF document, which trigger actions. \navigator offers a few types of links and actions, and also allows you to create your own with raw \jumplink{objects}{PDF objects}. The \arg{options} that appear in the commands below are described at \jumplink{options}{the end of this section}. \description/ \describe\jumplink\oarg{options}\name\arg{text}. This prints \arg{text} and defines it as a clickable zone that sends to the anchor called \name (defined either with \jumpcom\anchor or \jumpcom\outline, although the anchor need not be already defined for the link to work, obviously). For instance, clicking \com\anchor or \com\outline in the previous parenthesis sends you to the page where those commands are defined. \describe\urllink\oarg{options}\arg{url}\arg{text}. This is the same thing as \com\jumplink, except the link sends to an internet resource (any URI works, actually). For instance: \verbatim \urllink[border = 1, color = 1 0 0, dash = 3 2] {http://www.tug.org}{Go to TUG!} \verbatim/ produces: \doverbatim\ If the \jumplink{uri}{uri} or \jumplink{base}{base} attributes in the \param"navigator" parameter are set, then \arg{url} can be relative. \describe\javascriptlink\oarg{options}\arg{JavaScript code}\arg{text}. A link which executes some JavaScript code (if the viewer can do that). For instance: \verbatim \javascriptlink[highlight = push] {app.alert("Hello!")}{Say hello!} \verbatim/ produces: \doverbatim \describe\actionlink\oarg{options}\name\arg{text}. This executes the action called \name. A named action is an action that is defined elsewhere in the document (not necessarily before) and given a name to refer to it. The \jumplink{actions}{next section} introduces two simple commands to create URL and JavaScript actions; however, an action is just a PDF object; hence, \name can be any valid PDF object (of the right type, obviously), and you can define such objects with the commands introduced in \jumplink{objects}{the last section} of this document. \navigator already defines four actions, namely: \actionlink{firstpage}{firstpage}, \actionlink{lastpage}{lastpage}, \actionlink{prevpage}{prevpage} and \actionlink{nextpage}{nextpage}. The meaning should be obvious, but if you have any doubt, just click! \describe\rawactionlink\oarg{options}\arg{PDF code}\arg{text}. This is the same as \com\actionlink, except the action is defined not in an external action but in \arg{PDF code}, which should be an action dictionary (without the enclosing \verb"<<" and \verb">>", exactly as with \jumpcom\pdfdictobject). \vskip\baselineskip \noindent\anchor{options}% In the commands above, the \arg{options} are used to set the appearance of the links. Here are the ones you can set: \describeattr{border} number (0). The width (in PostScript points) of the border drawn around the link. Default \verb"0" means no border. (In \pdftex and \luatex, you can use the \com\pdflinkmargin primitive to set the distance between the link's border and its content, even if the border isn't drawn -- it makes the clickable zone larger.) \describeattr{color} {red green blue} (0 0 0, i.e. black). The color of the link's border, if any. \describeattr{linkcolor} {red green blue} (0 0 0, i.e. black). Alias for \attr"color". (This name should be used when setting attributes globally in the \param"navigator" parameter or elsewhere.) \describeattr{dash} numbers (). The dash pattern of the link's border, can you believe it? The \arg{numbers} should be \verb"a1 b1 a2 b2..." where \verb"a"'s specify visible parts of the border in PostScript points and \verb"b"'s specify hidden parts. Then the pattern repeats itself. More or less. (Set \attr"dash" to \verb"1"\nobreak\ \verb"0" if you want to override a default dash pattern.) \describeattr{highlight} none invert outline push (invert). This defines how the link flashes when clicked: \value"none" does nothing, \value"invert" inverts its colors, \value"outline" inverts its border's colors if any, and \value"push" gives the amazing illusion that the link is pushed below the surface of the page (says the author of the \ital{PDF reference}, except s/he didn't mention any amazing illusion). \describeattr{pre} code (). \tex code to be appended before \arg{text}. \describeattr{post} code (). \tex code to be appended after \arg{text}. This and \attr"pre" allows you to achieve coherent formatting of links. For instance: \verbatim \def\weblink{\urllink[pre = \bgroup\bf, post = \egroup]} Go to \weblink{http://www.tug.org}{TUG} and upload to \weblink{http://ctan.org}{CTAN}. \verbatim/ produces:\doverbatim \describeattr{raw} {PDF code} (). Raw PDF code to be inserted in the link's dictionary. \describe\annotation\oarg{options}\arg{PDF code}\arg{text}. This creates an annotation tied to \arg{text}. \arg{PDF code} goes into the annotation's dictionary; note that the annotation thus created doesn't even have a \verb"Subtype" entry (a link, as described in this section, is one of the many subtypes of annotation). Depending on the \arg{options}, the \verb"Border" entry, the \verb"C" entry (for \attr"color") and the \verb"H" (for \attr"highlight") might be specified. \vskip\baselineskip \noindent There is one more type of action link, \jumpcom\openfilelink; it takes the same options as the commands described here, but it is introduced in the section on \jumplink{files}{embedded files}, because it is related to them. \section"Actions"[actions] \description The commands in this section allow you to create actions and refer to it somewhere else in your document. That is a convenient approach for actions that are used repeatedly. Note that the PDF file itself is also improved, because in it too actions thus defined appear only once. You might think that not much types of actions can be designed: only internet addresses and JavaScript. But those are only predefined patterns to be used even when one doesn't know anything about PDF. Other types of actions require that you write real PDF code, more precisely so-called action dictionaries; these are but dictionary objects, and \navigator allows you to create them with \jumpcom\pdfdictobject. Then the name you give to that object is a valid action name and can be used with \jumpcom\actionlink. In other words, there is no \com\whateveraction command, because that's what \jumpcom\pdfdictobject does. \description/ \describe\urlaction\name\arg{url}. Defines \name as an action which sends to the address \arg{url} on the internet. (Actually, any URI can be used, not only URLs.) As with \jumpcom\urllink, if the \jumplink{uri}{uri} or \jumplink{base}{base} attributes in the \param"navigator" parameter are set, then \arg{url} can be relative. \describe\javascriptaction\name\arg{JavaScript code}. Defines \name as an action which executes \arg{JavaScript code} (if the viewer can do that). Thus the following are equivalent to the previous two examples with \com\urllink and \com\javascriptlink: \verbatim \urlaction {tug}{http://www.tug.org} \actionlink{tug}{Go to TUG!} \javascriptaction{hello}{app.alert("Hello!")} \actionlink{hello}{Say hello!} \verbatim/ \section"Embedded files"[files] \description \navigator provides a simple command to embed files in a PDF document. Embedded file can also be opened with an action link, but only if they are PDF files. However, no proper support is offered for file embedding in Con\tex{}t. \description/ \describe\embeddedfile\oarg{description}\arg{object name}\oarg{alternate filename}\arg{file}. This embeds \arg{file} in the current document; the name displayed by the viewer will be \arg{file} or \arg{alternate filename}, if used (do not forget the file's extension in that alternate name). The use of an alternate name is useful if \arg{file} contains a path. The viewer might also display an optional \arg{description}. (The command name \com\embeddedfile, cumbersome when compared to the more obvious \com\embedfile, is meant to avoid a possible conflict with Heiko Oberdiek's \verb"embedfile".) The command creates a \jumplink{objects}{PDF object} called \arg{object name}; its \verb"Type" is \verb"Filespec", and it points to another object of type \verb"EmbeddedFile" (containing the actual file). That object isn't used anywhere in \navigator for the moment, but it is available in case you need it, for instance when writing raw PDF. \describe\openfilelink\oarg{options}\arg{file}\oarg{page}\arg{text}. This is an action link, so see the description of the \jumplink{options}{\arg{options}} above. When clicked, it opens \arg{file} on page \arg{page} (first page if \arg{page} is omitted). That file should be embedded elsewhere in the document with \jumpcom\embeddedfile, and it should be a PDF file; \arg{file} should match the \arg{file} argument in \com\embeddedfile, or \arg{alternate filename} if given. \section{Settings}[settings] \description Many of the commands introduced in the previous sections can take options. If an option is not given, its default value is used instead; you may want to set those default values, and to do so you have to change the attributes of the \param"navigator" parameter: \description/ \verbatim \setparameter navigator: = = ... \par \verbatim/ This is the \urllink{http://tug.ctan.org/cgi-bin/ctanPackageInformation.py?id=yax}{YaX} syntax , it is a little bit special, and if you don't want to learn it the traditional comma-separated list is also possible: \verbatim \setparameterlist{navigator} { = , = ...} \verbatim/ (If a \arg{value} is \verb"true" it can be omitted.) Learning YaX might still be a good idea, though, since then you can use the \verb"meta" attribute, which wasn't shown when the options for the commands above were explained, because it can be used anywhere. For instance: \verbatim \setparameterlist{mylink1} {meta = navigator, color = 1 0 0} \setparameterlist{mylink2} {meta = navigator, color = 0 1 0} ... \actionlink[meta = mylink1]{...}{...} \actionlink[meta = mylink2]{...}{...} \verbatim/ There you define two types of links, and you can change their settings at once by changing the parameters \param"mylink1" and \param"mylink2" instead of the links themselves (which might be numerous). Note how \param"mylink1" and \param"mylink2" define \param"navigator" as the meta-parameter. That is not necessary, but the action links wouldn't inherit your global default settings otherwise (unless the meta-parameter of \param"mylink1" and \param"mylink2" itself had \param"navigator" as its meta-parameter, or a meta-parameter which... got it?). The \verb"navigator" parameter itself can have a meta-attribute too. \vskip\baselineskip \noindent At last, here are the attributes that can be set (some make sense in individual commands only, and not in the \param"navigator" parameter, but you can still set them): \vskip\baselineskip \noindent \attr"up", \attr"left", \attr"fit", \attr"zoom": see the \jumplink{anchors}{section on anchors} (note that they also affect \jumplink{outlines}{outlines} when outlines create implicit anchors). \vskip\baselineskip \noindent \attr"outlinecolor", \attr"open", \attr"bold", \attr"italic", \attr"action", \attr"anchor": those are options for \jumplink{outlines}{outlines}. (In a given outline, one can use the \attr"color" attribute instead of \attr"outlinecolor"; in the \param"navigator" parameter, however, one should use only the latter.) \vskip\baselineskip \noindent \attr"border", \attr"linkcolor", \attr"highlight", \attr"dash", \attr"raw", \attr"pre", \attr"post": those affect \jumplink{links}{action links}. (The remark on \attr"outlinecolor" above holds for \attr"linkcolor" here.) \vskip\baselineskip \noindent\anchor{features}% And here are attributes that aren't associated with commands, but instead specify options and pieces of information for the entire document. Note that they do not work in Con\tex{}t, but that can be done easily without \navigator. \describeattr{author} string (). The author of the document. This shows up in the document's properties. The string is dealt with as described for an \jumpcom\outline's title. \describeattr{title} string (). Same as \attr"author", with the document's title. \describeattr{keywords} string (). Same thing again, with keywords. \describeattr{subject} string (). One more time for the world, this time with the subject addressed by your document. \describeattr{date} date (current date). The creation date; the date should be formatted as explained in the \actionlink{pdf}{\ital"PDF Reference"}, so have fun. Anyway that is set automatically by \tex (and can't be set with \xetex). \describeattr{moddate} date (current date). Same as \attr"date", for the modification date. \describeattr{creator} string (TeX). The software that produced the document's original format. \describeattr{producer} string (\pdftex, \luatex or \xetex). The software that turned the original document into PDF (cannot be set with \xetex). \describeattr{rawinfo} {PDF code} (). Entries you want to add by yourself to the document's \verb"Info" dictionary. \describeattr{layout} onepage onecolumn twopage twocolumn twopage* twocolumn* (). This sets how the document should be displayed when opened: \values[6em] onepage The window displays only one page, with no continuous transition to the next one. onecolumn The window displays only one page, with a continuous transition to the next. twopage The window displays two pages, odd-numbered pages on the right, without a continuous transition. twocolumn Same as \value"twopage" with a continuous transition. twopage* Same as \value"twopage" with odd-numbered pages on the left. twocolumn* Same as \value"twopage*" with a continuous transition. \values/ \describeattr{mode} outlines bookmarks thumbnails thumbs attachments files oc (). This sets what panel the reader should display when the document is opened: \values[6em] outlines The reader shows the document's outlines. bookmarks Same as \value"outlines". thumbnails Thumbnail images are shown. thumbs Same as \value"thumbnails". attachments Show the attached files. files Same as \value"attachments". oc The Optional Content Group panel is displayed; quite useless if you don't have any OCG's (\navigator might offer support one day). \values/ \describeattr{uri} address (). \anchor[up = 2\baselineskip]{uri}% The base address that will be used with relative references. See \jumpcom\urllink and \jumpcom\urlaction. \describeattr{base} address (). \anchor[up = 2\baselineskip]{base}% Alias for \attr"uri". \describeattr{openaction} name (). The \name of the \jumplink{actions}{action} to be performed when the document is opened. \describeattr{rawcatalog} {PDF code} (). Raw PDF code to be added to the document's catalog. \section"PDF objects"[objects] \description Here are commands that let you create and use PDF objects (and which \navigator actually uses internally). Of course they are useless unless you know how PDF works (if you do, then you might note that what I call here \emph"objects" actually are \emph"indirect objects"). Named actions used with \jumpcom\actionlink being objects, they behave as any other object with the commands below; for one thing, they respond positively to \jumpcom\ifpdfobject, and you can't create an object with the same name. \description/ \describe\pdfobject\name\code. Creates a raw PDF object with name \name. There shouldn't already exist an object with the same name (unless it is just reserved). \describe\pdfdictobject\name\code. Same as \com\pdfobject, except a dictionary object is created. This command is totally equivalent to the previous one with \code enclosed between \verb"<<" and \verb">>". With this you can write custom named actions, i.e. \name can be used with \jumpcom\actionlink. \describe\pdfstreamobject\oarg{raw code}\name\arg{stream}. Creates a PDF stream object, with optional \arg{raw code} added to the dictionary. \describe\pdffileobject\oarg{raw code}\name\arg{file}. Same as \com\pdfstreamobject, except the stream is the contents of \arg{file}. \describe\pdfreserveobject\name. Reserves an object with name \name. That is totally useless (but harmless too) with \xetex. In \pdftex and \luatex, it is needed to refer to an object that isn't created yet. \describe\pdfensureobject\name. If \name isn't an object (reserved or created), this command reserves it. Otherwise it does nothing. \describe\pdfobjectnumber\name. Returns the number of object \name (which must be reserved at least). In \xetex, it actually returns nothing, because you can't use object numbers there, but fortunately in \pdftex and \luatex it isn't very useful either; the next command is much more interesting. (If \name doesn't exist, this command returns \verb"0"; an object can't have number \verb"0" in PDF, but that makes more sense than returning an error message, which would never make it to the terminal and spoil the PDF file instead.) \describe\pdfrefobject\name. Makes an indirect reference to object \name. For instance: \verbatim \urlaction{tug}{http://www.tug.org} \verbatim/ and then somewhere while writing PDF code: \verbatim /A \pdfrefobject{myobj} \verbatim/ (As with \com\pdfobjectnumber, if \name doesn't exist, i.e. it hasn't been reserved or created, this command returns \verb"0 0 R", an impossible object that is better than an error message. With \xetex, though, the reference is made anyway.) \describe\pdfobjectstatus\name. Returns \verb"0" if \name isn't an object, \verb"1" if it is a reserved object and \verb"2" if the object has been created. \describe\ifpdfobject\name\arg{true}\arg{false}. Executes \arg{true} if \name is an object (reserved or created) and \arg{false} otherwise. \describe\pdfstring\arg{string}. This transforms \arg{string} into a valid PDF string: in \xetex this actually does nothing, whereas in \pdftex the string is escaped, and in \luatex it is converted to UTF-16 in octal form. Note that this operation is already performed in a bookmark's title, in the description of an embedded file, in \jumpcom\javascriptaction and in various attributes of the \param"navigator" parameter, so you shouldn't use it there; it might be otherwise useful when writing raw PDF code. \vskip0pt plus 1filll \bgroup \leftskip=0pt plus 1fill \it\obeylines Typeset with LuaTeX v.0.66 in Lucida and Lucida Console (Charles Bigelow and Kris Holmes) \egroup \finishpdffile \bye