# 7  Cross-references

The command \label{tag} anchors a location in the document that can be referred to elsewhere in the document with a \ref{tag}.6 The location represented by a \label is the header of the smallest sectioning environment enclosing the \label. This sectioning environment can be a chapter, (sub)section, or footnote.

A \label command is typically placed after the sectioning command, and the corresponding \ref will print as that section’s number. In HTML, the \ref text will additionally be a link: Clicking that link will cause the browser to display the part of the web page starting the labeled section.

Note that the \label merely names pre-selected anchor points in the documents, viz., the openings of chapters, (sub)sections, and footnotes. To insert your own anchors at arbitrary locations in the document, use \tag{atag}{tagvalue}. (You need to supply a tagvalue, because there is no sectioning environment whose number \tag can assume.) This causes \ref{atag} to expand to tagvalue, and furthermore, in the HTML, to be a hyperlink to the location of the \tag. The main use for the \tag command is to enrich the HTML version of your document with hyperlinks — unlike \label, \tag does not add value to the print version.

You may need to rerun TeX2page in order to resolve the cross-references in a document. TeX2page will tell you if this is the case.

## 7.1  Referring to external documents

The command \urlhd{URL}{HTML text}{DVI text} lets you link to arbitrary URLs, not just to labels within your document. In the HTML output, a hyperlink to ‘URL’ is created, with the link text being ‘HTML text’. In the DVI output, the part ‘DVI text’ is output. Example:

For more details, consult
\urlhd{http://www.ithaka.org/odyssey.html}{the Odyssey}{the
{\it Odyssey\/} document in the Ithaka repository}.


In the DVI output, this becomes

For more details, consult the Odyssey document in the Ithaka repository.

In the HTML output, it would be

For more details, consult the Odyssey.

where “the Odyssey” is an HTML link to the site http://www.ithaka.org/odyssey.html.

\urlhd is named to be a mnemonic for its argument sequence, viz., the URL, followed by the Html text, followed by the Dvi text.

Note that you can use \urlhd for cross-referencing within the document also. The URL in such cases will be a label as specified by a \label or a \tag command, but should add a ‘#’ prefix. E.g.,

