% include file for the Gnus refcard and booklet
+\def\progver{5.0}\def\refver{5.0} % program and refcard versions
+\def\date{16 September 1995}
+\def\author{Vladimir Alexiev $<$vladimir@cs.ualberta.ca$>$}
+\raggedbottom\raggedright
+\newlength{\logowidth}\setlength{\logowidth}{6.861in}
+\newlength{\logoheight}\setlength{\logoheight}{7.013in}
 \newlength{\keycolwidth}
 \newenvironment{keys}[1]% #1 is the widest key
   {\nopagebreak%\noindent%
    \addtolength{\keycolwidth}{-\columnwidth}%
    \begin{tabular}{@{}l@{\hspace{\tabcolsep}}p{-\keycolwidth}@{}}}%
   {\end{tabular}\\}
+\catcode`\^=12 % allow ^ to be typed literally
+\newcommand{\B}[1]{{\bf#1})}    % bold l)etter
 
-% uncomment the first definition if you do not want pagebreaks in maps
-%\newcommand{\esamepage}{\samepage}
-\newcommand{\esamepage}{}
-
-\newcommand*{\B}[1]{{\bf#1})}    % bold l)etter
-
-\newcommand{\Title}{%
+\def\Title{
 \begin{center}
 {\bf\LARGE Gnus \progver\ Reference \Guide\\}
 %{\normalsize \Guide\ version \refver}
 \end{center}
 }
 
-\newcommand*{\Logo}[1]{\centerline{%
+\newcommand\Logo[1]{\centerline{
 \makebox[\logoscale\logowidth][l]{\vbox to \logoscale\logoheight
 {\vfill\special{psfile=gnuslogo.#1}}\vspace{-\baselineskip}}}}
 
-\newcommand{\Copyright}{%
+\def\CopyRight{
 \begin{center}
 Copyright \copyright\ 1995 Free Software Foundation, Inc.\\*
 Copyright \copyright\ 1995 \author.\\*
-Copyright \copyright\ 2000 Felix Natter $<$fnatter@gmx.net$>$.\\*
 Created from the Gnus manual Copyright \copyright\ 1994 Lars Magne
 Ingebrigtsen.\\*
 and the Emacs Help Bindings feature (C-h b).\\*
 Permission is granted to make and distribute copies of this reference
 \guide{} provided the copyright notice and this permission are preserved on
 all copies.  Please send corrections, additions and suggestions to the
-current maintainer's email address. \Guide{} last edited on \date.
+above email address. \Guide{} last edited on \date.
 }
 
-\newcommand{\Notes}{%
-\subsection*{Notes}
-{\esamepage
+\def\Notes{
+\subsec{Notes}
+{\samepage
 Gnus is complex. Currently it has some 346 interactive (user-callable)
 functions. Of these 279 are in the two major modes (Group and
 Summary/Article). Many of these functions have more than one binding, some
 commands will also set the default level.
 
 \quad [score] An article score. If no prefix is given,
-`gnus-summary-default-score' is used. \\*[\baselineskip]
-% some keys
+`gnus-summary-default-score' is used.
+%Some functions were not yet documented at the time of creating this
+%\guide and are clearly indicated as such.
+\\*[\baselineskip]
 \begin{keys}{C-c C-i}
-M-x gnus           & start Gnus. \\
-M-x gnus-no-server & start Gnus without trying to contact server. \\
 C-c C-i & Go to the Gnus online {\bf info}.\\
 C-c C-b & Send a Gnus {\bf bug} report.\\
 \end{keys}
 }}
 
-\newcommand{\GroupLevels}{%
+\def\GroupLevels{
+\subsec{Group Subscribedness Levels}
 The table below assumes that you use the default Gnus levels.
 Fill your user-specific levels in the blank cells.\\[1\baselineskip]
+
 \begin{tabular}{|c|l|l|}
 \hline
 Level & Groups & Status \\
 \hline
-1 & draft/mail groups   &              \\
-2 & mail groups         &              \\
-3 &                     & subscribed   \\
-4 &                     &              \\
-5 & default list level  &              \\
+1 & mail groups   &              \\
+2 & mail groups   &              \\
+3 &               & subscribed   \\
+4 &               &              \\
+5 & default list level &         \\
 \hline
-6 &                     & unsubscribed \\
-7 &                     &              \\
+6 &               & unsubscribed \\
+7 &               &              \\
 \hline
-8 &                     & zombies      \\
+8 &               & zombies      \\
 \hline
-9 &                     & killed       \\
+9 &               & killed       \\
 \hline
-\end{tabular}}
+\end{tabular}
+}
 
-\newcommand{\MarkCharacters}{%
-{\esamepage If a command directly sets a mark, it is shown in parentheses.\\*
+\def\Marks{
+\subsec{Mark Indication Characters}
+{\samepage If a command directly sets a mark, it is shown in parentheses.\\*
 \newlength{\markcolwidth}
 \settowidth{\markcolwidth}{` '}% widest character
 \addtolength{\markcolwidth}{4\tabcolsep}
 ` ' & (M-u, M SPC, M c) Not read.\\
 !   & (!, M !, M t) Ticked (interesting).\\
 ?   & (?, M ?) Dormant (only followups are interesting).\\
+C   & (C, S c) {\bf Canceled} (only for your own articles).\\
 E   & (E, M e, M x) {\bf Expirable}. Only has effect in mail groups.\\
-G   & (C, B DEL) Canceled article (or deleted in mailgroups).\\
 \hline\hline
 \multicolumn{2}{|p{\markdblcolwidth}|}{The marks below mean that the article
   is read (killed, uninteresting), and have more or less the same effect.
 \hline
 r   & (d, M d, M r) Deleted (marked as {\bf read}).\\
 C   & (M C; M C-c; M H; c, Z c; Z n; Z C) Killed by {\bf catch-up}.\\
-F   & SOUPed article. See the manual.\\
-O   & {\bf Old} (read in a previous session).\\
+O   & {\bf Old} (marked read in a previous session).\\
 K   & (k, M k; C-k, M K) {\bf Killed}.\\
-M   & Article marked as read by duplicate suppression.\\
-Q   & Article is part of a sparse thread (see ``Threading'' in the manual).\\
 R   & {\bf Read} (viewed in actuality).\\
 X   & Killed by a kill file.\\
 Y   & Killed due to low score.\\
 \hline\multicolumn{2}{c}{\vspace{1ex}}\\\hline
-\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf Marks not affecting visibility}}\\
+\multicolumn{2}{|p{\markdblcolwidth}|}{{\bf Other marks}}\\
 \hline
-\#  & (\#, M \#, M P p) Processable (will be affected by the next operation).
-[2]\\
-A   & {\bf Answered} (followed-up or replied). [2]\\
-*   & Cached. [2]\\
-S   & Saved. [2]\\
-+   & Over default score. [3]\\
-$-$ & Under default score. [3]\\
-$=$ & Has children (thread underneath it). Add `\%e' to
-`gnus-summary-line-format'. [3]\\
+\#  & (\#, M \#, M P p) Processable (will be affected by the next operation).\\
+A   & {\bf Answered} (followed-up or replied).\\
++   & Over default score.\\
+$-$ & Under default score.\\
+=   & Has children (thread underneath it). Add `\%e' to
+      `gnus-summary-line-format'.\\
 \hline
 \end{tabular}
 }}
 
-\newcommand{\GroupModeGeneral}{%
+\def\GroupMode{
+\sec{Group Mode}
 \begin{keys}{C-c M-C-x}
-RET     & (=) Enter this group. [Prefix: how many (read) articles to fetch.
-Positive: newest articles, negative: oldest ones; non-numerical: fetch all articles, not just unread]\\
-M-RET   & Enter group quickly.\\
-M-SPC   & Same as RET but does not expunge and hide dormants.\\
-M-C-RET & Enter group without any processing, changes will not be permanent.\\
-SPC     & Select this group and display the first (unread) article. [Same
-prefix as above.]\\
+RET     & (=) Select this group. [Prefix: how many (read) articles to fetch.
+Positive: newest articles, negative: oldest ones.]\\
+SPC     & Select this group and display the first unread article. [Same
+prefix as above.]\\ 
 ?       & Give a very short help message.\\
 $<$     & Go to the beginning of the Group buffer.\\
 $>$     & Go to the end of the Group buffer.\\
 ,       & Jump to the lowest-level group with unread articles.\\
 .       & Jump to the first group with unread articles.\\
-xx & Enter the Server buffer mode.\\
+^       & Enter the Server buffer mode.\\
 a       & Post an {\bf article} to a group.\\
 b       & Find {\bf bogus} groups and delete them.\\
 c       & Mark all unticked articles in this group as read ({\bf catch-up}).
 [p/p]\\ 
 g       & Check the server for new articles ({\bf get}). [level]\\
-M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
 j       & {\bf Jump} to a group.\\
 m       & {\bf Mail} a message to someone.\\
 n       & Go to the {\bf next} group with unread articles. [distance]\\
-M-n     & Go to the {\bf next} group on the same or lower level.
-[distance]\\ 
 p       & (DEL) Go to the {\bf previous} group with unread articles.
 [distance]\\ 
-M-p     & Go to the {\bf previous} group on the same or lower level. [distance]\\ 
 q       & {\bf Quit} Gnus.\\
-r       & Re-read the init file ({\bf reset}).\\
+r       & Read the init file ({\bf reset}).\\
 s       & {\bf Save} the `.newsrc.eld' file (and `.newsrc' if
 `gnus-save-newsrc-file').\\ 
 z       & Suspend (kill all buffers of) Gnus.\\
 P       & Go to the {\bf previous} group. [distance]\\
 Q       & {\bf Quit} Gnus without saving any startup (.newsrc) files.\\
 R       & {\bf Restart} Gnus.\\
+V       & Display the Gnus {\bf version} number.\\
 Z       & Clear the dribble buffer.\\
-M-c     & Clear data from group (marks and list of read articles). \\
+C-c C-d & Show the {\bf description} of this group. [Prefix: re-read it
+from the server.]\\ 
 C-c C-s & {\bf Sort} the groups by name, number of unread articles, or level
 (depending on `gnus-group-sort-function').\\
 C-c C-x & Run all expirable articles in this group through the {\bf expiry} 
 process.\\
 C-c M-C-x & Run all articles in all groups through the {\bf expiry} process.\\
