\documentclass[pagesize=auto]{scrartcl}

\usepackage{fixltx2e}
\usepackage{etex}
\usepackage{xspace}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{booktabs}
\usepackage{microtype}
\usepackage[unicode=true]{hyperref}

\newcommand*{\mail}[1]{\href{mailto:#1}{\texttt{#1}}}
\newcommand*{\pkg}[1]{\textsf{#1}}
\newcommand*{\cls}[1]{\textsf{#1}}
\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
\makeatletter
\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
\makeatother
\newcommand*{\env}[1]{\texttt{#1}}
\newcommand*{\opt}[1]{\texttt{#1}}
\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
\newcommand*{\marg}[1]{\texttt{\{}\meta{#1}\texttt{\}}}
\newcommand*{\oarg}[1]{\texttt{[}\meta{#1}\texttt{]}}
\newcommand*{\BibTeX}{Bib\kern-0.08em\TeX\@\xspace}
\newcommand*{\BigTeX}{Big\kern-0.08em\TeX\@\xspace}

\pdfstringdefDisableCommands{%
  \def\BibTeX{BibTeX\xspace}%
  \def\BigTeX{BigTeX\space}%
}

\addtokomafont{title}{\rmfamily}

\title{The \pkg{fwlw} package}
\subtitle{First Word, Last Word}
\author{Donald Arseneau}
\date{1995}


\begin{document}

\maketitle

\noindent
Modifications to \LaTeX\ output mechanism to determine the first and
last words on the current page, plus the first word on the \emph{next}
page.  These can be used in head-lines or foot-lines.  The `words'
you see may not be real words, but any unbreakable object.

Such labelling does not make sense when \cmd{\chapter} generates a page
break, so the last page before a \cmd{\chapter} (or any \cmd{\clearpage}) gets 
a blank ``next word'', and the first page of the chapter gets a blank
``first word''.  There is a problem when footnotes split: the ``next word''
is blank.

Two pagestyles are defined to print these words: \verb+\pagestyle{NextWordFoot}+
which helps you read ahead to the word on the next page; and \verb+\pagestyle{fwlwhead}+
which is like the headers in a lexicon.  Or you can use the
words in your own page-style\ldots

The words are available in the box registers:
%
\begin{labeling}[\hspace{\labelsep}--]{\cmd{\FirstWordBox}}
\item[\cmd{\FirstWordBox}] first word on this page
\item[\cmd{\NextWordBox}] first word on next page
\item[\cmd{\LastWordBox}] last word on this page
\end{labeling}
%
Use them in your header lines like: \verb+\copy\LastWordBox+.

Note that `words' may be things like:
%
\begin{itemize}
\item \verb+two~words+
\item \verb+[ ]Word+  (\verb+[ ]+ represents a parindent box)
\item a whole displayed equation
\item the first column of an aligned equation
\item anomalously blank, if there are \cmd{\write}s or split footnotes etc.
\item partial words like  \verb+par-+  or  \verb+-tial+.
\end{itemize}

An entirely different approach is possible using \cmd{\mark} and \cmd{\obeyspaces},
and would have different problems.  The problems with catcode changes
may be more or less serious for your particular application.  You are
welcome to write a package using that method.  The best solution would 
involve \cmd{\mark} and an input filter program to 
`\verb+\w{tag} \w{each} \w{word}, \w{in} \w{some} \w{way}+.'

\end{document}