See \urlhd{#hairy}{below}{section~\ref{hairy}}
for further details.


where the further details are described in a section annotated with \label{hairy}. Assume this section is numbered 21. Then, the reference typesets as “See section 21 ...” in the DVI output and “See below ...” in the HTML output (with below being a link). In contrast, if we had written

See section~\ref{hairy} for further details.


we would have had “See section 21 ...” in both DVI and HTML. \urlhd is thus more flexible than \ref.

Because of page breaks in the HTML output (sec. 3.1), it is possible that a label’s definition and the references to it do not ultimately sit on the same physical HTML page. Nevertheless, your TeX source can use #tag-style URLs to refer to anchors anywhere within it. TeX2page will automatically convert a #tag-style URL to its correct fully qualified equivalent.

### 7.1.1  Abbreviations for specifying links

\urlhd takes three arguments. In some cases the second and third arguments may be mere repetitions of a preceding argument. For such cases, TeX2page provides some convenient abbreviations.

\urlh takes two arguments. The first argument is the URL, and the second is the descriptive text that is used in both the HTML and the DVI outputs. For example:

TeX is available at
\urlh{http://www.tug.org}{the TUG website}.


produces

TeX is available at the TUG website.

In the HTML output, “the TUG website” is a hyperlink to http://www.tug.org.

An optional \\ may be used inside \urlh’s second argument. The text before the \\ is used in both the HTML and the DVI outputs. The text after the \\ is used only in the DVI output. This helps you to specify extra information for the DVI output, which may be necessary because the DVI output lacks the information implicit in the hyperlink. For example:

TeX is available at
\urlh{http://www.tug.org}{TUG\\ (\path{tug.org})}.


produces, in the DVI output.

TeX is available at TUG (tug.org).

The HTML output will not mention the parenthesized domain name, since the word “TUG” hyperlinks to it.

\\ is useful for internal cross-references too. For example (assuming the label callcc refers to section 2.3):

More complicated forms of program control are possible
using \urlh{#callcc}{{\tt callcc}\\ (section~\ref{callcc})}.


produces

More complicated forms of program control are possible using callcc (section 2.3).

in the DVI output. In the HTML output, the parenthesized section reference will be dropped as redundant, as the word “callcc” hyperlinks to the relevant section.

An optional \1 may be used after \\ to refer to \urlh’s first argument, i.e., the URL. Example:

TeX is available at
\urlh{http://www.tug.org}{TUG\\ (\1)}.


produces

TeX is available at TUG (http://www.tug.org).

in the DVI output. In the HTML output, the parenthesized URL is dropped as redundant, as the word “TUG” hyperlinks to it.

Finally, the combination of \tag and \urlh is useful for inserting internal cross-references in the HTML document without affecting the print document. For example, the following text

\tag{ex1}{ignore}
\urlh{#ans1}{\bf Exercise 1.} Statement of a problem ...

... lots of intervening stuff ...

\tag{ans1}{ignore}
\urlh{#ex1}{\bf Answer 1.} Answer to exercise 1 ...


prints as

Exercise 1. Statement of a problem ...

... lots of intervening stuff ...

Answer 1. Answer to exercise 1 ...

in both the DVI and the HTML. However, in the HTML, the proclamations “Exercise 1.” and “Answer 1.” are also helpful hyperlinks to each other.

\url takes just one argument, the URL. For the descriptive text, both the HTML and the DVI outputs simply use the URL itself. Example:

TeX is available at \url{http://www.tug.org}.


\urlp takes two arguments. In the HTML output, the first argument is the link text and the second is the URL. In the DVI output, the first argument is typeset followed by a space followed by the URL in parentheses. \urlp{text}{URL} abbreviates \urlh{URL}{text\\ (\path{URL})}.

\mailto is a single-argument command for specifying email addresses. \mailto{address} abbreviates \urlh{mailto:address}{\path{address}}.

## 7.2  Referring to labels in related documents

TeX2page allows several related online documents to refer to labels in one another, much as each would refer to labels within itself. Each document needs to identify the location of the other documents that it wishes to refer to. The commands \includeexternallabels and \inputexternallabels accomplish two flavors of such mutual cross-referencing.

### 7.2.1  \includeexternallabels

\includeexternallabels external-jobname


allows the current document to incorporate labels from external-jobname, and refer to them as it would to its own labels, i.e., using \ref. It is therefore important that the label names used by the documents should not clash.

The argument external-jobname is the appropriate pathname to the external document. Use the name of the main HTML file, without the extension. If using a relative pathname, take care to calculate the pathname from the location of the current document’s main HTML (not source) file to the location of the external document’s main HTML (again, not source) file.

For example, if you have two documents docA.tex and docB.tex in the current directory, and you have used the .hdir mechanism to direct the HTML files to go into subdirectories docA and docB7, then docA.tex should contain

\includeexternallabels ../docB/docB


and docB.tex should contain

\includeexternallabels ../docA/docA


### 7.2.2  \inputexternallabels

\inputexternallabels external-jobname


also allows the current document to refer to labels from external-jobname. However, unlike \includeexternallabels, the labels are not incorporated into the current documents pool of labels. The call merely identifies that the labels from external-jobname are available for use in the current document, but with appropriate qualification. Instead of \ref, the command \htmlrefexternal is used to refer these labels. The call

\htmlrefexternal{text}{external-jobname}{external-label}


typesets text as a hyperlink to the label external-label in the HTML document of basename external-jobname.

Note that the external document is named explicitly. While the situation is more verbose than that with \includeexternallabels, it makes no requirement that the names of the labels in the two documents should not clash.

The command \tableofcontents emits a list of the section names in the document, with their numbers. In HTML, these entries are links to the corresponding sections.

## 7.4  Footnotes

Footnotes are a more print-oriented form of cross-reference. TeX2page recognizes plain TeX’s \footnote as well as a new macro called \numfootnote. The latter numbers footnotes automatically and sequentially (i.e., the user need not think up footnote marks).

Both \footnote and \numfootnote produce the expected output. The footnote mark occurs both in the body of the text and at the bottom of the relevant (DVI or HTML) page, with the latter accompanied by the footnote text.

Additionally, in the HTML output, the footnote mark in the text body is a link to the footnote mark in the footnote text, and vice versa. This paragraph ends with a footnote. Click the footnote mark to see the footnote text at the bottom of the HTML page. You can either click the “back” button on your browser or the footnote mark itself to get back to the body of the text.8

The footnote above (below?) was generated by

... to get back to the body of the
text.\numfootnote{Footnotes are separated ...
by a horizontal rule.}


## 7.5  Bibliographies

TeX2page can use the external program BibTeX [1318] to generate bibliographies from bibliographic database files. A bibliographic database file is a .bib file containing bibliographic entries of the form

@book{tex,
author = "D E Knuth",
title = "{The TeXbook}",
year = 1993
}


TeX source can cite a bibliographic entry using the command \cite. E.g.,

Here's an example diagram from {\it The
TeXbook\/}~\cite[p.~389]{tex}.


\cite and the other bibliography-related commands described below are included in LaTeX. For plain TeX, you will need to explicitly load the macro file btxmac.tex, present in all TeX distributions.

The command \bibliographstyle specifies the style of the citations: plain numbers the bibliography items, whereas alpha gives them mnemonic alphanumeric keys. The command \bibliography specifies one or more .bib files to search for the citations, and generates a bibliography, i.e., a sorted list of all the cited entries. E.g.,

\section*{Bibliography}

\bibliographystyle{plain}
\bibliography{tex,scheme,html}


Here tex.bib, scheme.bib, and html.bib are the .bib files used, presumably containing entries specific to TeX, Scheme, and HTML respectively.

\nocite{citation} will include in the bibliography the entry for citation, without needing to cite it in the text. \nocite{*} will include all the entries from all the supplied .bib files.

A first run of TeX2page on the document jobname.ext creates an auxiliary file jobname-Z-B.aux. A subsequent run of TeX2page calls BibTeX on jobname-Z-B.aux to produce the corresponding sorted bibliography in the file jobname-Z-B.bbl, which is slurped into the output document. (You may call BibTeX yourself, as you would have to do when TeXing the document for the DVI output.)

If TeX2page cannot create or find jobname-Z-B.bbl despite its best efforts, it will inform you that you need to generate it manually. Once created, the file is reused as is in future runs. Delete the file to have it regenerated (perhaps because your document has changed).

BibTeX is convenient for selecting, sorting, and writing out in appropriate format the relevant bibliographic entries for your document, but if for some reason you want to do it all on your own, you can.9 Use the thebibliography environment to enclose your bibliographic entries, and introduce each entry with \bibitem. For more details, see the LaTeX manual [13, section 4.3.2, p. 71], or see a sample .bbl file generated by BibTeX and imitate.

## 7.6  Index generation

TeX2page can use the external program MakeIndex [212] to generate indices. TeX2page’s index-generation feature follows the same conventions as traditionally used with TeX and its derived packages [13, section 4.5, appendix A].

This means that an occurrence of \index{item} in the TeX source causes item to be entered into an unsorted index file, jobname-Z-I.idx. A subsequent run of TeX2page calls MakeIndex on jobname-Z-I.idx to produce the sorted index in jobname-Z-I.ind, which is included in the output using a command such as \printindex. (You may call MakeIndex yourself, as you would have to do when TeXing the document for the DVI output.)

The auxiliary files have the basename jobname-Z-I rather than jobname as in TeX, because the HTML index is necessarily different in character from the DVI index: Whereas the DVI index item mentions one or more page numbers in the main text where the indexed item occurs, the HTML index item is a hyperlink into the main text.

If an indexed item needs to point to multiple occurrences in the main text, the hyperlink associated with the index entry points to the first occurrence. The hyperlinks for succeeding occurrences are notated by bracketed numbers starting from 2. (The number represents the number of the occurrence.)

TeX2page recognizes two macros for index insertion. First, there is the conventional \printindex which emits the sorted index inside a section called “Index”. In addition, there is also \inputindex, which emits just the index without a section header. This is so that you can set the index your own way. E.g., you may want to have a different section header or include some introductory prose.

If TeX2page cannot find the sorted index file (jobname-Z-I.ind) despite its best efforts, it will inform you that you need to generate it manually. Once created, the file is reused as is in future runs. Delete the file to have it regenerated (perhaps because your document has changed).

## 7.7  Colophon

By default, TeX2page prints a two-line colophon at the bottom of the first page, the first line giving the time of last change of the source document, and the second line identifying TeX2page. You can control both the placement and the detail of the colophon using the \htmlcolophon command.

\htmlcolophon{last-page} puts the colophon on the last, instead of the first, page. \htmlcolophon{no-timestamp} prevents mention of the last modification time of the document.10 \htmlcolophon{dont-link-to-tex2page-website} will mention TeX2page, but without hyperlinking to the TeX2page website. To avoid mentioning TeX2page at all, use \htmlcolophon{dont-credit-tex2page}, which also has the convenient shorter form \htmlcolophon{ingrate}.

These arguments to \htmlcolophon can be grouped together, with whitespace separating them. Thus, \htmlcolophon{last-page dont-credit-tex2page} produces on the last page a colophon containing only the timestamp. To produce no colophon at all, do \htmlcolophon{no-timestamp dont-credit-tex2page}.

A call to \htmlcolophon requesting last-page is best placed in the document before text for the second page starts, so as to avoid the default of the colophon appearing at the end of the first page.

6 If you are using the Eplain [1] format, use the name \tagref instead of \ref to get the behavior described here. Or do \let\ref\tagref after \inputting tex2page.tex. Eplain uses the name \ref for a somewhat different operation, and tex2page.tex will not by itself overwrite it.

7 This could be done, for instance, by having both docA.hdir and docB.hdir contain \jobname.

8 Footnotes are separated from the body of the page by a horizontal rule.

9 This approach, while tedious and a maintenance millstone, can be rational sometimes: E.g., if your bibliographic entries are written in a raconteur’s style and include opinions or digressions that are tailormade for the particular document at hand, they are likely inappropriate for inclusion in a quasi-central bibliographic database.

10 If the underlying Scheme is incapable of determining a file’s write date, no-timestamp is automatically assumed.