diff options
Diffstat (limited to 'elpa/auctex-13.1.3/doc/auctex.texi')
-rw-r--r-- | elpa/auctex-13.1.3/doc/auctex.texi | 6200 |
1 files changed, 6200 insertions, 0 deletions
diff --git a/elpa/auctex-13.1.3/doc/auctex.texi b/elpa/auctex-13.1.3/doc/auctex.texi new file mode 100644 index 0000000..ca23668 --- /dev/null +++ b/elpa/auctex-13.1.3/doc/auctex.texi @@ -0,0 +1,6200 @@ +\input texinfo +@comment %**start of header +@setfilename auctex.info +@include version.texi +@settitle AUCTeX @value{VERSION} +@c footnotestyle separate +@c paragraphindent 2 +@comment %**end of header +@include macros.texi +@copying +This manual is for @AUCTeX{} +(version @value{VERSION} from @value{UPDATED}), +a sophisticated @TeX{} environment for Emacs. + +Copyright @copyright{} 1992-1995, 2001, 2002, 2004-2022 +Free Software Foundation, Inc. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, no Front-Cover Texts and no Back-Cover Texts. A +copy of the license is included in the section entitled ``GNU Free +Documentation License.'' +@end quotation +@end copying + +@dircategory Emacs +@direntry +* AUCTeX: (auctex). A sophisticated TeX environment for Emacs. +@end direntry +@dircategory TeX +@direntry +* AUCTeX: (auctex). A sophisticated TeX environment for Emacs. +@end direntry + +@iftex +@tolerance 10000 @emergencystretch 3em +@end iftex + +@finalout +@titlepage +@title @AUCTeX{} +@subtitle A sophisticated @TeX{} environment for Emacs +@subtitle Version @value{VERSION}, @value{UPDATED} +@author Kresten Krab Thorup +@author Per Abrahamsen +@author David Kastrup and others +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Use @ifinfo _and_ @ifhtml here because Texinfo 3 cannot cope with +@c @ifnottex around a top node. +@ifinfo +@node top +@top @AUCTeX{} + +This manual may be copied under the conditions spelled out in +@ref{Copying this Manual}. + +@end ifinfo +@ifhtml +@node top +@top @AUCTeX{} +@insertcopying +@end ifhtml + +@contents + +@iftex +@unnumbered Executive Summary +@end iftex + +@AUCTeX{} is an integrated environment for editing @LaTeX{}, @ConTeXt{}, +doc@TeX{}, Texinfo, and @TeX{} files. + +Although @AUCTeX{} contains a large number of features, there are no +reasons to despair. You can continue to write @TeX{} and @LaTeX{} +documents the way you are used to, and only start using the multiple +features in small steps. @AUCTeX{} 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. + +It is a good idea to make a printout of @AUCTeX{}'s reference card +@file{tex-ref.tex} or one of its typeset versions. + +If you want to make @AUCTeX{} aware of style files and multifile +documents right away, insert the following in your init file (usually +@file{~/.emacs.d/init.el}). + +@lisp +(setq TeX-auto-save t) +(setq TeX-parse-self t) +(setq-default TeX-master nil) +@end lisp + +Another thing you should enable is Ref@TeX{}, a comprehensive solution +for managing cross references, bibliographies, indices, document +navigation and a few other things. (@xref{Installation,,,reftex,The +Ref@TeX{} manual}.) + +For detailed information about the @previewlatex{} subsystem of +@AUCTeX{}, see @ref{Top,,Introduction,preview-latex,The @previewlatex{} +Manual}. + +There is a mailing list for general discussion about @AUCTeX{}: write a +mail with ``subscribe'' in the subject to +@email{auctex-request@@gnu.org} to join it. Send contributions to +@email{auctex@@gnu.org}. + +Bug reports should go to @email{bug-auctex@@gnu.org}, suggestions for +new features, and pleas for help should go to either +@email{auctex-devel@@gnu.org} (the @AUCTeX{} developers), or to +@email{auctex@@gnu.org} if they might have general interest. Please use +the command @kbd{M-x TeX-submit-bug-report @key{RET}} to report bugs if +possible. You can subscribe to a low-volume announcement list by +sending ``subscribe'' in the subject of a mail to +@email{info-auctex-request@@gnu.org}. + +@menu +* Copying:: Copying +* Introduction:: Introduction to @AUCTeX{} +* Editing:: Editing the Document Source +* Display:: Controlling Screen Display +* Processing:: Starting Processors, Viewers and Other Programs +* Customization:: Customization and Extension +* Appendices:: Copying, Changes, Development, FAQ, Texinfo mode +* Indices:: Indices + +@detailmenu + --- The Detailed Node Listing --- + +Introduction + +* Summary:: Overview of @AUCTeX{} +* Installation:: Installing @AUCTeX{} +* Quick Start:: Quick Start + +Editing the Document Source + +* Quotes:: Inserting double quotes +* Font Specifiers:: Inserting Font Specifiers +* Sectioning:: Inserting chapters, sections, etc. +* Environments:: Inserting Environment Templates +* Mathematics:: Entering Mathematics +* Completion:: Completion of macros +* Commenting:: Commenting text +* Indenting:: Reflecting syntactic constructs with whitespace +* Filling:: Automatic and manual line breaking + +Inserting Environment Templates + +* Equations:: Equations +* Floats:: Floats +* Itemize-like:: Itemize-like Environments +* Tabular-like:: Tabular-like Environments +* Customizing Environments:: Customizing Environments + +Controlling Screen Display + +* Font Locking:: Font Locking +* Folding:: Folding Macros and Environments +* Outline:: Outlining the Document +* Narrowing:: Restricting display and editing to a portion of the buffer +* Prettifying:: Displaying Greek and math macros as Unicode characters + +Font Locking + +* Fontification of macros:: Fontification of macros +* Fontification of quotes:: Fontification of quotes +* Fontification of math:: Fontification of math constructs +* Verbatim content:: Verbatim macros and environments +* Faces:: Faces used by font-latex +* Known problems:: Known fontification problems + +Starting Processors, Viewers and Other Programs + +* Commands:: Invoking external commands. +* Viewing:: Invoking external viewers. +* Debugging:: Debugging @TeX{} and @LaTeX{} output. +* Checking:: Checking the document. +* Control:: Controlling the processes. +* Cleaning:: Cleaning intermediate and output files. +* Documentation:: Documentation about macros and packages. + +Viewing the Formatted Output + +* Starting Viewers:: Starting viewers +* I/O Correlation:: Forward and inverse search + +Catching the errors + +* Ignoring warnings:: Controlling warnings to be reported +* Error overview:: List of all errors and warnings + +Customization and Extension + +* Multifile:: Multifile Documents +* Parsing Files:: Automatic Parsing of @TeX{} Files +* Internationalization:: Language Support +* Automatic:: Automatic Customization +* Style Files:: Writing Your Own Style Support + +Language Support + +* European:: Using @AUCTeX{} with European Languages +* Japanese:: Using @AUCTeX{} with Japanese + +Automatic Customization + +* Automatic Global:: Automatic Customization for the Site +* Automatic Private:: Automatic Customization for a User +* Automatic Local:: Automatic Customization for a Directory + +Writing Your Own Style Support + +* Simple Style:: A Simple Style File +* Adding Macros:: Adding Support for Macros +* Adding Environments:: Adding Support for Environments +* Adding Other:: Adding or Examining Other Information +* Hacking the Parser:: Automatic Extraction of New Things + +Copying, Changes, Development, FAQ + +* Copying this Manual:: +* Changes:: +* Development:: +* FAQ:: +* Texinfo mode:: + +Copying this Manual + +* GNU Free Documentation License:: License for copying this manual. + +Indices + +* Key Index:: +* Function Index:: +* Variable Index:: +* Concept Index:: + +@end detailmenu +@end menu + +@node Copying +@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 + +@c This text adapted from the Texinfo 2.16 distribution. + +@AUCTeX{} primarily consists of Lisp files for Emacs, but +there are also installation scripts and files and @TeX{} support files. +All of those are @dfn{free}; this means that everyone is free to use +them and free to redistribute them on a free basis. The files of +@AUCTeX{} 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. + +Specifically, we want to make sure that you have the right to give away +copies of the files that constitute @AUCTeX{}, that you receive source +code or else can get it if you want it, that you can change these files +or use pieces of them in new free programs, and that you know you can do +these things. + +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 parts of @AUCTeX{}, 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. + +Also, for our own protection, we must make certain that everyone finds +out that there is no warranty for @AUCTeX{}. If any parts 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. + +The precise conditions of the licenses for the files currently being +distributed as part of @AUCTeX{} are found in the General Public +Licenses that accompany them. This manual specifically is covered by +the GNU Free Documentation License (@pxref{Copying this Manual}). + +@node Introduction +@chapter Introduction + +@menu +* Summary:: Overview of @AUCTeX{} +* Installation:: Installing @AUCTeX{} +* Quick Start:: Quick Start +@end menu + +@lowersections +@include intro.texi + +@include install.texi + +@include quickstart.texi +@raisesections + +@node Editing +@chapter Editing the Document Source + +The most commonly used commands/macros of @AUCTeX{} are those which +simply insert templates for often used @TeX{}, @LaTeX{}, or @ConTeXt{} +constructs, like font changes, handling of environments, etc. These +features are very simple, and easy to learn, and help you avoid mistakes +like mismatched braces, or @samp{\begin@{@}}-@samp{\end@{@}} pairs. + +Apart from that this chapter contains a description of some features for +entering more specialized sorts of text, for formatting the source by +indenting and filling and for navigating through the document. + +@menu +* Quotes:: Inserting quotes, dollars, and braces +* Font Specifiers:: Inserting Font Specifiers +* Sectioning:: Inserting chapters, sections, etc. +* Environments:: Inserting Environment Templates +* Mathematics:: Entering Mathematics +* Completion:: Completion of macros +* Marking:: Marking Environments, Sections, or Texinfo Nodes +* Commenting:: Commenting text +* Indenting:: Reflecting syntactic constructs with whitespace +* Filling:: Automatic and manual line breaking +@end menu + +@node Quotes +@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 + +@subheading Quotation Marks + +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, @AUCTeX{} 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. +@end deffn + +@defopt TeX-open-quote +String inserted by typing @kbd{"} to open a quotation. +(@xref{European}, for language-specific quotation mark insertion.) +@end defopt + +@defopt TeX-close-quote +String inserted by typing @kbd{"} to close a quotation. +(@xref{European}, for language-specific quotation mark insertion.) +@end defopt + +@defopt TeX-quote-after-quote +Determines the behavior of @kbd{"}. If it is non-nil, typing @kbd{"} +will insert a literal double quote. The respective values of +@code{TeX-open-quote} and @code{TeX-close-quote} will be inserted +after typing @kbd{"} once again. +@end defopt + +The @samp{babel} package provides special support for the requirements +of typesetting quotation marks in many different languages. If you use +this package, either directly or by loading a language-specific style +file, you should also use the special commands for quote insertion +instead of the standard quotes shown above. @AUCTeX{} is able to +recognize several of these languages and will change quote insertion +accordingly. @xref{European}, for details about this feature and how to +control it. + +@vindex LaTeX-csquotes-open-quote +@vindex LaTeX-csquotes-close-quote +@vindex LaTeX-csquotes-quote-after-quote +In case you are using the @samp{csquotes} package, you should customize +@code{LaTeX-csquotes-open-quote}, @code{LaTeX-csquotes-close-quote} and +@code{LaTeX-csquotes-quote-after-quote}. The quotation characters will +only be used if both variables---@code{LaTeX-csquotes-open-quote} and +@code{LaTeX-csquotes-close-quote}---are non-empty strings. But then the +@samp{csquotes}-related values will take precedence over the +language-specific ones. + +@subheading Dollar Signs + +In @AUCTeX{}, dollar signs should match like they do in @TeX{}. This +has been partially implemented, we assume dollar signs always match +within a paragraph. By default, 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. + +@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. + +With optional @var{arg}, insert that many dollar signs. +@end deffn + +@TeX{} and @LaTeX{} users often look for a way to insert inline +equations like @samp{$...$} or @samp{\(...\)} simply typing @kbd{$}. +@AUCTeX{} helps them through the customizable variable +@code{TeX-electric-math}. + +@defopt TeX-electric-math +If the variable is non-nil and you type @kbd{$} outside math mode, +@AUCTeX{} will automatically insert the opening and closing symbols for +an inline equation and put the point between them. The opening symbol +will blink when @code{blink-matching-paren} is non-nil. If +@code{TeX-electric-math} is nil, typing @kbd{$} simply inserts @samp{$} +at point, this is the default. + +Besides @code{nil}, possible values for this variable are @code{(cons +"$" "$")} for @TeX{} inline equations @samp{$...$}, and @code{(cons +"\\(" "\\)")} for @LaTeX{} inline equations @samp{\(...\)}. + +If the variable is non-nil and point is inside math mode right between a +couple of single dollars, pressing @kbd{$} will insert another pair of +dollar signs and leave the point between them. Thus, if +@code{TeX-electric-math} is set to @code{(cons "$" "$")} you can easily +obtain a @TeX{} display equation @samp{$$...$$} by pressing @kbd{$} +twice in a row. (Note that you should not use double dollar signs in +@LaTeX{} because this practice can lead to wrong spacing in typeset +documents.) + +In addition, when the variable is non-nil and there is an active region +outside math mode, typing @kbd{$} will put around the active region +symbols for opening and closing inline equation and keep the region +active, leaving point after the closing symbol. By pressing repeatedly +@kbd{$} while the region is active you can toggle between an inline +equation, a display equation, and no equation. To be precise, +@samp{$...$} is replaced by @samp{$$...$$}, whereas @samp{\(...\)} is +replaced by @samp{\[...\]}. +@end defopt + +If you want to automatically insert @samp{$...$} in plain @TeX{} files, +and @samp{\(...\)} in @LaTeX{} files by pressing @kbd{$}, add the +following to your init file +@lisp +(add-hook 'plain-TeX-mode-hook + (lambda () (set (make-local-variable 'TeX-electric-math) + (cons "$" "$")))) +(add-hook 'LaTeX-mode-hook + (lambda () (set (make-local-variable 'TeX-electric-math) + (cons "\\(" "\\)")))) +@end lisp + +Note that Texinfo mode does nothing special for @kbd{$}. It inserts +dollar sign(s) just in the same way as the other normal keys do. + +@subheading Braces + +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. If there is an active region, put braces around +it and leave point after the closing brace. +@end deffn + +When writing complex math formulas in @LaTeX{} documents, you +sometimes need to adjust the size of braces with pairs of macros like +@samp{\left}-@samp{\right}, @samp{\bigl}-@samp{\bigr} and so on. You +can avoid unbalanced pairs with the help of @code{TeX-insert-macro}, +bound to @kbd{C-c C-m} or @kbd{C-c @key{RET}} (@pxref{Completion}). +If you insert left size adjusting macros such as @samp{\left}, +@samp{\bigl} etc.@: with @code{TeX-insert-macro}, it asks for left brace +to use and supplies automatically right size adjusting macros such as +@samp{\right}, @samp{\bigr} etc.@: and corresponding right brace in +addtion to the intended left macro and left brace. + +The completion by @code{TeX-insert-macro} also applies when entering +macros such as @samp{\langle}, @samp{\lfloor} and @samp{\lceil}, which +produce the left part of the paired braces. For example, inserting +@samp{\lfloor} by @kbd{C-c C-m} is immediately followed by the +insertion of @samp{\rfloor}. In addition, if the point was located +just after @samp{\left} or its friends, the corresponding +@samp{\right} etc.@: will be inserted in front of @samp{\rfloor}. +In both cases, active region is honored. + +As a side effect, when @code{LaTeX-math-mode} (@pxref{Mathematics}) is +on, just typing @kbd{`(} inserts not only @samp{\langle}, but also +@samp{\rangle}. + +If you do not like such auto completion at all, it can be disabled by a +user option. + +@defopt TeX-arg-right-insert-p +If this option is turned off, the automatic supply of the right macros +and braces is suppressed. +@end defopt + +@kindex ( +@kindex @{ +@kindex [ +When you edit @LaTeX{} documents, you can enable automatic brace +pairing when typing @kbd{(}, @kbd{@{} and @kbd{[}. + +@defopt LaTeX-electric-left-right-brace +If this option is on, just typing @kbd{(}, @kbd{@{} or @kbd{[} +immediately adds the corresponding right brace @samp{)}, @samp{@}} or +@samp{]}. The point is left after the opening brace. If there is an +active region, braces are put around it. + +They recognize the preceding backslash or size adjusting macros such +as @samp{\left}, @samp{\bigl} etc., so the following completions will +occur: +@itemize @bullet + +@item +(when typing single left brace) +@itemize @minus + +@item +@samp{(} -> @samp{()} + +@item +@samp{@{} -> @samp{@{@}} + +@item +@samp{[} -> @samp{[]} +@end itemize + +@item +(when typing left brace just after a backslash) +@itemize @minus + +@item +@samp{\(} -> @samp{\(\)} + +@item +@samp{\@{} -> @samp{\@{\@}} + +@item +@samp{\[} -> @samp{\[\]} +@end itemize + +@item +(when typing just after @samp{\left} or @samp{\bigl}) +@itemize @minus + +@item +@samp{\left(} -> @samp{\left(\right)} + +@item +@samp{\bigl[} -> @samp{\bigl[\bigr]} +@end itemize + +@item +(when typing just after @samp{\Bigl\}) +@itemize @minus + +@item +@samp{\Bigl\@{} -> @samp{\Bigl\@{\Bigr\@}} + +@end itemize + +@end itemize + +This auto completion feature may be a bit annoying when editing an +already existing @LaTeX{} document. In that case, use @kbd{C-u 1} or +@kbd{C-q} before typing @kbd{(}, @kbd{@{} or @kbd{[}. Then no +completion is done and just a single left brace is inserted. In fact, +with optional prefix @var{arg}, just that many open braces are +inserted without any completion. +@end defopt + +@node Font Specifiers +@section Inserting Font Specifiers + +@cindex Fonts +@cindex Font macros +@cindex Changing font +@cindex Specifying a font + +Perhaps the most used keyboard commands of @AUCTeX{} are the short-cuts +available for easy insertion of font changing macros. + +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. + +@table @kbd +@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-m +@kindex C-c C-f C-m +@cindex @code{\textmd} +Insert @r{medium face} @samp{\textmd@{@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 @emph{emphasized} @samp{\emph@{@point{}@}} text. + +@item C-c C-f C-s +@kindex C-c C-f C-s +@cindex @code{\textsl} +Insert @slanted{slanted} @samp{\textsl@{@point{}@}} text. + +@item C-c C-f C-r +@kindex C-c C-f C-r +@cindex @code{\textrm} +Insert @r{roman} @samp{\textrm@{@point{}@}} text. + +@item C-c C-f C-f +@kindex C-c C-f C-f +@cindex @code{\textsf} +Insert @sansserif{sans serif} @samp{\textsf@{@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-l +@kindex C-c C-f C-l +@cindex @code{\textulc} +Insert upper lower case @samp{\textulc@{@point{}@}} text. + +@item C-c C-f C-w +@kindex C-c C-f C-w +@cindex @code{\textsw} +Insert @sc{swash} @samp{\textsw@{@point{}@}} text. + +@item C-c C-f C-n +@kindex C-c C-f C-n +@cindex @code{\textnormal} +Insert normal @samp{\textnormal@{@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{replace} @var{what} +@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 @code{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 + +@defopt LaTeX-font-list +List of fonts used by @code{TeX-font} in LaTeX mode. It has the same +structure as @code{TeX-font-list}. +@end defopt + +@node Sectioning +@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 @AUCTeX{}, 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}. + +@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 + +@vtable @code +@item LaTeX-level +Numeric section level, default set by prefix arg to +@code{LaTeX-section}. +@item LaTeX-name +Name of the sectioning command, derived from @code{LaTeX-level}. +@item LaTeX-title +The title of the section, default to an empty string. +@item LaTeX-toc +Entry for the table of contents list, default nil. +@item LaTeX-done-mark +Position of point afterwards, default nil meaning after the inserted +text. +@end vtable + +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 +@code{LaTeX-level} and @code{LaTeX-name}. +@item LaTeX-section-title +Query the user about the title of the section. Modifies @code{LaTeX-title}. +@item LaTeX-section-toc +Query the user for the toc entry. Modifies @code{LaTeX-toc}. +@item LaTeX-section-section +Insert @LaTeX{} section command according to @code{LaTeX-name}, +@code{LaTeX-title}, and @code{LaTeX-toc}. If @code{LaTeX-toc} is nil, no +toc entry is inserted. If @code{LaTeX-toc} or @code{LaTeX-title} are +empty strings, @code{LaTeX-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 init file such as @file{init.el} or @file{.emacs}. +@end defopt + +The behavior of @code{LaTeX-section-label} is determined by the +variable @code{LaTeX-section-label}. + +@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 +@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. + +@AUCTeX{} is aware of most of the actual environments available in a +specific document. This is achieved by examining your +@samp{\documentclass} command, and consulting a precompiled list of +environments available in a large number of styles. + +Most of these are described further in the following sections, and you +may easily specify more. @xref{Customizing Environments}. + +You insert an environment with @kbd{C-c C-e}, and select an environment +type. Depending on the environment, @AUCTeX{} 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}) @AUCTeX{} 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 @AUCTeX{} may +prompt you for further specifications. + +If the optional argument @var{arg} is non-nil (i.e.@: you have given a +prefix argument), the current environment is modified and no new +environment is inserted. +@end deffn + +@AUCTeX{} helps you adding labels to environments which use them, such +as @samp{equation}, @samp{figure}, @samp{table}, etc@dots{} When you +insert one of the supported environments with @kbd{C-c C-e}, you will be +automatically prompted for a label. You can select the prefix to be +used for such environments with the @code{LaTeX-label-alist} variable. +@defopt LaTeX-label-alist +List the prefixes to be used for the label of each supported +environment. + +This is an alist whose car is the environment name, and the cdr either +the prefix or a symbol referring to one. + +If the name is not found, or if the cdr is nil, no label is +automatically inserted for that environment. + +If you want to automatically insert a label for a environment but with +an empty prefix, use the empty string @code{""} as the cdr of the +corresponding entry. +@end defopt + +As a default selection, @AUCTeX{} 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 @code{LaTeX-environment} +first time. When the current environment is @samp{document}, it is +overriden by @code{LaTeX-default-document-environment}. +@end defopt + +@defvar LaTeX-default-document-environment +Default environment when invoking @samp{LaTeX-environment} and the +current environment is @samp{document}. It is intended to be used in +@LaTeX{} class style files. For example, in @file{beamer.el} it is set +to @code{frame}, in @file{letter.el} to @code{letter}, and in +@file{slides.el} to @code{slide}. +@end defvar + +If the document is empty, or the cursor is placed at the top of the +document, @AUCTeX{} will default to insert a @samp{document} environment +prompting also for the insertion of @samp{\documentclass} and +@samp{\usepackage} macros. You will be prompted for a new package until +you enter nothing. If you do not want to insert any @samp{\usepackage} +at all, just press @key{RET} at the first @samp{Packages} prompt. + +@AUCTeX{} distinguishes normal and expert environments. By default, it +will offer completion only for normal environments. This behavior is +controlled by the user option @code{TeX-complete-expert-commands}. + +@defopt TeX-complete-expert-commands +Complete macros and environments marked as expert commands. + +Possible values are nil, t, or a list of style names. + +@table @asis +@item nil +Don't complete expert commands (default). +@item t +Always complete expert commands. +@item (@var{styles} @dots{}) +Only complete expert commands of @var{styles}. +@end table +@end defopt + + +@menu +* Equations:: Equations +* Floats:: Floats +* Itemize-like:: Itemize-like Environments +* Tabular-like:: Tabular-like Environments +* 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 + +@AUCTeX{} offers keyboard shortcuts for moving point to the beginning +and to the end of the current environment. +@deffn Command LaTeX-find-matching-begin +@kindex C-M-a +(@kbd{C-M-a}) Move point to the @samp{\begin} of the current +environment. + +If this command is called inside a comment and +@code{LaTeX-syntactic-comments} is enabled, try to find the environment +in commented regions with the same comment prefix. +@end deffn + +@deffn Command LaTeX-find-matching-end +@kindex C-M-e +(@kbd{C-M-e}) Move point to the @samp{\end} of the current environment. + +If this command is called inside a comment and +@code{LaTeX-syntactic-comments} is enabled, try to find the environment +in commented regions with the same comment prefix. +@end deffn + +@node Equations +@subsection Equations +@cindex Equations +@cindex Equation +@cindex Eqnarray +@cindex amsmath + +When inserting equation-like environments, the @samp{\label} will have a +default prefix, which is controlled by the following variables: + +@defopt LaTeX-equation-label +Prefix to use for `equation' labels. +@end defopt + +@defopt LaTeX-eqnarray-label +Prefix to use for `eqnarray' labels. +@end defopt + +@defopt LaTeX-amsmath-label +Prefix to use for amsmath equation labels. Amsmath equations include +@samp{align}, @samp{alignat}, @samp{xalignat}, @samp{multline}, +@samp{flalign} and @samp{gather}. +@end defopt + +@node Floats +@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 @AUCTeX{}. +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 position +This is the optional argument of float environments that controls how +they are placed in the final document. In @LaTeX{} this is a sequence +of the letters @samp{htbp} as described in the @LaTeX{} manual. The +value will default to the value of @code{LaTeX-float}. +@vindex LaTeX-float + +@item caption +This is the caption of the float. The default is to insert the caption +at the bottom of the float. You can specify floats where the caption +should be placed at the top with @code{LaTeX-top-caption-list}. +@vindex LaTeX-top-caption-list + +@item short caption +If the specified caption is greater than a specific length, then a short +caption is prompted for and it is inserted as an optional argument to +the @samp{\caption} macro. The length that a caption needs to be before +prompting for a short version is controlled by +@code{LaTeX-short-caption-prompt-length}. +@vindex LaTeX-short-caption-prompt-length + +@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, you will be asked if you want the contents of the float +environment to be horizontally centered. Upon a positive answer a +@samp{\centering} macro will be inserted at the beginning of the float +environment. + +@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 + +@defopt LaTeX-top-caption-list +List of float environments with top caption. +@end defopt + +@defopt LaTeX-short-caption-prompt-length +Number of chars a caption should be before prompting for a short +caption. +@end defopt + +@node Itemize-like +@subsection Itemize-like Environments +@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 + +@defopt TeX-arg-item-label-p +If non-nil, you will always be asked for optional label in items. +Otherwise, you will be asked only in description environments. +@end defopt + +@node Tabular-like +@subsection Tabular-like Environments +@cindex amsmath + +When inserting Tabular-like environments, that is, `tabular' `array' +etc., you will be prompted for a template for that environment. +Related variables: + +@defopt LaTeX-default-format +Default format string for array and tabular environments. +@end defopt + +@defopt LaTeX-default-width +Default width for minipage and tabular* environments. +@end defopt + +@defopt LaTeX-default-position +Default position string for array and tabular environments. If nil, +act like the empty string is given, but don't prompt for a position. +@end defopt + +@AUCTeX{} calculates the number of columns from the format string and +inserts the suitable number of ampersands. + +You can use @kbd{C-c @key{LFD}} (@code{LaTeX-insert-item}) to terminate +rows in these environments. It supplies line break macro @samp{\\} and +inserts the suitable number of ampersands on the next line. @AUCTeX{} +also supports the @samp{*@{num@}@{cols@}} notation (which may contain +another @samp{*}-expression) in the format string when calculating the +number of ampersands. Please note that @samp{num} and @samp{cols} must +be enclosed in braces; expressions like @samp{*2l} are not recognized +correctly by the algorithm. + +@deffn Command LaTeX-insert-item +@kindex C-c @key{LFD} +(@kbd{C-c @key{LFD}}) Close the current row with @samp{\\}, move to the +next line and insert an appropriate number of ampersands for the current +environment. +@end deffn + +Similar supports are provided for various amsmath environments such as +@samp{align}, @samp{gather}, @samp{alignat}, @samp{matrix} etc. Try +typing @kbd{C-c @key{LFD}} in these environments. It recognizes the +current environment and does the appropriate job depending on the +context. + +@node Customizing Environments +@subsection Customizing Environments + +@xref{Adding Environments}, for how to customize the list of known +environments. + +@node Mathematics +@section Entering Mathematics +@cindex Mathematics +@cindex Symbols +@cindex Abbreviations +@vindex LaTeX-math-default + +@TeX{} is written by a mathematician, and has always contained good +support for formatting mathematical text. @AUCTeX{} supports this +tradition, by offering a special minor mode for entering text with many +mathematical symbols. You can enter this mode by typing @kbd{C-c +~}. + +@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-default} and +@code{LaTeX-math-list}. If given a prefix argument, the symbol will be +surrounded by dollar signs. +@end deffn + +You can use another prefix key (instead of @kbd{`}) by setting the +variable @code{LaTeX-math-abbrev-prefix}. + +To enable @LaTeX{} Math mode by default, add the following in your +init file such as @file{init.el} or @file{.emacs}: +@lisp +(add-hook 'LaTeX-mode-hook #'LaTeX-math-mode) +@end lisp + +@defopt LaTeX-math-abbrev-prefix +A string containing the prefix of @code{LaTeX-math-mode} commands; This +value defaults to @kbd{`}. + +The string has to be a key or key sequence in a format understood by the +@code{kbd} macro. This corresponds to the syntax usually used in the +manuals for Emacs Lisp. +@end defopt + +The variable @code{LaTeX-math-list} allows you to add your own mappings. + +@defopt LaTeX-math-list +A list containing user-defined keys and commands to be used in @LaTeX{} +Math mode. Each entry should be a list of two to four elements. + +First, the key to be used after @code{LaTeX-math-abbrev-prefix} for macro +insertion. The key can be a character (e.g.@: @samp{?o}) for a single +stroke or a string (e.g.@: @samp{"o a"}) for a multi-stroke binding. If it +is nil, the symbol has no associated keystroke (it is available in the +menu, though). + +Second, a string representing the name of the macro (without a leading +backslash.) + +Third, a string representing the name of a submenu the command should be +added to. Use a list of strings in case of nested menus. + +Fourth, the position of a Unicode character to be displayed in the menu +alongside the macro name. This is an integer value. +@end defopt + +@defopt LaTeX-math-menu-unicode +Whether the @LaTeX{} Math menu should try using Unicode for effect. Your Emacs +built must be able to display include Unicode characters in menus for +this feature. +@end defopt + +@AUCTeX{}'s reference card @file{tex-ref.tex} includes a list of all +math mode commands. + +@cindex subscript +@cindex superscript +@kindex _ +@kindex ^ +@AUCTeX{} can help you write subscripts and superscripts in math +constructs by automatically inserting a pair of braces after typing +@key{_} or @key{^} respectively and putting point between the braces. +In order to enable this feature, set the variable +@code{TeX-electric-sub-and-superscript} to a non-nil value. + +@defopt TeX-electric-sub-and-superscript +If non-nil, insert braces after typing @key{^} and @key{_} in math mode. +@end defopt + +@cindex input method +You can automatically turn off input methods, used to input non-ascii +characters, when you begin to enter math constructs. + +@defopt TeX-math-input-method-off-regexp +Input method matching this regular expression is turned off when @kbd{$} +is typed to begin math mode or a math environment is inserted by +@kbd{C-c C-e} (@code{LaTeX-environment}). +@end defopt + +@node Completion +@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 which was bound to @kbd{M-@key{TAB}} until completion-at-point +became the new standard completion facility (see below). Users of the +wonderful ispell mode know and love the @code{ispell-complete-word} +command from that package. Similarly, @AUCTeX{} has a +@code{TeX-complete-symbol} command, by default bound to +@kbd{M-@key{TAB}} which is equivalent to @kbd{C-M-i}. Using +@code{TeX-complete-symbol} makes it easier to type and remember the +names of long @LaTeX{} 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}'. But there's more: if point is just after +@samp{\begin@{}, then @code{TeX-complete-symbol} will complete @LaTeX{} +environments, etc. This is controlled by @code{TeX-complete-list}. + +@deffn Command TeX-complete-symbol +@kindex M-@key{TAB} +(@kbd{M-@key{TAB}}) Complete @TeX{} symbol before point. +@end deffn + +@defvar TeX-complete-list +List of ways to complete the preceding text. + +Each entry is a list with the following elements: + +@enumerate +@item +Regexp matching the preceding text or a predicate of arity 0 which +returns non-nil and sets `match-data' appropriately if it is applicable. +@item +A number indicating the subgroup in the regexp containing the text. +@item +A function returning an alist of possible completions. +@item +Text to append after a succesful completion. +@end enumerate + +Or alternatively: + +@enumerate +@item +Regexp matching the preceding text. +@item +Function to do the actual completion. +@end enumerate +@end defvar + +More recent Emacs versions have a new completion mechanism. Modes may +define and register custom @code{completion-at-point} functions and when the +user invokes @code{completion-at-point} (usually bound to +@kbd{M-@key{TAB}}), all such registered functions are consulted for +checking for possible completions. Modern completion UIs like +@i{company-mode} support this completion-at-point facility. + +@defun TeX--completion-at-point +@AUCTeX{}'s completion-at-point function which is automatically added to +@code{completion-at-point-functions} in @TeX{} and @LaTeX{} buffers. + +It offers the same completion candidates as would +@code{TeX-complete-symbol} (and is also controlled by +@code{TeX-complete-list}) except that it doesn't fall back on +@code{ispell-complete-word} which would be awkward with completion UIs +like @i{company-mode}. +@end defun + +A more direct way to insert a macro is with @code{TeX-insert-macro}, +bound to @kbd{C-c C-m} which is equivalent to @kbd{C-c @key{RET}}. It +has the advantage over completion that it knows about the argument of +most standard @LaTeX{} 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} or @kbd{C-c @key{RET}}) Prompt (with completion) for the +name of a @TeX{} macro, and if @AUCTeX{} knows the macro, prompt for +each argument. +@end deffn + +As a default selection, @AUCTeX{} 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 + +@defopt TeX-insert-macro-default-style +Specifies whether @code{TeX-insert-macro} will ask for all optional +arguments. + +If set to the symbol @code{show-optional-args}, @code{TeX-insert-macro} +asks for optional arguments of @TeX{} marcos, unless the previous +optional argument has been rejected. If set to +@code{show-all-optional-args}, @code{TeX-insert-macro} asks for all +optional arguments. @code{mandatory-args-only}, @code{TeX-insert-macro} +asks only for mandatory arguments. When @code{TeX-insert-macro} is +called with prefix argument (@kbd{C-u}), it's the other way round. +@c FIXME: Now that the option has 3 candidates, it isn't clear what "the +@c other way round" means. + +Note that for some macros, there are special mechanisms, e.g.@: +@code{TeX-arg-cite-note-p} and @code{LaTeX-includegraphics-options-alist}. +@end defopt + + +A faster alternative is to enable the option +@code{TeX-electric-escape}. + +@defopt TeX-electric-escape +If this is non-nil, typing the @TeX{} escape character @kbd{\} will +invoke the command @code{TeX-electric-macro}. + +In Texinfo mode, the command is invoked by @kbd{@@} instead. +@end defopt + +The difference between @code{TeX-insert-macro} and +@code{TeX-electric-macro} is that space key @key{SPC} 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 @AUCTeX{} knows the macro, prompt for each argument. +Space (@key{SPC}) will complete and exit. +@end deffn + +By default @AUCTeX{} will put an empty set braces @samp{@{@}} after a +macro with no arguments to stop it from eating the next whitespace. +This is suppressed inside math mode and can be disabled totally 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 with +no arguments. +@end defopt + +@defopt TeX-insert-braces-alist +Control the insertion of a pair of braces after a macro on a per macro +basis. + +This variable is an alist. Each element is a cons cell, whose car is +the macro name, and the cdr is non-nil or nil, depending on whether a +pair of braces should be, respectively, appended or not to the macro. + +If a macro has an element in this variable, @AUCTeX{} will +use its value to decide what to do, whatever the value of the variable +@code{TeX-insert-braces}. +@end defopt + +Completions work because @AUCTeX{} can analyze @TeX{} files, and store +symbols in Emacs Lisp files for later retrieval. @xref{Automatic}, for +more information. + +@AUCTeX{} distinguishes normal and expert macros. By default, it will +offer completion only for normal commands. This behavior can be +controlled using the user option @code{TeX-complete-expert-commands}. + +@defopt TeX-complete-expert-commands +Complete macros and environments marked as expert commands. + +Possible values are nil, t, or a list of style names. + +@table @asis +@item nil +Don't complete expert commands (default). +@item t +Always complete expert commands. +@item (@var{styles} @dots{}) +Only complete expert commands of @var{styles}. +@end table +@end defopt + + +@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 +@AUCTeX{} 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 +@ref{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 Marking +@section Marking Environments, Sections, or Texinfo Nodes + +You can mark the current environment by typing @kbd{C-c .}, or the +current section by typing @kbd{C-c *}. + +In Texinfo documents you can type @kbd{C-M-h} to mark the current node. + +When the region is set, the point is moved to its beginning and the mark +to its end. + +@menu +* Marking (LaTeX):: @LaTeX{} Commands for Marking Environments and Sections +* Marking (Texinfo):: Texinfo Commands for Marking Environments, Sections, and Nodes +@end menu + +@node Marking (LaTeX) +@subsection @LaTeX{} Commands for Marking Environments and Sections + +@deffn Command LaTeX-mark-section +@kindex C-c * +(@kbd{C-c *}) Set mark at end of current logical section, and point at +top. + +With a non-nil prefix argument, mark only the region from the current +section start to the next sectioning command. Thereby subsections are +not being marked. Otherwise, any included subsections are also marked +along with current section. +@end deffn + +@deffn Command LaTeX-mark-environment +@kindex C-c . +(@kbd{C-c .}) Set mark to the end of the current environment and point +to the matching beginning. + +If a prefix argument is given, mark the respective number of enclosing +environments. The command will not work properly if there are +unbalanced begin-end pairs in comments and verbatim environments. +@end deffn + +@node Marking (Texinfo) +@subsection Texinfo Commands for Marking Environments and Sections + +@deffn Command Texinfo-mark-section +@kindex C-c * +(@kbd{C-c *}) Mark the current section, with inclusion of any containing +node. + +@vindex outline-regexp +@vindex texinfo-section-list +The current section is detected as starting by any of the structuring +commands matched by the regular expression in the variable +@code{outline-regexp} which in turn is a regular expression matching any +element of the variable @code{texinfo-section-list}. + +With a non-nil prefix argument, mark only the region from the current +section start to the next sectioning command. Thereby subsections are +not being marked. Otherwise, any included subsections are also marked. + +Note that when the current section is starting immediately after a node +command, then the node command is also marked as part of the section. +@end deffn + +@deffn Command Texinfo-mark-environment +@kindex C-c . +(@kbd{C-c .}) Set mark to the end of the current environment and point +to the matching beginning. + +If a prefix argument is given, mark the respective number of enclosing +environments. The command will not work properly if there are +unbalanced begin-end pairs in comments and verbatim environments. +@end deffn + +@deffn Command Texinfo-mark-node +@kindex C-M-h +(@kbd{C-M-h}) Mark the current node. This is the node in which point is +located. It is starting at the previous occurrence of the keyword +@code{@@node} and ending at next occurrence of the keywords +@code{@@node} or @code{@@bye}. +@end deffn + +@node Commenting +@section Commenting + +It is often necessary to comment out temporarily a region of @TeX{} or +@LaTeX{} 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. +Type @kbd{C-c ;} again to uncomment all lines of a commented region, +or @kbd{C-c %} again to uncomment all comment lines around point. +These commands will insert or remove a single @samp{%} respectively. + +@deffn Command TeX-comment-or-uncomment-region +@kindex C-c ; +(@kbd{C-c ;}) Add or remove @samp{%} from the beginning of each line +in the current region. Uncommenting works only if the region encloses +solely commented lines. If @AUCTeX{} should not try to guess if the +region should be commented or uncommented the commands +@code{TeX-comment-region} and @code{TeX-uncomment-region} can be used +to explicitly comment or uncomment the region in concern. +@end deffn + +@deffn Command TeX-comment-or-uncomment-paragraph +@kindex C-c % +(@kbd{C-c %}) Add or remove @samp{%} from the beginning of each line +in the current paragraph. When removing @samp{%} characters 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 Indenting +@section Indenting +@cindex Formatting +@cindex Indenting +@cindex Indentation +@cindex Reformatting +@cindex Reindenting + +Indentation means the addition of whitespace at the beginning of lines +to reflect special syntactical constructs. This makes it easier to see +the structure of the document, and to catch errors such as a missing +closing brace. Thus, the indentation is done for precisely the same +reasons that you would indent ordinary computer programs. + +Indentation is done by @LaTeX{} 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. (Items are identified with the help of +@code{LaTeX-item-regexp}.) If more environments are nested, they are +indented `accumulated' just like most programming languages usually are +seen indented in nested constructs. +@vindex LaTeX-indent-level +@vindex LaTeX-item-indent +@vindex LaTeX-item-regexp + +You can explicitly indent single lines, usually by pressing @key{TAB}, +or marked regions by calling @code{indent-region} on it. If you have +@code{auto-fill-mode} enabled and a line is broken while you type it, +Emacs automatically cares about the indentation in the following line. +If you want to have a similar behavior upon typing @key{RET}, you can +customize the variable @code{TeX-newline-function} and change the +default of @code{newline} which does no indentation to +@code{newline-and-indent} which indents the new line or +@code{reindent-then-newline-and-indent} which indents both the current +and the new line. +@vindex TeX-newline-function +@findex indent-region +@cindex auto-fill-mode + +There are certain @LaTeX{} environments which should be indented in a +special way, like @samp{tabular} or @samp{verbatim}. Those environments +may be specified in the variable @code{LaTeX-indent-environment-list} +together with their special indentation functions. Taking the +@samp{verbatim} environment as an example you can see that +@code{current-indentation} is used as the indentation function. This +will stop @AUCTeX{} from doing any indentation in the environment if you +hit @key{TAB} for example. +@vindex LaTeX-indent-environment-list + +There are environments in @code{LaTeX-indent-environment-list} which do +not bring a special indentation function with them. This is due to the +fact that first the respective functions are not implemented yet and +second that filling will be disabled for the specified environments. +This shall prevent the source code from being messed up by accidently +filling those environments with the standard filling routine. If you +think that providing special filling routines for such environments +would be an appropriate and challenging task for you, you are invited to +contribute. (@xref{Filling}, for further information about the filling +functionality.) +@vindex LaTeX-indent-environment-list + +The check for the indentation function may be enabled or disabled by +customizing the variable @code{LaTeX-indent-environment-check}. +@vindex LaTeX-indent-environment-check + +For tabular-like environments, @AUCTeX{} has a built-in function to indent +according to preceding @samp{&} signs and assigns it to all known +tabular-like environments in the default value of +@code{LaTeX-indent-environment-list}. + +@cindex align.el +@findex align-current +As a side note with regard to formatting special environments: Newer +Emacsen include @file{align.el} and therefore provide some support for +formatting @samp{tabular} and @samp{tabbing} environments with the +function @code{align-current} which will nicely align columns in the +source code. + +@AUCTeX{} is able to format commented parts of your code just as any +other part. This means @LaTeX{} environments and @TeX{} groups in +comments will be indented syntactically correct if the variable +@code{LaTeX-syntactic-comments} is set to t. If you disable it, +comments will be filled like normal text and no syntactic indentation +will be done. +@vindex LaTeX-syntactic-comments + +Following you will find a list of most commands and variables related +to indenting with a small summary in each case: + +@table @kbd +@item @key{TAB} +@kindex @key{TAB} +@findex LaTeX-indent-line +@code{LaTeX-indent-line} will indent the current line. + +@item @key{LFD} +@itemx C-j +@kindex @key{LFD} +@kindex C-j +@code{newline-and-indent} inserts a new line (much like @key{RET}) and +moves the cursor to an appropriate position by the left margin. + +Most keyboards nowadays lack a linefeed key and @kbd{C-j} may be tedious +to type. Therefore you can customize @AUCTeX{} to perform indentation +upon typing @key{RET} as well. The respective option is called +@code{TeX-newline-function}. +@end table + +@defopt LaTeX-indent-environment-list +List of environments with special indentation. The second element in +each entry is the function to calculate the indentation level in +columns. +@end defopt + +@defopt LaTeX-indent-level +Number of spaces to add to the indentation for each @samp{\begin} not +matched by a @samp{\end}. +@end defopt + +@defopt LaTeX-item-indent +Number of spaces to add to the indentation for @samp{\item}'s in list +environments. +@end defopt + +@defopt TeX-brace-indent-level +Number of spaces to add to the indentation for each @samp{@{} not +matched by a @samp{@}}. +@end defopt + +@defopt LaTeX-syntactic-comments +If non-nil comments will be filled and indented according to @LaTeX{} +syntax. Otherwise they will be filled like normal text. +@end defopt + +@defopt TeX-newline-function +Used to specify the function which is called when @key{RET} is pressed. +This will normally be @code{newline} which simply inserts a new line. +In case you want to have @AUCTeX{} do indentation as well when you press +@key{RET}, use the built-in functions @code{newline-and-indent} or +@code{reindent-then-newline-and-indent}. The former inserts a new line +and indents the following line, i.e.@: it moves the cursor to the right +position and therefore acts as if you pressed @key{LFD}. The latter +function additionally indents the current line. If you choose +@samp{Other}, you can specify your own fancy function to be called when +@key{RET} is pressed. +@end defopt + +@vindex LaTeX-begin-regexp +@vindex LaTeX-end-regexp +@AUCTeX{} treats by default @samp{\[...\]} math mode as a regular +environment and indents it accordingly. If you do not like such +behavior you only need to remove @code{\|\[} and @code{\|\]} from +@code{LaTeX-begin-regexp} and @code{LaTeX-end-regexp} variables +respectively. + +A closely related topic is indenting of text enclosed in square brackets, +parentheses and other pairs. @AUCTeX{} offers two variables which control +if indentation happens inside these pairs. + +@defopt TeX-indent-open-delimiters +This variable contains additional opening delimiters which increase +indentation. For example add @code{[} to this variable to get text after +a square bracket indented. +@end defopt + +@defopt TeX-indent-close-delimiters +This is the accompanying variable to @code{TeX-indent-open-delimiters} +decreasing the indentation again. This variable should contain @code{]} +if @code{TeX-indent-open-delimiters} is set like described above. +@end defopt + +@noindent +Note that this is an opt-in feature, both variables are initially set to +an empty string. That is because it introduces non-trivial side effects +to include @code{[} and @code{]} in @code{TeX-indent-open-delimiters} and +@code{TeX-indent-close-delimiters}; if you only have an opening square +bracket in your text without closing it, wrong indentation persists in the +following text. For example, in math expression, half-open intervals are +frequently written as @samp{[0,10)} or @samp{[0,10[}. In such cases, you +can put the closing part as a comment in the same line in order to have +correct indentation after that: +@example +$[0,10)$ % ] +$[0,10[$ % ]] +@end example + +Another example is @samp{\left}-@samp{\right} pair in equations. Similar +workarounds are available: +@example +\begin@{equation@} + \left[ % ] + xyz + \right] % [ + abc +\end@{equation@} +@end example + +You can include parens @samp{()} also in @code{TeX-indent-open-delimiters} +and @code{TeX-indent-close-delimiters} to enable indent inside them. Be +prepared for similar side effects when you do. + +Note that commented curly braces @code{@{} and @code{@}} aren't counted +when @AUCTeX{} computes indentation. + +@node Filling +@section Filling +@cindex Filling +@cindex Formatting +@cindex Reformatting +@cindex Refilling +@findex auto-fill-mode +@findex turn-on-auto-fill +@vindex fill-column + +Filling deals with the insertion of line breaks to prevent lines from +becoming wider than what is specified in @code{fill-column}. The +linebreaks will be inserted automatically if @code{auto-fill-mode} is +enabled. In this case the source is not only filled but also indented +automatically as you write it. + +@code{auto-fill-mode} can be enabled for @AUCTeX{} by calling +@code{turn-on-auto-fill} in one of the hooks @AUCTeX{} is running. +@xref{Modes and Hooks}. As an example, if you want to enable +@code{auto-fill-mode} in @code{LaTeX-mode}, put the following into your +init file: + +@lisp +(add-hook 'LaTeX-mode-hook #'turn-on-auto-fill) +@end lisp + +You can manually fill explicitly marked regions, paragraphs, +environments, complete sections, or the whole buffer. (Note that manual +filling in @AUCTeX{} will indent the start of the region to be filled in +contrast to many other Emacs modes.) + +There are some syntactical constructs which are handled specially with +regard to filling. These are so-called @dfn{code comments} and +@dfn{paragraph commands}. + +Code comments are comments preceded by code or text in the same line. +Upon filling a region, code comments themselves will not get filled. +Filling is done from the start of the region to the line with the code +comment and continues after it. In order to prevent overfull lines in +the source code, a linebreak will be inserted before the last +non-comment word by default. This can be changed by customizing +@code{LaTeX-fill-break-before-code-comments}. If you have overfull +lines with code comments you can fill those explicitly by calling +@code{LaTeX-fill-paragraph} or pressing @kbd{M-q} with the cursor +positioned on them. This will add linebreaks in the comment and indent +subsequent comment lines to the column of the comment in the first line +of the code comment. In this special case @kbd{M-q} only acts on the +current line and not on the whole paragraph. + +Lines with @samp{\par} are treated similarly to code comments, +i.e.@: @samp{\par} will be treated as paragraph boundary which should not +be followed by other code or text. But it is not treated as a real +paragraph boundary like an empty line where filling a paragraph would +stop. + +Paragraph commands like @samp{\section} or @samp{\noindent} (the list of +commands is defined by @code{LaTeX-paragraph-commands}) are often to be +placed in their own line(s). This means they should not be consecuted +with any preceding or following adjacent lines of text. @AUCTeX{} will +prevent this from happening if you do not put any text except another +macro after the end of the last brace of the respective macro. If +there is other text after the macro, @AUCTeX{} regards this as a sign +that the macro is part of the following paragraph. +@vindex LaTeX-paragraph-commands + +Here are some examples: + +@example +\begin@{quote@} + text text text text +@end example + +@example +\begin@{quote@}\label@{foo@} + text text text text +@end example + +If you press @kbd{M-q} on the first line in both examples, nothing will +change. But if you write + +@example +\begin@{quote@} text + text text text text +@end example +@noindent +and press @kbd{M-q}, you will get + +@example +\begin@{quote@} text text text text text +@end example + +Besides code comments and paragraph commands, another speciality of +filling in @AUCTeX{} involves commented lines. You should be aware that +these comments are treated as islands in the rest of the @LaTeX{} code +if syntactic filling is enabled. This means, for example, if you try to +fill an environment with @code{LaTeX-fill-environment} and have the +cursor placed on a commented line which does not have a surrounding +environment inside the comment, @AUCTeX{} will report an error. +@findex LaTeX-fill-environment + +The relevant commands and variables with regard to filling are: + +@table @kbd +@item C-c C-q C-p +@kindex C-c C-q C-p +@findex LaTeX-fill-paragraph +@code{LaTeX-fill-paragraph} will fill and indent the current paragraph. + +@item M-q +@kindex M-q +Alias for @kbd{C-c C-q C-p} + +@item C-c C-q C-e +@kindex C-c C-q C-e +@findex LaTeX-fill-environment +@code{LaTeX-fill-environment} will fill and indent 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 fill and indent the current logical +sectional unit. + +@item C-c C-q C-r +@kindex C-c C-q C-r +@findex LaTeX-fill-region +@code{LaTeX-fill-region} will fill and indent the current region. +@end table + +@defopt LaTeX-fill-break-at-separators +List of separators before or after which respectively linebreaks will +be inserted if they do not fit into one line. The separators can be +curly braces, brackets, switches for inline math (@samp{$}, @samp{\(}, +@samp{\)}) and switches for display math (@samp{\[}, @samp{\]}). Such +formatting can be useful to make macros and math more visible or to +prevent overfull lines in the @LaTeX{} source in case a package for +displaying formatted @TeX{} output inside the Emacs buffer, like +preview-latex, is used. +@end defopt + +@defopt LaTeX-fill-break-before-code-comments +Code comments are comments preceded by some other text in the same line. +When a paragraph containing such a comment is to be filled, the comment +start will be seen as a border after which no line breaks will be +inserted in the same line. If the option +@code{LaTeX-fill-break-before-code-comments} is enabled (which is the +default) and the comment does not fit into the line, a line break will +be inserted before the last non-comment word to minimize the chance that +the line becomes overfull. +@end defopt + +@defopt LaTeX-fill-excluded-macros +A list of macro names (without leading backslash) for whose arguments +filling should be disabled. Typically, you will want to add macros here +which have long, multi-line arguments. An example is +@code{\pgfplotstabletypeset} from the pgfplotstable package which is +used as shown in the following listing: + +@verbatim +\pgfplotstabletypeset[skip first n=4]{% + XYZ Format, + Version 1.234 + Date 2010-09-01 + @author Mustermann + A B C + 1 2 3 + 4 5 6 +} +@end verbatim +@end defopt + +@node Display +@chapter Controlling Screen Display + +It is often desirable to get visual help of what markup code in a text +actually does without having to decipher it explicitly. For this +purpose Emacs and @AUCTeX{} provide font locking (also known as syntax +highlighting) which visually sets off markup code like macros or +environments by using different colors or fonts. For example text to be +typeset in italics can be displayed with an italic font in the editor as +well, or labels and references get their own distinct color. + +While font locking helps you grasp the purpose of markup code and +separate markup from content, the markup code can still be distracting. +@AUCTeX{} lets you hide those parts and show them again at request with +its built-in support for hiding macros and environments which we call +folding here. + +Besides folding of macros and environments, @AUCTeX{} provides support +for Emacs' outline mode which lets you narrow the buffer content to +certain sections of your text by hiding the parts not belonging to these +sections. + +Moreover, you can focus in a specific portion of the code by narrowing +the buffer to the desired region. @AUCTeX{} provides also functions to +narrow the buffer to the current group and to @LaTeX{} environments. + +@AUCTeX{} also provides some WYSIWYG features. + +First, you can customize @code{font-latex-fontify-script} to enable +special formatting of @code{^} superscripts and @code{_} subscripts +(@pxref{Font Locking}). + +Secondly, @AUCTeX{} with GNU Emacs 25 or later can display certain math +macros using Unicode characters, e.g., @code{\alpha} as α. This is +called prettification and is lightweight and reasonable robust +(@pxref{Prettifying}). + +A more accurate approach is provided by @previewlatex{}, a subsystem of +@AUCTeX{}, see @ref{Top,,Introduction,preview-latex,The @previewlatex{} +Manual}. This system uses @LaTeX{} to generate images that are then +displayed in your buffer. It is extremely accurate but can be fragile +with some packages (like older pgf versions). + +Please note that you can use prettification and @previewlatex{} together. + +@menu +* Font Locking:: Font Locking +* Folding:: Folding Macros and Environments +* Outline:: Outlining the Document +* Narrowing:: Restricting display and editing to a portion of the buffer +* Prettifying:: Displaying Greek and math macros as Unicode characters +@end menu + +@node Font Locking +@section Font Locking +@cindex Font Locking +@cindex Syntax Highlighting +@cindex font-latex + +Font locking is supposed to improve readability of the source code by +highlighting certain keywords with different colors or fonts. It +thereby lets you recognize the function of markup code to a certain +extent without having to read the markup command. For general +information on controlling font locking with Emacs' Font Lock mode, see +@ref{Font Lock, , Font Lock Mode, emacs, GNU Emacs Manual}. + +@defopt TeX-install-font-lock +Once font locking is enabled globally or for the major modes provided by +@AUCTeX{}, the font locking patterns and functionality of @fontlatex{} +are activated by default. You can switch to a different font locking +scheme or disable font locking in @AUCTeX{} by customizing the variable +@code{TeX-install-font-lock}. + +Besides @fontlatex{} @AUCTeX{} ships with a scheme which is derived +from Emacs' default @LaTeX{} mode and activated by choosing +@code{tex-font-setup}. Be aware that this scheme is not coupled with +@AUCTeX{}'s style system and not the focus of development. Therefore +and due to @fontlatex{} being much more feature-rich the following +explanations will only cover @fontlatex{}. + +In case you want to hook in your own fontification scheme, you can +choose @code{other} and insert the name of the function which sets up +your font locking patterns. If you want to disable fontification in +@AUCTeX{} completely, choose @code{ignore}. +@end defopt + +@fontlatex{} provides many options for customization which are +accessible with @kbd{M-x customize-group @key{RET} font-latex @key{RET}}. For this +description the various options are explained in conceptional groups. + +@menu +* Fontification of macros:: Fontification of macros +* Fontification of quotes:: Fontification of quotes +* Fontification of math:: Fontification of math constructs +* Verbatim content:: Verbatim macros and environments +* Faces:: Faces used by font-latex +* Known problems:: Known fontification problems +@end menu + +@node Fontification of macros +@subsection Fontification of macros + +Highlighting of macros can be customized by adapting keyword lists which +can be found in the customization group @code{font-latex-keywords}. + +Three types of macros can be handled differently with respect to +fontification: + +@enumerate +@item +Commands of the form @samp{\foo[bar]@{baz@}} which consist of the macro +itself, optional arguments in square brackets and mandatory arguments in +curly braces. For the command itself the face +@code{font-lock-keyword-face} will be used and for the optional +arguments the face @code{font-lock-variable-name-face}. The face +applied to the mandatory argument depends on the macro class represented +by the respective built-in variables. +@item +Declaration macros of the form @samp{@{\foo text@}} which consist of the +macro which may be enclosed in a @TeX{} group together with text to be +affected by the macro. In case a @TeX{} group is present, the macro +will get the face @code{font-lock-keyword-face} and the text will get +the face configured for the respective macro class. If no @TeX{} group +is present, the latter face will be applied to the macro itself. +@item +Simple macros of the form @samp{\foo} which do not have any arguments or +groupings. The respective face will be applied to the macro itself. +@end enumerate + +Customization variables for @samp{\foo[bar]@{baz@}} type macros allow +both the macro name and the sequence of arguments to be specified. The +latter is done with a string which can contain the characters +@table @samp +@item * +indicating the existence of a starred variant for the macro, +@item [ +for optional arguments in brackets, +@item @{ +for mandatory arguments in braces, +@item \ +for mandatory arguments consisting of a single macro and +@item | +as a prefix indicating that two alternatives are following. +@end table +For example the specifier for @samp{\documentclass} would be @samp{[@{} +because the macro has one optional followed by one mandatory argument. +The specifier for @samp{\newcommand} would be @samp{*|@{\[[@{} because +there is a starred variant, the mandatory argument following the macro +name can be a macro or a @TeX{} group which can be followed by two +optional arguments and the last token is a mandatory argument in braces. + +Customization variables for the @samp{@{\foo text@}} and @samp{\foo} +types are simple lists of strings where each entry is a macro name +(without the leading backslash). + +@subheading General macro classes + +@fontlatex{} provides keyword lists for different macro classes which +are described in the following table: + +@vindex font-latex-match-function-keywords +@vindex font-latex-match-reference-keywords +@vindex font-latex-match-textual-keywords +@vindex font-latex-match-variable-keywords +@vindex font-latex-match-warning-keywords +@table @code +@item font-latex-match-function-keywords +Keywords for macros defining or related to functions, like +@samp{\newcommand}.@* +Type: @samp{\macro[...]@{...@}}@* +Face: @code{font-lock-function-name-face} + +@item font-latex-match-reference-keywords +Keywords for macros defining or related to references, like +@samp{\ref}.@* +Type: @samp{\macro[...]@{...@}}@* +Face: @code{font-lock-constant-face} + +@item font-latex-match-textual-keywords +Keywords for macros specifying textual content, like @samp{\caption}.@* +Type: @samp{\macro[...]@{...@}}@* +Face: @code{font-lock-type-face} + +@item font-latex-match-variable-keywords +Keywords for macros defining or related to variables, like +@samp{\setlength}.@* +Type: @samp{\macro[...]@{...@}}@* +Face: @code{font-lock-variable-name-face} + +@item font-latex-match-warning-keywords +Keywords for important macros, e.g.@: affecting line or page break, like +@samp{\clearpage}.@* +Type: @samp{\macro}@* +Face: @code{font-latex-warning-face} +@end table + +@subheading Sectioning commands +@cindex Sectioning commands, fontification of + +Sectioning commands are macros like @samp{\chapter} or @samp{\section}. +For these commands there are two fontification schemes which may be +selected by customizing the variable @code{font-latex-fontify-sectioning}. + +@defopt font-latex-fontify-sectioning +@c FIXME: Is @vindex correct? +@vindex font-latex-sectioning-0-face +@vindex font-latex-sectioning-1-face +@vindex font-latex-sectioning-2-face +@vindex font-latex-sectioning-3-face +@vindex font-latex-sectioning-4-face +@vindex font-latex-sectioning-5-face +Per default sectioning commands will be shown in a larger, proportional +font, which corresponds to a number for this variable. The font size +varies with the sectioning level, e.g.@: @samp{\part} +(@code{font-latex-sectioning-0-face}) has a larger font than +@samp{\paragraph} (@code{font-latex-sectioning-5-face}). Typically, +values from 1.05 to 1.3 for @code{font-latex-fontify-sectioning} give +best results, depending on your font setup. If you rather like to use +the base font and a different color, set the variable to the symbol +@samp{color}. In this case the face @code{font-lock-type-face} will be +used to fontify the argument of the sectioning commands. +@end defopt + +@vindex font-latex-match-sectioning-0-keywords +@vindex font-latex-match-sectioning-1-keywords +@vindex font-latex-match-sectioning-2-keywords +@vindex font-latex-match-sectioning-3-keywords +@vindex font-latex-match-sectioning-4-keywords +@vindex font-latex-match-sectioning-5-keywords +You can make @fontlatex{} aware of your own sectioning commands be +adding them to the keyword lists: +@code{font-latex-match-sectioning-0-keywords} +(@code{font-latex-sectioning-0-face}) @dots{} +@code{font-latex-match-sectioning-5-keywords} +(@code{font-latex-sectioning-5-face}). + +@vindex font-latex-slide-title-face +@vindex font-latex-match-slide-title-keywords +Related to sectioning there is special support for slide titles which +may be fontified with the face @code{font-latex-slide-title-face}. You +can add macros which should appear in this face by customizing the +variable @code{font-latex-match-slide-title-keywords}. + +@subheading Commands for changing fonts + +@LaTeX{} provides various macros for changing fonts or font attributes. +For example, you can select an italic font with @samp{\textit@{...@}} or +bold with @samp{\textbf@{...@}}. An alternative way to specify these +fonts is to use special macros in @TeX{} groups, like @samp{@{\itshape +...@}} for italics and @samp{@{\bfseries ...@}} for bold. As mentioned +above, we call the former variants commands and the latter +declarations. + +Besides the macros for changing fonts provided by @LaTeX{} there is an +infinite number of other macros---either defined by yourself for logical +markup or defined by macro packages---which affect the font in the +typeset text. While @LaTeX{}'s built-in macros and macros of packages +known by @AUCTeX{} are already handled by @fontlatex{}, different +keyword lists per type style and macro type are provided for entering +your own macros which are listed in the table below. + +@vindex font-latex-match-bold-command-keywords +@vindex font-latex-match-italic-command-keywords +@vindex font-latex-match-math-command-keywords +@vindex font-latex-match-type-command-keywords +@vindex font-latex-match-bold-declaration-keywords +@vindex font-latex-match-italic-declaration-keywords +@vindex font-latex-match-type-declaration-keywords +@table @code +@item font-latex-match-bold-command-keywords +Keywords for commands specifying a bold type style.@* +Face: @code{font-latex-bold-face} +@item font-latex-match-italic-command-keywords +Keywords for commands specifying an italic font.@* +Face: @code{font-latex-italic-face} +@item font-latex-match-math-command-keywords +Keywords for commands specifying a math font.@* +Face: @code{font-latex-math-face} +@item font-latex-match-type-command-keywords +Keywords for commands specifying a typewriter font.@* +Face: @code{font-lock-type-face} +@item font-latex-match-bold-declaration-keywords +Keywords for declarations specifying a bold type style.@* +Face: @code{font-latex-bold-face} +@item font-latex-match-italic-declaration-keywords +Keywords for declarations specifying an italic font.@* +Face: @code{font-latex-italic-face} +@item font-latex-match-type-declaration-keywords +Keywords for declarations specifying a typewriter font.@* +Face: @code{font-latex-type-face} +@end table + +@subheading Deactivating defaults of built-in keyword classes + +@vindex font-latex-deactivated-keyword-classes +@fontlatex{} ships with predefined lists of keywords for the classes +described above. You can disable these defaults per class by +customizing the variable @code{font-latex-deactivated-keyword-classes}. +This is a list of strings for keyword classes to be deactivated. Valid +entries are "warning", "variable", "biblatexnoarg", "biblatex", +"reference", "function" , "sectioning-0", "sectioning-1", +"sectioning-2", "sectioning-3", "sectioning-4", "sectioning-5", +"slide-title", "textual", "bold-command", "italic-command", +"math-command", "type-command", "bold-declaration", +"italic-declaration", "type-declaration". + +You can also get rid of certain keywords only. For example if you want +to remove highlighting of footnotes as references you can put the +following stanza into your init file: + +@lisp +(eval-after-load "font-latex" + '(setq-default + font-latex-match-reference-keywords-local + (remove (assoc-string "footnote" + font-latex-match-reference-keywords-local) + font-latex-match-reference-keywords-local))) +@end lisp + +But note that this means fiddling with @fontlatex{}'s internals and is +not guaranteed to work in future versions of @fontlatex{}. + +@subheading User-defined keyword classes + +In case the customization options explained above do not suffice for +your needs, you can specify your own keyword classes by customizing the +variable @code{font-latex-user-keyword-classes}. + +@defopt font-latex-user-keyword-classes +Every keyword class consists of four parts, a name, a list of keywords, +a face and a specifier for the type of macros to be highlighted. + +When adding new entries, you have to use unique values for the class +names, i.e.@: they must not clash with names of the built-in keyword +classes or other names given by you. Additionally the names must not +contain spaces. + +The list of keywords defines which commands and declarations should be +covered by the keyword class. A keyword can either be a simple command +name omitting the leading backslash or a list consisting of the command +name and a string specifying the sequence of arguments for the command. + +The face argument can either be an existing face or face attributes +made by you. + +There are three alternatives for the type of keywords---``Command with +arguments'', ``Declaration inside @TeX{} group'' and ``Command without +arguments''---which correspond with the macro types explained above. +@end defopt + +@node Fontification of quotes +@subsection Fontification of quotes +@cindex Quotes, fontification of + +Text in quotation marks is displayed with the face +@code{font-latex-string-face}. Besides the various forms of opening and +closing double and single quotation marks, so-called guillemets (<<, >>) +can be used for quoting. Because there are two styles of using +them---French style: << text >>; German style: >>text<<---you can +customize the variable @code{font-latex-quotes} to tell @fontlatex{} +which type you are using if the correct value cannot be derived from +document properties. + +@defopt font-latex-quotes +The default value of @code{font-latex-quotes} is @samp{auto} which means +that @fontlatex{} will try to derive the correct type of quotation mark +matching from document properties like the language option supplied to +the babel @LaTeX{} package. + +If the automatic detection fails for you and you mostly use one specific +style you can set it to a specific language-dependent value as well. +Set the value to @samp{german} if you are using >>German quotes<< and to +@samp{french} if you are using << French quotes >>. @fontlatex{} will +recognize the different ways these quotes can be given in your source +code, i.e.@: (@samp{"<}, @samp{">}), (@samp{<<}, @samp{>>}) and the +respective 8-bit variants. + +If you set @code{font-latex-quotes} to nil, quoted content will not be +fontified. +@end defopt + + +@node Fontification of math +@subsection Fontification of mathematical constructs +@cindex Math, fontification of +@cindex Subscript, fontification of +@cindex Superscript, fontification of + +@vindex font-latex-match-math-command-keywords +@vindex font-latex-math-environments +@vindex texmathp-tex-commands +@vindex texmathp-tex-commands-default +In @LaTeX{} mathematics can be indicated by a variety of different +methods: toggles (like dollar signs), macros and environments. Math +constructs known by @fontlatex{} are displayed with the face +@code{font-latex-math-face}. Support for dollar signs and shorthands +like @samp{\(...\)} or @samp{\[...\]} is built-in and not customizable. +Support for other math macros and environments can be adapted by +customizing the variables @code{font-latex-match-math-command-keywords} +and @code{texmathp-tex-commands} respectively. It is no longer +recommended to customize @code{font-latex-math-environments}. + +To convert your customization in @code{font-latex-math-environments} +into @code{texmathp-tex-commands}, please register your own math +environments, together with starred variants if any, as entries of +@code{env-on} type in @code{texmathp-tex-commands}, then clear out +@code{font-latex-math-environments}. You have to restart Emacs for this +new customization to take effect for fontification. + +In order to make math constructs more readable, @fontlatex{} displays +subscript and superscript parts in a smaller font and raised or lowered +respectively. This fontification feature can be controlled with the +variables @code{font-latex-fontify-script} and +@code{font-latex-script-display}. + +@defopt font-latex-fontify-script +If non-nil, fontify subscript and superscript strings. Concretely, this +means that the scripts are raised or lowered. + +Another possiblity is setting this variable to the symbol +@code{multi-level}. In this case, in a formula @i{x^@{y^z@}}, @i{y} is +raised above and smaller than @i{x}, and @i{z} is raised above and +smaller than @i{y}. With many script levels, the text might become too +small to be readable. (See @code{font-latex-fontify-script-max-level} +below.) + +Lastly, you can set this variable to @code{invisible} whose behavior is +like @code{multi-level}, and in addition the super-/subscript characters +@i{^} and @i{_} are not displayed. +@end defopt + +@vindex font-latex-superscript-face +@vindex font-latex-subscript-face +@defopt font-latex-fontify-script-max-level +Maximum scriptification level for which script faces are applied. + +The faces @code{font-latex-superscript-face} and +@code{font-latex-subscript-face} define custom @code{:height} values < +1.0. Therefore, scripts are displayed with a slightly smaller font than +normal math text. If @code{font-latex-fontify-script} is +@code{multi-level} or @code{invisible}, the font size becomes too small +to be readable after a few levels. This option allows to specify the +maximum level after which the size of the script text won’t be shrunken +anymore. + +For example, in the expression @i{x^@{y^@{z^a_b@}@}}, @i{x} has +scriptification level 0, @i{y} has level 1, @i{z} has level 2, and both +@i{a} and @i{b} have scriptification level 3. + +If @code{font-latex-fontify-script-max-level} was 2, then @i{z}, @i{a}, +and @i{b} would have the same font size. If it was 3 or more, then +@i{a} and @i{b} were smaller than @i{z} just in the same way as @i{z} is +smaller than @i{y} and @i{y} is smaller than @i{x}. +@end defopt + +@vindex font-latex-script-char-face +The script characters @samp{^} and @samp{_} themselves are also +fontified with an own face named @code{font-latex-script-char-face}. + +@defopt font-latex-script-display +Display specification for subscript and superscript content. The car is +used for subscript, the cdr is used for superscript. The feature is +implemented using so-called display properties. For information on what +exactly to specify for the values, see @ref{Other Display Specs, , Other +Display Specifications, elisp, GNU Emacs Lisp Reference Manual}. +@end defopt + +@node Verbatim content +@subsection Verbatim macros and environments +@cindex Verbatim, fontification of + +Usually it is not desirable to have content to be typeset verbatim +highlighted according to @LaTeX{} syntax. Therefore this content will +be fontified uniformly with the face @code{font-latex-verbatim-face}. + +@vindex LaTeX-verbatim-macros-with-delims +@vindex LaTeX-verbatim-macros-with-braces +@vindex LaTeX-verbatim-environments +@fontlatex{} differentiates three different types of verbatim +constructs for fontification. Macros with special characters like | as +delimiters, macros with braces, and environments. Which macros and +environments are recognized is controlled by the variables +@code{LaTeX-verbatim-macros-with-delims}, +@code{LaTeX-verbatim-macros-with-braces}, and +@code{LaTeX-verbatim-environments} respectively. + +@node Faces +@subsection Faces used by @fontlatex{} +@cindex Faces + +In case you want to change the colors and fonts used by @fontlatex{} +please refer to the faces mentioned in the explanations above and use +@kbd{M-x customize-face @key{RET} <face> @key{RET}}. All faces defined by +@fontlatex{} are accessible through a customization group by typing +@kbd{M-x customize-group @key{RET} font-latex-highlighting-faces @key{RET}}. + +@node Known problems +@subsection Known fontification problems +@cindex Dollar signs, color bleed with +@cindex Math, fontification problems with + +In certain cases the fontification machinery fails to interpret buffer +contents correctly. This can lead to color bleed, i.e.@: large parts of a +buffer get fontified with an inappropriate face. A typical situation +for this to happen is the use of a dollar sign (@samp{$}) in a verbatim +macro or environment. If @fontlatex{} is not aware of the verbatim +construct, it assumes the dollar sign to be a toggle for mathematics and +fontifies the following buffer content with the respective face until it +finds a closing dollar sign or till the end of the buffer. + +As a remedy you can make the verbatim construct known to @fontlatex{} +(@pxref{Verbatim content}). If this is not possible, you can insert a +commented dollar sign (@samp{%$}) at the next suitable end of line as a +quick workaround. In docTeX documents, @samp{^^A$} is also available +for similar purpose. + +@node Folding +@section Folding Macros and Environments +@cindex Outlining +@cindex Folding +@cindex Reveal +@cindex Auto-Reveal +@cindex Hide Macros + +A popular complaint about markup languages like @TeX{} and @LaTeX{} is +that there is too much clutter in the source text and that one cannot +focus well on the content. There are macros where you are only +interested in the content they are enclosing, like font specifiers where +the content might already be fontified in a special way by font locking. +Or macros the content of which you only want to see when actually +editing it, like footnotes or citations. Similarly you might find +certain environments or comments distracting when trying to concentrate +on the body of your document. + +With @AUCTeX{}'s folding functionality you can collapse those items and +replace them by a fixed string, the content of one of their arguments, +or a mixture of both. If you want to make the original text visible +again in order to view or edit it, move point sideways onto the +placeholder (also called display string) or left-click with the mouse +pointer on it. The +macro or environment will unfold automatically, stay open as long as +point is inside of it and collapse again once you move point out of it. +(Note that folding of environments currently does not work in every +@AUCTeX{} mode.) + +In order to use this feature, you have to activate @code{TeX-fold-mode} +which will activate the auto-reveal feature and the necessary commands +to hide and show macros and environments. You can activate the mode in +a certain buffer by typing the command @kbd{M-x TeX-fold-mode @key{RET}} or +using the keyboard shortcut @kbd{C-c C-o C-f}. If you want to use it +every time you edit a @LaTeX{} document, add it to a hook: +@findex TeX-fold-mode +@kindex C-c C-o C-f + +@lisp +(add-hook 'LaTeX-mode-hook (lambda () + (TeX-fold-mode 1))) +@end lisp + +If it should be activated in all @AUCTeX{} modes, use +@code{TeX-mode-hook} instead of @code{LaTeX-mode-hook}. + +Once the mode is active there are several commands available to hide +and show macros, environments and comments: + +@deffn Command TeX-fold-buffer +@kindex C-c C-o C-b +(@kbd{C-c C-o C-b}) Hide all foldable items in the current buffer +according to the setting of @code{TeX-fold-type-list}. + +If you want to have this done automatically every time you open a file, +add it to a hook and make sure the function is called after font locking +is set up for the buffer. The following code should accomplish this: + +@lisp +(add-hook 'find-file-hook #'TeX-fold-buffer t) +@end lisp + +The command can be used any time to refresh the whole buffer and fold +any new macros and environments which were inserted after the last +invocation of the command. +@end deffn + +@defopt TeX-fold-type-list +List of symbols determining the item classes to consider for folding. +This can be macros, environments and comments. Per default only macros +and environments are folded. +@end defopt + +@defopt TeX-fold-force-fontify +In order for all folded content to get the right faces, the whole buffer +has to be fontified before folding is carried out. +@code{TeX-fold-buffer} therefore will force fontification of unfontified +regions. As this will prolong the time folding takes, you can prevent +forced fontification by customizing the variable +@code{TeX-fold-force-fontify}. +@end defopt + +@defopt TeX-fold-auto +By default, a macro inserted with @code{TeX-insert-macro} (@kbd{C-c +C-m}) will not be folded. Set this variable to a non-nil value to +aumatically fold macros as soon as they are inserted. +@end defopt + +@defopt TeX-fold-preserve-comments +By default items found in comments will be folded. If your comments +often contain unfinished code this might lead to problems. Give this +variable a non-nil value and foldable items in your comments will be +left alone. +@end defopt + +@defopt TeX-fold-unfold-around-mark +When this variable is non-nil and there is an active regione, text +around the mark will be kept unfolded. +@end defopt + +@deffn Command TeX-fold-region +@kindex C-c C-o C-r +(@kbd{C-c C-o C-r}) Hide all configured macros in the marked region. +@end deffn + +@deffn Command TeX-fold-paragraph +@kindex C-c C-o C-p +(@kbd{C-c C-o C-p}) Hide all configured macros in the paragraph +containing point. +@end deffn + +@deffn Command TeX-fold-macro +@kindex C-c C-o C-m +(@kbd{C-c C-o C-m}) Hide the macro on which point currently is located. +If the name of the macro is found in @code{TeX-fold-macro-spec-list}, +the respective display string will be shown instead. If it is not +found, the name of the macro in sqare brackets or the default string for +unspecified macros (@code{TeX-fold-unspec-macro-display-string}) will be +shown, depending on the value of the variable +@code{TeX-fold-unspec-use-name}. +@end deffn + +@deffn Command TeX-fold-env +@kindex C-c C-o C-e +(@kbd{C-c C-o C-e}) Hide the environment on which point currently is +located. The behavior regarding the display string is analogous to +@code{TeX-fold-macro} and determined by the variables +@code{TeX-fold-env-spec-list} and +@code{TeX-fold-unspec-env-display-string} respectively. +@end deffn + +@deffn Command TeX-fold-math +Hide the math macro on which point currently is located. If the name of +the macro is found in @code{TeX-fold-math-spec-list}, the respective +display string will be shown instead. If it is not found, the name of +the macro in sqare brackets or the default string for unspecified macros +(@code{TeX-fold-unspec-macro-display-string}) will be shown, depending +on the value of the variable @code{TeX-fold-unspec-use-name}. +@end deffn + +@deffn Command TeX-fold-comment +@kindex C-c C-o C-c +(@kbd{C-c C-o C-c}) Hide the comment point is located on. +@end deffn + +@deffn Command TeX-fold-clearout-buffer +@kindex C-c C-o b +(@kbd{C-c C-o b}) Permanently unfold all macros and environments in the +current buffer. +@end deffn + +@deffn Command TeX-fold-clearout-region +@kindex C-c C-o r +(@kbd{C-c C-o r}) Permanently unfold all macros and environments in the +marked region. +@end deffn + +@deffn Command TeX-fold-clearout-paragraph +@kindex C-c C-o p +(@kbd{C-c C-o p}) Permanently unfold all macros and environments in the +paragraph containing point. +@end deffn + +@deffn Command TeX-fold-clearout-item +@kindex C-c C-o i +(@kbd{C-c C-o i}) Permanently show the macro or environment on which +point currently is located. In contrast to temporarily opening the +macro when point is moved sideways onto it, the macro will be +permanently unfolded and will not collapse again once point is leaving +it. +@end deffn + +@deffn Command TeX-fold-dwim +@kindex C-c C-o C-o +(@kbd{C-c C-o C-o}) Hide or show items according to the current context. +If there is folded content, unfold it. If there is a marked region, +fold all configured content in this region. If there is no folded +content but a macro or environment, fold it. +@end deffn + +@vindex TeX-fold-command-prefix +In case you want to use a different prefix than @kbd{C-c C-o} for these +commands you can customize the variable @code{TeX-fold-command-prefix}. +(Note that this will not change the key binding for activating the +mode.) + +The commands above will only take macros or environments into +consideration which are specified in the variables +@code{TeX-fold-macro-spec-list} or @code{TeX-fold-env-spec-list} +respectively. + +@defopt TeX-fold-macro-spec-list +List of replacement specifiers and macros to fold. The specifier can be +a string, an integer or a function symbol. + +If you specify a string, it will be used as a display replacement for +the whole macro. Numbers in braces, brackets, parens or angle brackets +will be replaced by the respective macro argument. For example +@samp{@{1@}} will be replaced by the first mandatory argument of the +macro. One can also define alternatives within the specifier which are +used if an argument is not found. Alternatives are separated by +@samp{||}. They are most useful with optional arguments. As an +example, the default specifier for @samp{\item} is @samp{[1]:||*} which +means that if there is an optional argument, its value is shown followed +by a colon. If there is no optional argument, only an asterisk is used +as the display string. + +If you specify a number as the first element, the content of the +respective mandatory argument of a @LaTeX{} macro will be used as the +placeholder. + +If the first element is a function symbol, the function will be called +with all mandatory arguments of the macro and the result of the function +call will be used as a replacement for the macro. + +The placeholder is made by copying the text from the buffer together with +its properties, i.e.@: its face as well. If fontification has not +happened when this is done (e.g.@: because of lazy font locking) the +intended fontification will not show up. As a workaround you can leave +Emacs idle a few seconds and wait for stealth font locking to finish +before you fold the buffer. Or you just re-fold the buffer with +@code{TeX-fold-buffer} when you notice a wrong fontification. +@end defopt + +@defopt TeX-fold-env-spec-list +List of display strings or argument numbers and environments to fold. +Argument numbers refer to the @samp{\begin} statement. That means if +you have e.g.@: @samp{\begin@{tabularx@}@{\linewidth@}@{XXX@} ... +\end@{tabularx@}} and specify 3 as the argument number, the resulting +display string will be ``XXX''. +@end defopt + +@defopt TeX-fold-math-spec-list +List of display strings and math macros to fold. +@end defopt + +@vindex LaTeX-fold-macro-spec-list +@vindex LaTeX-fold-env-spec-list +@vindex LaTeX-fold-math-spec-list +The variables @code{TeX-fold-macro-spec-list}, +@code{TeX-fold-env-spec-list}, and @code{TeX-fold-math-spec-list} apply +to any @AUCTeX{} mode. If you want to make settings which are only +applied to @LaTeX{} mode, you can use the mode-specific variables +@code{LaTeX-fold-macro-spec-list}, @code{LaTeX-fold-env-spec-list}, and +@code{LaTeX-fold-math-spec-list} + +@defopt TeX-fold-unspec-macro-display-string +Default display string for macros which are not specified in +@code{TeX-fold-macro-spec-list}. +@end defopt + +@defopt TeX-fold-unspec-env-display-string +Default display string for environments which are not specified in +@code{TeX-fold-env-spec-list}. +@end defopt + +@defopt TeX-fold-unspec-use-name +If non-nil the name of the macro or environment surrounded by square +brackets is used as display string, otherwise the defaults specified in +@code{TeX-fold-unspec-macro-display-string} or +@code{TeX-fold-unspec-env-display-string} respectively. +@end defopt + +When you hover with the mouse pointer over folded content, its original +text will be shown in a tooltip or the echo area depending on Tooltip +mode being activate. In order to avoid exorbitantly big tooltips and to +cater for the limited space in the echo area the content will be cropped +after a certain amount of characters defined by the variable +@code{TeX-fold-help-echo-max-length}. + +@defopt TeX-fold-help-echo-max-length +Maximum length of original text displayed in a tooltip or the echo area +for folded content. Set it to zero in order to disable this feature. +@end defopt + + +@node Outline +@section Outlining the Document +@cindex Outlining +@cindex Headers +@cindex Sections +@cindex Overview +@cindex Folding + +@AUCTeX{} supports the standard outline minor mode using +@LaTeX{}/@ConTeXt{} sectioning commands as header lines. @xref{Outline +Mode, , Outline Mode, emacs, GNU Emacs Manual}. + +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} or @code{ConTeXt-@var{interface}-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}. + +@lisp +(setq TeX-outline-extra + '(("[ \t]*\\\\\\(bib\\)?item\\b" 7) + ("\\\\bibliography\\b" 2))) +@end lisp + +@c FIXME: Isn't this much outdated? +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 Narrowing +@section Narrowing + +Sometimes you want to focus your attention to a limited region of the +code. You can do that by restricting the text addressable by editing +commands and hiding the rest of the buffer with the narrowing functions, +@pxref{Narrowing,,,emacs,GNU Emacs Manual}. In addition, @AUCTeX{} +provides a couple of other commands to narrow the buffer to a group, +i.e.@: a region enclosed in a pair of curly braces, and to @LaTeX{} +environments. + +@deffn Command TeX-narrow-to-group +@kindex C-x n g +(@kbd{C-x n g}) Make text outside current group invisible. +@end deffn + +@deffn Command LaTeX-narrow-to-environment @var{count} +@kindex C-x n e +(@kbd{C-x n e}) Make text outside current environment invisible. With +optional argument @var{count} keep visible that number of enclosing +environmens. +@end deffn + +Like other standard narrowing functions, the above commands are +disabled. Attempting to use them asks for confirmation and gives you +the option of enabling them; if you enable the commands, confirmation +will no longer be required for them. + +@node Prettifying +@section Prettifying + +Emacs 25 is able to prettify symbols in programming language buffers, +@pxref{Misc for Programs,,,emacs,GNU Emacs Manual}. The canonical +example is to display @code{(lambda () ...)} as @code{(λ () ...)} in +Lisp buffers. + +@AUCTeX{} can use this feature in order to display certain math macros +and greek letters using their Unicode representation, too. For example, +the @TeX{} code @code{\alpha \times \beta} will be displayed as @code{α +× β}. When point is on one of the characters, it'll be unprettified +automatically, meaning you see the verbatim text again. For this +behaviour however you need to set +@code{prettify-symbols-unprettify-at-point} to t or @code{right-edge} +which will unprettify the symbol when point moves into or near it. + +To enable prettification in @AUCTeX{}, simply add +@code{prettify-symbols-mode} to @code{TeX-mode-hook}. If you enabled +prettification globally with @code{global-prettify-symbols-mode}, then +it's automatically enabled in @AUCTeX{}, too. + +You can also add custom symbol unicode-character pairs for +prettification by adding to @code{tex--prettify-symbols-alist}. Note +that this variable is part of Emacs' stock @code{tex-mode.el} and used +by that and @AUCTeX{}. + +@node Processing +@chapter Starting Processors, Viewers and Other Programs + +The most powerful features of @AUCTeX{} may be those allowing you to run +@TeX{}, @LaTeX{}, @ConTeXt{} and other external commands like Bib@TeX{} +and @command{makeindex} from within Emacs, viewing and printing the +results, and moreover allowing you to @emph{debug} your documents. + +@cindex tool bar, toolbar +@vindex LaTeX-enable-toolbar +@vindex plain-TeX-enable-toolbar +@vindex TeX-bar-TeX-buttons +@vindex TeX-bar-TeX-all-button-alists +@vindex TeX-bar-LaTeX-buttons +@vindex TeX-bar-LaTeX-button-alist +@AUCTeX{} comes with a special tool bar for @TeX{} and @LaTeX{} which +provides buttons for the most important commands. You can enable or +disable it by customizing the options @code{plain-TeX-enable-toolbar} +and @code{LaTeX-enable-toolbar} in the @code{TeX-tool-bar} customization +group. You can also customize the buttons by the options +@code{TeX-bar-TeX-buttons}, @code{TeX-bar-TeX-all-button-alists}, +@code{TeX-bar-LaTeX-buttons} and @code{TeX-bar-LaTeX-button-alist}. +@c FIXME: Write details about customizing tool bar. + +@menu +* Commands:: Invoking external commands. +* Viewing:: Invoking external viewers. +* Debugging:: Debugging @TeX{} and @LaTeX{} output. +* Checking:: Checking the document. +* Control:: Controlling the processes. +* Cleaning:: Cleaning intermediate and output files. +* Documentation:: Documentation about macros and packages. +@end menu + +@node Commands +@section Executing Commands +@cindex Formatting +@cindex Running @LaTeX{} +@cindex Running @TeX{} +@cindex @LaTeX{} +@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 @command{makeindex} +@cindex @command{makeindex} +@cindex Bib@TeX{} +@cindex Bibliography +@cindex Literature +@cindex Running Bib@TeX{} +@cindex Making a bibliography +@cindex Printing +@cindex Writing to a printer + +Formatting the document with @TeX{}, @LaTeX{} or @ConTeXt{}, viewing +with a previewer, printing the document, running Bib@TeX{}, making an +index, or checking the document with @command{lacheck} or +@command{chktex} all require running an external command. + +@menu +* Starting a Command:: Starting a Command on a Document or Region +* Selecting a Command:: Selecting and Executing a Command +* Processor Options:: Options for @TeX{} Processors +@end menu + +@node Starting a Command +@subsection Starting a Command on a Document or Region + +There are two ways to run an external command, you can either run it on +the current document with @code{TeX-command-master}, or on the current +region with @code{TeX-command-region}. A special case of running @TeX{} +on a region is @code{TeX-command-buffer} which differs from +@code{TeX-command-master} if the current buffer is not its own master +file. + +@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}. +@vindex TeX-master +@vindex TeX-command-list +@end deffn + +@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 contents +of the selected region. The region contents are written into the region +file, after extracting the header and trailer from the master file. If +mark is inactive (which can happen with Transient Mark mode), use the +old region. See also the command @code{TeX-pin-region} about how to fix +a 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}. +@vindex TeX-region +@vindex TeX-header-end +@vindex TeX-trailer-start +@vindex TeX-master +@vindex TeX-command-list +@end deffn + +@deffn Command TeX-command-buffer +@kindex C-c C-b +(@kbd{C-c C-b}) Query the user for a command, and apply it to the +contents of the current buffer. The buffer contents are written into +the region file, after extracting the header and trailer from the master +file. The command is then actually run on the region file. See above +for details. +@end deffn + +@deffn Command LaTeX-command-section +@kindex C-c C-z +(@kbd{C-c C-z}) Query the user for a command, and apply it to the +current section (or part, chapter, subsection, paragraph, or +subparagraph). What makes the current section is determined by +@code{LaTeX-command-section-level} which can be enlarged/shrunken using +@code{LaTeX-command-section-change-level} (@kbd{C-c M-z}). The given +numeric prefix arg is added to the current value of +@code{LaTeX-command-section-level}. By default, +@code{LaTeX-command-section-level} is initialized with the current +document's @code{LaTeX-largest-level}. The buffer contents are written +into the region file, after extracting the header and trailer from the +master file. The command is then actually run on the region file. See +@code{TeX-command-region} for details. +@end deffn + +It is also possible to compile automatically the whole document until it +is ready with a single command: @code{TeX-command-run-all}. + +@deffn Command TeX-command-run-all +@kindex C-c C-a +(@kbd{C-c C-a}) Compile the current document until an error occurs or it +is finished. If compilation finishes successfully, run the viewer at +the end. +@end deffn + +Here are some relevant variables. + +@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 @LaTeX{} mode and @samp{%**end of +header} in plain @TeX{} mode. +@end defopt + +@defopt TeX-trailer-start +A regular expression matching the start of the trailer. By default, +this is @samp{\end@{document@}} in @LaTeX{} mode and @samp{\bye} in +plain @TeX{} mode. +@end defopt + +If you want to change the values of @code{TeX-header-end} and +@code{TeX-trailer-start} you can do this for all files by setting the +variables in a mode hook or per file by specifying them as file +variables (@pxref{File Variables,,,emacs,The Emacs Editor}). + +@deffn Command TeX-pin-region +@kindex C-c C-t C-r +(@kbd{C-c C-t C-r}) If you don't have a mode like Transient Mark mode +active, where marks get disabled automatically, the region would need to +get properly set before each call to @code{TeX-command-region}. If you +fix the current region with @kbd{C-c C-t C-r}, then it will get used for +more commands even though mark and point may change. An explicitly +activated mark, however, will always define a new region when calling +@code{TeX-command-region}. +@end deffn + +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. + +Don't run more than one process at the same time. @AUCTeX{} doesn't +support simultaneous typeset including region typeset. Wait for the +previous process to finish before you start a new process, in particular +when you are editing multiple documents in parallel. This limitation +applies for preview by @previewlatex{} as well. + +@node Selecting a Command +@subsection Selecting and Executing a Command + +Once you started the command selection with @kbd{C-c C-c}, @kbd{C-c C-r} +or @kbd{C-c C-b} you will be prompted for the type of command. +@AUCTeX{} will try to guess which command is appropriate in the given +situation and propose it as default. Usually this is a processor like +@samp{TeX} or @samp{LaTeX} if the document was changed or a viewer if +the document was just typeset. Other commands can be selected in the +minibuffer with completion support by typing @key{TAB}. + +@vindex TeX-command-list +@vindex TeX-expand-list +The available commands are defined by the variable +@code{TeX-command-list}. Per default it includes commands for +typesetting the document (e.g.@: @samp{LaTeX}), for viewing the output +(@samp{View}), for printing (@samp{Print}), for generating an index +(@samp{Index}) or for spell checking (@samp{Spell}) to name but a few. +You can also add your own commands by adding entries to +@code{TeX-command-list}. Refer to its doc string for information about +its syntax. You might also want to look at @code{TeX-expand-list} to +learn about the expanders you can use in @code{TeX-command-list}. + +Note that the default of the variable occasionally changes. Therefore +it is advisable to add to the list rather than overwriting it. You can +do this with a call to @code{add-to-list} in your init file. For +example, if you wanted to add a command for running a program called +@samp{foo} on the master or region file, you could do this with the +following form. + +@lisp +(eval-after-load "tex" + '(add-to-list 'TeX-command-list + '("Foo" "foo %s" TeX-run-command t t :help "Run foo") + t)) +@end lisp + +As mentioned before, @AUCTeX{} will try to guess what command you want +to invoke. If you want to use another command than @samp{TeX}, +@samp{LaTeX} or whatever processor @AUCTeX{} thinks is appropriate for +the current mode, set the variable @code{TeX-command-default}. You can +do this for all files by setting it in a mode hook or per file by +specifying it as a file variable (@pxref{File Variables,,,emacs,The +Emacs Editor}). + +@defopt TeX-command-default +The default command to run in this buffer. Must be an entry in +@code{TeX-command-list}. +@end defopt + +@cindex Biber +@cindex biblatex +In case you use biblatex in a document, when automatic parsing is +enabled @AUCTeX{} checks the value of @samp{backend} option given to +biblatex at load time to decide whether to use Bib@TeX{} or Biber for +bibliography processing. Should @AUCTeX{} fail to detect the right +backend, you can use the file local @code{LaTeX-biblatex-use-Biber} +variable. +@defvr Variable LaTeX-biblatex-use-Biber +If this boolean variable is set as file local, it tells to @AUCTeX{} +whether to use Biber with biblatex. In this case, the autodetection of +the biblatex backend will be overridden. You may want to set locally +this variable if automatic parsing is not enabled. +@end defvr + +After confirming a command to execute, @AUCTeX{} 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, +@AUCTeX{} will query before saving each file. By default @AUCTeX{} 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}. + +@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 + +@cindex ispell +When performing spell checking on a document or a region (invoked +through @AUCTeX{}'s @samp{Spell} command or @kbd{M-x ispell @key{RET}}), you +want the spell checking program to skip certain macro arguments and +environments, most notably the arguments of referencing macros and the +contents of verbatim environments. The skipped parts are controlled by +variable @code{ispell-tex-skip-alists} provided by @file{ispell.el}. +@AUCTeX{} has a library which can be added to this variable depending on +the value of @code{TeX-ispell-extend-skip-list} which is set to @code{t} +by default. + +@defopt TeX-ispell-extend-skip-list +This boolean option controls whether @AUCTeX{} activates its extension +for skipping certain macro arguments and environments when spell +checking. + +When non-@code{nil}, @AUCTeX{} loads the file @file{tex-ispell.el} and +adds its content to @code{ispell-tex-skip-alists}. This library can and +will never be complete, but the interface can be used to add selected +and private macro names within your init file or on a file local basis. + +@code{ispell-tex-skip-alists} has the following structure: +@lisp +(defvar ispell-tex-skip-alists + '((;; @r{First list} + ("\\\\addcontentsline" ispell-tex-arg-end 2) + ("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) + ("\\\\makebox" ispell-tex-arg-end 0) + ("\\\\documentclass" . "\\\\begin@{document@}")) + (;; @r{Second list} + ("\\(figure\\|table\\)\\*?" ispell-tex-arg-end 0) + ("list" ispell-tex-arg-end 2) + ("verbatim\\*?" . "\\\\end@{verbatim\\*?@}"))) + "Lists of regions to be skipped in TeX mode. +First list is used raw. +Second list has key placed inside \\begin@{@}.") +@end lisp +Each item is an alist and the structure of it is described in +@code{ispell-skip-region-alist}: +@lisp +(defvar ispell-skip-region-alist + '((...)) + "Alist expressing beginning and end of regions not to spell check. +The alist key must be a regular expression. +Valid forms include: + (KEY) - just skip the key. + (KEY . REGEXP) - skip to the end of REGEXP. + REGEXP may be string or symbol. + (KEY REGEXP) - skip to end of REGEXP. REGEXP must be a string. + (KEY FUNCTION ARGS) - FUNCTION called with ARGS + returns end of region.") +@end lisp + +Let's go through the first list of @code{ispell-tex-skip-alists} line by +line: +@lisp +("\\\\addcontentsline" ispell-tex-arg-end 2) +@end lisp +@code{KEY} is the string @code{"\\\\addcontentsline"}, @code{FUNCTION} +is @code{ispell-tex-arg-end} called with @code{ARGS}, here @code{2}. +@code{ispell-tex-arg-end} is a function provided by @file{ispell.el} +which skips as many subsequent optional arguments in square brackets as +it sees and then skips @code{ARGS} number of mandatory arguments in +braces. Omitting @code{ARGS} means skip @code{1} mandatory argument. +In practice, when you have something like this in your document: +@example +\addcontentsline@{toc@}@{chapter@}@{Some text@} +@end example +The first two arguments are left out and @samp{Some text} will be spell +checked. For the next line +@lisp +("\\\\\\([aA]lph\\|arabic\\)" ispell-tex-arg-end) +@end lisp +the name of the counter as argument is skipped. Next line is +@lisp +("\\\\makebox" ispell-tex-arg-end 0) +@end lisp +where only optional arguments are skipped, the first mandatory argument +is checked, e.g. +@example +\makebox[0pt][l]@{Some text@} +@end example +Finally, the next line +@lisp +("\\\\documentclass" . "\\\\begin@{document@}")) +@end lisp +ensures that the entire preamble of a document is discarded. Second +list works the same; it is more convenient for environments since +@code{KEY} is wrapped inside @code{\begin@{@}}. + +@findex TeX-ispell-skip-setcar +@findex TeX-ispell-skip-setcdr +@AUCTeX{} provides two functions to add items to car and cdr of +@code{ispell-tex-arg-end}, namely @code{TeX-ispell-skip-setcar} and +@code{TeX-ispell-skip-setcdr}. The argument of these functions is +exactly as in @code{ispell-tex-skip-alists}. Additions can be done via +init file, e.g.: +@lisp +(eval-after-load "tex-ispell" + '(progn + (TeX-ispell-skip-setcar + '(("\\\\mymacro" ispell-tex-arg-end))) + (TeX-ispell-skip-setcdr + '(("myverbatim" . "\\\\end@{myverbatim@}"))))) +@end lisp + +Another possibility is to use file local additions at the end of your +@TeX{} file, e.g.: +@example +%%% Local Variables: +%%% mode: latex +%%% TeX-master: t +%%% eval: (TeX-ispell-skip-setcar '(("\\\\mymacro" . "@{[-0-9]+@}"))) +%%% End: +@end example + +@findex TeX-ispell-tex-arg-end +Finally, @AUCTeX{} provides a function called +@code{TeX-ispell-tex-arg-end} which sees more arguments than +@code{ispell-tex-arg-end}. Refer to its doc string for more +information. +@end defopt + +@AUCTeX{} also provides a facility to skip the argument of in-line +verbatim macros like @samp{\Verb} from @file{fancyvrb.sty} or +@samp{\mintinline} from @file{minted.sty}. Characters delimiting the +verbatim text are stored in @code{TeX-ispell-verb-delimiters}. + +@defopt TeX-ispell-verb-delimiters +String with delimiters recognized for in-line verbatim macros. This +variable is initialized to @samp{!|#~"*/+^-}. Since this string is +used to build a character alternative inside a regular expression, +special characters @samp{^} and @samp{-} should come last. Other +characters like opening brace @samp{@{}, asterisk @samp{*} or at sign +@samp{@@} should be avoided as they are not recognized by +@file{font-latex.el}. +@end defopt + +@node Processor Options +@subsection Options for @TeX{} Processors + +There are some options you can customize affecting which processors are +invoked or the way this is done and which output they produce as a +result. These options control if @acronym{DVI} or @acronym{PDF} output +should be produced, if @TeX{} should be started in interactive or +nonstop mode, if source specials or a Sync@TeX{} file should be produced +for making inverse and forward search possible or which @TeX{} engine +should be used instead of regular @TeX{}, like PDF@TeX{}, Omega or +Xe@TeX{}, and the style error messages are printed with. + +@deffn Command TeX-PDF-mode +@kindex C-c C-t C-p +@vindex TeX-PDF-mode +@cindex PDF mode +(@kbd{C-c C-t C-p}) +This command toggles the @acronym{PDF} mode of @AUCTeX{}, a buffer-local +minor mode which is enabled by default. You can customize +@code{TeX-PDF-mode} to give it a different default or set it as a file +local variable on a per-document basis. This option usually results in +calling either PDF@TeX{} or ordinary @TeX{}. +@end deffn + +@defopt TeX-DVI-via-PDFTeX +If this is set, @acronym{DVI} will also be produced by calling +PDF@TeX{}, setting @code{\pdfoutput=0}. This makes it possible to use +PDF@TeX{} features like character protrusion even when producing +@acronym{DVI} files. Contemporary @TeX{} distributions do this anyway, +so that you need not enable the option within @AUCTeX{}. +@end defopt + +@deffn Command TeX-interactive-mode +@kindex C-c C-t C-i +@vindex TeX-interactive-mode +(@kbd{C-c C-t C-i}) This command toggles the interactive mode of +@AUCTeX{}, a global minor mode. You can customize +@code{TeX-interactive-mode} to give it a different default. In +interactive mode, @TeX{} will pause with an error prompt when errors are +encountered and wait for the user to type something. +@end deffn + +@cindex I/O correlation +@cindex Sync@TeX{} +@cindex Source specials +@cindex PDFSync +@deffn Command TeX-source-correlate-mode +@kindex C-c C-t C-s +@vindex TeX-source-correlate-mode +(@kbd{C-c C-t C-s}) Toggles support for forward and inverse search. +Forward search refers to jumping to the place in the previewed document +corresponding to where point is located in the document source and +inverse search to the other way round. @xref{I/O Correlation}. + +You can permanently activate @code{TeX-source-correlate-mode} by +customizing the variable @code{TeX-source-correlate-mode}. There is a +bunch of customization options for the mode, use @kbd{M-x +customize-group @key{RET} TeX-view @key{RET}} to find out more. + +@vindex TeX-source-correlate-method +@AUCTeX{} is aware of three different means to do I/O correlation: +source specials (only DVI output), the pdfsync @LaTeX{} package (only +PDF output) and Sync@TeX{}. The choice between source specials and +Sync@TeX{} can be controlled with the variable +@code{TeX-source-correlate-method}. + +Should you use source specials it has to be stressed @emph{very} +strongly however, that source specials can cause differences in page +breaks and spacing, can seriously interfere with various packages and +should thus @emph{never} be used for the final version of a document. +In particular, fine-tuning the page breaks should be done with source +specials switched off. +@end deffn + +Sometimes you are requested, by journal rules or packages, to compile +the document into @acronym{DVI} output. Thus, if you want a +@acronym{PDF} document in the end you can either use Xe@TeX{} engine, +see below for information about how to set engines, or compile the +document with @command{tex} and then convert to @acronym{PDF} with +@command{dvips}--@command{ps2pdf} before viewing it. In addition, +current Japanese @TeX{} engines cannot generate @acronym{PDF} directly +so they rely on @acronym{DVI}-to-@acronym{PDF} converters. Usually +@command{dvipdfmx} command is used for this purpose. You can use the +@code{TeX-PDF-from-DVI} variable to let @AUCTeX{} know you want to +generate the final @acronym{PDF} by converting a @acronym{DVI} file. + +@defopt TeX-PDF-from-DVI +This option controls if and how to produce a @acronym{PDF} file by +converting a @acronym{DVI} file. + +When @code{TeX-PDF-mode} is non-nil, if @code{TeX-PDF-from-DVI} is +non-nil too the document is compiled to @acronym{DVI} instead of +@acronym{PDF}. When the document is ready, @kbd{C-c C-c} will suggest +to run the converter to @acronym{PDF} or an intermediate format. + +If non-nil, @code{TeX-PDF-from-DVI} should be the name of the command in @code{TeX-command-list}, +as a string, used to convert the @acronym{DVI} file to @acronym{PDF} or +to an intermediate format. Values currently supported are: +@itemize +@item +@code{"Dvips"}: the @acronym{DVI} file is converted to @acronym{PS} with +@command{dvips}. After successfully running it, @command{ps2pdf} will +be the default command to convert the @acronym{PS} file to +@acronym{PDF}. +@item +@code{"Dvipdfmx"}: the @acronym{DVI} file is converted to @acronym{PDF} +with @command{dvipdfmx}. +@end itemize +(case is significant; note the uppercase @samp{D} in both strings) +When the @acronym{PDF} file is finally ready, the next suggested command +will be @samp{View} to open the viewer. + +This option can also be set as a file local variable, in order to use +this conversion on a per-document basis. + +Recall the whole sequence of @kbd{C-c C-c} commands can be replaced by +the single @kbd{C-c C-a}. +@end defopt + +@AUCTeX{} also allows you to easily select different @TeX{} engines for +processing, either by using the entries in the @samp{TeXing Options} +submenu below the @samp{Command} menu or by calling the function +@code{TeX-engine-set}. These eventually set the variable +@code{TeX-engine} which you can also modify directly. + +@defopt TeX-engine +This variable allows you to choose which @TeX{} engine should be used +for typesetting the document, i.e.@: the executables which will be used +when you invoke the @samp{TeX} or @samp{LaTeX} commands. The value +should be one of the symbols defined in @code{TeX-engine-alist-builtin} +or @code{TeX-engine-alist}. The symbols @samp{default}, @samp{xetex}, +@samp{luatex} and @samp{omega} are available from the built-in list. +@end defopt + +Note that @code{TeX-engine} is buffer-local, so setting the variable +directly or via the above mentioned menu or function will not take +effect in other buffers. If you want to activate an engine for all +@AUCTeX{} modes, set @code{TeX-engine} in your init file, e.g.@: by using +@kbd{M-x customize-option @key{RET}}. If you want to activate it for a +certain @AUCTeX{} mode only, set the variable in the respective mode +hook. If you want to activate it for certain files, set it through file +variables (@pxref{File Variables,,,emacs,The Emacs Editor}). + +@vindex TeX-command +@vindex LaTeX-command +@vindex TeX-Omega-command +@vindex LaTeX-Omega-command +@vindex ConTeXt-engine +@vindex ConTeXt-Omega-engine +@vindex TeX-engine-alist +@vindex TeX-engine-alist-builtin +Should you need to change the executable names related to the different +engine settings, there are some variables you can tweak. Those are +@code{TeX-command}, @code{LaTeX-command}, @code{TeX-Omega-command}, +@code{LaTeX-Omega-command}, @code{ConTeXt-engine} and +@code{ConTeXt-Omega-engine}. The rest of the executables is defined +directly in @code{TeX-engine-alist-builtin}. If you want to override an +entry from that, add an entry to @code{TeX-engine-alist} that starts +with the same symbol as that the entry in the built-in list and specify +the executables you want to use instead. You can also add entries to +@code{TeX-engine-alist} in order to add support for engines not covered +per default. + +@defopt TeX-engine-alist +Alist of @TeX{} engines and associated commands. Each entry is a list with +a maximum of five elements. The first element is a symbol used to +identify the engine. The second is a string describing the engine. The +third is the command to be used for plain @TeX{}. The fourth is the +command to be used for @LaTeX{}. The fifth is the command to be used for +the @option{--engine} parameter of @ConTeXt{}'s @samp{texexec} program. Each +command can either be a variable or a string. An empty string or nil +means there is no command available. +@end defopt + +In some systems, Emacs cannot inherit the @env{PATH} environment variable from +the shell and thus @AUCTeX{} may not be able to run @TeX{} commands. +Before running them, @AUCTeX{} checks if it is able to find those commands +and will warn you in case it fails. You can skip this test by changing +the option @code{TeX-check-TeX}. + +@defopt TeX-check-TeX +@vindex TeX-command +@vindex TeX-check-TeX-command-not-found +If non-nil, @AUCTeX{} will check if it is able to find a working @TeX{} +distribution before running @TeX{}, @LaTeX{}, @ConTeXt{}, etc. It +actually checks if can run @code{TeX-command} command or the shell +returns a command not found error. The error code returned by the shell +in this case can be set in @code{TeX-check-TeX-command-not-found} +option. +@end defopt + +Some @LaTeX{} packages requires the document to be compiled with a +specific engine. Notable examples are @samp{fontspec} and @samp{polyglossia} +packages, which require Lua@TeX{} and Xe@TeX{} engines. If you try to +compile a document which loads one of such packages and the set engine +is not one of those allowed you will be asked to select a different +engine before running the @LaTeX{} command. If you do not want to be +warned by @AUCTeX{} in these cases, customize the option +@code{TeX-check-engine}. + +@defopt TeX-check-engine +This boolean option controls whether @AUCTeX{} should check the correct +engine has been set before running @LaTeX{} commands. +@end defopt + +As shown above, @AUCTeX{} handles in a special way most of the main +options that can be given to the @TeX{} processors. When you need to +pass to the @TeX{} processor arbitrary options not handled by @AUCTeX{}, +you can use the file local variable @code{TeX-command-extra-options}. +@defopt TeX-command-extra-options +String with the extra options to be given to the TeX processor. For +example, if you need to enable the shell escape feature to compile a +document, add the following line to the list of local variables of the +source file: +@example +%%% TeX-command-extra-options: "-shell-escape" +@end example +By default this option is not safe as a file-local variable because a +specially crafted document compiled with shell escape enabled can be +used for malicious purposes. +@end defopt + +You can customize @AUCTeX{} to show the processor output as it is +produced. + +@defopt TeX-show-compilation +If non-nil, the output of @TeX{} compilation is shown in another window. +@end defopt + +You can instruct @TeX{} to print error messages in the form +@samp{file:line:error} which is similar to the way many compilers format them. + +@defopt TeX-file-line-error +If non-nil, @TeX{} will produce @samp{file:line:error} style error messages. +@end defopt + +@ConTeXt{} users can choose between Mark II and Mark IV versions. This +is controlled by @code{ConTeXt-Mark-version} option. + +@defopt ConTeXt-Mark-version +This variables specifies which version of Mark should be used. Values +currently supported are @code{"II"}, the default, and @code{"IV"}. It +can be set globally using customization interface or on a per-file +basis, by specifying it as a file variable. +@end defopt + +@node Viewing +@section Viewing the Formatted Output +@cindex Viewing +@cindex Previewing +@cindex Starting a previewer + +@AUCTeX{} allows you to start external programs for previewing the +formatted output of your document. + +@menu +* Starting Viewers:: Starting viewers +* I/O Correlation:: Forward and inverse search +@end menu + +@node Starting Viewers +@subsection Starting Viewers + +Viewers are normally invoked by pressing @kbd{C-c C-c} once the document +is formatted, which will propose the @samp{View} command, or by activating the +respective entry in the Command menu. Alternatively you can type +@kbd{C-c C-v} which calls the function @code{TeX-view}. + +@deffn Command TeX-view +@kindex C-c C-v +(@kbd{C-c C-v}) Start a viewer without confirmation. The viewer is +started either on a region or the master file, depending on the last +command issued. This is especially useful for jumping to the location +corresponding to point in the viewer when using +@code{TeX-source-correlate-mode}. +@end deffn + +@AUCTeX{} will try to guess which type of viewer (@acronym{DVI}, +PostScript or @acronym{PDF}) has to be used and what options are to be +passed over to it. This decision is based on the output files present +in the working directory as well as the class and style options used in +the document. For example, if there is a @acronym{DVI} file in your +working directory, a @acronym{DVI} viewer will be invoked. In case of a +@acronym{PDF} file it will be a @acronym{PDF} viewer. If you specified +a special paper format like @samp{a5paper} or use the @samp{landscape} +option, this will be passed to the viewer by the appropriate options. +Especially some @acronym{DVI} viewers depend on this kind of information +in order to display your document correctly. In case you are using +@samp{pstricks} or @samp{psfrag} in your document, a @acronym{DVI} +viewer cannot display the contents correctly and a PostScript viewer +will be invoked instead. + +The association between the tests for the conditions mentioned above and +the viewers is made in the variable @code{TeX-view-program-selection}. +Therefore this variable is the starting point for customization if you +want to use other viewers than the ones suggested by default. + +@defopt TeX-view-program-selection +This is a list of predicates and viewers which is evaluated from front +to back in order to find out which viewer to call under the given +conditions. In the first element of each list item you can reference +one or more predicates defined in @code{TeX-view-predicate-list} or +@code{TeX-view-predicate-list-builtin}. In the second element you can +reference a viewer defined in @code{TeX-view-program-list} or +@code{TeX-view-program-list-builtin}. The viewer of the first item with +a positively evaluated predicate is selected. +@end defopt + +So @code{TeX-view-program-selection} only contains references to the +actual implementations of predicates and viewer commands respectively +which can be found elsewhere. @AUCTeX{} comes with a set of +preconfigured predicates and viewer commands which are stored in the +variables @code{TeX-view-predicate-list-builtin} and +@code{TeX-view-program-list-builtin} respectively. If you are not +satisfied with those and want to overwrite one of them or add your own +definitions, you can do so via the variables +@code{TeX-view-predicate-list} and @code{TeX-view-program-list}. + +@defopt TeX-view-predicate-list +This is a list of predicates for viewer selection and invocation. The +first element of each list item is a symbol and the second element a +Lisp form to be evaluated. The form should return nil if the predicate +is not fulfilled. + +A built-in predicate from @code{TeX-view-predicate-list-builtin} can be +overwritten by defining a new predicate with the same symbol. +@end defopt + +@defopt TeX-view-program-list +This is a list of viewer specifications each consisting of a symbolic +name and either a command line or a function to be invoked when the +viewer is called. If a command line is used, parts of it can be +conditionalized by prefixing them with predicates from +@code{TeX-view-predicate-list} or +@code{TeX-view-predicate-list-builtin}. (See the doc string for the +exact format to use.) The command line can also contain placeholders as +defined in @code{TeX-expand-list} and @code{TeX-expand-list-builtin} +which are expanded before the viewer is called. + +The third element of each item is a string, or a list of strings, with +the name of the executable, or executables, needed to open the output +file in the viewer. Placeholders defined in @code{TeX-expand-list} and +@code{TeX-expand-list-builtin} can be used here. This element is +optional and is used to check whether the viewer is actually available +on the system. + +A built-in viewer spec from @code{TeX-view-program-list-builtin} can be +overwritten by defining a new viewer spec with the same name. +@end defopt + +After the viewer is called via either the @samp{View} command or the key stroke +@kbd{C-c C-v}, the window system focus goes and stays on the viewer. If +you prefer that the focus is pulled back to Emacs immediately after that +and you are using evince-compatible viewer, customize the option +@code{TeX-view-enince-keep-focus}. + +@defopt TeX-view-evince-keep-focus +When this option is non-nil and the viewer is compatible with evince, +the focus is pulled back to Emacs immediately after the viewer is +invoked or refreshed from within @AUCTeX{}. +@end defopt + +Note that the viewer selection and invocation as described above will +only work if certain default settings in @AUCTeX{} are intact. For one, +the whole viewer selection machinery will only be triggered if there is +no @samp{%V} expander in @code{TeX-expand-list}. So if you have trouble +with the viewer invocation you might check if there is an older +customization of the variable in place. In addition, the use of a +function in @code{TeX-view-program-list} only works if the @samp{View} command +in @code{TeX-command-list} makes use of the hook +@code{TeX-run-discard-or-function}. + +@node I/O Correlation +@subsection Forward and Inverse Search +@cindex Inverse search +@cindex Forward search +@cindex I/O correlation +@cindex Source specials +@cindex Sync@TeX{} +@cindex PDFSync + +Forward and inverse search refer to the correlation between the document +source in the editor and the typeset document in the viewer. Forward +search allows you to jump to the place in the previewed document +corresponding to a certain line in the document source and inverse +search vice versa. + +@findex TeX-source-correlate-mode +@AUCTeX{} supports three methods for forward and inverse search: source +specials (only @acronym{DVI} output), the pdfsync @LaTeX{} package (only @acronym{PDF} +output) and Sync@TeX{} (any type of output). If you want to make use of +forward and inverse searching with source specials or Sync@TeX{}, switch +on @code{TeX-source-correlate-mode}. @xref{Processor Options}, on how +to do that. The use of the pdfsync package is detected automatically if +document parsing is enabled. Customize the variable +@code{TeX-source-correlate-method} to select the method to use. + +@defopt TeX-source-correlate-method +Method to use for enabling forward and inverse search. This can be +@samp{source-specials} if source specials should be used, @samp{synctex} +if Sync@TeX{} should be used, or @samp{auto} if @AUCTeX{} should decide. + +When the variable is set to @samp{auto}, @AUCTeX{} will always use +Sync@TeX{} if your @command{latex} processor supports it, source specials +otherwise. You must make sure your viewer supports the same method. + +It is also possible to specify a different method depending on the +output, either @acronym{DVI} or @acronym{PDF}, by setting the variable to an alist of the +kind +@lisp +((dvi . @samp{<source-specials or synctex>}) + (pdf . @samp{<source-specials or synctex>})) +@end lisp +in which the CDR of each entry is a symbol specifying the method to be +used in the corresponding mode. The default value of the variable is +@lisp +((dvi . source-specials) + (pdf . synctex)) +@end lisp +which is compatible with the majority of viewers. +@end defopt + +@findex TeX-view +Forward search happens automatically upon calling the viewer, e.g.@: by +typing @kbd{C-c C-v} (@code{TeX-view}). This will open the viewer or +bring it to front and display the output page corresponding to the +position of point in the source file. @AUCTeX{} will automatically pass +the necessary command line options to the viewer for this to happen. + +@vindex TeX-source-correlate-map +@findex TeX-view-mouse +You can also make special mouse event do forward search at the clicked +position. Use @code{TeX-source-correlate-map}@footnote{The keymap name is +@code{TeX-source-correlate-map}, not @code{TeX-source-correlate-mode-map}. +Actually, this keymap isn't implemented as minor mode map of +@code{TeX-source-correlate-mode}, in order that its bindings don't affect +buffers outside of @AUCTeX{}.} and @code{TeX-view-mouse} like this: +@lisp +(eval-after-load "tex" + '(define-key TeX-source-correlate-map [C-down-mouse-1] + #'TeX-view-mouse)) +@end lisp +This example binds @kbd{C-down-mouse-1}, which usually opens a concise +menu to select buffer, to the command to do forward search. + +@vindex TeX-source-correlate-start-server +Upon opening the viewer you will be asked if you want to start a server +process (Gnuserv or Emacs server) which is necessary for inverse search. +This happens only if there is no server running already. You can +customize the variable @code{TeX-source-correlate-start-server} to +inhibit the question and always or never start the server respectively. + +@defopt TeX-source-correlate-start-server +If @code{TeX-source-correlate-mode} is active and a viewer is invoked, +the default behavior is to ask if a server process should be started. +Set this variable to @code{t} if the question should be inhibited and +the server should always be started. Set it to @code{nil} if the server +should never be started. Inverse search will not be available in the +latter case. +@end defopt + +Inverse search, i.e.@: jumping to the part of your document source in +Emacs corresponding to a certain position in the viewer, is triggered +from the viewer, typically by a mouse click. Refer to the documentation +of your viewer to find out how it has to be configured and what you have +to do exactly. In xdvi you normally have to use @kbd{C-down-mouse-1}. + +@vindex TeX-source-correlate-start-server +Note that inverse search with the Evince @acronym{PDF} viewer or its MATE fork +Atril might fail in raising the Emacs frame after updating point in your +document's buffer. There is simply no way to raise the Emacs frame +reliably accross different operating systems and different window +managers with their different focus stealing policies. If the Emacs +frame is not raised after performing an inverse search from Evince or +Atril, you can customize the following option. + +@defopt TeX-raise-frame-function +A function that will be called after performing an inverse search from +Evince or Atril in order to raise the current Emacs frame. + +If your Emacs frame is already raised in that situation, just +leave this variable set to its default value +@code{raise-frame}. Otherwise, here are some alternative +settings that work for some users. + +@lisp +;; @r{Alternative 1: For some users, @t{`x-focus-frame'} works.} +(setq TeX-raise-frame-function #'x-focus-frame) + +;; @r{Alternative 2: Under GNOME 3.20 (and probably others), it} +;; @r{seems some focus stealing prevention policy prohibits that} +;; @r{some window gets the focus immediately after the user has} +;; @r{clicked in some other window. Here waiting a bit before} +;; @r{issuing the request seems to work.} +(setq TeX-raise-frame-function + (lambda () + (run-at-time 0.5 nil #'x-focus-frame))) + +;; @r{Alternative 3: Use the external @t{wmctrl} tool in order to} +;; @r{force Emacs into the focus.} +(setq TeX-raise-frame-function + (lambda () + (call-process + "wmctrl" nil nil nil "-i" "-R" + (frame-parameter (selected-frame) 'outer-window-id)))) +@end lisp +@end defopt + + +@node Debugging +@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 Underfull boxes + +Once you've formatted your document you may `debug' it, i.e.@: browse +through the errors (La)@TeX{} reported. You may also have a look at a +nicely formatted list of all errors and warnings reported by the +compiler. + +@deffn Command TeX-next-error @var{arg} @var{reparse} +@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. + +An optional numeric @var{arg}, positive or negative, specifies how many +error messages to move. A negative @var{arg} means to move back to +previous error messages, see also @code{TeX-previous-error}. + +The optional @var{reparse} argument makes @AUCTeX{} reparse the error +message buffer and start the debugging from the first error. This can +also be achieved by calling the function with a prefix argument +(@kbd{C-u}). +@end deffn + +@deffn Command TeX-previous-error @var{arg} +@kindex M-g p +(@kbd{M-g p}) Go to the previous error reported by @TeX{}. An optional +numeric @var{arg} specifies how many error messages to move backward. +This is like calling @code{TeX-next-error} with a negative argument. +@end deffn + +The command @code{TeX-previous-error} works only if @AUCTeX{} can parse +the whole @TeX{} log buffer. This is controlled by the +@code{TeX-parse-all-errors} variable. + +@defopt TeX-parse-all-errors +If t, @AUCTeX{} automatically parses the whole output log buffer right +after running a @TeX{} command, in order to collect all warnings and +errors. This makes it possible to navigate back and forth between the +error messages using @code{TeX-next-error} and +@code{TeX-previous-error}. This is the default. If nil, @AUCTeX{} does +not parse the whole output log buffer and @code{TeX-previous-error} +cannot be used. +@end defopt + +As default, @AUCTeX{} will display a special 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 +If t @AUCTeX{} will automatically display a help text whenever an error +is encountered using @code{TeX-next-error} (@kbd{C-c `}). If nil a +terse information about the error is displayed in the echo area. If +@code{expert} @AUCTeX{} will display the output buffer with the raw +@TeX{} output. +@end defopt + +@menu +* Ignoring warnings:: Controlling warnings to be reported +* Error overview:: List of all errors and warnings +@end menu + +@node Ignoring warnings +@subsection Controlling warnings to be reported + +Normally @AUCTeX{} will only report real errors, but you may as well +ask it to report `bad boxes' and warnings as well. + +@deffn Command TeX-toggle-debug-bad-boxes +@kindex C-c C-t C-b +@vindex TeX-debug-bad-boxes +(@kbd{C-c C-t C-b}) Toggle whether @AUCTeX{} should stop at bad boxes +(i.e.@: overfull and underfull boxes) as well as normal errors. The +boolean option @code{TeX-debug-bad-boxes} is set accordingly. +@end deffn + +@deffn Command TeX-toggle-debug-warnings +@kindex C-c C-t C-w +@vindex TeX-debug-warnings +(@kbd{C-c C-t C-w}) Toggle whether @AUCTeX{} should stop at warnings as +well as normal errors. The boolean option @code{TeX-debug-warnings} is +set accordingly. +@end deffn + +While many users desire to have warnings reported after compilation, +there are certain warnings that are considered unimportant and users +want to ignore them. For a more fine-grained control of what kinds of +warnings should be shown after compilation, @AUCTeX{} provides other +options. + +@defopt TeX-ignore-warnings +Controls which warnings are to be ignored. + +It can be a regexp matching the message of the warnings to be ignored. + +More advanced users can set also this option to a symbol with the name +of a custom function taking as arguments all the information of the +warning listed in @code{TeX-error-list} variable, except the last one +about whether to ignore the warning. See the code of @code{TeX-warning} +function and the documentation of @code{TeX-error-list} for more +details. +@end defopt + +@deffn Command TeX-toggle-suppress-ignored-warnings +@kindex C-c C-t C-x +@vindex TeX-suppress-ignored-warnings +(@kbd{C-c C-t C-x}) Toggle whether @AUCTeX{} should actually hide the +ignored warnings specified with @code{TeX-ignore-warnings}. The boolean +option @code{TeX-suppress-ignored-warnings} is set accordingly. If this +is nil, all warnings are shown, even those matched by +@code{TeX-ignore-warnings}, otherwise these are hidden. + +Note that @code{TeX-debug-warnings} takes the precedence: if it is nil, +all warnings are hidden in any case. +@end deffn + +@node Error overview +@subsection List of all errors and warnings + +When the option @code{TeX-parse-all-errors} is non-nil, you will be also +able to open an overview of all errors and warnings reported by the @TeX{} +compiler. + +@deffn Command TeX-error-overview +Show an overview of the errors and warnings occurred in the last @TeX{} +run. + +In this window you can visit the error on which point is by pressing +@key{RET}, and visit the next or previous issue by pressing @key{n} or +@key{p} respectively. A prefix argument to these keys specifies how +many errors to move forward or backward. You can visit an error also by +clicking on its message. Jump to error point in the source code with +@key{j}, and use @key{l} see the error in the log buffer. In addition, +you can toggle visibility of bad boxes, generic warnings, and ignored +warnings with @key{b}, @key{w}, and @key{x}, respectively (see +@ref{Ignoring warnings} for details). Press @key{q} to quit the +overview. +@end deffn + +@defopt TeX-error-overview-open-after-TeX-run +When this boolean variable is non-nil, the error overview will be +automatically opened after running @TeX{} if there are errors or warnings +to show. +@end defopt + +The error overview is opened in a new window of the current frame by +default, but you can change this behavior by customizing the option +@code{TeX-error-overview-setup}. + +@defopt TeX-error-overview-setup +Controls the frame setup of the error overview. The possible value is: +@code{separate-frame}; with a nil value the current frame is used +instead. + +The parameters of the separate frame can be set with the +@code{TeX-error-overview-frame-parameters} option. + +If the display does not support multi frame, the current frame +will be used regardless of the value of this variable. +@vindex TeX-error-overview-frame-parameters +@end defopt + +@node Checking +@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 +@cindex Flymake +@cindex Running Flymake + +Running @TeX{} or @LaTeX{} will only find regular errors in the +document, not examples of bad style. Furthermore, description of the +errors may often be confusing. The utilities @code{lacheck} and +@code{chktex} 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 other similar problems. You start @code{lacheck} with +@kbd{C-c C-c Check @key{RET}} and @code{chktex} with @kbd{C-c C-c ChkTeX +@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. + +Alternatively, you may want in-buffer notation. @AUCTeX{} provides +support for this using the Flymake package in Emacs 26 or newer +(@pxref{Using Flymake,,,Flymake,GNU Flymake} for details). To enable, +call @kbd{M-x flymake-mode @key{RET}} in the buffer or enable it in all +buffers by adding this to your init file: +@lisp +(add-hook 'LaTeX-mode-hook #'flymake-mode) +@end lisp +Note that @AUCTeX{} currently only provides support for using +@code{chktex} as the flymake backend. + +Each of the two utilities @code{lacheck} and @code{chktex} will find +some errors the other doesn't, but @code{chktex} is more configurable, +allowing you to create your own errors. You may need to install the +programs before using them. You can get @code{lacheck} from +URL:@url{https://www.ctan.org/pkg/lacheck} and +@code{chktex} from +URL:@url{https://www.ctan.org/pkg/chktex}. @w{@TeX{} Live} contains +both. + +@node Control +@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 @AUCTeX{} + +@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{}, @LaTeX{}, 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 + +Additionally, output files produced by @AUCTeX{} can be placed in a +separate directory. + +@defopt TeX-output-dir +Set this option to the path of a directory where output files will be +placed. The output files include those that are produced by applications +running under @AUCTeX{}, temporary files related to region processing and +the @previewlatex{} files. If a relative path is specified, it is +interpreted as being relative to the master file in a mutlifile document. + +This is a buffer local variable and must be set separately for all +documents and all files in a multifile document. For example, + +@example +%%% Local Variables: +%%% mode: latex +%%% TeX-output-dir: "build" +%%% End: +@end example + +Alternatively, you may use @code{setq-default} to set the default value of +this option or set it as a directory local variable (@pxref{Directory +Variables,,, emacs, The Emacs Editor}). + +Note that a non-nil value of @code{TeX-output-dir} might be incompatible +with some @TeX{} commands and macros. In particular, the @LaTeX{} macro +@samp{\include} is known to not work with this option. Some @TeX{} +packages which produce intermediary files might also be incompatible. A +possible workaround for those packages is to append the value of +@code{TeX-output-dir} to the environment variables @env{TEXINPUTS} and +@env{BIBINPUTS}. +@end defopt + +@node Cleaning +@section Cleaning intermediate and output files +@cindex Cleaning + +@deffn Command TeX-clean +@vindex plain-TeX-clean-intermediate-suffixes +@vindex plain-TeX-clean-output-suffixes +@vindex LaTeX-clean-intermediate-suffixes +@vindex LaTeX-clean-output-suffixes +@vindex docTeX-clean-intermediate-suffixes +@vindex docTeX-clean-output-suffixes +@vindex Texinfo-clean-intermediate-suffixes +@vindex Texinfo-clean-output-suffixes +@vindex ConTeXt-clean-intermediate-suffixes +@vindex ConTeXt-clean-output-suffixes +@vindex AmSTeX-clean-intermediate-suffixes +@vindex AmSTeX-clean-output-suffixes +Remove generated intermediate files. In case a prefix argument is +given, remove output files as well. + +Canonical access to the function is provided by the @samp{Clean} and +@samp{Clean All} entries in @code{TeX-command-list}, invokable with +@kbd{C-c C-c} or the Command menu. + +The patterns governing which files to remove can be adapted separately +for each @AUCTeX{} mode by means of the following variables: +@itemize +@item +@code{plain-TeX-clean-intermediate-suffixes} +@item +@code{plain-TeX-clean-output-suffixes} +@item +@code{LaTeX-clean-intermediate-suffixes} +@item +@code{LaTeX-clean-output-suffixes} +@item +@code{docTeX-clean-intermediate-suffixes} +@item +@code{docTeX-clean-output-suffixes} +@item +@code{Texinfo-clean-intermediate-suffixes} +@item +@code{Texinfo-clean-output-suffixes} +@item +@code{ConTeXt-clean-intermediate-suffixes} +@item +@code{ConTeXt-clean-output-suffixes} +@item +@code{AmSTeX-clean-intermediate-suffixes} +@item +@code{AmSTeX-clean-output-suffixes} +@end itemize + +@end deffn + +@defopt TeX-clean-confirm +Control if deletion of intermediate and output files has to be confirmed +before it is actually done. If non-nil, ask before deleting files. +@end defopt + +@node Documentation +@section Documentation about macros and packages +@cindex Documentation + +@deffn Command TeX-documentation-texdoc +@kindex C-c ? +(@kbd{C-c ?}) Get documentation about the packages installed on your +system, using @command{texdoc} to find the manuals. The function will +prompt for the name of packages. If point is on a word, this will be +suggested as default. + +If the command is called with a prefix argument, you will be shown a +list of manuals of the given package among to choose. + +The command can be invoked by the key binding mentioned above as well as +the @samp{Find Documentation...} entry in the mode menu. +@end deffn + +@node Customization +@chapter Customization and Extension + +@menu +* Modes and Hooks:: Modes and Hooks +* Multifile:: Multifile Documents +* Parsing Files:: Automatic Parsing of @TeX{} Files +* Internationalization:: Language Support +* Automatic:: Automatic Customization +* Style Files:: Writing Your Own Style Support +@end menu + +@node Modes and Hooks +@section Modes and Hooks + +@AUCTeX{} supports a wide variety of derivatives and extensions of +@TeX{}. Besides plain @TeX{} those are @LaTeX{}, AMS-@TeX{}, +@ConTeXt{}, Texinfo and doc@TeX{}. For each of them there is a separate +major mode in @AUCTeX{} and each major mode runs @code{text-mode-hook}, +@code{TeX-mode-hook} as well as a hook special to the mode in this +order. (As an exception, Texinfo mode does not run @code{TeX-mode-hook}.) +The following table provides an overview of the respective mode +functions and hooks. + +@multitable {Plain @TeX{}} {@code{plain-tex-mode}} {@code{plain-TeX-mode-hook}} +@headitem Type @tab Mode function @tab Hook +@item Plain @TeX{} @tab @code{plain-tex-mode} @tab @code{plain-TeX-mode-hook} +@item @LaTeX{} @tab @code{latex-mode} @tab @code{LaTeX-mode-hook} +@item AMS-@TeX{} @tab @code{ams-tex-mode} @tab @code{AmS-TeX-mode-hook} +@item @ConTeXt{} @tab @code{context-mode} @tab @code{ConTeXt-mode-hook} +@item Texinfo @tab @code{texinfo-mode} @tab @code{Texinfo-mode-hook} +@item Doc@TeX{} @tab @code{doctex-mode} @tab @code{docTeX-mode-hook} +@end multitable +@findex plain-tex-mode +@vindex plain-TeX-mode-hook +@findex latex-mode +@vindex LaTeX-mode-hook +@findex ams-tex-mode +@vindex AmS-TeX-mode-hook +@findex context-mode +@vindex ConTeXt-mode-hook +@findex texinfo-mode +@vindex Texinfo-mode-hook +@findex doctex-mode +@vindex docTeX-mode-hook + +If you need to make a customization via a hook which is only relevant +for one of the modes listed above, put it into the respective mode hook, +if it is relevant for any @AUCTeX{} mode, add it to @code{TeX-mode-hook} +and if it is relevant for all text modes, append it to +@code{text-mode-hook}. + +Other useful hooks are listed below. + +@defvr Variable TeX-after-compilation-finished-functions +Hook which is run after the @TeX{}/@LaTeX{} processor has successfully +finished compiling your document. (@xref{Processing}, for finding out +how to compile your document.) Each function in the hook is run with +the compiled output document as its argument. + +This is useful for automatically refreshing the viewer after +re-compilation especially when using Emacs viewers such as DocView or +PDF Tools. The function @code{TeX-revert-document-buffer} can be added +to the hook for this purpose. +@end defvr +@vindex TeX-after-compilation-finished-functions +@findex TeX-revert-document-buffer + +@node Multifile +@section 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 to 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 @LaTeX{} 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. + +When you, for example, ask @AUCTeX{} 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 init file (@file{init.el} or @file{.emacs}), @AUCTeX{} will use a more +advanced algorithm. + +@lisp +(setq-default TeX-master nil) ; @r{Query for master file.} +@end lisp + +In this case, @AUCTeX{} will ask for the name of the master file +associated with the buffer. To avoid asking you again, @AUCTeX{} 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. + +@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 init file such as @file{init.el} or @file{.emacs}. + +@lisp +(setq-default TeX-master "master") ; @r{All master files called @t{"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 @AUCTeX{} +the name of the master file by setting this variable. If there are +multiple levels of nesting, specify the top level file. + +If this variable is @code{nil}, @AUCTeX{} will query you for the +name. + +If the variable is @code{t}, then @AUCTeX{} will assume the file is a master +file itself. + +If the variable is @code{shared}, then @AUCTeX{} will query for the name, +but will not change the file. + +If the variable is @code{dwim}, @AUCTeX{} will try to avoid querying by +attempting to ``do what I mean''; and then change the file. +@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 @AUCTeX{} 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 @AUCTeX{} automatically modifying your files, you can +set this variable to @samp{"<none>"}. By default, @AUCTeX{} will modify +any file with an extension of @samp{.tex}, @samp{.texi} or @samp{.dtx}. +@end defopt + +@deffn Command TeX-master-file-ask +@kindex C-c _ +(@kbd{C-c _}) Query for the name of a master file and add the respective +File Variables (@pxref{File Variables,,,emacs,The Emacs Editor}) to the +file for setting this variable permanently. + +@AUCTeX{} will not ask for a master file when it encounters existing +files. This function shall give you the possibility to insert the +variable manually. +@end deffn + +@AUCTeX{} keeps track of macros, environments, labels, and style +files that are used in a given document. For this to work with +multifile documents, @AUCTeX{} 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, @AUCTeX{} will write information +about the file into the @file{auto} directory. When you load a file, +@AUCTeX{} 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, @AUCTeX{} 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. + +@AUCTeX{} 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 +@section Automatic Parsing of @TeX{} Files +@cindex Parsing @TeX{} +@cindex Automatic Parsing +@cindex Tabs +@cindex Tabify +@cindex Untabify + +@AUCTeX{} 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 init file such as @file{init.el} or @file{.emacs}. + +@lisp +(setq TeX-parse-self t) ; @r{Enable parse on load.} +(setq TeX-auto-save t) ; @r{Enable parse on save.} +@end lisp + +The latter command will make @AUCTeX{} store the parsed information in +an @file{auto} subdirectory in the directory each time the @TeX{} files +are stored, @pxref{Automatic Local}. If @AUCTeX{} 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. + +The variables can also be set 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 @AUCTeX{} saves your buffer, it can optionally convert all tabs in +your buffer into spaces. +Tabs confuse @AUCTeX{}'s error message parsing and so should generally be +avoided. However, tabs are significant in some environments, and so by +default @AUCTeX{} does not remove them. +To convert tabs to spaces when saving a buffer, insert the +following in your init file such as @file{init.el} or @file{.emacs}: + +@lisp +(setq TeX-auto-untabify t) +@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 init file such as @file{init.el} or @file{.emacs}. + +@lisp +;; @r{Only parse LaTeX class and package information.} +(setq-default TeX-auto-regexp-list 'LaTeX-auto-minimal-regexp-list) +;; @r{The class and package information is usually near the beginning.} +(setq-default TeX-auto-parse-length 2000) +@end lisp + +This example will speed the parsing up significantly, but @AUCTeX{} +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 @AUCTeX{} 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 @LaTeX{} class and packages. +@end defvr + +@defvr Constant LaTeX-auto-label-regexp-list +Only parse @LaTeX{} labels. +@end defvr + +@defvr Constant LaTeX-auto-index-regexp-list +Only parse @LaTeX{} index and glossary entries. +@end defvr + +@defvr Constant LaTeX-auto-class-regexp-list +Only parse macros in @LaTeX{} classes and packages. +@end defvr + +@defvr Constant LaTeX-auto-pagestyle-regexp-list +Only parse @LaTeX{} pagestyles. +@end defvr + +@defvr Constant LaTeX-auto-counter-regexp-list +Only parse @LaTeX{} counters. +@end defvr + +@defvr Constant LaTeX-auto-length-regexp-list +Only parse @LaTeX{} lengths. +@end defvr + +@defvr Constant LaTeX-auto-savebox-regexp-list +Only parse @LaTeX{} saveboxes. +@end defvr + +@defvr Constant LaTeX-auto-regexp-list +Parse common @LaTeX{} 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 @LaTeX{} commands that @AUCTeX{} can use. +@end defvr + +@node Internationalization +@section Language Support +@cindex Internationalization +@cindex Language Support +@cindex CJK language +@cindex C@TeX{} +@cindex China@TeX{} +@cindex p@TeX{} +@cindex up@TeX{} +@cindex ASCII p@TeX{} +@cindex j@TeX{} +@cindex NTT j@TeX{} +@cindex k@TeX{} +@cindex H@LaTeX{} +@cindex @acronym{CJK}-@LaTeX{} + +@TeX{} and Emacs are usable for European (Latin, Cyrillic, Greek) based +languages. Some @LaTeX{} and EmacsLisp packages are available for easy +typesetting and editing documents in European languages. + +@c Some Texinfo macros are not used because they require quite recent +@c texinfo versions (2005-03-05): +@c Second arg of @acronym is available with 4.7, @comma is available in +@c 4.7, @abbr is available in 4.8. +@c -> @abbr{MULE, MULtilingual Enhancement to GNU Emacs} +@c -> @acronym{CJK, Chinese@comma{} Japanese@comma{} and Korean} + +All Emacs versions supported by current @AUCTeX{} can handle +@acronym{CJK} (Chinese, Japanese, and Korean) languages by default. + +In most cases, special versions of @TeX{} engines are needed for +high-quality typesetting of @acronym{CJK} languages: C@TeX{} and +China@TeX{} for Chinese, ASCII p@TeX{}, up@TeX{} and NTT j@TeX{} for +Japanese, H@LaTeX{} and k@TeX{} for Korean. They are necessary as well +when you want to typeset documents saved in their domestic encodings +such as @samp{Shift-JIS}. Currently, @AUCTeX{} offers native support +for p@TeX{}, up@TeX{} and j@TeX{} only. + +@c FIXME: We need more information for CTeX, ChinaTeX, KTeX, and HLaTeX. + +If you don't need fine tuning in the result with respect to the +typesetting rules of their respective national standards, most unicode +based @TeX{} engines, e.g.@: Lua@TeX{} and Xe@TeX{}, can handle +@acronym{CJK} languages by default if they are encoded in +@acronym{UTF}-8. The @acronym{CJK}-@LaTeX{} package is provided for +supporting @acronym{CJK} scripts in a standard @LaTeX{} document. + +@menu +* European:: Using @AUCTeX{} with European Languages +* Japanese:: Using @AUCTeX{} with Japanese +@end menu + +@node European +@subsection Using @AUCTeX{} with European Languages +@cindex Europe +@cindex European Characters +@cindex @acronym{ISO} Character set +@cindex @acronym{ISO} 8859 Latin 1 +@cindex Latin 1 + +@subsubsection Typing and Displaying Non-ASCII Characters + +First you will need a way to write non-ASCII characters. You can either +use macros, or teach @TeX{} about the @acronym{ISO} character sets. I prefer the +latter, it has the advantage that the usual standard emacs word +movement and case change commands will work. + +Recommended encoding for @LaTeX{} document is @acronym{UTF}-8. Recent +@LaTeX{}2e has native support for @acronym{UTF}-8. If your @LaTeX{}2e is +not recent enough, just add @samp{\usepackage[utf8]@{inputenc@}}. + +You can still use @acronym{ISO} 8859 Latin 1 encoding with +@samp{\usepackage[latin1]@{inputenc@}}. + +To be able to display non-ASCII characters you will need an appropriate +font. All Emacs versions supported by current @AUCTeX{} can display 8-bit +characters, provided that suitable fonts are installed. + +@c FIXME: These are considered as kind of obsolete, aren't they? +A compromise is to use an European character set when editing the file, +and convert to @TeX{} macros when reading and writing the files. + +@table @file +@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-Symbol +@cindex X-Symbol +a much more complete package for Emacs that can also handle a lot of +mathematical characters and input methods. +@end table + +@subsubsection Style Files for Different Languages + +@cindex ispell +@AUCTeX{} supports style files for several languages. Each style file +may modify @AUCTeX{} 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 @samp{\usepackage[danish]@{babel@}}. +This requires parsing to be enabled, @pxref{Parsing Files}. + +@lisp +(add-hook 'TeX-language-dk-hook + (lambda () (ispell-change-dictionary "danish"))) +@end lisp + +The following style files are recognized: + +@c In alphabetic order of the hooks: +@vindex TeX-language-bg-hook +@vindex TeX-language-cz-hook +@vindex TeX-language-dk-hook +@vindex TeX-language-en-hook +@vindex TeX-language-nl-hook +@vindex TeX-language-de-hook +@vindex TeX-language-it-hook +@vindex TeX-language-is-hook +@vindex TeX-language-pl-hook +@vindex TeX-language-pt-br-hook +@vindex TeX-language-pt-hook +@vindex TeX-language-sk-hook +@vindex TeX-language-sv-hook +@cindex Brazilian Portuguese +@cindex Bulgarian +@cindex Czech +@cindex Italian +@cindex Danish +@cindex Dutch +@cindex English +@cindex German +@cindex Polish +@cindex Portuguese +@cindex Slovak +@cindex Swedish +@table @file +@item brazilian +@itemx brazil +Runs style hook @code{TeX-language-pt-br-hook}. Gives @samp{"} word +syntax, makes the @key{"} key inserts @samp{``} or @samp{''} depending on +context. Typing @key{"} twice will insert a literal @samp{"}. Typing +@key{-} twice will insert @samp{"=}, three times @samp{--}. + +@item bulgarian +Runs style hook @code{TeX-language-bg-hook}. Gives @samp{"} word syntax, +makes the @key{"} key insert a literal @samp{"}. Typing @key{"} twice +will insert @samp{"`} or @samp{"'} depending on context. Typing @key{-} +twice will insert @samp{"=}, three times @samp{--}. + +@item czech +Runs style hook @code{TeX-language-cz-hook}. Pressing @key{"} will +insert @samp{\uv@{} and @samp{@}} depending on context. + +@c FIXME: Is the difference between dk and danish really intented? +@item danish +Runs style hook @code{TeX-language-dk-hook}. Pressing @key{"} will +insert @samp{"`} and @samp{"'} depending on context. Typing @key{-} +twice will insert @samp{"=}, i.e.@: a hyphen string allowing hyphenation +in the composing words. +@c dk.sty seems to be obsolete, so we don't want to encourage using it. +@c @item dk +@c Runs style hook @code{TeX-language-dk-hook}. + +@item dutch +Runs style hook @code{TeX-language-nl-hook}. + +@item english +@itemx australian +@itemx canadian +@itemx newzealand +Runs style hook @code{TeX-language-en-hook}. + +@item frenchb +@itemx francais +Runs style hook @code{TeX-language-fr-hook}. Pressing @key{"} will +insert @samp{\og} and @samp{\fg} depending on context. Note that the +language name for customizing @code{TeX-quote-language-alist} is +@samp{french}. + +@item german +@itemx ngerman +Runs style hook @code{TeX-language-de-hook}. Gives @samp{"} word +syntax, makes the @key{"} key insert a literal @samp{"}. Pressing the +key twice will give you opening or closing German quotes (@samp{"`} or +@samp{"'}). Typing @key{-} twice will insert @samp{"=}, three times +@samp{--}. + +@item icelandic +Runs style hook @code{TeX-language-is-hook}. Gives @samp{"} word syntax, +makes the @key{"} key insert a literal @samp{"}. Typing @key{"} twice +will insert @samp{"`} or @samp{"'} depending on context. Typing @key{-} +twice will insert @samp{"=}, three times @samp{--}. + +@item italian +Runs style hook @code{TeX-language-it-hook}. Pressing @key{"} will +insert @samp{"<} and @samp{">} depending on context. + +@item polish +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. + +@item polski +Runs style hook @code{TeX-language-pl-hook}. Makes the @key{"} key +insert a literal @samp{"}. Pressing @key{"} twice will insert @samp{,,} +or @samp{''} depending on context. + +@item portuguese +@itemx portuges +Runs style hook @code{TeX-language-pt-hook}. Gives @samp{"} word syntax, +makes the @key{"} key inserts @samp{"<} or @samp{">} depending on context. +Typing @key{"} twice will insert a literal @samp{"}. Typing @key{-} twice +will insert @samp{"=}, three times @samp{--}. Note that the language name +for customizing @code{TeX-quote-language-alist} is @samp{portuguese}. + +@item slovak +Runs style hook @code{TeX-language-sk-hook}. Pressing @key{"} will +insert @samp{\uv@{} and @samp{@}} depending on context. + +@item swedish +Runs style hook @code{TeX-language-sv-hook}. Pressing @key{"} will +insert @samp{''}. Typing @key{-} twice will insert @samp{"=}, three +times @samp{--}. +@end table + +Replacement of language-specific hyphen strings like @samp{"=} with +dashes does not require to type @key{-} three times in a row. You can +put point after the hypen string anytime and trigger the replacement by +typing @key{-}. + +In case you are not satisfied with the suggested behavior of quote and +hyphen insertion you can change it by customizing the variables +@code{TeX-quote-language-alist} and +@code{LaTeX-babel-hyphen-language-alist} respectively. + +@defopt TeX-quote-language-alist +Used for overriding the default language-specific quote insertion +behavior. This is an alist where each element is a list consisting of +four items. The first item is the name of the language in concern as a +string. See the list of supported languages above. The second item is +the opening quotation mark. The third item is the closing quotation +mark. Opening and closing quotation marks can be specified directly as +strings or as functions returning a string. The fourth item is a +boolean controlling quote insertion. It should be non-nil if if the +special quotes should only be used after inserting a literal @samp{"} +character first, i.e.@: on second key press. +@end defopt + +@defopt LaTeX-babel-hyphen-language-alist +Used for overriding the behavior of hyphen insertion for specific +languages. Every element in this alist is a list of three items. The +first item should specify the affected language as a string. The second +item denotes the hyphen string to be used as a string. The third item, +a boolean, controls the behavior of hyphen insertion and should be +non-nil if the special hyphen should be inserted after inserting a +literal @samp{-} character, i.e.@: on second key press. +@end defopt + +The defaults of hyphen insertion are defined by the variables +@code{LaTeX-babel-hyphen} and @code{LaTeX-babel-hyphen-after-hyphen} +respectively. + +@defopt LaTeX-babel-hyphen +String to be used when typing @key{-}. This usually is a hyphen +alternative or hyphenation aid provided by @samp{babel} and the related +language style files, like @samp{"=}, @samp{"~} or @samp{"-}. + +Set it to an empty string or nil in order to disable language-specific +hyphen insertion. +@end defopt + +@defopt LaTeX-babel-hyphen-after-hyphen +Control insertion of hyphen strings. If non-nil insert normal hyphen on +first key press and swap it with the language-specific hyphen string +specified in the variable @code{LaTeX-babel-hyphen} on second key press. +If nil do it the other way round. +@end defopt + +@node Japanese +@subsection Using @AUCTeX{} with Japanese @TeX{} +@cindex Japan +@cindex Japanese +@cindex Nippon +@cindex NTT j@TeX{} +@cindex j@TeX{} +@cindex j@LaTeX{} +@cindex ASCII p@TeX{} +@cindex p@TeX{} +@cindex p@LaTeX{} +@cindex up@TeX{} +@cindex up@LaTeX{} +@cindex @file{tex-jp.el} +@vindex TeX-default-mode +@vindex TeX-parse-self +@vindex TeX-engine +@vindex TeX-engine-alist +@vindex japanese-TeX-mode +@findex japanese-plain-tex-mode +@findex japanese-latex-mode + +To write Japanese text with @AUCTeX{}, you need the versions of +@TeX{} and Emacs that support Japanese. @AUCTeX{} supports three +Japanese @TeX{} engines by default: NTT j@TeX{}, ASCII p@TeX{} and +up@TeX{}. + +Activate @code{japanese-plain-tex-mode} or @code{japanese-latex-mode} to +use the Japanese @TeX{} engines. If it doesn't work, send mail to +Masayuki Ataka @email{masayuki.ataka@@gmail.com} or Ikumi Keita +@email{ikumikeita@@jcom.home.ne.jp}, who currently concern with stuff +related to Japanese in @AUCTeX{}. None of the primary @AUCTeX{} +maintainers understand Japanese, so they cannot help you. + +It is recommended to enable @code{TeX-parse-self} for typical Japanese +@LaTeX{} users. When enabled, @code{japanese-latex-mode} selects the +suitable Japanese @TeX{} engine automatically based on the class file +name (such as @code{jbook}, @code{jsarticle} and @code{tjreport}) and +its option. @xref{Parsing Files}. + +It is important to select the suitable Japanese @TeX{} engine because +the selected engine determines the command name such as @command{platex} +and @command{uptex} to typeset the document. If you find that wrong +command is used, check the value of @code{TeX-engine} on that buffer. +If the value does not suit the current document, change the value by the +@samp{TeXing Options} submenu below the @samp{Command} menu. +@xref{Processor Options}. + +To make the selected engine to persist across Emacs sessions, there are +two ways from which you can choose one according to your needs: + +@enumerate +@item +If you use a specific engine (almost) exclusively, customize the option +@code{japanese-TeX-engine-default}. + +@defopt japanese-TeX-engine-default +The default @code{TeX-engine} in Japanese @TeX{} mode. + +The default value is @samp{ptex}. +@end defopt +@item +If you want to set the engine on a per file basis, use the file local +variables to set @code{TeX-engine}. + +Here is a sample code to set @code{TeX-engine} to @samp{uptex}: + +@example +%%% Local Variables: +%%% mode: japanese-latex +%%% TeX-engine: uptex +%%% End: +@end example +@end enumerate + +In the both cases above, the valid value is one of @samp{ptex}, +@samp{jtex} and @samp{uptex}. + +You can override the command names associated with the above three +engines or define your own engine by customizing +@code{TeX-engine-alist}. @xref{Processor Options}. + +It is sometimes necessary to use an engine which differs from the one +@AUCTeX{} selects automatically. For example, even when you want to use +@code{j-article} document class deliberately with ASCII p@LaTeX{}, +@AUCTeX{} selects NTT j@LaTeX{} command if @code{TeX-parse-self} is +enabled, because @code{j-article} originally belongs to NTT j@LaTeX{}. +In such cases, use the file local variable method above to select the +engine you intend to use. + +If you usually use @AUCTeX{} in Japanese, setting the following +variables is useful. + +@defopt TeX-default-mode +Mode to enter for a new file when it cannot be determined whether the +file is plain @TeX{} or @LaTeX{} or what. + +If you want to enter Japanese @LaTeX{} mode whenever this may happen, +set the variable like this: +@lisp +(setq TeX-default-mode 'japanese-latex-mode) +@end lisp +@end defopt + +@defopt japanese-LaTeX-default-style +The default style/class when creating a new Japanese @LaTeX{} document. + +The default value is @samp{"jarticle"}. +@end defopt + +It is recommended also for Japanese users to customize the option +@code{TeX-PDF-from-DVI} to @samp{"Dvipdfmx"}. @xref{Processor Options}. + +There are three customize options with regard to the encoding of +Japanese text. + +@defopt japanese-TeX-use-kanji-opt-flag +If non-nil, @AUCTeX{} adds @option{-kanji} option to the typesetting +command when @code{TeX-engine} is @samp{ptex}. +@end defopt + +Usually @AUCTeX{} guesses the right coding systems for input to and +output from the Japanese @TeX{} process, but you can override them by +the following two customize options. + +@defopt TeX-japanese-process-input-coding-system +If non-nil, used for encoding input to Japanese @TeX{} process. +When @code{nil}, @AUCTeX{} tries to choose suitable coding system. +@end defopt + +@defopt TeX-japanese-process-output-coding-system +If non-nil, used for decoding output from Japanese @TeX{} process. +When @code{nil}, @AUCTeX{} tries to choose suitable coding system. +@end defopt + +The former customize options @code{japanese-TeX-command-default}, +@code{japanese-LaTeX-command-default} and +@code{japanese-TeX-command-list} are removed from @AUCTeX{}. Use +@code{japanese-TeX-engine-default} instead. If you need to customize +the executable file name such as @samp{"latex"}, the options for them, +or both, customize @code{TeX-engine-alist}. + +The following two additional font commands are available in +@LaTeX{} mode buffer. + +@table @kbd +@item C-c C-f g +@kindex C-c C-f g +@cindex @code{\textgt} +@cindex @code{\mathgt} +Insert @b{gothic font} command @samp{\textgt@{@point{}@}} or +@samp{\mathgt@{@point{}@}} depending on the context. + +@item C-c C-f m +@kindex C-c C-f m +@cindex @code{\textmc} +@cindex @code{\mathmc} +Insert mincho font command @samp{\textmc@{@point{}@}} or +@samp{\mathmc@{@point{}@}} depending on the context. + +@end table + +Although they are meaningful only with @samp{ptex} and @samp{uptex} +engines, it won't matter in buffers with other engines. + +See @file{tex-jp.el} for more information. + +@node Automatic +@section 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 @AUCTeX{} 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 @env{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 @AUCTeX{} 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 @AUCTeX{} style files. +@end defopt + +By default, when @AUCTeX{} searches a directory for files, it will +recursively search through subdirectories. + +@defopt TeX-file-recurse +Whether to search @TeX{} directories recursively: nil means do not +recurse, a positive integer means go that far deep in the directory +hierarchy, t means recurse indefinitely. +@end defopt + +By default, @AUCTeX{} will ignore files named @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 +@subsection 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 @AUCTeX{} 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. + +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 +@subsection 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 +@AUCTeX{} 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 @key{RET}} to extract the information. + +@defopt TeX-macro-private +Directories where you store your personal @TeX{} macros. The value +defaults to the directories listed in the @env{TEXINPUTS} and +@env{BIBINPUTS} environment variables or to the respective directories +in @code{$TEXMFHOME} of @command{kpsewhich} setting if no results can be obtained from the environment +variables. +@end defopt + +@defopt TeX-auto-private +List of directories containing automatically generated @AUCTeX{} style +files. These correspond to the personal @TeX{} macros. +@end defopt + +@deffn Command TeX-auto-generate @var{tex} @var{auto} +(@kbd{M-x TeX-auto-generate @key{RET}}) 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. +@end deffn + +@defopt TeX-style-private +List of directories containing hand generated @AUCTeX{} style files. +These correspond to the personal @TeX{} macros. +@end defopt + +@node Automatic Local +@subsection 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 + +@AUCTeX{} 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} +exists. @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. + +These correspond to @TeX{} macros found in the current directory. +@end defopt + +@defopt TeX-auto-local +Directory containing automatically generated @TeX{} information. + +These correspond to @TeX{} macros found in the current directory. +@end defopt + +@node Style Files +@section 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 or Examining 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 +@subsection 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" + (lambda () + (LaTeX-largest-level-set "part")) + TeX-dialect) +@end lisp + +The example is from the @AUCTeX{} sources and is loaded for any @LaTeX{} +document using the book document class (or style before @LaTeX{}2e). +(Note that the above code is much simplified for explanatory purpose.) +The file specifies that the largest kind of section in such a document +is @samp{part}. 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 +are executed. The actual files will only be evaluated once, but the +hooks will be called for each buffer using the style file. + +Note that the basename of the style file and the name of the style hook +should usually be identical. + +@defun TeX-add-style-hook @var{style} @var{hook} &optional @var{dialect-expr} +Add @var{hook} to the list of functions to run when we use the @TeX{} +file @var{style} and the current dialect is one in the set derived from +@var{dialect-expr}. When @var{dialect-expr} is omitted, then @var{hook} +is allowed to be run whatever the current dialect is. + +@var{dialect-expr} may be one of: + +@itemize +@item +A symbol indicating a singleton containing one basic @TeX{} dialect, +this symbol shall be selected among: +@table @code +@item :latex +For all files in @LaTeX{} mode, or any mode derived thereof. +@item :bibtex +For all files in Bib@TeX{} mode, or any mode derived thereof. +@item :texinfo +For all files in Texinfo mode. +@item :plain-tex +For all files in plain-@TeX{} mode, or any mode derived thereof. +@item :context +For all files in @ConTeXt{} mode. +@item :classopt +For class options of @LaTeX{} document. This is provided as +pseudo-dialect for style hooks associated with class options. +@end table +@item +A logical expression like: +@table @code +@item (or @var{dialect-expression1} @dots{} @var{dialect-expression_@var{n}}) +For union of the sets of dialects corresponding to @var{dialect-expression1} +through @var{dialect-expression_@var{n}} +@item (and @var{dialect-expression1} @dots{} @var{dialect-expression_@var{n}}) +For intersection of the sets of dialects corresponding to +@var{dialect-expression1} through @var{dialect-expression_@var{n}} +@item (nor @var{dialect-expression1} @dots{} @var{dialect-expression_@var{n}}) +For complement of the union sets of dialects corresponding to +@var{dialect-expression1} through @var{dialect-expression_@var{n}} +relatively to the set of all supported dialects +@item (not @var{dialect-expr}) +For complement set of dialect corresponding to @var{dialect-expr} +relatively to the set of all supported dialects +@end table +@end itemize + +@end defun + +In case of adding a style hook for @LaTeX{}, when calling function +@code{TeX-add-style-hook} it is thought more futureproof for argument +@var{dialect-expr} to pass constant @code{TeX-dialect} currently +defined to @code{:latex}, rather than passing @code{:latex} directly. + +@defvr Constant TeX-dialect +Default dialect for use with function @code{TeX-add-style-hook} for +argument @var{dialect-expr} when the hook is to be run only on @LaTeX{} +file, or any mode derived thereof. +@end defvr + + +@node Adding Macros +@subsection 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" + (lambda () + (TeX-add-symbols + '("arabic" TeX-arg-counter) + '("label" TeX-arg-define-label) + '("ref" TeX-arg-ref) + '("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, @AUCTeX{} will choose the one with +the longest definition (i.e.@: the one with the most arguments). + +Thus, to overwrite +@example + '("tref" 1) ; @r{one argument} +@end example +you can specify +@example + '("tref" TeX-arg-ref ignore) ; @r{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. + +You can use the following types of specifiers for arguments: + +@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. 0 and -1 are +special. 0 means that no braces are inserted. -1 means that braces are +inserted around the macro and an active region (e.g.@: @samp{@{\tiny +foo@}}). If there is no active region, no braces are inserted. + +@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 @var{expr} @var{then} @var{else}. If @var{expr} evaluates +to true, parse @var{then} as an argument list, else parse @var{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-label +Prompt for a label completing with known labels. If Ref@TeX{} is +active, prompt for the reference format. + +@item TeX-arg-ref +Prompt for a label completing with known labels. If Ref@TeX{} is +active, do not prompt for the reference format. Usually, reference +macros should use this function instead of @code{TeX-arg-label}. + +@item TeX-arg-index-tag +Prompt for an index tag. This is the name of an index, not the entry. + +@item TeX-arg-index +Prompt for an index entry completing with known entries. + +@item TeX-arg-length +Prompt for a @LaTeX{} length completing with known lengths. + +@item TeX-arg-macro +Prompt for a @TeX{} macro with completion. + +@item TeX-arg-date +@vindex TeX-date-format +Prompt for a date, defaulting to the current date. The format of the +date is specified by the @code{TeX-date-format} option. If you want to +change the format when the @samp{babel} package is loaded with a +specific language, set @code{TeX-date-format} inside the appropriate +language hook (for details @pxref{European}). + +@item TeX-arg-version +Prompt for the version of a file, using as initial input the current +date. + +@item TeX-arg-environment +Prompt for a @LaTeX{} environment with completion. + +@item TeX-arg-cite +@vindex TeX-arg-cite-note-p +Prompt for a Bib@TeX{} citation. If the variable +@code{TeX-arg-cite-note-p} is non-nil, ask also for optional note in citations. + +@item TeX-arg-counter +Prompt for a @LaTeX{} counter completing with known counters. + +@item TeX-arg-savebox +Prompt for a @LaTeX{} savebox completing with known saveboxes. + +@item TeX-arg-file +Prompt for a filename in the current directory, and use it with the +extension. + +@item TeX-arg-file-name +Prompt for a filename and use as initial input the name of the file +being visited in the current buffer, with extension. + +@item TeX-arg-file-name-sans-extension +Prompt for a filename and use as initial input the name of the file +being visited in the current buffer, without extension. + +@item TeX-arg-input-file +@vindex TeX-arg-input-file-search +Prompt for the name of an input file in @TeX{}'s search path, and use it +without the extension. Run the style hooks for the file. (Note that +the behavior (type of prompt and inserted file name) of the function can +be controlled by the variable @code{TeX-arg-input-file-search}.) + +@item TeX-arg-define-label +Prompt for a label completing with known labels. Add label to list of +defined labels. + +@item TeX-arg-define-length +Prompt for a @LaTeX{} length completing with known lengths. Add length +to list of defined lengths. + +@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 @LaTeX{} 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 @LaTeX{} counter. + +@item TeX-arg-define-savebox +Prompt for a @LaTeX{} savebox. + +@item TeX-arg-document +@vindex LaTeX-default-style +@vindex LaTeX-default-options +@vindex TeX-arg-input-file-search +@vindex LaTeX-style-list +Prompt for a @LaTeX{} document class, using @code{LaTeX-default-style} +as default value and @code{LaTeX-default-options} as default list of +options. If the variable @code{TeX-arg-input-file-search} is t, you +will be able to complete with all @LaTeX{} classes available on your +system, otherwise classes listed in the variable @code{LaTeX-style-list} +will be used for completion. It is also provided completion for options +of many common classes. + +@item LaTeX-arg-usepackage +@vindex TeX-arg-input-file-search +Prompt for @LaTeX{} packages. If the variable +@code{TeX-arg-input-file-search} is t, you will be able to complete with +all @LaTeX{} packages available on your system. It is also provided +completion for options of many common packages. + +@item TeX-arg-bibstyle +Prompt for a Bib@TeX{} style file completing with all style available on +your system. + +@item TeX-arg-bibliography +Prompt for Bib@TeX{} database files completing with all databases available +on your system. + +@item TeX-arg-corner +Prompt for a @LaTeX{} side or corner position with completion. + +@item TeX-arg-lr +Prompt for a @LaTeX{} side with completion. + +@item TeX-arg-tb +Prompt for a @LaTeX{} side with completion. + +@item TeX-arg-pagestyle +Prompt for a @LaTeX{} pagestyle with completion. + +@item TeX-arg-verb +Prompt for delimiter and text. + +@item TeX-arg-verb-delim-or-brace +Prompt for delimiter and text. This function is similar to +@code{TeX-arg-verb}, but is intended for macros which take their +argument enclosed in delimiters or in braces. + +@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. + +@item LaTeX-arg-author +@vindex LaTeX-default-author +Prompt for document author, using @code{LaTeX-default-author} as initial +input. + +@item TeX-read-hook +Prompt for a @LaTeX{} hook and return it. + +@item TeX-arg-hook +Prompt for a @LaTeX{} hook and insert it as a @TeX{} macro argument. + +@item TeX-read-key-val +Prompt for a @samp{key=value} list of options and return them. + +@item TeX-arg-key-val +Prompt for a @samp{key=value} list of options and insert it as a @TeX{} +macro argument. +@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{TeX-exit-mark}. It +will point nowhere, until the argument hook sets it. + +Some packages provide macros that are rarely useful to non-expert users. +Those should be marked as expert macros using +@code{TeX-declare-expert-macros}. + +@defun TeX-declare-expert-macros @var{style} @var{macros}... +Declare @var{macros} as expert macros of @var{style}. + +Expert macros are completed depending on @code{TeX-complete-expert-commands}. +@end defun + + +@node Adding Environments +@subsection 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" + (lambda () + (LaTeX-add-environments + '("document" LaTeX-env-document) + '("enumerate" LaTeX-env-item) + '("itemize" LaTeX-env-item) + '("list" LaTeX-env-list)))) +@end lisp + +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 @AUCTeX{} prompt for the arguments +by giving the prompt strings in the call to +@code{LaTeX-add-environments}. The fact that an argument is optional +can be indicated by wrapping the prompt string in a vector. + +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" + (lambda () + (LaTeX-add-environments + '("loop" "From" "To" "Step")))) +@end lisp + +If an environment is defined multiple times, @AUCTeX{} will choose the +one with the longest definition. Thus, if you have an enumerate style +file, and want it to replace the standard @LaTeX{} 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" + (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 + +Following is a list of available hooks for +@code{LaTeX-add-environments}: + +@ftable @code +@item LaTeX-env-item +Insert the given environment and the first item. + +@item LaTeX-env-figure +Insert the given figure-like environment with a caption and a label. + +@item LaTeX-env-array +Insert the given array-like environment with position and column +specifications. + +@item LaTeX-env-label +Insert the given environment with a label. + +@item LaTeX-env-list +Insert the given list-like environment, a specifier for the label and +the first item. + +@item LaTeX-env-minipage +Insert the given minipage-like environment with position and width +specifications. + +@item LaTeX-env-tabular* +Insert the given tabular*-like environment with width, position and +column specifications. + +@item LaTeX-env-picture +Insert the given environment with width and height specifications. + +@item LaTeX-env-bib +Insert the given environment with a label for a bibitem. + +@item LaTeX-env-contents +Insert the given environment with a filename as its argument. + +@item LaTeX-env-args +Insert the given environment with arguments. You can use this as a hook +in case you want to specify multiple complex arguments just like in +elements of @code{TeX-add-symbols}. This is most useful if the +specification of arguments to be prompted for with strings and strings +wrapped in a vector as described above is too limited. + +Here is an example from @file{listings.el} which calls a function with +one argument in order to prompt for a @samp{key=value} list to be inserted as +an optional argument of the @samp{lstlisting} environment: + +@lisp +(LaTeX-add-environments + '("lstlisting" LaTeX-env-args + [TeX-arg-key-val LaTeX-listings-key-val-options])) +@end lisp +@end ftable + +Some packages provide environments that are rarely useful to non-expert +users. Those should be marked as expert environments using +@code{LaTeX-declare-expert-environments}. + +@defun LaTeX-declare-expert-environments @var{style} @var{environments}... +Declare @var{environments} as expert environments of @var{style}. + +Expert environments are completed depending on @code{TeX-complete-expert-commands}. +@end defun + + +@node Adding Other +@subsection Adding or Examining Other Information +@cindex Adding bibliographies +@cindex Bibliographies, adding +@cindex Examining package/class options +@cindex package/class options, Examining +@cindex Adding support for completion of package/class options +@cindex support for completion of package/class options, Adding +@cindex Viewer predicates +@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 + +@subsubsection Adding bibliographies 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 + +@subsubsection Examining Package/Class Options + +In @LaTeX{} documents, style hooks can find the package names and those +options given as optional argument(s) of @samp{\usepackage} in +@code{LaTeX-provided-package-options}. + +@defvar LaTeX-provided-package-options +Buffer local variable holding alist of options provided to @LaTeX{} +packages. Each element is a cons cell @code{(@var{package} +. @var{option-list})}. For example, its value will be +@lisp + (("babel" . ("german")) + ("geometry" . ("a4paper" "top=2cm" "left=2.5cm" "right=2.5cm")) + ...) +@end lisp +@end defvar + +You can examine whether there is a specific package-option pair by +@code{LaTeX-provided-package-options-member}. + +@defun LaTeX-provided-package-options-member @var{package} @var{option} +Return non-@code{nil} if @var{option} has been given to @var{package}. +The value is actually the tail of the list of options given to +@var{package}. +@end defun + +There are similar facilities for class names and those options given in +@code{\documentclass} declaration. + +@defvar LaTeX-provided-class-options +Buffer local variable holding alist of options provided to @LaTeX{} +classes. Each element is a cons cell @code{(@var{class} +. @var{option-list})}. For example, its value will be +@lisp + (("book" . ("a4paper" "11pt" "openany" "fleqn")) + ...) +@end lisp +@end defvar + +@defun LaTeX-provided-class-options-member @var{class} @var{option} +Return non-@code{nil} if @var{option} has been given to @var{class}. The +value is actually the tail of the list of options given to @var{class}. +@end defun + +@defun LaTeX-match-class-option @var{regexp} +Check if a documentclass option matching @var{regexp} is active. Return +first found class option matching @var{regexp}, or nil if not found. +@end defun + +These functions are also useful to implement customized predicate(s) in +@code{TeX-view-predicate-list}. @xref{Starting Viewers}. + +@subsubsection Adding Support for Option Completion +When the user inserts @samp{\usepackage} by @kbd{C-c C-m}, @AUCTeX{} asks +for the optional arguments after the package name is given. The style +file of that package can provide completion support for the optional +arguments. + +@defvar LaTeX-@var{packagename}-package-options +List of optional arguments available for the package. +@end defvar + +Here is an excerption from @samp{acronym.el}: +@lisp +(defvar LaTeX-acronym-package-options + '("footnote" "nohyperlinks" "printonlyused" "withpage" + "smaller" "dua" "nolist") + "Package options for the acronym package.") +@end lisp + +When the package accepts key-value style optional arguments, more +sophisticated completion support is needed. The package style file can +provide dynamic completion support by custom elisp function. + +@defun LaTeX-@var{packagename}-package-options +This function should ask the user for optional arguments and return them +as a string, instead of built-in option query facility. When this function +is defined, @AUCTeX{} calls it with no argument. +@end defun + +Here is an excerption from @samp{acro.el}: +@lisp +(defun LaTeX-acro-package-options () + "Prompt for package options for the acro package." + (TeX-read-key-val t LaTeX-acro-package-options-list)) +@end lisp + +As you can see in the above example, a utility function +@code{TeX-read-key-val} is available to read key-value pair(s) from users. + +Note that @code{defvar} or @code{defun} of +@code{LaTeX-@var{packagename}-package-options} should be at the top level +of the style file and not inside the style hook, because the style hook is +not yet called when the user inputs the optional arguments in response to +@kbd{C-c C-m}. + +There are similar facilities for class options. When the user inserts +@samp{\documentclass} by @kbd{C-c C-e}, the respective class style file +can provide completion support for the optional arguments. + +@defvar LaTeX-@var{classname}-class-options +List of optional arguments available for the class. +@end defvar + +@defun LaTeX-@var{classname}-class-options +Which see. +@end defun + +@node Hacking the Parser +@subsection 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 + +@AUCTeX{} 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'." + (mapc (lambda (list) + (mapc (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" + (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 ((@var{regexp} @var{match} @var{table}) @dots{}), that +is, each entry is a list with three elements. + +@var{regexp}. Regular expression matching the macro we want to parse. + +@var{match}. A number or list of numbers, each representing one +parenthesized subexpression matched by @var{regexp}. + +@var{table}. The symbol table to store the data. This can be a function, in +which case the function is called with the argument @var{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 @var{match} is a number, a list of +strings if @var{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 Appendices +@appendix Copying, Changes, Development, FAQ, Texinfo Mode + +@menu +* Copying this Manual:: +* Changes:: +* Development:: +* FAQ:: +* Texinfo mode:: +@end menu + +@node Copying this Manual +@appendixsec Copying this Manual + +@ifinfo +The copyright notice for this manual is: + +@insertcopying +@end ifinfo + +The full license text can be read here: + +@menu +* GNU Free Documentation License:: License for copying this manual. +@end menu + +@lowersections +@include fdl.texi +@raisesections + +@node Changes +@appendixsec Changes and New Features + +@lowersections +@include changes.texi +@raisesections + +@subheading Older versions +See the file @file{history.texi} for older changes. + +@node Development +@appendixsec Future Development + +@lowersections +@include todo.texi +@raisesections + +@node FAQ +@appendixsec Frequently Asked Questions + +@lowersections +@include faq.texi +@raisesections + +@node Texinfo mode +@appendixsec Features specific to @AUCTeX{}'s Texinfo major mode + +@AUCTeX{} includes a major mode for editting Texinfo files. This major +mode is not the same mode as the native Texinfo mode (@pxref{Texinfo Mode,,, +texinfo,Texinfo}) of Emacs, although they have the same name. However, +@AUCTeX{} still relies on a number of functions from the native Texinfo +mode. + +The following text describes which functionality is offered by @AUCTeX{} +and which by the native Texinfo mode. This should enable you to decide +when to consult the @AUCTeX{} manual and when the manual of the native +mode. And in case you are a seasoned user of the native mode, the +information should help you to swiftly get to know the +@AUCTeX{}-specific commands. + +@menu +* Exploiting:: How @AUCTeX{} and the native mode work together +* Superseding:: Where the native mode is superseded +* Mapping:: Where key bindings are mapped to the native mode +* Unbinding:: Which native mode key bindings are missing +@end menu + +@node Exploiting +@appendixsubsec How @AUCTeX{} and the native mode work together + +In a nutshell the split between @AUCTeX{} Texinfo mode, and native +Texinfo mode is as follows: + +@itemize +@item +Most of the editing (environment creation, commenting, font command +insertions) and/or processing commands (e.g.@: compiling or printing) +which are available in other @AUCTeX{} modes are also handled by +@AUCTeX{} in Texinfo mode. + +@item +Texinfo-related features (e.g.@: info node linkage or menu creation) rely +on the commands provided by the native Texinfo mode. @AUCTeX{} provides +the key bindings to reach these functions, keeping the same keys as in +native Texinfo whenever possible, or similar ones otherwise. +@end itemize + +@node Superseding +@appendixsubsec Where the native mode is superseded + +This section is directed to users of the native Texinfo mode switching +to @AUCTeX{}. It follows the summary of the native mode +(@pxref{Texinfo Mode Summary,,,texinfo,Texinfo}) and lists which of its commands +are no longer of use. + +@table @asis +@item Insert commands +In the native Texinfo mode, frequently used Texinfo commands can be +inserted with key bindings of the form @kbd{C-c C-c @var{k}} where +@var{k} differs for each Texinfo command; @kbd{c} inserts @code{@@code}, +@kbd{d} inserts @code{@@dfn}, @kbd{k} @code{@@kbd}, etc. + +In @AUCTeX{} commands are inserted with the key binding @kbd{C-c C-m} +instead which prompts for the macro to be inserted. For font selection +commands (like @code{@@b}, @code{@@i}, or @code{@@emph}) and a few related ones (like @code{@@var}, +@code{@@key} or @code{@@code}) there are bindings which insert the respective macros +directly. They have the form @kbd{C-c C-f @var{k}} or @kbd{C-c C-f +C-@var{k}} and call the function @code{TeX-font}. Type @kbd{C-c C-f +@key{RET}} to get a list of supported commands. + +Note that the prefix argument is not handled the same way by @AUCTeX{}. +Note also that the node insertion command from the native mode +(@code{texinfo-insert-@@node}) can still accessed from the Texinfo menu +in @AUCTeX{}. + +@item Insert braces +In @AUCTeX{} braces can be inserted with the same key binding as in the +native Texinfo mode: @kbd{C-c @{}. But @AUCTeX{} uses its own function +for the feature: @code{TeX-insert-braces}. + +@item Insert environments +The native Texinfo mode does not insert full environments. Instead, it +provides the function @code{texinfo-insert-@@end} (mapped to @kbd{C-c +C-c e}) for closing an open environment with a matching @code{@@end} statement. + +In @AUCTeX{} you can insert full environments, i.e.@: both the opening and +closing statements, with the function @code{Texinfo-environment} (mapped +to @kbd{C-c C-e}). + +@item Format info files with makeinfo and @TeX{} +In the native Texinfo mode there are various functions and bindings to +format a region or the whole buffer for info or to typeset the +respective text. For example, there is @code{makeinfo-buffer} (mapped +to @kbd{C-c C-m C-b}) which runs @samp{makeinfo} on the buffer or there +is @code{texinfo-tex-buffer} (mapped to @kbd{C-c C-t C-b}) which runs +@TeX{} on the buffer in order to produce a @acronym{DVI} file. + +In @AUCTeX{} different commands for formatting or typesetting can be +invoked through the function @code{TeX-command-master} (mapped to +@kbd{C-c C-c}). After typing @kbd{C-c C-c}, you can select the desired +command, e.g @samp{Makeinfo} or @samp{TeX}, through a prompt in the mini +buffer. Note that you can make, say @samp{Makeinfo}, the default by +adding this statement in your init file: + +@lisp +(add-hook 'Texinfo-mode-hook + (lambda () (setq TeX-command-default "Makeinfo"))) +@end lisp + +Note also that @kbd{C-c C-c Makeinfo @key{RET}} is not completely +functionally equivalent to @code{makeinfo-buffer} as the latter will +display the resulting info file in Emacs, showing the node corresponding +to the position in the source file, just after a successful compilation. +This is why, while using @AUCTeX{}, invoking @code{makeinfo-buffer} +might still be more convenient. + +Note also that in the case of a multifile document, @kbd{C-c C-c} in +@AUCTeX{} will work on the whole document (provided that the file +variable @code{TeX-master} is set correctly), while +@code{makeinfo-buffer} in the native mode will process only the current +buffer, provided at the @code{@@setfilename} statement is provided. + +@item Produce indexes and print +The native Texinfo mode provides the binding @kbd{C-c C-t C-i} +(@code{texinfo-texindex}) for producing an index and the bindings +@kbd{C-c C-t C-p} (@code{texinfo-tex-print}) and @kbd{C-c C-t C-q} +(@code{tex-show-print-queue}) for printing and showing the printer +queue. These are superseded by the respective commands available +through @kbd{C-c C-c} (@code{TeX-command-master}) in @AUCTeX{}: @samp{Texindex}, +@samp{Print}, and @samp{Queue}. + +@item Kill jobs +The command @kbd{C-c C-t C-k} (@code{tex-kill-job}) in the native mode +is superseded by @kbd{C-c C-k} (@code{TeX-kill-job}) in @AUCTeX{}. +@end table + +@node Mapping +@appendixsubsec Where key bindings are mapped to the native mode + +This node follows the native Texinfo mode summary (@pxref{Texinfo Mode +Summary,,,texinfo,Texinfo}) and lists only those commands to which @AUCTeX{} +provides a keybinding. + +Basically all commands of the native mode related to producing menus and +interlinking nodes are mapped to same or similar keys in @AUCTeX{}, +while a few insertion commands are mapped to @AUCTeX{}-like keys. + +@table @asis + +@item @code{@@item} insertion +The binding @kbd{C-c C-c i} for the insertion of @code{@@item} in the +native mode is mapped to @kbd{M-@key{RET}} or @kbd{C-c C-j} in +@AUCTeX{}, similar to other @AUCTeX{} modes. + +@item @code{@@end} insertion +The binding @kbd{C-c C-c e} for closing a @code{@@@var{foo}} command by +a corresponding @code{@@end @var{foo}} statement in the native mode is +mapped to @kbd{C-c ]} in @AUCTeX{}, similar to other @AUCTeX{} modes. + +@item Move out of balanced braces +The binding @kbd{C-c @}} (@code{up-list}) is available both in the native +mode and in @AUCTeX{}. (This is because the command is not implemented +in either mode but a native Emacs command.) However, in @AUCTeX{}, you +cannot use @kbd{C-c ]} for this, as it is used for @code{@@end} insertion. + +@item Update pointers +The bindings @kbd{C-c C-u C-n} (@code{texinfo-update-node}) and @kbd{C-c +C-u C-e} (@code{texinfo-every-node-update}) from the native mode are +available in @AUCTeX{} as well. + +@item Update menus +The bindings @kbd{C-c C-u m} (@code{texinfo-master-menu}), @kbd{C-c C-u +C-m} (@code{texinfo-make-menu}), and @kbd{C-c C-u C-a} +(@code{texinfo-all-menus-update}) from the native mode are available in +@AUCTeX{} as well. The command @code{texinfo-start-menu-description}, +bound to @kbd{C-c C-c C-d} in the native mode, is bound to @kbd{C-c C-u +C-d} in @AUCTeX{} instead. +@end table + +@node Unbinding +@appendixsubsec Which native mode key bindings are missing + +The following commands from the native commands might still be useful +when working with @AUCTeX{}, however, they are not accessible with a +key binding any longer. + +@table @asis +@item @code{@@node} insertion +The node insertion command, mapped to @kbd{C-c C-c n} in the native +mode, is not mapped to any key in @AUCTeX{}. You can still access it +through the Texinfo menu, though. Another alternative is to use the +@kbd{C-c C-m} binding for macro insertion in @AUCTeX{}. + +@item Show the section structure +The command @code{texinfo-show-structure} (@kbd{C-c C-s}) from the +native mode does not have a key binding in @AUCTeX{}. The binding is +used by @AUCTeX{} for sectioning. +@end table + +@node Indices +@unnumbered Indices + +@menu +* Key Index:: +* Function Index:: +* Variable Index:: +* Concept Index:: +@end menu + +@node Key Index +@unnumberedsec Key Index + +@printindex ky + +@node Function Index +@unnumberedsec Function Index + +@printindex fn + +@node Variable Index +@unnumberedsec Variable Index + +@printindex vr + +@node Concept Index +@unnumberedsec Concept Index + +@printindex cp + +@bye + +@c Local Variables: +@c mode: texinfo +@c coding: utf-8 +@c TeX-master: t +@c End: |