-C-c M-g & Activate all {\bf groups}.\\
-C-c C-i & Gnus online-manual ({\bf info}).\\
 C-x C-t & {\bf Transpose} two groups.\\
-H f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
-H v     & (V) Display the Gnus {\bf version} number.\\
-H d     & (C-c C-d) Show the {\bf description} of this group
-[Prefix: re-read from server].\\ 
-M-d     & {\bf Describe} all groups. [Prefix: re-read from server]\\
+M-d     & {\bf Describe} ALL groups. [Prefix: re-read the description from the
+server.]\\
+M-f     & Fetch this group's {\bf FAQ} (using ange-ftp).\\
+M-g     & Check the server for new articles in this group ({\bf get}). [p/p]\\
+M-n     & Go to the {\bf previous} unread group on the same or lower level.
+[distance]\\ 
+M-p     & Go to the {\bf next} unread group on the same or lower level.
+[distance]\\ 
 \end{keys}
 }
 
-\newcommand{\ListGroups}{%
-{\esamepage
-\begin{keys}{A M}
+\def\GroupCommands{
+\subsec{List Groups}
+{\samepage
+\begin{keys}{A m}
+A a     & (C-c C-a) List all groups whose names match a regexp ({\bf
+apropos}).\\ 
 A d     & List all groups whose names or {\bf descriptions} match a regexp.\\ 
-A k     & (C-c C-l) List all {\bf killed} groups.
-[Prefix: look at active-file from server]\\
-A l     & List all groups on a specific level.
-[Prefix: also list groups with no unread articles]\\
-A d     & List all groups that have names or {\bf descriptions} matching
-a regexp.\\
-A a     & (C-c C-a) List all groups whose names match a regexp
-({\bf apropos}).\\ 
-A A     & List the server's active-file.\\
-A M     & List groups that {\bf match} a regexp.\\
-A m     & List groups that {\bf match} a regexp and have unread articles. 
+A k     & (C-c C-l) List all {\bf killed} groups.\\
+A m     & List groups that {\bf match} a regexp and have unread articles.
 [level]\\ 
-A s     & (l) List all {\bf subscribed} groups with unread articles.
-[level, 5 and lower is the default]\\
-A u     & (L) List all groups (including read and {\bf unsubscribed}).
-[level, 7 and lower is the default]\\
-A z     & List all {\bf zombie} groups.\\
+A s     & (l) List {\bf subscribed} groups with unread articles. [level]\\
+A u     & (L) List all groups (including {\bf unsubscribed}). [If no prefix
+is given, level 7 is the default]\\ 
+A z     & List the {\bf zombie} groups.\\
+A M     & List groups that {\bf match} a regexp.\\
 \end{keys}
 }
 
-\newcommand{\CreateEditGroups}{%
-{\esamepage
+\subsec{Create/Edit Foreign Groups}
+{\samepage
 The select methods are indicated in parentheses.\\*
-\begin{keys}{G DEL}
+\begin{keys}{G m}
 G a     & Make the Gnus list {\bf archive} group. (nndir over ange-ftp)\\
-G c     & {\bf Customize} this group's parameters.\\
 G d     & Make a {\bf directory} group (every file must be a posting and files
 must have numeric names). (nndir)\\
-G D     & Enter a {\bf directory} as a (temporary) group.
-(nneething without recording articles read)\\
 G e     & (M-e) {\bf Edit} this group's select method.\\
-G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
 G f     & Make a group based on a {\bf file}. (nndoc)\\
 G h     & Make the Gnus {\bf help} (documentation) group. (nndoc)\\
 G k     & Make a {\bf kiboze} group. (nnkiboze)\\
 G m     & {\bf Make} a new group.\\
 G p     & Edit this group's {\bf parameters}.\\
-G r     & Rename this group (does not work with read-only groups!).\\
-G u     & Create one of the groups mentioned in gnus-{\bf useful}-groups.\\
 G v     & Add this group to a {\bf virtual} group. [p/p]\\
+G D     & Enter a {\bf directory} as a (temporary) group. (nneething without
+recording articles read.)\\
+G E     & {\bf Edit} this group's info (select method, articles read, etc).\\
 G V     & Make a new empty {\bf virtual} group. (nnvirtual)\\
-G w     & Create ephemeral group based on web-search. [Prefix: make solid group
-instead]\\
-G DEL   & {\bf Delete} group [Prefix: delete all articles as well].\\
 \end{keys}
 You can also create mail-groups and read your mail with Gnus (very useful
-if you are subscribed to mailing lists), using one of the methods
+if you are subscribed to any mailing lists), using one of the methods
 nnmbox, nnbabyl, nnml, nnmh, or nnfolder. Read about it in the online info
 (C-c C-i g Reading Mail RET).
-}}
+}
 
-% TODO:
-\newcommand{\SoupCommands}{%
-\begin{keys}{G s w}
-G s b   & gnus-group-brew-soup: not documented.\\
-G s p   & gnus-soup-pack-packet: not documented.\\
-G s r   & nnsoup-pack-replies: not documented.\\
-G s s   & gnus-soup-send-replies: not documented.\\
-G s w   & gnus-soup-save-areas: not documented.\\
-\end{keys}}
-
-\newcommand{\MarkGroups}{%
+%\subsubsec{Soup Commands}
+%\begin{keys}{G s w}
+%G s b   & gnus-group-brew-soup: not documented.\\
+%G s p   & gnus-soup-pack-packet: not documented.\\
+%G s r   & nnsoup-pack-replies: not documented.\\
+%G s s   & gnus-soup-send-replies: not documented.\\
+%G s w   & gnus-soup-save-areas: not documented.\\
+%\end{keys}
+
+\subsec{Mark Groups}
 \begin{keys}{M m}
 M m     & (\#) Set the process {\bf mark} on this group. [scope]\\
-M r     & Mark all groups matching regular expression.\\
 M u     & (M-\#) Remove the process mark from this group ({\bf unmark}).
 [scope]\\ 
-M U     & Remove the process mark from all groups (\textbf{umark all}).\\
 M w     & Mark all groups in the current region.\\
-\end{keys}}
-
-\newcommand{\GroupTopicsGeneral}{%
-{\esamepage
-Topics are ``categories'' for groups. Press t in the group-buffer to
-toggle gnus-topic-mode (C-c C-i g Group Topics RET).
-\begin{keys}{C-c C-x}
-T n     & Prompt for topic {\bf name} and create it.\\
-T m     & {\bf Move} the current group to some other topic [p/p].\\
-T j     & {\bf Jump} to a topic.\\
-T c     & {\bf Copy} the current group to some other topic [p/p].\\
-T D     & Remove (not delete) the current group [p/p].\\
-T M     & {\bf Move} all groups matching a regexp to a topic.\\
-T C     & {\bf Copy} all groups matching a regexp to a topic.\\
-T H     & Toggle {\bf hiding} of empty topics.\\
-T r     & {\bf Rename} a topic.\\
-T DEL   & Delete an empty topic.\\
-T \#    & Mark all groups in the current topic with the process-mark.\\
-T M-\#  & Remove the process-mark from all groups in the current topic.\\
-T TAB   & (TAB) Indent current topic [Prefix: unindent].\\ 
-M-TAB   & Unindent the current topic.\\
-RET     & (SPC) Either unfold topic or enter group [level].\\
-C-c C-x & Expire all articles in current group or topic.\\
-C-k     & {\bf Kill} a group or topic.\\
-C-y     & {\bf Yank} a group or topic.\\
-A T     & List active-file using {\bf topics}.\\
-G p     & Edit topic-{\bf parameters}.\\
-\end{keys}}}
-
-\newcommand{\TopicSorting}{%
-{\esamepage
-\begin{keys}{T S m}
-T S a  & Sort {\bf alphabetically}.\\
-T S u  & Sort by number of {\bf unread} articles.\\
-T S l  & Sort by group {\bf level}.\\
-T S v  & Sort by group score ({\bf value}).\\
-T S r  & Sort by group {\bf rank}.\\
-T S m  & Sort by {\bf method}.\\
-\end{keys}}}
-
-\newcommand{\SubscribeKillYankGroups}{%
-{\esamepage
-\begin{keys}{S C-k}
+\end{keys}
+
+\subsec{Unsubscribe, Kill and Yank Groups}
+\begin{keys}{S w}
 S k     & (C-k) {\bf Kill} this group.\\
 S l     & Set the {\bf level} of this group. [p/p]\\
 S s     & (U) Prompt for a group and toggle its {\bf subscription}.\\
 S w     & (C-w) Kill all groups in the region.\\
 S y     & (C-y) {\bf Yank} the last killed group.\\
 S z     & Kill all {\bf zombie} groups.\\
-S C-k   & Kill all groups on a certain level.\\
-\end{keys}}}
+\end{keys}
+}
 
-\newcommand{\SummaryModeGeneral}{%
-{\esamepage
-\begin{keys}{M-RET}
+\def\SummaryMode{
+\sec{Summary Mode}  %{Summary and Article Modes}
+\begin{keys}{SPC}
 SPC     & (A SPC, A n) Select an article, scroll it one page, move to the
 next one.\\ 
 DEL     & (A DEL, A p, b) Scroll this article one page back. [distance]\\
 RET     & Scroll this article one line forward. [distance]\\
-M-RET   & Scroll this article one line backward. [distance]\\
-=       & Expand the Summary window (fullsize).
-[Prefix: shrink to display article window]\\
-%
-\&      & Execute a command on all articles whose header matches a regexp.
-[Prefix: move backwards]\\
+=       & Expand the Summary window. [Prefix: shrink it to display the
+Article window]\\
+$<$     & (A $<$, A b) Scroll to the beginning of this article.\\
+$>$     & (A $>$, A e) Scroll to the end of this article.\\
+\&      & Execute a command on all articles matching a regexp.
+[Prefix: move backwards.]\\
+j       & (G g) Ask for an article number and then {\bf jump} to that summary
+line.\\ 
+C-t     & Toggle {\bf truncation} of summary lines.\\
 M-\&    & Execute a command on all articles having the process mark.\\
-%
+M-k     & Edit this group's {\bf kill} file.\\
 M-n     & (G M-n) Go to the {\bf next} summary line of an unread article.
 [distance]\\ 
 M-p     & (G M-p) Go to the {\bf previous} summary line of an unread article. 
 [distance]\\ 
-M-s     & {\bf Search} through all subsequent articles for a regexp.\\
 M-r     & Search through all previous articles for a regexp.\\
-%
-A P     & {\bf Postscript}-print current buffer.\\
-%
-M-k     & Edit this group's {\bf kill} file.\\
+M-s     & {\bf Search} through all subsequent articles for a regexp.\\
 M-K     & Edit the general {\bf kill} file.\\
-%
-C-t     & Toggle {\bf truncation} of summary lines.\\
-Y g     & Regenerate the summary-buffer.\\
-Y c     & Insert all cached articles into the summary-buffer.\\
-%
-M-C-e   & {\bf Edit} the group-parameters.\\
-M-C-g   & Customize the group-parameters.\\
-%
-% article handling
-%
-A $<$   & ($<$, A b) Scroll to the beginning of this article.\\
-A $>$   & ($>$, A e) Scroll to the end of this article.\\
-A s     & (s) Perform an i{\bf search} in the article buffer.\\
-%
-A D     & (C-d) Un{\bf digestify} this article into a separate group.
-[Prefix: force digest]\\
-M-C-d   & Like C-d, but open several documents in nndoc-groups, wrapped
-in an nnvirtual group [p/p]\\
-%
-A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: get raw version]\\ 
-A r     & (\^{}, A \^{}) Fetch the parent(s) of this article.
-[Prefix: if positive fetch \textit{n} ancestors;
-negative: fetch only the \textit{n}th ancestor]\\
-A t     & {\bf Translate} this article.\\
-A R     & Fetch all articles mentioned in the {\bf References}-header.\\
-A T     & Fetch full \textbf{thread} in which the current article appears.\\
-M-\^{}   & Fetch the article with a given Message-ID.\\
-S y     & {\bf Yank} the current article into an existing message-buffer.
-[p/p]\\
-\end{keys}}}
-
-\newcommand{\MIMESummary}{%
-{\esamepage
-For the commands operating on one MIME part (a subset of gnus-article-*), a
-prefix selects which part to operate on. If the point is placed over a
-MIME button in the article buffer, use the corresponding bindings for the
-article buffer instead.
-\begin{keys}{W M w}
-K v      & (b) {\bf View} the MIME-part.\\
-K o      & {\bf Save} the MIME part.\\
-K c      & {\bf Copy} the MIME part.\\
-K e      & View the MIME part {\bf externally}.\\
-K i      & View the MIME part {\bf internally}.\\
-K $\mid$ & Pipe the MIME part to an external command.\\
-K b      & Make all the MIME parts have buttons in front of them.\\
-K m      & Try to repair {\bf multipart-headers}.\\
-X m      & Save all parts matching a MIME type to a directory. [p/p]\\
-M-t      & Toggle the buttonized display of the article buffer.\\
-W M w    & Decode RFC2047-encoded words in the article headers.\\
-W M c    & Decode encoded article bodies. [Prefix: prompt for charset]\\
-W M v    & View all MIME parts in the current article.\\
-\end{keys}}}
-
-\newcommand{\SortSummary}{%
-{\esamepage
+\end{keys}
+}
+
+\def\SortSummary{
+\subsec{Sort the Summary Buffer}
 \begin{keys}{C-c C-s C-a}
-C-c C-s C-a & Sort the summary-buffer by {\bf author}.\\
-C-c C-s C-d & Sort the summary-buffer by {\bf date}.\\
-C-c C-s C-i & Sort the summary-buffer by article score.\\
-C-c C-s C-l & Sort the summary-buffer by amount of lines.\\
-C-c C-s C-c & Sort the summary-buffer by length.\\
-C-c C-s C-n & Sort the summary-buffer by article {\bf number}.\\
-C-c C-s C-s & Sort the summary-buffer by {\bf subject}.\\
-\end{keys}}}
-
-\newcommand{\MailGroups}{% formerly \Bsubmap
-{\esamepage
+C-c C-s C-a & Sort the summary by {\bf author}.\\
+C-c C-s C-d & Sort the summary by {\bf date}.\\
+C-c C-s C-i & Sort the summary by article score.\\
+C-c C-s C-n & Sort the summary by article {\bf number}.\\
+C-c C-s C-s & Sort the summary by {\bf subject}.\\
+\end{keys}
+}
+
+\def\Asubmap{
+\subsec{Article Buffer Commands}
+\begin{keys}{A m}
+A g     & (g) (Re)fetch this article ({\bf get}). [Prefix: just show the
+article.]\\ 
+A r     & (^, A ^) Go to the parent of this article (the {\bf References}
+header).\\ 
+M-^     & Fetch the article with a given Message-ID.\\
+A s     & (s) Perform an i{\bf search} in the article buffer.\\
+A D     & (C-d) Un{\bf digestify} this article into a separate group.\\
+\end{keys}
+}
+
+\def\Bsubmap{
+\subsec{Mail-Group Commands}
+{\samepage
 These commands (except `B c') are only valid in a mail group.\\*
 \begin{keys}{B M-C-e}
-B DEL   & (B backspace, B delete) {\bf Delete} the mail article from disk (!).
-[p/p]\\
-B B     & Crosspost this article to another group.\\
+B DEL   & {\bf Delete} the mail article from disk (!). [p/p]\\
 B c     & {\bf Copy} this article from any group to a mail group. [p/p]\\
 B e     & {\bf Expire} all expirable articles in this group. [p/p]\\
 B i     & {\bf Import} a random file into this group.\\
 B m     & {\bf Move} the article from one mail group to another. [p/p]\\
-B p     & Query whether the article was posted as well.\\
-B q     & {\bf Query} where the article will end up after fancy splitting\\
+B q     & {\bf Query} where will the article go during fancy splitting\\
 B r     & {\bf Respool} this mail article. [p/p]\\
-B t     & {\bf Trace} the fancy splitting patterns applied to this article.\\
 B w     & (e) Edit this article.\\
 B M-C-e & {\bf Expunge} (delete from disk) all expirable articles in this group
 (!). [p/p]\\ 
-\end{keys}}}
-
-\newcommand{\DraftGroup}{% formerly \Dsubmap
-{\esamepage
-The ``drafts''-group contains messages that have been saved but not sent
-and rejected articles. \\*
-\begin{keys}{B DEL}
-D e      & {\bf edit} message in draft group.\\
-B DEL    & \textbf{Delete} message (like in mailgroup).\\
-\end{keys}}}
-
-\newcommand{\SelectArticles}{% formerly \Gsubmap
-{\esamepage
+\end{keys}
+}}
+
+\def\Gsubmap{
+\subsec{Select Articles}
+{\samepage
 These commands select the target article. They do not understand the prefix.\\*
 \begin{keys}{G C-n}
-h       & Enter article-buffer.\\
 G b     & (,) Go to the {\bf best} article (the one with highest score).\\
 G f     & (.) Go to the {\bf first} unread article.\\
+G l     & (l) Go to the {\bf last} article read.\\
 G n     & (n) Go to the {\bf next} unread article.\\
-G p     & (p) Go to the {\bf previous} unread article.\\
-%
+p       & Go to the {\bf previous} unread article.\\
+G p     & {\bf Pop} an article off the summary history and go to it.\\
 G N     & (N) Go to {\bf the} next article.\\
 G P     & (P) Go to the {\bf previous} article.\\
-%
 G C-n   & (M-C-n) Go to the {\bf next} article with the same subject.\\
 G C-p   & (M-C-p) Go to the {\bf previous} article with the same subject.\\
-%
-G l     & (l) Go to the previously read article ({\bf last-read-article}).\\
-G o     & Pop an article off the summary history and go to it.\\
-%
-G g     & Search an article via subject.\\
-G j     & (j) Search an article via Message-Id or subject.\\
-\end{keys}}}
-
-\newcommand{\ArticleModeGeneral}{%
-{\esamepage
-The normal navigation keys work in Article mode. Some additional keys are:\\*
-\begin{keys}{C-c RET}
-C-c \^{} & Get the article with the Message-ID near point.\\
-C-c RET & Send reply to address near point.\\
-h       & Go to the \textbf{header}-line of the article in the
-summary-buffer.\\
-s       & Go to \textbf{summary}-buffer.\\
-RET     & (middle mouse button) Activate the button at point to follow
-an URL or Message-ID.\\
-TAB     & Move the point to the next button.\\
-M-TAB   & Move point to previous button.\\
-\end{keys}}}
-
-\newcommand{\WashArticle}{% formerly \Wsubmap
-{\esamepage
-\begin{keys}{W W H}
-W b     & Make Message-IDs and URLs in the article mouse-clickable
-{\bf buttons}.\\  
-W l     & (w) Remove page breaks ({\bf\^{}L}) from the article.\\
-W c     & Translate CRLF-pairs to LF and then the remaining CR's to LF's.\\
-W d     & Treat {\bf dumbquotes}.\\
-W f     & Look for and display any X-{\bf Face} headers.\\
-W m     & Toggle {\bf MIME} processing.\\
-W o     & Treat {\bf overstrike} or underline (\^{}H\_) in the article.\\
-W q     & Treat {\bf quoted}-printable in the article.\\
-W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
-W t     & (t) {\bf Toggle} display of all headers.\\
-W v     & (v) Toggle permanent {\bf verbose} displaying of all headers.\\
-W w     & Do word {\bf wrap} in the article.\\
-W B     & Add clickable {\bf buttons} to the article headers.\\
-W C     & {\bf Capitalize} first word in each sentence.\\
-W Q     & Fill long lines.\\
-%
-W W H   & Strip certain {\bf headers} from body.\\
-%
-W E l   & Strip blank {\bf lines} from the beginning of the article.\\
-W E m   & Replace blank lines with empty lines and remove {\bf multiple}
-blank lines.\\
-W E t   & Remove {\bf trailing} blank lines.\\
-W E a   & Strip blank lines at the beginning and the end
-(W E l, W E m and W E t).\\
-W E A   & Strip {\bf all} blank lines.\\
-W E s   & Strip leading blank lines from the article body.\\
-W E e   & Strip trailing blank lines from the article body.\\
-%
-W T u   & (W T z) Display the article timestamp in GMT ({\bf UT, ZULU}).\\
-W T i   & Display the article timestamp in {\bf ISO} 8601.\\
-W T l   & Display the article timestamp in the {\bf local} timezone.\\
-W T s   & Display according to `gnus-article-time-format'.\\
-W T e   & Display the time {\bf elapsed} since it was sent.\\
-W T o   & Display the {\bf original} timestamp.\\
-\end{keys}}}
-
-\newcommand{\HideHighlightArticle}{%
-{\esamepage
-\begin{keys}{W W C-c}
-W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
-W W h   & Hide article {\bf headers}.\\
-W W b   & Hide {\bf boring} headers.\\
-W W s   & Hide {\bf signature}.\\
-W W l   & Hide {\bf list} identifiers in subject-header.\\
-W W p   & Hide {\bf PGP}-signatures.\\
-W W P   & Hide {\bf PEM} (privacy enhanced messages).\\
-W W B   & Hide banner specified by group parameter.\\
-W W c   & Hide {\bf citation}.\\
-W W C-c & Hide {\bf citation} using a more intelligent algorithm.\\
-W W C   & Hide cited text in articles that aren't roots.\\
-%
-W e     & {\bf Emphasize} article.\\
-%
-W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
-W H c   & Highlight article {\bf citations}.\\
-W H h   & Highlight article {\bf headers}.\\
-W H s   & Highlight article {\bf signature}.\\
 \end{keys}
-For all hiding-commands: A positive prefix always hides, and a negative
-prefix will show what was previously hidden.
 }}
 
-\newcommand{\MIMEArticleMode}{%
-{\esamepage
-\begin{keys}{M-RET}
-RET     & (BUTTON-2) Toggle display of the MIME object.\\
-v       & (M-RET) Prompt for a method and then view object using this method.\\
-o       & Prompt for a filename and save the MIME object.\\
-c       & {\bf Copy} the MIME object to a new buffer and display this buffer.\\
-t       & View the MIME object as a different {\bf type}.\\
-$\mid$  & Pipe the MIME object to a process.\\
-\end{keys}}}
-
-%% end of article mode for reading ..........................................
-
-\newcommand{\MarkArticlesGeneral}{% formerly \Msubmap
-{\esamepage
+\def\Hsubmap{
+\subsec{Help Commands}
+\begin{keys}{H d}
+H d     & (C-c C-d) {\bf Describe} this group. [Prefix: re-read the description
+from the server.]\\
+H f     & Try to fetch the {\bf FAQ} for this group using ange-ftp.\\
+H h     & Give a very short {\bf help} message.\\
+H i     & (C-c C-i) Go to the Gnus online {\bf info}.\\
+H v     & Display the Gnus {\bf version} number.\\
+\end{keys}
+}
+
+\def\Msubmap{
+\subsec{Mark Articles}
 \begin{keys}{M M-C-r}
 d       & (M d, M r) Mark this article as read and move to the next one.
 [scope]\\ 
 D       & Mark this article as read and move to the previous one. [scope]\\
-!       & (u, M !, M t) Tick this article (mark it as interesting) and move
+u       & (!, M !, M t) Tick this article (mark it as interesting) and move
 to the next one. [scope]\\
 U       & Tick this article and move to the previous one. [scope]\\ 
-M ?     & (?) Mark this article as dormant (only followups are
-interesting). [scope]\\ 
-M D     & Show all {\bf dormant} articles (normally they are hidden unless they
-have any followups).\\
-M M-D   & Hide all {\bf dormant} articles.\\
-C-w     & Mark all articles between point and mark as read.\\
 M-u     & (M SPC, M c) Clear all marks from this article and move to the next
 one. [scope]\\ 
 M-U     & Clear all marks from this article and move to the previous one.
-[scope]\\
-%
+[scope]\\ 
+M ?     & (?) Mark this article as dormant (only followups are
+interesting). [scope]\\ 
+M b     & Set a {\bf bookmark} in this article.\\
 M e     & (E, M x) Mark this article as {\bf expirable}. [scope]\\
-%
 M k     & (k) {\bf Kill} all articles with the same subject then select the
-next unread one.\\ 
+next one.\\ 
+M B     & Remove the {\bf bookmark} from this article.\\
+M C     & {\bf Catch-up} the articles that are not ticked.\\
+M D     & Show all {\bf dormant} articles (normally they are hidden unless they
+have any followups).\\
+M H     & Catch-up (mark read) this group to point ({\bf here}).\\
 M K     & (C-k) {\bf Kill} all articles with the same subject as this one.\\
-%
-M C     & {\bf Catch-up} the articles that are not ticked and not dormant.\\
+C-w     & Mark all articles between point and mark as read.\\
+M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
 M C-c   & {\bf Catch-up} all articles in this group.\\
-M H     & Catch-up (mark read) this group to point (to-{\bf here}).\\
-%
-M b     & Set a {\bf bookmark} in this article.\\
-M B     & Remove the {\bf bookmark} from this article.\\
-%
 M M-r   & (x) Expunge all {\bf read} articles from this group.\\
+M M-D   & Hide all {\bf dormant} articles.\\
 M M-C-r & Expunge all articles having a given mark.\\
-M S     & (C-c M-C-s) {\bf Show} all expunged articles.\\
-M M C-h & Displays some more keys doing ticking slightly differently.\\
 \end{keys}
-The variable `gnus-summary-goto-unread' controls what happens after a mark
-has been set (C-x C-i g Setting Marks RET)
-}}
 
-\newcommand{\MarkByScore}{%
-\begin{keys}{M V m}
+\subsubsec{Mark Based on Score}
+\begin{keys}{M s m}
 M V c   & {\bf Clear} all marks from all high-scored articles. [score]\\
 M V k   & {\bf Kill} all low-scored articles. [score]\\
 M V m   & Mark all high-scored articles with a given {\bf mark}. [score]\\
 M V u   & Mark all high-scored articles as interesting (tick them). [score]\\
-\end{keys}}}
+\end{keys}
 
-\newcommand{\ProcessMark}{%
-{\esamepage 
-These commands set and remove the process mark (\#). You only need to use
+\subsubsec{The Process Mark}
+{\samepage 
+These commands set and remove the process mark \#. You only need to use
 it if the set of articles you want to operate on is non-contiguous. Else
 use a numeric prefix.\\*
 \begin{keys}{M P R}
+M P a   & Mark {\bf all} articles (in series order).\\
 M P p   & (\#, M \#) Mark this article.\\
-M P u   & (M-\#, M M-\#) \textbf{unmark} this article.\\
-M P b   & Mark all articles in {\bf buffer}.\\
 M P r   & Mark all articles in the {\bf region}.\\
-M P R   & Mark all articles matching a {\bf regexp}.\\
-M P t   & Mark all articles in this (sub){\bf thread}.\\
 M P s   & Mark all articles in the current {\bf series}.\\
+M P t   & Mark all articles in this (sub){\bf thread}.\\
+M P u   & (M-\#, M M-\#) {\bf Unmark} this article.\\
+M P R   & Mark all articles matching a {\bf regexp}.\\
 M P S   & Mark all {\bf series} that already contain a marked article.\\
-M P a   & Mark {\bf all} articles (in series order).\\
-M P U   & \textbf{unmark} all articles.\\
-%
-M P i   & {\bf Invert} the list of process-marked articles.\\
-M P k   & Push the current process-mark set onto stack and unmark
-all articles.\\
-M P y   & Pop process-mark set from stack and restore it.\\
-\end{keys}}}
-
-\newcommand{\Limiting}{%
-{\esamepage
-\begin{keys}{/M}
-//   & (/s) Limit the summary-buffer to articles matching {\bf subject}.\\
-/a   & Limit the summary-buffer to articles matching {\bf author}.\\
-/x   & Limit depending on ``extra'' headers.\\
-/u   & (x) Limit to {\bf unread} articles.
-[Prefix: also exclude ticked and dormant articles]\\
-/m   & Limit to articles marked with specified {\bf mark}.\\
-/t   & Ask for a number and exclude articles younger than that many days.
-[Prefix: exclude older articles]\\
-/n   & Limit to current article. [p/p]\\
-/w   & Pop the previous limit off the stack and restore it.
-[Prefix: pop all limits]\\
-/v   & Limit to score. [score]\\
-/E   & (M S) Include all expunged articles in the limit.\\
-/D   & Include all dormant articles in the limit.\\
-/*   & Include all cached articles in the limit.\\
-/d   & Exclude all dormant articles from the limit.\\
-/M   & Exclude all marked articles.\\
-/T   & Include all articles from the current thread in the limit.\\
-/c   & Exclude all dormant articles that have no children from the limit.\\
-/C   & Mark all excluded unread articles as read.
-[Prefix: also mark ticked and dormant articles]\\
-\end{keys}}}
-
-\newcommand{\OutputArticles}{% formerly \Osubmap
-{\esamepage
+M P U   & {\bf Unmark} all articles.\\
+\end{keys}
+}}
+
+\def\Osubmap{
+\subsec{Output Articles}
 \begin{keys}{O m}
-O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
-O b     & Save this article's {\bf body} in plain file format [p/p]\\
 O f     & Save this article in plain {\bf file} format. [p/p]\\
-O F     & like O f, but overwrite file's contents. [p/p]\\
 O h     & Save this article in {\bf mh} folder format. [p/p]\\
 O m     & Save this article in {\bf mail} format. [p/p]\\
+O o     & (o, C-o) Save this article using the default article saver. [p/p]\\
+O p     & ($\mid$) Pipe this article to a shell command. [p/p]\\
 O r     & Save this article in {\bf rmail} format. [p/p]\\
 O v     & Save this article in {\bf vm} format. [p/p]\\
-O p     & ($\mid$) Pipe this article to a shell command. [p/p]\\
-\end{keys}}}
-
-\newcommand{\PostReplyetc}{% formerly \Ssubmap
-{\esamepage
-These commands put you in a separate news or mail buffer. See the section
-about composing messages for more information.
-%After
-%editing the article, send it by pressing C-c C-c.  If you are in a
-%foreign group and want to post the article using the foreign server, give
-%a prefix to C-c C-c.\\* 
+\end{keys}
+}
+
+\def\Ssubmap{
+\subsec{Post, Followup, Reply, Forward, Cancel}
+{\samepage
+These commands put you in a separate post or mail buffer. After
+editing the article, send it by pressing C-c C-c.  If you are in a
+foreign group and want to post the article using the foreign server, give
+a prefix to C-c C-c.\\* 
 \begin{keys}{S O m}
-S p     & (a) {\bf Post} an article to this group.\\
+S b     & {\bf Both} post a followup to this article, and send a reply.\\
+S c     & (C) {\bf Cancel} this article (only works if it is your own).\\
 S f     & (f) Post a {\bf followup} to this article.\\
-S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
-S o p   & Forward this article as a {\bf post} to a newsgroup.
-[Prefix: include all headers]\\
-S M-c   & Send a complaint about excessive crossposting to the author of this
-article. [p/p]\\
-%
 S m     & (m) Send {\bf a} mail to some other person.\\
+S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.\\
+S o p   & Forward this article as a {\bf post} to a newsgroup.\\
+S p     & (a) {\bf Post} an article to this group.\\
 S r     & (r) Mail a {\bf reply} to the author of this article.\\
-S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
-S w     & Mail a {\bf wide} reply to this article.\\
-S W     & Mail a {\bf wide} reply to this article.\\
-S o m   & (C-c C-f) Forward this article by {\bf mail} to a person.
-[Prefix: include all headers]\\
-S D b   & Resend {\bf bounced} mail.\\
-S D r   & {\bf Resend} mail to a different person.\\
-%
-S n     & Post a followup via {\bf news} even if you got the message
-through mail.\\
-S N     & Post a followup via {\bf news} and include the original mail.
-[p/p]\\
-%
-S c     & (C) {\bf Cancel} this article (only works if it is your own).\\
 S s     & {\bf Supersede} this article with a new one (only for own
-articles).\\
-%
+articles).\\ 
+S u     & {\bf Uuencode} a file and post it as a series.\\
+S B     & {\bf Both} post a followup, send a reply, and include the
+original. [p/p]\\ 
+S F     & (F) Post a {\bf followup} and include the original. [p/p]\\
 S O m   & Digest these series and forward by {\bf mail}. [p/p]\\
 S O p   & Digest these series and forward as a {\bf post} to a newsgroup.
 [p/p]\\ 
-%
-S u     & {\bf Uuencode} a file and post it as a series.\\
+S R     & (R) Mail a {\bf reply} and include the original. [p/p]\\
 \end{keys}
 If you want to cancel or supersede an article you just posted (before it
 has appeared on the server), go to the *post-news* buffer, change
 `Message-ID' to `Cancel' or `Supersedes' and send it again with C-c C-c.
 }}
 
-\newcommand{\Threading}{% formerly \Tsubmap
-{\esamepage
-\begin{keys}{T M-\#}
+\def\Tsubmap{
+\subsec{Thread Commands}
+\begin{keys}{T \#}
 T \#    & Mark this thread with the process mark.\\
-T M-\#  & Remove process-marks from this thread.\\
-%
-T t     & Re-{\bf thread} the current article's thread.\\
-% movement
-T n     & (M-C-f) Go to the {\bf next} thread. [distance]\\
-T p     & (M-C-b) Go to the {\bf previous} thread. [distance]\\
-T d     & {\bf Descend} this thread. [distance]\\
-T u     & Ascend this thread ({\bf up}-thread). [distance]\\
-T o     & Go to the top of this thread.\\
-%
-T s     & {\bf Show} the thread hidden under this article.\\
+T d     & Move to the next article in this thread ({\bf down}). [distance]\\
 T h     & {\bf Hide} this (sub)thread.\\
-%
 T i     & {\bf Increase} the score of this thread.\\
-T l     & (M-C-l) {\bf Lower} the score of this thread.\\
-%
 T k     & (M-C-k) {\bf Kill} the current (sub)thread. [Negative prefix:
 tick it, positive prefix: unmark it.]\\
-%
+T l     & (M-C-l) {\bf Lower} the score of this thread.\\
+T n     & (M-C-f) Go to the {\bf next} thread. [distance]\\
+T p     & (M-C-b) Go to the {\bf previous} thread. [distance]\\
+T s     & {\bf Show} the thread hidden under this article.\\
+T u     & Move to the previous article in this thread ({\bf up}). [distance]\\
 T H     & {\bf Hide} all threads.\\
 T S     & {\bf Show} all hidden threads.\\
 T T     & (M-C-t) {\bf Toggle} threading.\\
-\end{keys}}}
+\end{keys}
+}
 
-\newcommand{\Scoring}{% formerly \Vsubmap
-{\esamepage
+\def\Vsubmap{
+\subsec{Score (Value) Commands}
+{\samepage
 Read about Adaptive Scoring in the online info.\\*
 \begin{keys}{\bf A p m l}
 V a     & {\bf Add} a new score entry, specifying all elements.\\
 V S     & Display the {\bf score} of this article.\\
 \bf A p m l& Make a scoring entry based on this article.\\
 \end{keys}
+
 The four letters stand for:\\*
 \quad \B{A}ction: I)ncrease, L)ower;\\*
 \quad \B{p}art: a)utor (from), s)ubject, x)refs (cross-posting), d)ate, l)ines,
 \begin{keys}{C-c C-c}
 C-c C-c & Finish editing the score file.\\
 C-c C-d & Insert the current {\bf date} as number of days.\\
-\end{keys}}}
+\end{keys}
+}}
+
+\def\Wsubmap{
+\subsec{Wash the Article Buffer}
+\begin{keys}{W C-c}
+W b     & Make Message-IDs and URLs in the article to mouse-clickable {\bf
+  buttons}.\\  
+W c     & Remove extra {\bf CRs} (^M) from the article.\\
+W f     & Look for and display any X-{\bf Face} headers.\\
+W l     & (w) Remove page breaks ({\bf^L}) from the article.\\
+W m     & Toggle {\bf MIME} processing.\\
+W o     & Treat {\bf overstrike} or underline (^H\_) in the article.\\
+W q     & Treat {\bf quoted}-printable in the article.\\
+W r     & (C-c C-r) Do a Caesar {\bf rotate} (rot13) on the article.\\
+W t     & (t) {\bf Toggle} the displaying of all headers.\\
+v       & Toggle permanent {\bf verbose} displaying of all headers.\\
+W w     & Do word {\bf wrap} in the article.\\
+W T e   & Convert the article timestamp to time {\bf elapsed} since sent.\\
+W T l   & Convert the article timestamp to the {\bf local} timezone.\\
+W T u   & (W T z) Convert the article timestamp to {\bf UTC} ({\bf Zulu},
+GMT).\\ 
+\end{keys}
+
+\subsubsec{Hide/Highlight Parts of the Article}
+\begin{keys}{W W C-c}
+W W a   & Hide {\bf all} unwanted parts. Calls W W h, W W s, W W C-c.\\
+W W c   & Hide article {\bf citation}.\\
+W W h   & Hide article {\bf headers}.\\
+W W s   & Hide article {\bf signature}.\\
+W W C-c & Hide article {\bf citation} using a more intelligent algorithm.\\
+%\end{keys}
+%
+%\subsubsec{Highlight Parts of the Article}
+%\begin{keys}{W H A}
+W H a   & Highlight {\bf all} parts. Calls W b, W H c, W H h, W H s.\\
+W H c   & Highlight article {\bf citation}.\\
+W H h   & Highlight article {\bf headers}.\\
+W H s   & Highlight article {\bf signature}.\\
+\end{keys}
+}
 
-\newcommand{\ExtractSeries}{% formerly \Xsubmap
-{\esamepage
+\def\Xsubmap{
+\subsec{Extract Series (Uudecode etc)}
+{\samepage
 Gnus recognizes if the current article is part of a series (multipart
 posting whose parts are identified by numbers in their subjects, e.g.{}
 1/10\dots10/10) and processes the series accordingly. You can mark and
 \end{keys}
 }}
 
-\newcommand{\ExitSummary}{% formerly \Zsubmap
-{\esamepage
+\def\Zsubmap{
+\subsec{Exit the Current Group}
 \begin{keys}{Z G}
-Z Z     & (q, Z Q) Exit this group.\\
-Z E     & (Q) {\bf Exit} without updating the group information.\\
-%
 Z c     & (c) Mark all unticked articles as read ({\bf catch-up}) and exit.\\
-Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
-%
 Z n     & Mark all articles as read and go to the {\bf next} group.\\
+Z C     & Mark all articles as read ({\bf catch-up}) and exit.\\
+Z E     & (Q) {\bf Exit} without updating the group information.\\
+Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
 Z N     & Exit and go to {\bf the} next group.\\
 Z P     & Exit and go to the {\bf previous} group.\\
-%
-Z G     & (M-g) Check for new articles in this group ({\bf get}).\\
 Z R     & Exit this group, and then enter it again ({\bf reenter}).
 [Prefix: select all articles, read and unread.]\\
-Z s     & Update and save the dribble buffer. [Prefix: save .newsrc* as well]\\
-\end{keys}}}
+Z Z     & (q, Z Q) Exit this group.\\
+\end{keys}
+}
 
-\newcommand{\MsgCompositionGeneral}{%
-Press C-c ? in the composition-buffer to get this information.
-{\esamepage
+\def\ArticleMode{
+\sec{Article Mode}
+{\samepage
+% All keys for Summary mode also work in Article mode.
+The normal navigation keys work in Article mode.
+Some additional keys are:\\*
 \begin{keys}{C-c C-m}
-% sending
-C-c C-c & Send message and exit. [Prefix: send via foreign server]\\
-C-c C-s & Send message. [Prefix: send via foreign server]\\
-C-c C-d & Don't send message (save as \textbf{draft}).\\
-C-c C-k & \textbf{Kill} message-buffer.\\
-C-c C-m & {\bf Mail} reply to the address near point.
-[Prefix: include the original]\\
-% modify headers/body
-C-c C-t & Paste the recipient's address into \textbf{To:}-field.\\
-C-c C-n & Insert a \textbf{Newsgroups:}-header.\\
-C-c C-o & Sort headers.\\
-C-c C-e & \textbf{Elide} region.\\
-C-c C-v & Kill everything outside region.\\
-C-c C-r & Do a \textbf{Rot-13} on the body.\\
-C-c C-w & Insert signature (from `message-signature-file').\\
-C-c C-z & Kill everything up to signature.\\
-C-c C-y & \textbf{Yank} original message.\\
-C-c C-q & Fill the yanked message.\\
-\end{keys}}}
-
-\newcommand{\MsgCompositionMovementArticle}{%
-The following functions create the header-field if necessary.
-{\esamepage
-\begin{keys}{C-c C-f C-u}
-C-c TAB & Move to \textbf{signature}.\\
-C-c C-b & Move to \textbf{body}.\\
-C-c C-f C-t & Move to \textbf{To:}.\\
-C-c C-f C-c & Move to \textbf{Cc:}.\\
-C-c C-f C-b & Move to \textbf{Bcc:}.\\
-C-c C-f C-w & Move to \textbf{Fcc:}.\\
-C-c C-f C-s & Move to \textbf{Subject:}.\\
-C-c C-f C-r & Move to \textbf{Reply-To:}.\\
-C-c C-f C-f & Move to \textbf{Followup-To:}.\\
-C-c C-f C-n & Move to \textbf{Newsgroups:}.\\
-C-c C-f C-u & Move to \textbf{Summary:}.\\
-C-c C-f C-k & Move to \textbf{Keywords:}.\\
-C-c C-f C-d & Move to \textbf{Distribution:}.\\
-\end{keys}}}
-
-\newcommand{\MsgCompositionMML}{%
-{\esamepage
-\begin{keys}{M-m P}
-M-m f   & (C-c C-a) Attach \textbf{file}.\\
-M-m b   & Attach contents of \textbf{buffer}.\\
-M-m e   & Attach \textbf{external} file (ftp..).\\
-M-m P   & Create MIME-\textbf{preview} (new buffer).\\
-M-m v   & \textbf{Validate} article.\\
-M-m p   & Insert \textbf{part}.\\
-M-m m   & Insert \textbf{multi}-part.\\
-M-m q   & \textbf{Quote} region.\\
-% TODO: narrow headers (M-m n) ?
-\end{keys}}}
-
-%% TODO:
-\newcommand{\ServerMode}{%
-{\esamepage
-To enter this mode, press `\^' while in Group mode.\\*
+RET     & (middle mouse button) Activate the button at point to follow
+an URL or Message-ID.\\
+TAB     & Move the point to the next button.\\
+h       & (s) Go to the {\bf header} line of the article in the {\bf
+summary} buffer.\\ 
+C-c ^   & Get the article with the Message-ID near point.\\
+C-c C-m & {\bf Mail} reply to the address near point (prefix: include the
+original).\\ 
+\end{keys}
+}}
+
+\def\ServerMode{
+\sec{Server Mode}
+{\samepage
+To enter this mode, press `^' while in Group mode.\\*
 \begin{keys}{SPC}
 SPC     & (RET) Browse this server.\\
 a       & {\bf Add} a new server.\\
 k       & {\bf Kill} this server. [scope]\\
 l       & {\bf List} all servers.\\
 q       & Return to the group buffer ({\bf quit}).\\
-s       & Request that the server scan its sources for new articles.\\
-g       & Request that the server regenerate its data.\\
 y       & {\bf Yank} the previously killed server.\\
-\end{keys}}}
+\end{keys}
+}}
 
-\newcommand{\BrowseServer}{%
-{\esamepage
+\def\BrowseServer{
+\sec{Browse Server Mode}
+{\samepage
 To enter this mode, press `B' while in Group mode.\\*
 \begin{keys}{RET}
 RET     & Enter the current group.\\
 p       & Go to the {\bf previous} group. [distance]\\
 q       & (l) {\bf Quit} browse mode.\\
 u       & Subscribe to the current group. [scope]\\
-\end{keys}}}
+\end{keys}
+}}