Mercurial > hg > xemacs-beta
diff man/auctex/auc-tex.texi @ 100:4be1180a9e89 r20-1b2
Import from CVS: tag r20-1b2
author | cvs |
---|---|
date | Mon, 13 Aug 2007 09:15:11 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/man/auctex/auc-tex.texi Mon Aug 13 09:15:11 2007 +0200 @@ -0,0 +1,2702 @@ +\input texinfo +@setfilename auctex +@settitle AUC TeX +@c footnotestyle separate +@c paragraphindent 2 +@comment %**end of header +@iftex +@tolerance 10000 +@end iftex + +@c $Id: auc-tex.texi,v 1.1 1997/02/20 02:05:18 steve Exp $ + +@finalout +@titlepage +@title AUC @TeX{} +@subtitle A much enhanced La@TeX{} mode for GNU Emacs. +@subtitle Version 9.7 + +@author by Kresten Krab Thorup +@author updated for 6.1 to 9.7 by Per Abrahamsen +@page +@vskip 0pt plus 1filll +Copyright @copyright{} 1992 Kresten Krab Thorup @* +Copyright @copyright{} 1993, 1994,1995 Per Abrahamsen + +Permission is granted to make and distribute verbatim copies of +this manual provided the copyright notice and this permission notice +are preserved on all copies. + +@ignore +Permission is granted to process this file through TeX and print the +results, provided the printed document carries copying permission +notice identical to this one except for the removal of this paragraph +(this paragraph not being relevant to the printed manual). +@end ignore + +Permission is granted to copy and distribute modified versions of this +manual under the conditions for verbatim copying, provided also that the +section entitled ``Copying'' is included exactly as in the original, and +provided that the entire resulting derived work is distributed under the +terms of a permission notice identical to this one. + +Permission is granted to copy and distribute translations of this manual +into another language, under the above conditions for modified versions, +except that this permission notice may be stated in a translation +approved by the Free Software Foundation. +@end titlepage +@page + +@ifinfo +@node top, Copying, (dir), (dir) +@top AUC @TeX{} + +AUC @TeX{} is an integrated environment for editing La@TeX{} and +@TeX{} files.@refill + +This file documents AUC @TeX{} version 9.7. + +Although AUC @TeX{} contains a large number of features, there are no +reasons to despair. You can continue to write @TeX{} and La@TeX{} +documents the way you are used to, and only start using the multiple +features in small steps. AUC @TeX{} is not monolithic, each feature +described in this manual is useful by itself, but together they provide +an environment where you will make very few LaTeX errors, and makes it +easy to find the errors that may slip through anyway. + +If you want to make AUC TeX aware of style files and multi-file +documents right away, insert the following in your @file{.emacs} file. +@lisp +(setq TeX-auto-save t) +(setq TeX-parse-self t) +(setq-default TeX-master nil) +@end lisp + +NOTE: This documentation is preliminary. It should however cover most +important points. Corrections or perhaps rewrites of sections +are VERY WELCOME.@refill + +Kresten Krab Thorup (6.0) @* +Per Abrahamsen (later updates) + +There is a mailing list for discussion about AUC @TeX{} and announcement +of alpha releases, write to @samp{auc-tex-request@@sunsite.auc.dk} to join +it. Send contributions to @samp{auc-tex@@sunsite.auc.dk}. + +Bug reports, suggestions for new features, and pleas for help should go +to either @samp{auc-tex_mgr@@iesd.auc.dk} (the AUC @TeX{} managers), or +to @samp{auc-tex@@sunsite.auc.dk} (the mailing list) if they might have +general interest. Please use the command @kbd{M-x +TeX-submit-bug-report} to report bugs if possible.@refill + +@end ifinfo + +@menu +* Copying:: Copying +* Introduction:: Why AUC @TeX{} is good for you. +* Frequently Used Commands:: Inserting Frequently Used Commands +* Advanced Features:: Advanced Editing Features +* Formatting:: Formatting and Printing +* Multifile:: Multifile Documents +* Parsing Files:: Automatic Parsing of @TeX{} files. +* I18n:: Internationalization +* Automatic:: Automatic Customization +* Style Files:: Writing Your own Style Support +* Installation:: How to install AUC @TeX{} +* History:: The History of AUC @TeX{} +* Projects:: Wishlist +* Credit:: Credit +* Key Index:: Key Index +* Function Index:: Function Index +* Variable Index:: Variable Index +* Concept Index:: Concept Index + +@end menu + +@node Copying, Introduction, top, top +@unnumbered Copying +@cindex Copying +@cindex Copyright +@cindex GPL +@cindex General Public License +@cindex License +@cindex Free +@cindex Free software +@cindex Distribution +@cindex Right +@cindex Warranty + +(This text stolen from the @TeX{}info 2.16 distribution). + +The programs currently being distributed that relate to AUC @TeX{} +include lisp files for GNU Emacs. These programs are @dfn{free}; this +means that everyone is free to use them and free to redistribute them on +a free basis. The AUC @TeX{} related programs are not in the public +domain; they are copyrighted and there are restrictions on their +distribution, but these restrictions are designed to permit everything +that a good cooperating citizen would want to do. What is not allowed +is to try to prevent others from further sharing any version of these +programs that they might get from you.@refill + + Specifically, we want to make sure that you have the right to give +away copies of the programs that relate to AUC @TeX{}, that you receive +source code or else can get it if you want it, that you can change these +programs or use pieces of them in new free programs, and that you know +you can do these things.@refill + + To make sure that everyone has such rights, we have to forbid you to +deprive anyone else of these rights. For example, if you distribute +copies of the AUC @TeX{} related programs, you must give the recipients all +the rights that you have. You must make sure that they, too, receive or +can get the source code. And you must tell them their rights.@refill + + Also, for our own protection, we must make certain that everyone finds +out that there is no warranty for the programs that relate to AUC @TeX{}. +If these programs are modified by someone else and passed on, we want +their recipients to know that what they have is not what we distributed, +so that any problems introduced by others will not reflect on our +reputation.@refill + + The precise conditions of the licenses for the programs currently +being distributed that relate to AUC @TeX{} are found in the General +Public Licenses that accompany them.@refill + +@node Introduction, Frequently Used Commands, Copying, top +@include intro.texi + +@node Frequently Used Commands, Advanced Features, Introduction, top +@chapter Inserting Frequently Used Commands + +The most commonly used commands/macros of AUC @TeX{} are those which +simply insert templates for often used @TeX{} and/or La@TeX{} +constructs, like font changes, handling of environments, etc. +These features are very simple, and easy to learn, and help you +avoiding stupid mistakes like mismatched braces, or +@samp{\begin@{@}}-@samp{\end@{@}} pairs.@refill + +@menu +* Quotes:: Inserting double quotes +* Font Specifiers:: Inserting Font Specifiers +* Sectioning:: Inserting chapters, sections, etc. +* Environments:: Inserting Environment Templates +@end menu + +@node Quotes, Font Specifiers, Frequently Used Commands, Frequently Used Commands +@section Insertion of Quotes, Dollars, and Braces + +@cindex Quotes +@cindex Double quotes +@cindex Braces +@cindex Brackets +@cindex Dollars +@cindex Math mode delimiters +@cindex Matching dollar signs +@cindex Display math mode + +In @TeX{} literal double quotes @samp{"like this"} are seldom used, +instead two single quotes are used @samp{``like this''}. To help you +insert these efficiently, AUC @TeX{} allows you to continue to press +@kbd{"} to insert two single quotes. To get a literal double quote, +press @kbd{"} twice. + +@deffn Command TeX-insert-quote @var{count} +@kindex " +(@kbd{"}) Insert the appropriate quote marks for TeX. + +Inserts the value of @code{TeX-open-quote} (normally @samp{``}) or +@code{TeX-close-quote} (normally @samp{''}) depending on the context. +With prefix argument, always inserts @samp{"} characters.@refill +@end deffn + +@defopt TeX-open-quote +String inserted by typing @kbd{"} to open a quotation. +@end defopt + +@defopt TeX-close-quote +String inserted by typing @kbd{"} to open a quotation. +@end defopt + +If you include the style file @file{german} @code{TeX-open-quote} and +@code{TeX-close-quote} will both be set to @samp{"}. + +In AUC @TeX{}, dollar signs should match like they do in @TeX{}. This +has been partially implemented, we assume dollar signs always match +within a paragraph. The first @samp{$} you insert in a paragraph will +do nothing special. The second @samp{$} will match the first. This +will be indicated by moving the cursor temporarily over the first dollar +sign. If you enter a dollar sign that matches a double dollar sign +@samp{$$} AUC @TeX{} will automatically insert two dollar signs. If you +enter a second dollar sign that matches a single dollar sign, the single +dollar sign will automatically be converted to a double dollar sign. + +@deffn Command TeX-insert-dollar @var{arg} +@kindex $ +(@kbd{$}) Insert dollar sign. + +Show matching dollar sign if this dollar sign end the @TeX{} math mode. +Ensure double dollar signs match up correctly by inserting extra +dollar signs when needed. + +With optional @var{arg}, insert that many dollar signs. +@end deffn + +To avoid unbalanced braces, it is useful to insert them pairwise. You +can do this by typing @kbd{C-c @{}. + +@deffn Command TeX-insert-braces +@kindex C-c @{ +(@kbd{C-c @{}) Make a pair of braces and position the cursor +to type inside of them. +@end deffn + +@node Font Specifiers, Sectioning, Quotes, Frequently Used Commands +@section Inserting Font Specifiers + +@cindex Fonts +@cindex Font macros +@cindex Changing font +@cindex Specifying a font + +Perhaps the most used keyboard commands of AUC @TeX{} are the short-cuts +available for easy insertion of font changing macros. They all put the +font change inside a @TeX{} group, a practice that help preventing +subtle errors. The most significant advantage of using these command +instead of typing it in yourself, is that the braces will always match +correctly. + +If you give an argument (that is, type @kbd{C-u}) to the font command, +the innermost font will be replaced, i.e. the font in the @TeX{} group +around point will be changed. The following table shows the available +commands, with @code{@point{}} indicating the position where the text +will be inserted.@refill + +@table @kbd +@item C-c C-f C-r +@kindex C-c C-f C-r +@cindex @code{\textrm} +Insert roman @r{@{\textrm @point{}@}} text. + +@item C-c C-f C-b +@kindex C-c C-f C-b +@cindex @code{\textbf} +Insert @b{bold face} @samp{@{\textbf @point{}@}} text. + +@item C-c C-f C-i +@kindex C-c C-f C-i +@cindex @code{\textit} +Insert @i{italics} @samp{@{\textit @point{}\/@}} text. + +@item C-c C-f C-e +@kindex C-c C-f C-e +@cindex @code{\emph} +Insert @i{emphasized} @samp{@{\emph @point{}\/@}} text. + +@item C-c C-f C-s +@kindex C-c C-f C-s +@cindex @code{\textsl} +Insert @i{slanted} @samp{@{\textsl @point{}\/@}} text. + +@item C-c C-f C-t +@kindex C-c C-f C-t +@cindex @code{\texttt} +Insert @t{typewriter} @samp{@{\texttt @point{}@}} text. + +@item C-c C-f C-c +@kindex C-c C-f C-c +@cindex @code{\textsc} +Insert @sc{small caps} @samp{@{\textsc @point{}@}} text. + +@item C-c C-f C-d +@kindex C-c C-f C-c +@cindex Deleting fonts +Delete the innermost font specification containing point. + +@end table + +@deffn Command TeX-font @var{arg} +@kindex C-c C-f +(@kbd{C-c C-f}) Insert template for font change command. + +If @var{replace} is not nil, replace current font. @var{what} +determines the font to use, as specified by @code{TeX-font-list}. +@end deffn + +@defopt TeX-font-list +List of fonts used by TeX-font. + +Each entry is a list with three elements. The first element is the +key to activate the font. The second element is the string to insert +before point, and the third element is the string to insert after +point. An optional fourth element means always replace if not nil. +@end defopt + +@node Sectioning, Environments, Font Specifiers, Frequently Used Commands +@section Inserting chapters, sections, etc. +@cindex Sectioning +@cindex Sections +@cindex Chapters +@cindex @code{\chapter} +@cindex @code{\section} +@cindex @code{\subsection} +@cindex @code{\label} + +Insertion of sectioning macros, that is @samp{\chapter}, +@samp{\section}, @samp{\subsection}, etc. and accompanying +@samp{\label}'s may be eased by using @kbd{C-c C-s}. This command is +highly customizable, the following describes the default behavior. + +When invoking you will be asked for a section macro to insert. An +appropriate default is automatically selected by AUC @TeX{}, that is +either: at the top of the document; the top level sectioning for that +document style, and any other place: The same as the last occurring +sectioning command. + +Next, you will be asked for the actual name of that section, and +last you will be asked for a label to be associated with that section. +The label will be prefixed by the value specified in +@code{LaTeX-section-hook}. + +@deffn Command LaTeX-section @var{arg} +@kindex C-c C-s +(@kbd{C-c C-s}) Insert a sectioning command. + +Determine the type of section to be inserted, by the argument +@var{arg}.@refill + +@itemize @bullet +@item +If @var{arg} is nil or missing, use the current level. +@item +If @var{arg} is a list (selected by C-u), go downward one level. +@item +If @var{arg} is negative, go up that many levels. +@item +If @var{arg} is positive or zero, use absolute level: +@itemize + +@item +0 : part +@item +1 : chapter +@item +2 : section +@item +3 : subsection +@item +4 : subsubsection +@item +5 : paragraph +@item +6 : subparagraph +@end itemize +@end itemize + +The following variables can be set to customize the function. + +@vtable @code +@item LaTeX-section-hook +Hooks to be run when inserting a section. +@item LaTeX-section-label +Prefix to all section references. +@end vtable + +@end deffn + +The precise behavior of @code{LaTeX-section} is defined by the contents +of @code{LaTeX-section-hook}. + +@defopt LaTeX-section-hook +List of hooks to run when a new section is inserted. + +The following variables are set before the hooks are run + +@table @var +@item level +Numeric section level, default set by prefix arg to @code{LaTeX-section}. +@item name +Name of the sectioning command, derived from @var{level}. +@item title +The title of the section, default to an empty string. +@item toc +Entry for the table of contents list, default nil. +@item done-mark +Position of point afterwards, default nil meaning after the inserted +text. +@end table + +A number of hooks are already defined. Most likely, you will be able to +get the desired functionality by choosing from these hooks. + +@ftable @code +@item LaTeX-section-heading +Query the user about the name of the sectioning command. Modifies +@var{level} and @var{name}. +@item LaTeX-section-title +Query the user about the title of the section. Modifies @var{title}. +@item LaTeX-section-toc +Query the user for the toc entry. Modifies @var{toc}. +@item LaTeX-section-section +Insert La@TeX{} section command according to @var{name}, @var{title}, +and @var{toc}. If @var{toc} is nil, no toc entry is inserted. If +@var{toc} or @var{title} are empty strings, @var{done-mark} will be +placed at the point they should be inserted. +@item LaTeX-section-label +Insert a label after the section command. Controlled by the variable +@code{LaTeX-section-label}. +@end ftable + +To get a full featured @code{LaTeX-section} command, insert + +@lisp +(setq LaTeX-section-hook + '(LaTeX-section-heading + LaTeX-section-title + LaTeX-section-toc + LaTeX-section-section + LaTeX-section-label)) +@end lisp + +in your @file{.emacs} file. +@end defopt + +The behavior of @code{LaTeX-section-label} is determined by the +variable @code{LaTeX-section-label}.@refill + +@defopt LaTeX-section-label +Default prefix when asking for a label. + +If it is a string, it is used unchanged for all kinds of sections. +If it is nil, no label is inserted. +If it is a list, the list is searched for a member whose car is equal +to the name of the sectioning command being inserted. The cdr is then +used as the prefix. If the name is not found, or if the cdr is nil, +no label is inserted. + +@cindex Prefix for labels +@cindex Label prefix +@cindex Labels +By default, chapters have a prefix of @samp{cha:} while sections and +subsections have a prefix of @samp{sec:}. Labels are not automatically +inserted for other types of sections. +@end defopt + +@node Environments, , Sectioning, Frequently Used Commands +@section Inserting Environment Templates +@cindex Environments +@cindex @samp{\begin} +@cindex @samp{\end} + +A large apparatus is available that supports insertions of environments, +that is @samp{\begin@{@}} --- @samp{\end@{@}} pairs. + +AUC @TeX{} is aware of most of the actual environments available in a +specific document. This is achieved by examining your +@samp{\documentstyle} command, and consulting a precompiled list of +environments available in a large number of styles. + +You insert an environment with @kbd{C-c C-e}, and select an environment +type. Depending on the environment, AUC @TeX{} may ask more questions +about the optional parts of the selected environment type. With +@kbd{C-u C-c C-e} you will change the current environment. + +@deffn Command LaTeX-environment @var{arg} +@kindex C-c C-e +(@kbd{C-c C-e}) AUC @TeX{} will prompt you for an environment +to insert. At this prompt, you may press @key{TAB} or @key{SPC} to +complete a partially written name, and/or to get a list of available +environments. After selection of a specific environment AUC @TeX{} may +prompt you for further specifications. + +If the optional argument @var{arg} is not-nil (i.e. you have given a +prefix argument), the current environment is modified and no new +environment is inserted. +@end deffn + +As a default selection, AUC @TeX{} will suggest the environment last +inserted or, as the first choice the value of the variable +@code{LaTeX-default-environment}. + +@defopt LaTeX-default-environment +Default environment to insert when invoking @samp{LaTeX-environment} +first time. +@end defopt + +If the document is empty, or the cursor is placed at the top of the +document, AUC @TeX{} will default to insert a `document' environment. + +Most of these are described further in the following sections, and you +may easily specify more, as described in `Customizing environments'. + +@menu +* Floats:: Floats +* Itemize-like:: Itemize-like +* Tabular-like:: Tabular-like +* Customizing environments:: Customizing environments +@end menu + +You can close the current environment with @kbd{C-c ]}, but we suggest +that you use @kbd{C-c C-e} to insert complete environments instead. + +@deffn Command LaTeX-close-environment +@kindex C-c ] +(@kbd{C-c ]}) Insert an @samp{\end} that matches the current environment. +@end deffn + +@node Floats, Itemize-like, Environments, Environments +@subsection Floats +@cindex Floats +@cindex Figures +@cindex Figure environment +@cindex Tables +@cindex Table environment + +Figures and tables (i.e., floats) may also be inserted using AUC @TeX{}. +After choosing either `figure' or `table' in the environment list +described above, you will be prompted for a number of additional things. + +@table @var +@item float-to +This field is the option of float environments that controls how they are +placed in the final document. In La@TeX{} this is a sequence of the +letters @samp{htbp} as described in the La@TeX{} manual. The value will +default to the value of @code{LaTeX-float}. +@vindex LaTeX-float + +@item caption +This is the caption of the float. + +@item label +The label of this float. The label will have a default prefix, which is +controlled by the variables @code{LaTeX-figure-label} and +@code{LaTeX-table-label}. +@vindex LaTeX-figure-label +@vindex LaTeX-table-label +@cindex Prefix for labels +@cindex Label prefix +@cindex Labels +@end table + +Moreover, in the case of a `figure' environment, you will be asked if +you want to insert a `center' environment inside the figure. + +@defopt LaTeX-float +Default placement for floats. +@end defopt + +@defopt LaTeX-figure-label +Prefix to use for figure labels. +@end defopt + +@defopt LaTeX-table-label +Prefix to use for table labels. +@end defopt + +@node Itemize-like, Tabular-like, Floats, Environments +@subsection Itemize-like +@cindex Itemize +@cindex Enumerates +@cindex Descriptions +@cindex Items +@cindex \item + +In an itemize-like environment, nodes (i.e., @samp{\item}s) may be +inserted using @kbd{C-c @key{LFD}}. + +@deffn Command LaTeX-insert-item +@kindex C-c @key{LFD} +(@kbd{C-c @key{LFD}}) Close the current item, move to the next line and +insert an appropriate @samp{\item} for the current environment. That is, +`itemize' and `enumerate' will have @samp{\item } inserted, while +`description' will have @samp{\item[]} inserted. +@end deffn + +@node Tabular-like, Customizing environments, Itemize-like, Environments +@subsection Tabular-like + +When inserting Tabular-like environments, that is, `tabular' `array' +etc., you will be prompted for a template for that environment. + +@node Customizing environments, , Tabular-like, Environments +@subsection Customizing environments + +@xref{Adding Environments}, for how to customize the list of known +environments. + +@node Advanced Features, Formatting, Frequently Used Commands, top +@chapter Advanced Editing Features +@cindex Advanced features + +The previous chapter described how to write the main body of the text +easily and with a minimum of errors. In this chapter we will describe +some features for entering more specialized sorts of text, and for +indenting and navigating through the document. + +@menu +* Mathematics:: Entering Mathematics +* Completion:: Completion +* Commenting:: Commenting +* Marking and formatting:: Marking, Formatting and Indenting +* Outline:: Hiding text +@end menu + +@node Mathematics, Completion, Advanced Features, Advanced Features +@section Entering Mathematics +@cindex Mathematics +@cindex Symbols +@cindex Abbreviations + +@TeX{} is written by a mathematician, and has always contained good +support for formatting mathematical text. AUC @TeX{} supports this +tradition, by offering a special minor mode for entering text with many +mathematic symbols. You can enter this mode by typing @kbd{C-c +~}.@refill + +@deffn Command LaTeX-math-mode +@kindex C-c ~ +(@kbd{C-c ~}) Toggle LaTeX-math-mode. This is a minor mode rebinding +the key @code{LaTeX-math-abbrev-prefix} to allow easy typing of +mathematical symbols. @kbd{`} will read a character from the keyboard, +and insert the symbol as specified in @code{LaTeX-math-list}. If given a +prefix argument, the symbol will be surrounded by dollar signs.@refill +@end deffn + +You can use another prefix key (instead of @kbd{`}) by setting the +variable LaTeX-math-abbrev-prefix. + +@defopt LaTeX-math-abbrev-prefix +A string containing the prefix of @code{LaTeX-math-mode} commands; +This value defaults to @kbd{`}. @refill +@end defopt + +The variable @code{LaTeX-math-list} holds the actual mapping. + +@defopt LaTeX-math-list +A list containing key command mappings to use in @code{LaTeX-math-mode}. +The car of each element is the key and the cdr is the macro name. +@end defopt + +The AUC @TeX{} distributions includes a reference card for +@code{LaTeX-math-mode} with a list of all math mode commands. + +@node Completion, Commenting, Mathematics, Advanced Features +@section Completion +@cindex Completion +@cindex Expansion +@cindex Macro expansion +@cindex Macro completion +@cindex Macro arguments +@cindex Arguments to @TeX{} macros + +Emacs lisp programmers probably know the @code{lisp-complete-symbol} +command, usually bound to @kbd{M-@key{TAB}}. Users of the wonderful +ispell mode know and love the @code{ispell-complete-word} command from +that package. Similarly, AUC @TeX{} has a @code{TeX-complete-symbol} +command, usually bound to @kbd{M-@key{TAB}}. Using +@code{LaTeX-complete-symbol} makes it easier to type and remember the +names of long La@TeX{} macros. + +In order to use @code{TeX-complete-symbol}, you should write a backslash +and the start of the macro. Typing @kbd{M-@key{TAB}} will now +complete as much of the macro, as it unambiguously can. For example, if +you type `@samp{\renewc}' and then `@kbd{M-@key{TAB}}, it will expand +to `@samp{\renewcommand}'. + +@deffn Command TeX-complete-symbol +@kindex M-@key{TAB} +(@kbd{M-@key{TAB}}) Complete @TeX{} symbol before point. +@end deffn + +A more direct way to insert a macro is with @code{TeX-insert-macro}, +bound to @kbd{C-c C-m}. It has the advantage over completion that it +knows about the argument of most standard La@TeX{} macros, and will +prompt for them. It also knows about the type of the arguments, so it +will for example give completion for the argument to @samp{\include}. +Some examples are listed below. + +@deffn Command TeX-insert-macro +@kindex C-c C-m +(@kbd{C-c C-m}) Prompt (with completion) for the name of a @TeX{} macro, +and if AUC @TeX{} knows the macro, prompt for each argument. +@end deffn + +As a default selection, AUC @TeX{} will suggest the macro last inserted +or, as the first choice the value of the variable +@code{TeX-default-macro}. + +@defopt TeX-default-macro +Default macro to insert when invoking @code{TeX-insert-macro} first time. +@end defopt + +A faster alternative is to bind the function @code{TeX-electric-macro} +to @samp{\}. This can be done by setting the variable @code{TeX-electric-escape} + +@defopt TeX-electric-escape +If this is non-nil when AUC @TeX{} is loaded, the @TeX{} escape +character @samp{\} will be bound to @code{TeX-electric-macro} +@end defopt + +The difference between @code{TeX-insert-macro} and +@code{TeX-electric-macro} is that space will complete and exit from the +minibuffer in @code{TeX-electric-macro}. Use @key{TAB} if you merely +want to complete. + +@deffn Command TeX-electric-macro +Prompt (with completion) for the name of a @TeX{} macro, +and if AUC @TeX{} knows the macro, prompt for each argument. +Space will complete and exit. +@end deffn + +By default AUC @TeX{} will put an empty set braces @samp{@{@}} after a +macro with no arguments to stop it from eating the next whitespace. +This can be stopped by entering @code{LaTeX-math-mode}, +@pxref{Mathematics}, or by setting @code{TeX-insert-braces} to nil + +@defopt TeX-insert-braces +If non-nil, append a empty pair of braces after inserting a macro. +@end defopt + +Completions work because AUC @TeX{} can analyze @TeX{} files, and store +symbols in emacs lisp files for later retrieval. @xref{Automatic}, for +more information. + +@cindex \cite, completion of +@cindex Bib@TeX{}, completion +@cindex cite, completion of +@cindex bibliography, completion +@cindex citations, completion of +@cindex \label, completion +@cindex \ref, completion +@cindex labels, completion of +AUC @TeX{} will also make completion for many macro arguments, for +example existing labels when you enter a @samp{\ref} macro with +@code{TeX-insert-macro} or @code{TeX-electric-macro}, and Bib@TeX{} +entries when you enter a @samp{\cite} macro. For this kind of +completion to work, parsing must be enabled as described in +@pxref{Parsing Files}. For @samp{\cite} you must also make sure that +the Bib@TeX{} files have been saved at least once after you enabled +automatic parsing on save, and that the basename of the Bib@TeX{} file +does not conflict with the basename of one of @TeX{} files. + +@node Commenting, Marking and formatting, Completion, Advanced Features +@section Commenting + +It is often necessary to comment out temporarily a region of @TeX{} or +La@TeX{} code. This can be done with the commands @kbd{C-c ;} and +@kbd{C-c %}. @kbd{C-c ;} will comment out all lines in the current +region, while @kbd{C-c %} will comment out the current paragraph. To +uncomment, simply type @kbd{C-u - C-c ;} to uncomment all lines in the +region, or @kbd{C-u - C-c %} uncomment all comment lines around point. + +By default, these commands will insert or remove a single @samp{%}. To +insert more than one, give an argument. @kbd{C-u 5 C-c %} will add five +@samp{%} to each line, while @kbd{C-u - 5 C-c %} will remove up to 5 +@samp{%} from each line. + +@deffn Command TeX-comment-region @var{count} +@kindex C-c ; +(@kbd{C-c ;}) Add or remove @samp{%} from the beginning of each line in +the current region, as specified by @var{count}. +@end deffn + +@deffn Command TeX-comment-paragraph @var{count} +@kindex C-c % +(@kbd{C-c %}) Add or remove @samp{%} from the beginning of each line in +the current paragraph, as specified by @var{count}. When removing +@samp{%}'s the paragraph is considered to consist of all preceding and +succeeding lines starting with a @samp{%}, until the first non-comment +line. +@end deffn + +@node Marking and formatting, Outline, Commenting, Advanced Features +@section Marking, Formatting and Indenting +@cindex Formatting +@cindex Filling +@cindex Indenting +@cindex Reformatting +@cindex Reindenting + +AUC @TeX{} contains very advanced handling of indentation and +reformatting of the La@TeX{} source. If you have already tried AUC +@TeX{} with @code{auto-fill-mode} enabled, you may have noted that the +source is automatically indented and formatted as you write it. More +over, AUC @TeX{} is able to format sections of text on demand. + +It is important to realize, that AUC @TeX{} comes with `formatting' in +two fashions. Either letting @TeX{} format the file, or letting AUC +@TeX{} make the ASCII document look better. + +Indentation is done by La@TeX{} environments and by @TeX{} groups, that +is the body of an environment is indented by the value of +@code{LaTeX-indent-level} (default 2). Also, items of an `itemize-like' +environment are indented by the value of @code{LaTeX-item-indent}, +default @minus{}2. This indentation makes it easier to see the +structure of the document, and to catch errors such as a missing close +brace. Thus, the indentation is done for precisely the same reasons +that you would indent ordinary computer programs. +@vindex LaTeX-indent-level +@vindex LaTeX-item-indent + +The following is a short sample of an itemize environment indented by +AUC @TeX{}. If more environment are nested, they are indented +`accumulated' just like most programming languages usually are seen +indented in nested constructs. + +@example +\begin@{itemize@} +\item Insertion of templates for logical-structural compositions such as + environments and sections. +\item Hot-keys for easy access to certain often used constructs, e.g., + font changes, accented letters, and mathematical symbols. +\item Running application programs (such as \TeX), and then parsing + the output so that errors in the document may be located + easily. +\item Support for multi-file documents. +\item Online help for \AllTeX\ error messages. +\item Outlining\Dash i.e., manipulating the document as a composition + of nested/sequential logical constructs. +\item Instant formatting and indentation of the \ascii-document in + order to make it easier to read. +\item `Completion' (and thereby spell-checking) of partially written + control sequences. +\end@{itemize@} +@end example + +You can format and indent single lines, paragraphs, environments, or +sections. + +@table @kbd +@item @key{TAB} +@kindex @key{TAB} +@findex LaTeX-indent-line +@code{LaTeX-indent-line} will indent the current line. + +@item @key{LFD} +@kindex @key{LFD} +@code{reindent-then-newline-and-indent} indents the current line, and +then inserts a new line (much like @key{RET}) and move the cursor to an +appropriate position by the left margin. + +@item M-q +@kindex M-q +Alias for @kbd{C-c C-q C-p} + +@item C-c C-q C-p +@kindex C-c C-q C-p +@findex LaTeX-fill-paragraph +@code{LaTeX-fill-paragraph} will reformat or `fill' the current +paragraph. + +@item C-c C-q C-e +@kindex C-c C-q C-e +@findex LaTeX-fill-environment +@code{LaTeX-fill-environment} will reformat or `fill' the current +environment. This may e.g. be the `document' environment, in which case +the entire document will be formatted. + +@item C-c C-q C-s +@kindex C-c C-q C-s +@findex LaTeX-fill-section +@code{LaTeX-fill-section} will reformat or `fill' the current +logical sectional unit. + +@item M-g +@kindex M-g +Alias for @kbd{C-c C-q C-r} + +@item C-c C-q C-r +@kindex C-c C-q C-r +@findex LaTeX-fill-region +@code{LaTeX-fill-region} will format or `fill' the current region. +@end table + +@strong{Warning:} The formatting cannot handle tabular-like +environments. Those will be completely messed-up if you try to format +them. + +@defopt LaTeX-indent-level +Number of spaces to add to the indentation for each @samp{\begin} not +matched by a @samp{\end}.@refill +@end defopt + +@defopt LaTeX-item-indent +Number of spaces to add to the indentation for @samp{\item}'s in list +environments.@refill +@end defopt + +@defopt TeX-brace-indent-level +Number of spaces to add to the indentation for each @samp{@{} not +matched by a @samp{@}}.@refill +@end defopt + +@node Outline, , Marking and formatting, Advanced Features +@section Outlining the Document +@cindex Outlining +@cindex Headers +@cindex Sections +@cindex Overview +@cindex Folding + +GNU Emacs earlier than version 19.19 does not have a useful outline +mode. If you want to use outlines with old versions of emacs, please +get the file @file{outln-18.el} from +@file{sunsite.auc.dk:/packages/auctex/outln-18.el}. It is a port of the +Emacs 19.19 outline mode to Emacs 18 and Lucid Emacs.@refill + +AUC @TeX{} supports the standard outline minor mode using La@TeX{} +sectioning commands as header lines. @xref{Outline Mode, , Outline +Mode, emacs, GNU Emacs Manual}. By default +@code{outline-minor-mode} will use the prefix key @kbd{C-c} which is +also used by AUC @TeX{}, so it is suggested that you choose another +prefix key by inserting + +@lisp + (setq outline-minor-mode-prefix "\C-c\C-o") ; Or whatever... +@end lisp + +in your @file{.emacs} file. + +You can add your own headings by setting the variable +@code{TeX-outline-extra}. + +@defvar TeX-outline-extra +List of extra @TeX{} outline levels. + +Each element is a list with two entries. The first entry is the regular +expression matching a header, and the second is the level of the header. +A @samp{^} is automatically prepended to the regular expressions in the +list, so they must match text at the beginning of the line. + +See @code{LaTeX-section-list} for existing header levels. +@end defvar + +The following example add @samp{\item} and @samp{\bibliography} headers, +with @samp{\bibliography} at the same outline level as @samp{\section}, +and @samp{\item} being below @samp{\subparagraph}. + +@example +(setq TeX-outline-extra + '(("[ \t]*\\\\\\(bib\\)?item\\b" 7) + ("\\\\bibliography\\b" 2))) +@end example + +You may want to check out the unbundled @file{out-xtra} package for even +better outline support. It is available from your favorite emacs lisp +archive. + +@node Formatting, Multifile, Advanced Features, top +@chapter Formatting and Printing + +The most powerful features of AUC @TeX{} may be those allowing you to +run (La)@TeX{} and other external commands like Bib@TeX{} and +@code{makeindex} from within Emacs, viewing and printing the results, +and moreover allowing you to @emph{debug} your documents. + +@menu +* Commands:: Invoking external commands. +* Debugging:: Debugging @TeX{} and La@TeX{} output. +* Checking:: Checking the document. +* Control:: Controlling the processes. +@end menu + +@node Commands, Debugging, Formatting, Formatting +@section Executing Commands +@cindex Formatting +@cindex Running La@TeX{} +@cindex Running @TeX{} +@cindex La@TeX{} +@cindex @TeX{} +@cindex Running commands +@cindex Default command +@cindex Header +@cindex Trailer +@cindex Setting the header +@cindex Setting the trailer +@cindex Region +@cindex Region file +@cindex Setting the default command +@cindex Commands +@cindex External Commands +@cindex Indexing +@cindex Making an index +@cindex Running @code{makeindex} +@cindex @code{makeindex} +@cindex Bib@TeX{} +@cindex Bibliography +@cindex Literature +@cindex Running Bib@TeX{} +@cindex Making a bibliography +@cindex Printing +@cindex Writing to a printer +@cindex Viewing +@cindex Previewing +@cindex Starting a previewer + +Formatting the document with @TeX{} or La@TeX{}, viewing with a +previewer, printing the document, running Bib@TeX{}, making an index, or +checking the document with @code{lacheck} or @code{chktex} all require +running an external command. + +There are two ways to run an external command, you can either run it on +all of the current documents with @code{TeX-command-master}, or on the +current region with @code{TeX-command-region}.@refill + +@deffn Command TeX-command-master +@kindex C-c C-c +(@kbd{C-c C-c}) Query the user for a command, and run it on the master +file associated with the current buffer. The name of the master file is +controlled by the variable @code{TeX-master}. The available commands are +controlled by the variable @code{TeX-command-list}.@refill +@vindex TeX-master +@vindex TeX-command-list +@end deffn + +@xref{Installation} for a discussion about @code{TeX-command-list} and +@ref{Multifile} for a discussion about @code{TeX-master}. + +@deffn Command TeX-command-region +@kindex C-c C-r +(@kbd{C-c C-r}) Query the user for a command, and run it on the ``region +file''. Some commands (typically those invoking @TeX{} or La@TeX{}) +will write the current region into the region file, after extracting the +header and tailer from the master file. If mark is not active, use the +old region. The name of the region file is controlled by the variable +@code{TeX-region}. The name of the master file is controlled by the +variable @code{TeX-master}. The header is all text up to the line +matching the regular expression @code{TeX-header-end}. The trailer is +all text from the line matching the regular expression +@code{TeX-trailer-start}. The available commands are controlled by the +variable @code{TeX-command-list}.@refill +@vindex TeX-region +@vindex TeX-header-end +@vindex TeX-trailer-start +@vindex TeX-master +@vindex TeX-command-list +@end deffn + +AUC @TeX{} will allow one process for each document, plus one process +for the region file to be active at the same time. Thus, if you are +editing @var{n} different documents, you can have @var{n} plus one +processes running at the same time. If the last process you started was +on the region, the commands described in @ref{Debugging} and +@ref{Control} will work on that process, otherwise they will work on the +process associated with the current document. + +@defopt TeX-region +The name of the file for temporarily storing the text when formatting +the current region. +@end defopt + +@defopt TeX-header-end +A regular expression matching the end of the header. By default, this +is @samp{\begin@{document@}} in La@TeX{} mode and @samp{%**end of +header} in @TeX{} mode.@refill +@end defopt + +@defopt TeX-trailer-start +A regular expression matching the start of the trailer. By default, +this is @samp{\end@{document@}} in La@TeX{} mode and @samp{\bye} in +@TeX{} mode.@refill +@end defopt + +AUC @TeX{} will try to guess what command you want to invoke, but by +default it will assume that you want to run @TeX{} in @TeX{} mode and +La@TeX{} in La@TeX{} mode. You can overwrite this by setting the +variable @code{TeX-command-default}. + +@defopt TeX-command-default +The default command to run in this buffer. Must be an entry in +@code{TeX-command-list}. +@end defopt + +If you want to overwrite the values of @code{TeX-header-end}, +@code{TeX-trailer-start}, or @code{TeX-command-default}, you can do that +for all files by setting them in either @code{TeX-mode-hook}, +@code{plain-TeX-mode-hook}, or @code{LaTeX-mode-hook}. To overwrite +them for a single file, define them as file variables (@pxref{File +Variables,,,emacs,The Emacs Editor}). You do this by putting special +formatted text near the end of the file. +@cindex Variables +@cindex File Variables +@cindex Local Variables + +@example +% Local Variables: +% TeX-header-end: "% End-Of-Header" +% TeX-trailer-start: "% Start-Of-Trailer" +% TeX-command-default: "SliTeX" +% End: +@end example + +AUC @TeX{} will try to save any buffers related to the document, and +check if the document needs to be reformatted. If the variable +@code{TeX-save-query} is non-nil, AUC @TeX{} will query before saving +each file. By default AUC @TeX{} will check emacs buffers associated +with files in the current directory, in one of the +@code{TeX-macro-private} directories, and in the @code{TeX-macro-global} +directories. You can change this by setting the variable +@code{TeX-check-path}.@refill + +@defopt TeX-check-path +Directory path to search for dependencies. + +If nil, just check the current file. +Used when checking if any files have changed. +@end defopt + +@node Debugging, Checking, Commands, Formatting +@section Catching the errors +@cindex Debugging +@cindex Errors +@cindex Parsing errors +@cindex Parsing TeX output +@cindex Next error +@cindex Parsing LaTeX errors +@cindex Overfull boxes +@cindex Bad boxes +@cindex Wonderful boxes + +Once you've formatted your document you may `debug' it, i.e. browse +through the errors (La)@TeX{} reported. + +@deffn Command TeX-next-error +@kindex C-c ` +(@kbd{C-c `}) Go to the next error reported by @TeX{}. The view will +be split in two, with the cursor placed as close as possible to the +error in the top view. In the bottom view, the error message will be +displayed along with some explanatory text. +@end deffn + +Normally AUC @TeX{} will only report real errors, but you may as well +ask it to report `bad boxes' as well. + +@deffn Command TeX-toggle-debug-bad-boxes +@kindex C-c C-w +(@kbd{C-c C-w}) Toggle whether AUC @TeX{} should stop at bad boxes +(i.e. over/under full boxes) as well as at normal errors. +@end deffn + +As default, AUC @TeX{} will display that special @samp{*help*} buffer +containing the error reported by @TeX{} along with the documentation. +There is however an `expert' option, which allows you to display the +real @TeX{} output. + +@defopt TeX-display-help +When non-nil AUC @TeX{} will automatically display a help text whenever +an error is encountered using @code{TeX-next-error} (@kbd{C-c `}). +@end defopt + +@node Checking, Control, Debugging, Formatting +@section Checking for problems +@cindex Checking +@cindex @code{lacheck} +@cindex @code{chktex} +@cindex Finding errors +@cindex Running @code{lacheck} +@cindex Running @code{chktex} +@cindex Style +@cindex Problems + +Running @TeX{} or La@TeX{} will only find regular errors in the +document, not examples of bad style. Furthermore, description of the +errors may often be confusing. The utility @code{lacheck} can be used +to find style errors, such as forgetting to escape the space after an +abbreviation or using @samp{...} instead of @samp{\ldots} and many other +problems like that. You start @code{lacheck} with @kbd{C-c C-c C h e c +k @key{RET}}. The result will be a list of errors in the +@samp{*compilation*} buffer. You can go through the errors with +@kbd{C-x `} (@code{next-error}, @pxref{Compilation,,,emacs,The Emacs +Editor}), which will move point to the location of the next +error.@refill + +Another newer program which can be used to find errors is @code{chktex}. +It is much more configurable than @code{lacheck}, but doesn't find all +the problems @code{lacheck} does, at least in its default configuration. +You must install the programs before using them, and for @code{chktex} +you must also modify @code{TeX-command-list}. You can get +@code{lacheck} from @file{<URL:ftp://sunsite.auc.dk/pub/text/lacheck/>} +or alternatively @code{chktex} from +@file{<URL:ftp://ftp.dante.de/pub/tex/support/chktex/>}. Search for +`chktex' in @file{tex.el} to see how to switch between them.@refill They +are + +@node Control, , Checking, Formatting +@section Controlling the output +@cindex Controlling the output +@cindex Output +@cindex Redisplay output +@cindex Processes +@cindex Killing a process +@cindex Finding the master file +@cindex Master file +@cindex Stopping a process +@cindex Current file +@cindex Finding the current file + +A number of commands are available for controlling the output of an +application running under AUC @TeX{} + +@deffn Command TeX-kill-job +@kindex C-c C-k +(@kbd{C-c C-k}) Kill currently running external application. +This may be either of @TeX{}, La@TeX{}, previewer Bib@TeX{} etc. +@end deffn + +@deffn Command TeX-recenter-output-buffer +@kindex C-c C-l +(@kbd{C-c C-l}) Recenter the output buffer so that the bottom line is +visible. +@end deffn + +@deffn Command TeX-home-buffer +@kindex C-c ^ +(@kbd{C-c ^}) Go to the `master' file in the document associated with +the current buffer, or if already there, to the file where the current +process was started. +@end deffn + +@node Multifile, Parsing Files, Formatting, top +@chapter Multifile Documents +@cindex Multifile Documents +@cindex Documents +@cindex Documents with multiple files +@cindex Multiple Files +@cindex Many Files +@cindex Including +@cindex \include +@cindex Inputing +@cindex \input +@cindex Master file + +You may wish spread a document over many files (as you are likely to do if +there are multiple authors, or if you have not yet discovered the power +of the outline commands (@pxref{Outline})). This can be done by having a +``master'' file in which you include the various files with the @TeX{} +macro @samp{\input} or the La@TeX{} macro @samp{\include}. These +files may also include other files themselves. However, to format the +document you must run the commands on the top level master file.@refill + +When you, for example, ask AUC @TeX{} to run a command on the master file, +it has no way of knowing the name of the master file. By default, +it will assume that the current file is the master file. If you insert +the following in your @file{.emacs} file AUC @TeX{} will use a more +advanced algorithm. + +@lisp +(setq-default TeX-master nil) ; Query for master file. +@end lisp + +If AUC @TeX{} finds the line indicating the end of the header in a +master file (@code{TeX-header-end}), it can figure out for itself that +this is a master file. Otherwise, it will ask for the name of the +master file associated with the buffer. To avoid asking you again, AUC +@TeX{} will automatically insert the name of the master file as a file +variable (@pxref{File Variables,,,emacs,The Emacs Editor}). You can +also insert the file variable yourself, by putting the following text at +the end of your files.@refill +@findex TeX-header-end + +@example +% Local Variables: +% TeX-master: "master" +% End: +@end example + +You should always set this variable to the name of the top level document. If +you always use the same name for your top level documents, you can set +@code{TeX-master} in your @file{.emacs} file. + +@lisp +(setq-default TeX-master "master") ; All master files called "master". +@end lisp + +@defopt TeX-master +The master file associated with the current buffer. If the file being +edited is actually included from another file, then you can tell AUC @TeX{} +the name of the master file by setting this variable. If there are +multiple levels of nesting, specify the top level file.@refill + +If this variable is @code{nil}, AUC @TeX{} will query you for the +name.@refill + +If the variable is @code{t}, then AUC @TeX{} will assume the file is a master +file itself.@refill + +If the variable is @code{shared}, then AUC @TeX{} will query for the name, +but will not change the file.@refill + +It is suggested that you use the File Variables (@pxref{File +Variables,,,emacs,The Emacs Editor}) to set this variable permanently +for each file.@refill +@end defopt + +@defopt TeX-one-master +Regular expression matching ordinary TeX files. + +You should set this variable to match the name of all files, for which +it is a good idea to append a @code{TeX-master} file variable entry +automatically. When AUC @TeX{} adds the name of the master file as a +file variable, it does not need to ask next time you edit the file. + +If you dislike AUC @TeX{} automatically modifying your files, you can +set this variable to @samp{"<none>"}. By default, AUC @TeX{} will modify +any file with an extension of @samp{.tex}.@refill +@end defopt + +AUC @TeX{} keeps track of macros, environments, labels, and style +files that are used in a given document. For this to work with +multifile documents, AUC @TeX{} has to have a place to put the +information about the files in the document. This is done by having an +@file{auto} subdirectory placed in the directory where your document is +located. Each time you save a file, AUC @TeX{} will write information +about the file into the @file{auto} directory. When you load a file, +AUC @TeX{} will read the information in the @file{auto} directory +about the file you loaded @emph{and the master file specified by +@code{TeX-master}}. Since the master file (perhaps indirectly) includes +all other files in the document, AUC @TeX{} will get information from +all files in the document. This means that you will get from each file, +for example, completion for all labels defined anywhere in the document. + +AUC TeX will create the @file{auto} directory automatically if +@code{TeX-auto-save} is non-nil. Without it, the files in the document +will not know anything about each other, except for the name of the +master file. @xref{Automatic Local}. + +@deffn Command TeX-save-document +@kindex C-c C-d +(@kbd{C-c C-d}) Save all buffers known to belong to the current document. +@end deffn + +@defopt TeX-save-query +If non-nil, then query the user before saving each file with +@code{TeX-save-document}. +@end defopt + + +@node Parsing Files, I18n, Multifile, top +@chapter Automatic Parsing of @TeX{} files. +@cindex Parsing @TeX{} +@cindex Automatic Parsing +@cindex Tabs +@cindex Tabify +@cindex Untabify + +AUC @TeX{} depends heavily on being able to extract information from the +buffers by parsing them. Since parsing the buffer can be somewhat slow, +the parsing is initially disabled. You are encouraged to enable them by +adding the following lines to your @file{.emacs} file. + +@lisp +(setq TeX-parse-self t) ; Enable parse on load. +(setq TeX-auto-save t) ; Enable parse on save. +@end lisp + +The later command will make AUC @TeX{} store the parsed information in +an @file{auto} subdirectory in the directory each time the @TeX{} files +are stored, @pxref{Automatic Local}. If AUC @TeX{} finds the pre-parsed +information when loading a file, it will not need to reparse the buffer. +The information in the @file{auto} directory is also useful for +multifile documents @pxref{Multifile}, since it allows each file to +access the parsed information from all the other files in the document. +This is done by first reading the information from the master file, and +then recursively the information from each file stored in the master +file.@refill + +The variables can also be done on a per file basis, by changing the file +local variables. + +@example +% Local Variables: +% TeX-parse-self: t +% TeX-auto-save: t +% End: +@end example + +Even when you have disabled the automatic parsing, you can force the +generation of style information by pressing @kbd{C-c C-n}. This is +often the best choice, as you will be able to decide when it is +necessary to reparse the file. + +@defopt TeX-parse-self +Parse file after loading it if no style hook is found for it. +@end defopt + +@defopt TeX-auto-save +Automatically save style information when saving the buffer. +@end defopt + +@deffn Command TeX-normal-mode @var{arg} +@kindex C-c C-n +(@kbd{C-c C-n}) Remove all information about this buffer, and apply the +style hooks again. Save buffer first including style information. With +optional argument, also reload the style hooks. +@end deffn + +When AUC TeX saves your buffer, it will by default convert all tabs in +your buffer into spaces. To disable this behaviour, insert the +following in your @file{.emacs} file. + +@lisp +(setq TeX-auto-untabify nil) +@end lisp + +@defopt TeX-auto-untabify +Automatically remove all tabs from a file before saving it. +@end defopt + +Instead of disabling the parsing entirely, you can also speed it +significantly up by limiting the information it will search for (and +store) when parsing the buffer. You can do this by setting the default +values for the buffer local variables @code{TeX-auto-regexp-list} and +@code{TeX-auto-parse-length} in your @file{.emacs} file. + +@lisp +;; Only parse \documentstyle information. +(setq-default TeX-auto-regexp-list 'LaTeX-auto-minimal-regexp-list) +;; The documentstyle command is usually near the beginning. +(setq-default TeX-auto-parse-length 2000) +@end lisp + +This example will speed the parsing up significantly, but AUC @TeX{} +will no longer be able to provide completion for labels, macros, +environments, or bibitems specified in the document, nor will it know +what files belong to the document. + +These variables can also be specified on a per file basis, by changing +the file local variables. + +@example +% Local Variables: +% TeX-auto-regexp-list: TeX-auto-full-regexp-list +% TeX-auto-parse-length: 999999 +% End: +@end example + +@defopt TeX-auto-regexp-list +List of regular expressions used for parsing the current file. +@end defopt + +@defopt TeX-auto-parse-length +Maximal length of TeX file that will be parsed. +@end defopt + +The pre-specified lists of regexps are defined below. You can use these +before loading AUC @TeX{} by quoting them, as in the example above. + +@defvr Constant TeX-auto-empty-regexp-list +Parse nothing +@end defvr + +@defvr Constant LaTeX-auto-minimal-regexp-list +Only parse documentstyle. +@end defvr + +@defvr Constant LaTeX-auto-label-regexp-list +Only parse La@TeX{} labels. +@end defvr + +@defvr Constant LaTeX-auto-regexp-list +Parse common La@TeX{} commands. +@end defvr + +@defvr Constant plain-TeX-auto-regexp-list +Parse common plain @TeX{} commands. +@end defvr + +@defvr Constant TeX-auto-full-regexp-list +Parse all @TeX{} and La@TeX{} commands that AUC @TeX{} can use. +@end defvr + +@node I18n, Automatic, Parsing Files, top +@chapter Internationalization +@cindex Internationalization +@cindex Character set +@cindex National letters + +There are several problems associated with editing non-English @TeX{} +with GNU Emacs. Modern versions of GNU Emacs and @TeX{} are usable for +European (Latin, Cyrillic, Greek) based languages, but special versions +of TeX and Emacs are needed for Korean, Japanese, and Chinese. + +@menu +* European:: Using AUC @TeX{} for European languages. +* Japanese:: Japanese @TeX{} +@end menu + +@node European, Japanese, I18n, I18n +@section Using AUC @TeX{} for European languages. +@cindex Europe +@cindex European Characters +@cindex ISO 8859 Latin 1 +@cindex Latin 1 +@cindex ISO 8859 Latin 2 +@cindex Latin 2 +@cindex ANSI +@cindex Denmark +@cindex Danish +@cindex Holland +@cindex Dutch +@cindex Germany +@cindex Poland + +First you will need a way to write non-ASCII characters. You can either +use macros, or teach @TeX{} about the ISO character sets. I prefer the +later, it has the advantage that the usual the standard emacs word +movement and case change commands will work. + + +With LaTeX2e, just add @samp{\usepackage[latin1]@{inputenc@}}. With older +LaTeX versions, try: + +@table @file +@item isolatin1.sty +Support for ISO 8859 Latin 1. Available by ftp from the host +@t{ftp.uni-stuttgart.de} as +@file{/pub/tex/macros/latex/contrib/misc/isolatin1.sty}. + +@item latin2.sty +Support for ISO 8859 Latin 2. Available by ftp from the host +@t{ftp.uni-stuttgart.de} as +@file{/pub/tex/macros/latex/contrib/latin2.sty}. +@end table + +To be able to display non-ASCII characters you will need an appropriate +font and a version of GNU Emacs capable of displaying 8-bit characters. +I believe all emacs versions except plain Emacs 18 are capable of this. +For GNU Emacs 19, @pxref{European Display,,,emacs, The GNU Emacs +Editor}. Other relevant packages are: + +@table @file +@item remap +Supports lots of different 7-bit and 8-bit character sets for GNU Emacs +19. Mostly useful if you have seldomly used character sets, or need to +use different character set for keyboard, buffer, and display. An +overkill if you just need ISO 8859 Latin 1. Currently in alpha test, +but available by ftp from the host @t{ftp.iesd.auc.dk} in +@file{/packages/auctex/}. + +To get dead keys for @TeX{}, install remap and insert the following in +your @file{.emacs} or @file{site-start.el} file. + +@lisp +(require 'remap) + +(defvar all-dead-keys "~'`^" + "Dead keys used by remap") + +(remap-define-map "Dead Key" + (apply 'append (mapcar 'remap-dead-map all-dead-keys))) + +(remap-define-map "TeX Dead Key" + (remap-map "Dead Key" (remap-add "Ascii" "~TeX"))) + +(setq remap-setup-alist + '(("7-bit" "Raw" "L1" "US" "Ctrl" "~TeX") + ("8-bit" "Raw" "L1" "L1" "Ctrl" "Raw") + ("Dead/7" "Dead Key" "L1" "US" "Ctrl" "~TeX") + ("Dead/8" "Dead Key" "L1" "L1" "Ctrl" "Raw") + ("TeX" "TeX Dead Key" "L1" "US" "Ctrl" "Raw"))) +@end lisp + +You can now enable TeX dead keys with +@example +@kbd{M-x remap-setup-choose RET TeX RET} +@end example +@end table + +A compromise is to use use an European character set when editing the +file, and convert to @TeX{} macros when reading and writing the files. + +@table @file +@item iso-tex.el +@cindex @file{iso-tex.el} +This file automatically converts between ISO 8859 Latin 1 encoding and +La@TeX{} encodings of West European characters. It is available by ftp +from @t{aida.intellektik.informatik.th-darmstadt.de} in the directory +@file{/pub/gene/Emacs}. +@item iso-cvt.el +@cindex @file{iso-cvt.el} +Much like @file{iso-tex.el} but is bundled with Emacs 19.23 and later. + +@item x-compose.el +@cindex @file{x-compose.el} +Similar package bundled with new versions of XEmacs. + +@end table + +AUC @TeX{} supports style files for several languages. Each style file +may modify some AUC @TeX{} to better support the language, and will run +a language specific hook that will allow you to for example change +ispell dictionary, or run code to change the keyboard remapping. The +following will for example choose a Danish dictionary for documents +including the @file{dk.sty} file. This requires parsing to be enabled, +@pxref{Parsing Files}. + +@lisp +(add-hook 'TeX-language-dk-hook + (function (lambda () (ispell-change-dictionary "danish")))) +@end lisp + +The following style files are recognized. +@table @file +@item dk +Runs style hook @code{TeX-language-dk-hook}. + +@item dutch +Runs style hook @code{TeX-language-nl-hook}. + +@item german +Runs style hook @code{TeX-language-de-hook}. +Gives @samp{"} word syntax and makes the @key{"} key insert a literal +@samp{"}. + +@item plfonts +@itemx plhb +Runs style hook @code{TeX-language-pl-hook}. +Gives @samp{"} word syntax and makes the @key{"} key insert a literal +@samp{"}. Pressing @key{"} twice will insert @samp{"<} or @samp{">} +depending on context. +@end table + +@node Japanese, , European, I18n +@section Japanese @TeX{} +@cindex Japan +@cindex Japanese +@cindex Nippon +@cindex NEMACS +@cindex MULE +@cindex j@TeX{} +@cindex jLa@TeX{} + +To write Japanese text with AUC @TeX{} you need to have versions of +@TeX{} and Emacs that support Japanese. There exist at least two +variants of @TeX{} for Japanese text, and AUC @TeX{} can be used with +both, as well as with the two Japanese-aware Emacses, NEMACS and MULE. + +To use the Japanese TeX variants, simply enter @code{japanese-tex-mode}, +@code{japanese-latex-mode}, or @code{japanese-slitex-mode}, and +everything should work. If not, send mail to Shinji Kobayashi +(@samp{<koba@@flab.fujitsu.co.jp>}, who kindly donated the code for +supporting Japanese in AUC @TeX{}. None of the primary AUC @TeX{} +maintainers understand Japanese, so they can not help you. + +@node Automatic, Style Files, I18n, top +@chapter Automatic Customization +@cindex Automatic Customization +@cindex Extracting @TeX{} symbols +@cindex Automatic +@cindex @file{auto} directories. +@cindex Parsing @TeX{} +@cindex @TeX{} parsing +@cindex Generating symbols + +Since AUC @TeX{} is so highly customizable, it makes sense that it is able +to customize itself. The automatic customization consists of scanning +@TeX{} files and extracting symbols, environments, and things like that. + +The automatic customization is done on three different levels. The +global level is the level shared by all users at your site, and consists +of scanning the standard @TeX{} style files, and any extra styles added +locally for all users on the site. The private level deals with those +style files you have written for your own use, and use in different +documents. You may have a @file{~/lib/TeX/} directory where you store +useful style files for your own use. The local level is for a specific +directory, and deals with writing customization for the files for your +normal @TeX{} documents. + +If compared with the environment variable @code{TEXINPUTS}, the +global level corresponds to the directories built into @TeX{}. The +private level corresponds to the directories you add yourself, except for +@file{.}, which is the local level. + +@menu +* Automatic Global:: Automatic Customization for the Site +* Automatic Private:: Automatic Customization for a User +* Automatic Local:: Automatic Customization for a Directory +@end menu + +By default AUC @TeX{} will search for customization files in all the +global, private, and local style directories, but you can also set the +path directly. This is useful if you for example want to add another +person's style hooks to your path. Please note that all matching files +found in @code{TeX-style-path} are loaded, and all hooks defined in the +files will be executed. + +@defopt TeX-style-path +List of directories to search for AUC @TeX{} style files. +Each must end with a slash. +@end defopt + +By default, when AUC @TeX{} searches a directory for files, it will +recursively search through subdirectories. + +@defopt TeX-file-recurse +If not nil, search @TeX{} directories recursively. +@end defopt + +By default, AUC @TeX{} will ignore files name @file{.}, @file{..}, +@file{SCCS}, @file{RCS}, and @file{CVS}. + +@defopt TeX-ignore-file +Regular expression matching file names to ignore. + +These files or directories will not be considered when searching for +@TeX{} files in a directory. +@end defopt + +@node Automatic Global, Automatic Private, Automatic, Automatic +@section Automatic Customization for the Site +@cindex Global style hook directory +@cindex Global macro directory +@cindex Site macro directory +@cindex Global @TeX{} macro directory +@cindex Site @TeX{} macro directory +@cindex Global directories +@cindex Site information + +Assuming that the automatic customization at the global level was done +when AUC @TeX{} was installed, your choice is now: will you use it? If +you use it, you will benefit by having access to all the symbols and +environments available for completion purposes. The drawback is slower +load time when you edit a new file and perhaps too many confusing +symbols when you try to do a completion. + +You can disable the automatic generated global style hooks by setting +the variable @code{TeX-auto-global} to nil. + +@defopt TeX-macro-global +Directories containing the site's @TeX{} style files. +@end defopt + +@defopt TeX-style-global +Directory containing hand generated @TeX{} information. +Must end with a slash. + +These correspond to @TeX{} macros shared by all users of a site. +@end defopt + +@defopt TeX-auto-global +Directory containing automatically generated information. + +For storing automatic extracted information about the @TeX{} macros +shared by all users of a site. +@end defopt + +@node Automatic Private, Automatic Local, Automatic Global, Automatic +@section Automatic Customization for a User +@cindex Private style hook directory +@cindex Private macro directory +@cindex Personal macro directory +@cindex Private @TeX{} macro directory +@cindex Personal @TeX{} macro directory +@cindex Private directories +@cindex Personal information + +You should specify where you store your private @TeX{} macros, so AUC +@TeX{} can extract their information. The extracted information will go +to the directories listed in @code{TeX-auto-private} + +Use @kbd{M-x TeX-auto-generate} to extract the information. + +@defopt TeX-macro-private +Directories where you store your personal @TeX{} macros. +Each must end with a slash. + +This defaults to the directories listed in the @samp{TEXINPUTS} and +@samp{BIBINPUTS} environment variables. +@end defopt + +@defopt TeX-auto-private +List of directories containing automatically generated information. +Must end with a slash. + +These correspond to the personal @TeX{} macros. +@end defopt + +@deffn Command TeX-auto-generate @var{TEX} @var{AUTO} +(@kbd{M-x TeX-auto-generate}) Generate style hook for @var{TEX} and +store it in @var{AUTO}. If @var{TEX} is a directory, generate style +hooks for all files in the directory.@refill +@end deffn + +@defopt TeX-style-private +List of directories containing hand generated information. +Must end with a slash. + +These correspond to the personal @TeX{} macros. +@end defopt + +@node Automatic Local, , Automatic Private, Automatic +@section Automatic Customization for a Directory +@cindex Local style hooks +@cindex Updating style hooks +@cindex Automatic updating style hooks +@cindex Local style hooks +@cindex Local style directory + +AUC @TeX{} can update the style information about a file each time you +save it, and it will do this if the directory @code{TeX-auto-local} +exist. @code{TeX-auto-local} is by default set to @samp{"auto/"}, so +simply creating an @file{auto} directory will enable automatic saving of +style information. + +The advantage of doing this is that macros, labels, etc. defined in any +file in a multifile document will be known in all the files in the +document. The disadvantage is that saving will be slower. To disable, +set @code{TeX-auto-local} to nil. + +@defopt TeX-style-local +Directory containing hand generated @TeX{} information. +Must end with a slash. + +These correspond to @TeX{} macros found in the current directory. +@end defopt + +@defopt TeX-auto-local +Directory containing automatically generated @TeX{} information. +Must end with a slash. + +These correspond to @TeX{} macros found in the current directory. +@end defopt + +@node Style Files, Installation, Automatic, top +@chapter Writing Your own Style Support +@cindex Style files +@cindex Style hooks +@cindex @file{style} + +@xref{Automatic} for a discussion about automatically generated global, +private, and local style files. The hand generated style files are +equivalent, except that they by default are found in @file{style} +directories instead of @file{auto} directories. + +@menu +* Simple Style:: A Simple Style File +* Adding Macros:: Adding Support for Macros +* Adding Environments:: Adding Support for Environments +* Adding Other:: Adding Other Information +* Hacking the Parser:: Automatic Extraction of New Things +@end menu + +If you write some useful support for a public @TeX{} style file, please +send it to us. + +@node Simple Style, Adding Macros, Style Files, Style Files +@section A Simple Style File +@cindex @file{book.el} +@cindex Sample style file +@cindex Style file +@cindex Example of a style file. +@cindex Style hook +@cindex Adding a style hook + +Here is a simple example of a style file. + +@lisp +;;; book.el - Special code for book style. + +(TeX-add-style-hook "book" + (function (lambda () (setq LaTeX-largest-level + (LaTeX-section-level ("chapter")))))) + +@end lisp + +This file specifies that the largest kind of section in a LaTeX document +using the book document style is chapter. The interesting thing to +notice is that the style file defines an (anonymous) function, and adds it +to the list of loaded style hooks by calling @code{TeX-add-style-hook}. + +The first time the user indirectly tries to access some style specific +information, such as the largest sectioning command available, the style +hooks for all files directly or indirectly read by the current document +is executed. The actual files will only be evaluated once, but the +hooks will be called for each buffer using the style file. + +@defun TeX-add-style-hook @var{style} @var{hook} +Add @var{hook} to the list of functions to run when we use the @TeX{} +file @var{style}. +@end defun + +@node Adding Macros, Adding Environments, Simple Style, Style Files +@section Adding Support for Macros +@cindex Adding macros +@cindex Macros, adding +@cindex Defining macros in style hooks + +The most common thing to define in a style hook is new symbols (@TeX{} +macros). Most likely along with a description of the arguments to the +function, since the symbol itself can be defined automatically. + +Here are a few examples from @file{latex.el}. + +@lisp +(TeX-add-style-hook "latex" + (function + (lambda () + (TeX-add-symbols + '("arabic" TeX-arg-counter) + '("label" TeX-arg-define-label) + '("ref" TeX-arg-label) + '("newcommand" TeX-arg-define-macro [ "Number of arguments" ] t) + '("newtheorem" TeX-arg-define-environment + [ TeX-arg-environment "Numbered like" ] + t [ TeX-arg-counter "Within counter" ]))))) +@end lisp + +@defun TeX-add-symbols @var{symbol} @dots{} +Add each @var{symbol} to the list of known symbols. +@end defun + +Each argument to @code{TeX-add-symbols} is a list describing one symbol. +The head of the list is the name of the symbol, the remaining elements +describe each argument. + +If there are no additional elements, the symbol will be inserted with +point inside braces. Otherwise, each argument of this function should +match an argument of the @TeX{} macro. What is done depends on the argument +type. + +If a macro is defined multiple times, AUC @TeX{} will chose the one with +the longest definition (i.e. the one with the most arguments). + +Thus, to overwrite +@example + '("tref" 1) ; one argument +@end example +you can specify +@example + '("tref" TeX-arg-label ignore) ; two arguments +@end example + +@code{ignore} is a function that does not do anything, so when you +insert a @samp{tref} you will be prompted for a label and no more. + +@table @code +@item string +Use the string as a prompt to prompt for the argument. + +@item number +Insert that many braces, leave point inside the first. + +@item nil +Insert empty braces. + +@item t +Insert empty braces, leave point between the braces. + +@item other symbols +Call the symbol as a function. You can define your +own hook, or use one of the predefined argument hooks. + +@item list +If the car is a string, insert it as a prompt and the next +element as initial input. Otherwise, call the car of the list with +the remaining elements as arguments. + +@item vector +Optional argument. If it has more than one element, parse it +as a list, otherwise parse the only element as above. Use square +brackets instead of curly braces, and is not inserted on empty user +input. +@end table + +A lot of argument hooks have already been defined. The first argument to +all hooks is a flag indicating if it is an optional argument. It is up +to the hook to determine what to do with the remaining arguments, if +any. Typically the next argument is used to overwrite the default +prompt. + +@ftable @code +@item TeX-arg-conditional +Implements if EXPR THEN ELSE. If EXPR evaluates to true, parse THEN as an +argument list, else parse ELSE as an argument list. + +@item TeX-arg-literal +Insert its arguments into the buffer. Used for specifying extra syntax +for a macro. + +@item TeX-arg-free +Parse its arguments but use no braces when they are inserted. + +@item TeX-arg-eval +Evaluate arguments and insert the result in the buffer. + +@item TeX-arg-file +Prompt for a tex or sty filename, and use it without the extension. Run +the file hooks defined for it. + +@item TeX-arg-label +Prompt for a label completing with known labels. + +@item TeX-arg-macro +Prompt for a @TeX{} macro with completion. + +@item TeX-arg-environment +Prompt for a La@TeX{} environment with completion. + +@item TeX-arg-cite +Prompt for a Bib@TeX{} citation. + +@item TeX-arg-counter +Prompt for a La@TeX{} counter. + +@item TeX-arg-savebox +Prompt for a La@TeX{} savebox. + +@item TeX-arg-file +Prompt for a filename in the current directory, and use it without the +extension. + +@item TeX-arg-input-file +Prompt for a filename in the current directory, and use it without the +extension. Run the style hooks for the file. + +@item TeX-arg-define-label +Prompt for a label completing with known labels. Add label to list of +defined labels. + +@item TeX-arg-define-macro +Prompt for a @TeX{} macro with completion. Add macro to list of defined +macros. + +@item TeX-arg-define-environment +Prompt for a La@TeX{} environment with completion. Add environment to +list of defined environments. + +@item TeX-arg-define-cite +Prompt for a Bib@TeX{} citation. + +@item TeX-arg-define-counter +Prompt for a La@TeX{} counter. + +@item TeX-arg-define-savebox +Prompt for a La@TeX{} savebox. + +@item TeX-arg-corner +Prompt for a La@TeX{} side or corner position with completion. + +@item TeX-arg-lr +Prompt for a La@TeX{} side with completion. + +@item TeX-arg-tb +Prompt for a La@TeX{} side with completion. + +@item TeX-arg-pagestyle +Prompt for a La@TeX{} pagestyle with completion. + +@item TeX-arg-verb +Prompt for delimiter and text. + +@item TeX-arg-pair +Insert a pair of numbers, use arguments for prompt. The numbers are +surrounded by parentheses and separated with a comma. + +@item TeX-arg-size +Insert width and height as a pair. No arguments. + +@item TeX-arg-coordinate +Insert x and y coordinates as a pair. No arguments. +@end ftable + +If you add new hooks, you can assume that point is placed directly after +the previous argument, or after the macro name if this is the first +argument. Please leave point located after the argument you are +inserting. If you want point to be located somewhere else after all +hooks have been processed, set the value of @code{exit-mark}. It will +point nowhere, until the argument hook sets it.@refill + +@node Adding Environments, Adding Other, Adding Macros, Style Files +@section Adding Support for Environments +@cindex Adding environments +@cindex Environments, adding +@cindex Defining environments in style hooks + +Adding support for environments is very much like adding support for +@TeX{} macros, except that each environment normally only takes one +argument, an environment hook. The example is again a short version of +@file{latex.el}. + +@lisp +(TeX-add-style-hook "latex" + (function + (lambda () + (LaTeX-add-environments + '("document" LaTeX-env-document) + '("enumerate" LaTeX-env-item) + '("itemize" LaTeX-env-item) + '("list" LaTeX-env-list))))) +@end lisp + +@findex LaTeX-env-item +The only hook that is generally useful is @code{LaTeX-env-item}, which is +used for environments that contain items. It is completely up to the +environment hook to insert the environment, but the function +@code{LaTeX-insert-environment} may be of some help. The hook will be +called with the name of the environment as its first argument, and extra +arguments can be provided by adding them to a list after the hook. + +For simple environments with arguments, for example defined with +@samp{\newenvironment}, you can make AUC @TeX{} prompt for the arguments +by giving the prompt strings in the call to +@code{LaTeX-add-environments}. For example, if you have defined a +@code{loop} environment with the three arguments @var{from}, @var{to}, +and @var{step}, you can add support for them in a style file. + +@example +%% loop.sty + +\newenvironment@{loop@}[3]@{...@}@{...@} +@end example + +@lisp +;; loop.el + +(TeX-add-style-hook "loop" + (function + (lambda () + (LaTeX-add-environments + '("loop" "From" "To" "Step"))))) +@end lisp + +If an environment is defined multiple times, AUC @TeX{} will chose the +one with the longest definition. Thus, if you have an enumerate style +file, and want it to replace the standard La@TeX{} enumerate hook above, +you could define an @file{enumerate.el} file as follows, and place it in +the appropriate style directory. + +@lisp +(TeX-add-style-hook "latex" + (function + (lambda () + (LaTeX-add-environments + '("enumerate" LaTeX-env-enumerate foo))))) + +(defun LaTeX-env-enumerate (environment &optional ignore) ...) +@end lisp + +The symbol @code{foo} will be passed to @code{LaTeX-env-enumerate} as +the second argument, but since we only added it to overwrite the +definition in @file{latex.el} it is just ignored. + +@defun LaTeX-add-environments @var{env} @dots{} +Add each @var{env} to list of loaded environments. +@end defun + +@defun LaTeX-insert-environment @var{env} [ @var{extra} ] +Insert environment of type @var{env}, with optional argument @var{extra}. +@end defun + +@node Adding Other, Hacking the Parser, Adding Environments, Style Files +@section Adding Other Information +@cindex Adding bibliographies +@cindex Bibliographies, adding +@cindex Defining bibliographies in style hooks +@cindex Adding labels +@cindex Labels, adding +@cindex Defining labels in style hooks +@cindex Adding other information +@cindex Other information, adding +@cindex Defining other information in style hooks + +You can also specify bibliographical databases and labels in the style +file. This is probably of little use, since this information will +usually be automatically generated from the @TeX{} file anyway. + +@defun LaTeX-add-bibliographies @var{bibliography} @dots{} +Add each @var{bibliography} to list of loaded bibliographies. +@end defun + +@defun LaTeX-add-labels @var{label} @dots{} +Add each @var{label} to the list of known labels. +@end defun + +@node Hacking the Parser, , Adding Other, Style Files +@section Automatic Extraction of New Things +@cindex Parsing new macros +@cindex @file{macro.tex} +@cindex @file{macro.el} +@cindex Changing the parser + +The automatic @TeX{} information extractor works by searching for +regular expressions in the @TeX{} files, and storing the matched +information. You can add support for new constructs to the parser, +something that is needed when you add new commands to define symbols. + +For example, in the file @file{macro.tex} I define the following macro. + +@example +\newcommand@{\newmacro@}[5]@{% +\def#1@{#3\index@{#4@@#5~cite@{#4@}@}\nocite@{#4@}@}% +\def#2@{#5\index@{#4@@#5~cite@{#4@}@}\nocite@{#4@}@}% +@} +@end example + +AUC @TeX{} will automatically figure out that @samp{newmacro} is a macro +that takes five arguments. However, it is not smart enough to +automatically see that each time we use the macro, two new macros are +defined. We can specify this information in a style hook file. + +@lisp +;;; macro.el - Special code for my own macro file. + +;;; Code: + +(defvar TeX-newmacro-regexp + '("\\\\newmacro@{\\\\\\([a-zA-Z]+\\)@}@{\\\\\\([a-zA-Z]+\\)@}" + (1 2) TeX-auto-multi) + "Matches \newmacro definitions.") + +(defvar TeX-auto-multi nil + "Temporary for parsing \\newmacro definitions.") + +(defun TeX-macro-cleanup () + ;; Move symbols from `TeX-auto-multi' to `TeX-auto-symbol'. + (mapcar (function (lambda (list) + (mapcar (function (lambda (symbol) + (setq TeX-auto-symbol + (cons symbol TeX-auto-symbol)))) + list))) + TeX-auto-multi)) + +(defun TeX-macro-prepare () + ;; Clear `Tex-auto-multi' before use. + (setq TeX-auto-multi nil)) + +(add-hook 'TeX-auto-prepare-hook 'TeX-macro-prepare) +(add-hook 'TeX-auto-cleanup-hook 'TeX-macro-cleanup) + +(TeX-add-style-hook "macro" + (function + (lambda () + (TeX-auto-add-regexp TeX-newmacro-regexp) + (TeX-add-symbols '("newmacro" + TeX-arg-macro + (TeX-arg-macro "Capitalized macro: \\") + t + "BibTeX entry: " + nil))))) + +;;; macro.el ends here +@end lisp + +When this file is first loaded, it adds a new entry to +@code{TeX-newmacro-regexp}, and defines a function to be called before +the parsing starts, and one to be called after the parsing is done. It +also declares a variable to contain the data collected during parsing. +Finally, it adds a style hook which describes the @samp{newmacro} macro, +as we have seen it before. + +So the general strategy is: Add a new entry to @code{TeX-newmacro-regexp}. +Declare a variable to contain intermediate data during parsing. Add hook +to be called before and after parsing. In this case, the hook before +parsing just initializes the variable, and the hook after parsing +collects the data from the variable, and adds them to the list of symbols +found. + +@defvar TeX-auto-regexp-list +List of regular expressions matching @TeX{} macro definitions. + +The list has the following format ((REGEXP MATCH TABLE) @dots{}), that +is, each entry is a list with three elements. + +REGEXP. Regular expression matching the macro we want to parse. + +MATCH. A number or list of numbers, each representing one +parenthesized subexpression matched by REGEXP. + +TABLE. The symbol table to store the data. This can be a function, in +which case the function is called with the argument MATCH. Use +@code{TeX-match-buffer} to get match data. If it is not a function, it +is presumed to be the name of a variable containing a list of match +data. The matched data (a string if MATCH is a number, a list of +strings if MATCH is a list of numbers) is put in front of the table. +@end defvar + +@defvar TeX-auto-prepare-hook nil +List of functions to be called before parsing a @TeX{} file. +@end defvar + +@defvar TeX-auto-cleanup-hook nil +List of functions to be called after parsing a @TeX{} file. +@end defvar + +@node Installation, History, Style Files, top +@include install.texi + +@node History, Projects, Installation, top +@comment node-name, next, previous, up +@appendix The History of AUC @TeX{} + +See the file @file{history.texi} for older changes. + +@include changes.texi + +@node Projects, Credit, History, top +@comment node-name, next, previous, up +@appendix Wishlist + +This is a list of projects for AUC @TeX{}. Bug reports and requests we +can not fix or honor right away will be added to this list. If you have +some time for emacs lisp hacking, you are encouraged to try to provide a +solution to one of the following problems. It might be a good idea to +mail me first, though. + +@itemize @bullet +@item + +Filling messes up comments, but only at the end of the file. Reported +by uergen Reiss <psy3022@@rzbox.uni-wuerzburg.de>. +@item +@kbd{C-c C-q C-e} doesn't work properly on nested itemize environments. +Reported by "Robert B. Love" <rlove@@raptor.rmNUG.ORG>. + +@item +One suggestion for AUC-TeX: I think that the font command C-c C-f C-r, +which produces \textrm@{@} in a LaTeX file, should instead produce +either \textrm@{@} or \mathrm@{@}, depending on whether one is in math +mode or not. --- John Palmieri <palmieri@@math.mit.edu> + +@item +A way to add and overwrite math mode entries in style files, and to +decide where they should be. Suggested by Remo Badii <Remo.Badii@@psi.ch>. + +@item +Create template for (first) line of tabular environment. + +@item +I think prompting for the master is the intended behaviour. It +corresponds to a `shared' value for TeX-master. + +There should probably be a `none' value which wouldn't query for the +master, but instead disable all features that relies on TeX-master. + +This default value for TeX-master could then be controled with mapping +based on the extension. + +@item +@kbd{C-c '} should alway stay in the current window, also when it find a +new file. + +@item +@code{LaTeX-fill-environment} does not indent the closing @samp{\end}. + +@item +Rewrite @file{ltx-help.el} and put it in @file{latex.el}. Fix also: +@example +From: Denby Wong <DnB@@slip224.qlink.QueensU.CA> + + 1) change documentation regarding where to get the + latest version (at CTAN at pip.shsu.edu for me) + under info/latex2e-help-texinfo/ + + 2) change or provide choice over which version to + use. There are three references to the info + node "(latex)" in the file which should be + "(latex2e)" for the new file. + +From: Piet van Oostrum <piet@@cs.ruu.nl> + +One of the annoying things of latex-help is that if you ask for \LARGE, you +get \large if you have case-fold-search=t. This is really info's problem as +it doesn't reset it for a search of the node, but it would be easy to stick +a (let (case-fold-search) in latex-help. +@end example + +@item +It should be possible to insert a default preamble containing +e.g. @code{usepackage} declarations, perhaps depending on the document +class. + +@item +Multiple argument completion for @samp{\bibliography}. In general, I +ought to make @kbd{,} special for these kind of completions. + +@item +Do not overwrite emacs warnings about existing auto-save files when +loading a new file. + +@item +Suggest @samp{makindex} when appropriate. + +@item +Maybe the regexp for matching a TeX symbol during parsing should be +@samp{"\\\\\\([a-zA-Z]+\\|.\\)"} --- +@samp{<thiemann@@informatik.uni-tuebingen.de>} Peter Thiemann. + +@item +AUC TeX should be able to parse La@TeX{}2e @file{.cls} files. Here are +the regexps by @samp{<thiemann@@informatik.uni-tuebingen.de>} Peter +Thiemann. + +@example + ("\\\\DeclareRobustCommand@{?\\\\\\([a-zA-Z]+\\)@}?\\[\\([0-9]+\\)\\]\ +\\[\\([^\]\\\\\n\r]+\\)\\]" + (1 2 3) LaTeX-auto-optional) + ("\\\\DeclareRobustCommand@{?\\\\\\([a-zA-Z]+\\)@}?\\[\\([0-9]+\\)\\]" + (1 2) LaTeX-auto-arguments) + ("\\\\DeclareRobustCommand@{?\\\\\\([a-zA-Z]+\\)@}?" 1 TeX-auto-symbol) + ("\\\\DeclareFixedFont@{?\\\\\\([a-zA-Z]+\\)@}?" + 1 TeX-auto-symbol) + ("\\\\Declare\\(Text\\|Old\\)FontCommand@{?\\\\\\([a-zA-Z]+\\)@}?" + 2 TeX-auto-symbol) + ("\\\\DeclareMath\\(Symbol\\|Delimiter\\|Accent\\|Radical\\)@{?\\\\\\([a-zA-Z]+\\)@}?" + 2 TeX-auto-symbol) + ;;; it is also valid to declare just a single symbol, e.g. <, + ;;; with \DeclareMathSymbol but it is not necessary to register that here + ("\\\\DeclareText\\(Command\\|Symbol\\|Accent\\|Composite\\)@{?\\\\\\([a-zA-Z]+\\)@}?" + 2 TeX-auto-symbol) +@end example + +@item +Use index files (when available) to speed up @kbd{C-c C-m include +@key{RET}}. + +@item +Option not to calculate very slow completions like for +@kbd{C-c C-m include @key{RET}}.@refill + +@item +AUC @TeX{} should not parse verbatim environments. + +@item +Font menu should be created from @code{TeX-font-list}. + +@item +Installation procedure written purely in emacs lisp. + +@item +Format La@TeX{} comment blocks. + +@item +Included PostScript files should also be counted as part of the +document. + +@item +The argument to @samp{\verb} may be broken when filling if it contains a +space. This should be fixed or documented. Suggested by several +people. + +@item +The parser should catch warnings about undefined crossreferences. +Suggested by Richard Hirsch @samp{i3080501@@ws.rz.tu-bs.de}. + +@item +A nice hierarchical by-topic organization of all officially documented +LaTeX macros, available from the menu bar. + +@item +Make @samp{`} check for math context in @code{LaTeX-math-mode}. and +simply self insert if not in a math context. + +@item +Make @code{TeX-insert-dollar} more robust. Currently it can be fooled +by @samp{\mbox}'es and escaped double dollar for example. + +@item +La@TeX{} formatting should skip @code{verbatim} environments. + +@item +@code{TeX-command-default} should be set from the master file, if not +set locally. Suggested by Peter Whaite @samp{<peta@@cim.mcgill.ca>}. + +@item +Make AUC @TeX{} work with @samp{crypt++}. Suggested by Chris Moore +@samp{<Chris.Moore@@src.bae.co.uk>}. + +@item +Fix bug with @code{TeX-show-environment} from hidden document +environment. + +@item +Function to check if you are in math mode (between two dollar signs). +Suggested by Jan Erik Odegard @samp{<odegard@@dsp.rice.edu>} + +@item +The @samp{Spell} command should apply to all files in a document. Maybe +it could try to restrict to files that have been modified since last +spell check? Suggested by Ravinder Bhumbla @samp{<rbhumbla@@ucsd.edu>}. + +@item +Make @key{.} check for abbreviations and sentences ending with capital +letters. + +@item +Use Emacs 19 minibuffer history to choose between previewers, and other +stuff. Suggested by John Interrante +@samp{<interran@@uluru.Stanford.EDU>}. + +@item +Make features. + +A new command @code{TeX-update} (@kbd{C-c C-u}) could be used to create +an up-to-date dvi file by repeatedly running Bib@TeX{}, MakeIndex and +(La)@TeX{}, until an error occurs or we are done. + +An alternative is to have an @samp{Update} command that ensures the +@samp{dvi} file is up to date. This could be called before printing and +previewing. + +@item +Documentation of variables that can be set in a style hook. + +We need a list of what can safely be done in an ordinary style hook. +You can not set a variable that AUC TeX depends on, unless AUC TeX knows +that it has to run the style hooks first. + +Here is the start of such a list. +@table @code + +@item LaTeX-add-environments + +@item TeX-add-symbols + +@item LaTeX-add-labels + +@item LaTeX-add-bibliographies + +@item LaTeX-largest-level + +@end table + +@item +Correct indentation for tabular, tabbing, table, math, and array +environments. + +@item +Optional special indentation after an @samp{\item}. + +@example +\begin@{itemize@} +\item blabalaskdfjlas lajf adf + lkfjl af jasl lkf jlsdf jlf +\item f lk jldjf lajflkas flf af +\end@{itemize@} +@end example + +@item +Completion for counters and sboxes. + +@item +Outline should be (better) supported in @TeX{} mode. + +At least, support headers, trailers, as well as TeX-outline-extra. + +@item +@code{TeX-header-start} and @code{TeX-trailer-end}. + +We might want these, just for fun (and outlines) + +@item +Plain @TeX{} and La@TeX{} specific header and trailer expressions. + +We should have a way to globally specify the default value of the header +and trailer regexps. + +@item +Add support for original @code{TeX-mode} keybindings. + +A third initialization file (@file{tex-mode.el}) containing an emulator +of the standard @code{TeX-mode} would help convince some people to +change to AUC @TeX{}.@refill + +@item +Make @code{TeX-next-error} parse ahead and store the results in a list, +using markers to remember buffer positions in order to be more robust +with regard to line numbers and changed files. This is what +@code{next-error} does. (Or did, until Emacs 19). + +@item +When @code{LaTeX-environment} is given an argument, change the current +environment. Be smart about @samp{\item[]} versus @samp{\item } and +labels like @samp{fig:} versus @samp{tab:}. + +@item +Check out if lightning completion from Ultra @TeX{} is anything for us. + +@item +Finish the @TeX{}info mode. For one thing, many @TeX{}info mode +commands do not accept braces around their arguments. + +@item +BibTeX mode. + +@item +Support for AMSLaTeX style files. + +@item +Hook up the letter environment with `bbdb.el'. + +@item +Make the letter environment hook produce `documentstyle' too. + +@end itemize + +@node Credit, Key Index, Projects, top +@comment node-name, next, previous, up +@appendix Credit + +A big smile and thanks should go to all the folks who cheered me up, +during the long hours of programming@dots{} sorry folks, but I can't help +including the list below, of comments I've got@dots{} + +Kresten Krab Thorup + +@table @samp +@item <monheit@@psych.stanford.edu> +I'd like to say that I'm very much enjoying using auc-tex. Thanks for +the great package! +@item <georgiou@@rex.cs.tulane.edu> +I really enjoy working with auc-tex. +@item <toy@@soho.crd.ge.com> +Thanks for your great package. It's indispensable now! Thanks! +@item <ascott@@gara.une.oz.au> +Thanks for your time and for what appears to be a great and useful +package. Thanks again +@item <hal@@alfred.econ.lsa.umich.edu> +Thanks for providing auc-tex. +@item <simons@@ibiza.karlsruhe.gmd.de> +I really enjoy using the new emacs TeX-mode you wrote. I think you did +a great job. +@item <clipper@@csd.uwo.ca> +I am having fun with auc-tex already. +@item <ibekhaus@@athena.mit.edu> +Thanks for your work on auc-tex, especially the math-minor mode. +@item <burt@@dfki.uni-kl.de> +I like your auc-tex elisp package for writing LaTeX files - I am +especially impressed by the help with error correction. +@item <goncal@@cnmvax.uab.es> +Thanks so much! +@item <bond@@sce.carleton.ca> +I >really< like the macro, particularly the hooks for previewing and the +error parsing! +@item <ascott@@gara.une.oz.au> +All in all I am pleased with your package. Thanks a lot. +@end table + +@node Key Index, Function Index, Credit, top +@comment node-name, next, previous, up +@unnumbered Key Index + +@printindex ky + +@node Function Index, Variable Index, Key Index, top +@comment node-name, next, previous, up +@unnumbered Function Index + +@printindex fn + +@node Variable Index, Concept Index, Function Index, top +@comment node-name, next, previous, up +@unnumbered Variable Index + +@printindex vr + +@node Concept Index, , Variable Index, top +@comment node-name, next, previous, up +@unnumbered Concept Index + +@printindex cp + +@summarycontents +@contents +@bye + +