yuuji@46: \def\lang{jp} % -*- texinfo -*- yuuji@20: \input texinfo.tex yuuji@20: @setfilename yatexe yuuji@20: @settitle Yet Another tex-mode for Emacs yuuji@272: @direntry yuuji@272: * YaTeX-e: (yatexe). Yet Another tex-mode for Emacs (English). yuuji@272: @end direntry yuuji@20: yuuji@20: @iftex yuuji@46: @c @syncodeindex fn cp yuuji@517: @c Last modified Sat Jan 6 23:42:24 2018 on firestorm yuuji@20: @syncodeindex vr cp yuuji@20: @end iftex yuuji@20: yuuji@20: @titlepage yuuji@20: @sp 10 yuuji@20: @center yuuji@20: @subtitle Yet Another tex-mode for emacs yuuji@20: @title Wild Bird yuuji@20: @subtitle // YaTeX // yuuji@471: @author @copyright{} 1991-2017 by HIROSE, Yuuji [yuuji@@yatex.org] yuuji@20: @end titlepage yuuji@20: yuuji@20: @node Top, What is YaTeX?, (dir), (dir) yuuji@20: @comment node-name, next, previous, up yuuji@20: @cindex Demacs yuuji@20: @cindex Mule yuuji@20: @cindex LaTeX yuuji@20: @cindex YaTeX yuuji@20: yuuji@20: @menu yuuji@471: * What is YaTeX?:: yuuji@51: * Main features:: What YaTeX can do yuuji@51: * Installation:: Guide to install yuuji@51: * Typesetting:: Call typesetting processes yuuji@79: * %#notation:: Meta-keyword `%#' yuuji@51: * Completion:: Input LaTeX commands with completion yuuji@51: * Local dictionaries:: Directory dependent completion yuuji@51: * Commenting out:: Commenting/uncommenting text yuuji@51: * Cursor jump:: Jumping to related position yuuji@51: * Changing and Deleting:: Changing/deleting certain unit of text yuuji@51: * Filling:: Filling an item or paragraph yuuji@53: * Updation of includeonly:: Free from maintaining includeonly yuuji@59: * What column:: Check what table-column the cursor belong yuuji@51: * Intelligent newline:: Guess requisites of new line yuuji@79: * Usepackage checker:: Selecting correct \usepackage is YaTeX's job yuuji@51: * Online help:: On-line documentation of LaTeX yuuji@53: * Browsing file hierarchy:: Walking through file hierarchy yuuji@51: * Cooperation with other packages:: Work well with gmhist, min-out yuuji@51: * Customizations:: How to breed `Wild Bird' yuuji@51: * Etcetera:: YaTeX is acquisitive. yuuji@51: * Copying:: Redistribution yuuji@20: yuuji@265: @end menu yuuji@20: yuuji@20: @node What is YaTeX?, Main features, Top, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter What is YaTeX? yuuji@20: yuuji@20: YaTeX automates typesetting and previewing of LaTeX and enables yuuji@20: completing input of LaTeX mark-up command such as yuuji@20: @code{\begin@{@}}..@code{\end@{@}}. yuuji@20: yuuji@20: YaTeX also supports Demacs which runs on MS-DOS(386), Mule (Multi yuuji@20: Language Enhancement to GNU Emacs), and latex on DOS. yuuji@20: yuuji@20: @node Main features, Installation, What is YaTeX?, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Main features yuuji@20: yuuji@20: @itemize yuuji@46: @item Invocation of typesetter, previewer and related programs(@kbd{C-c t}) yuuji@20: @item Typesetting on static region which is independent from point yuuji@60: @item Semiautomatic replacing of @code{\includeonly} yuuji@20: @item Jumping to error line(@kbd{C-c '}) yuuji@20: @item Completing-read of La@TeX{} commands such as @code{\begin@{@}}, yuuji@20: @code{\section} etc. yuuji@20: (@kbd{C-c b}, @kbd{C-c s}, @kbd{C-c l}, @kbd{C-c m}) yuuji@20: @item Enclosing text into La@TeX{} environments or commands yuuji@392: (@var{AboveKeyStrokes} after region setting) yuuji@59: @item Displaying the structure of text at entering sectioning commands yuuji@59: @item Lump shifting of sectioning commands (@ref{view-sectioning}) yuuji@20: @item Learning unknown/new La@TeX{} commands for the next completion yuuji@20: @item Argument reading with a guide for complicated La@TeX{} commands yuuji@20: @item Generating argument-readers for new/unsupported commands(@file{yatexgen}) yuuji@20: @item Quick changing or deleting of La@TeX{} commands(@kbd{C-c c}, @kbd{C-c k}) yuuji@20: @item Jumping from and to inter-file, begin<->end, ref<->label(@kbd{C-c g}) yuuji@20: @item Blanket commenting out or uncommenting yuuji@20: (@kbd{C-c >}, @kbd{C-c <}, @kbd{C-c ,}, @kbd{C-c .}) yuuji@20: @item Easy input of accent mark, math-mode's commands and Greek letters yuuji@52: (@kbd{C-c a}, @kbd{;}, @kbd{:}) yuuji@20: @item Online help for the popular La@TeX{} commands yuuji@58: (@kbd{C-c ?}, @kbd{C-c /}) yuuji@53: @item Document files hierarchy browser (@kbd{C-c d}) yuuji@80: @item Adding automatically \usepackage corresponding to inputting LaTeX yuuji@80: macro with completion yuuji@265: @item Allow you to forget creating \label@{@}s, \ref@{@} or \cite@{@} yuuji@265: completion automatically generate labels. yuuji@471: @item \includegraphics by Drag&Drop of image file yuuji@20: @end itemize yuuji@20: yuuji@20: @node Installation, Typesetting, Main features, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Installation yuuji@20: @cindex installation yuuji@20: @cindex .emacs yuuji@20: @cindex auto-mode-alist yuuji@20: @cindex autoload yuuji@20: yuuji@20: Put next two expressions into your @file{~/.emacs}. yuuji@20: yuuji@20: @lisp yuuji@20: (setq auto-mode-alist yuuji@46: (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist)) yuuji@20: (autoload 'yatex-mode "yatex" "Yet Another La@TeX{} mode" t) yuuji@20: @end lisp yuuji@20: yuuji@20: Next, add certain path name where you put files of YaTeX to your yuuji@20: load-path. If you want to put them in @file{~/src/emacs}, write yuuji@20: yuuji@20: @lisp yuuji@20: (setq load-path yuuji@20: (cons (expand-file-name "~/src/emacs") load-path)) yuuji@20: @end lisp yuuji@20: yuuji@20: @noindent yuuji@20: in your @file{~/.emacs} yuuji@20: yuuji@20: Then, yatex-mode will be automatically loaded when you visit a yuuji@20: file which has extension @file{.tex}. If yatex-mode is successfully yuuji@20: loaded, mode string on mode line will be turned to "YaTeX". yuuji@20: yuuji@20: yuuji@68: @node Typesetting, %#notation, Installation, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Typesetting yuuji@20: @cindex typesetting yuuji@20: @cindex previewer yuuji@20: @cindex typesetter yuuji@20: @cindex latex yuuji@20: @cindex printing out yuuji@20: yuuji@20: The prefix key stroke of yatex-mode is @kbd{C-c} (Press 'C' with Control yuuji@20: key) by default. If you don't intend to change the prefix key stroke, yuuji@20: assume all @kbd{[prefix]} as @kbd{C-c} in this document. These key yuuji@20: strokes execute typeset or preview command. yuuji@20: yuuji@20: @table @kbd yuuji@58: @item [prefix] t j yuuji@392: @dots{} invoke typesetter yuuji@58: @item [prefix] t r yuuji@392: @dots{} invoke typesetter on region yuuji@130: @item [prefix] t e yuuji@392: @dots{} `on-the-fly preview' on current environment or whole yuuji@392: portion of current formulas in math-mode yuuji@242: @item [prefix] t d yuuji@242: @dots{} invoke dvipdfmx after successful typesetting yuuji@58: @item [prefix] t k yuuji@46: @dots{} kill current typesetting process yuuji@58: @item [prefix] t b yuuji@46: @dots{} invoke bibtex yuuji@126: @item [prefix] t i yuuji@126: @dots{} invoke makeindex yuuji@126: @item [prefix] t d yuuji@126: @dots{} invoke latex && dvipdfmx yuuji@58: @item [prefix] t p yuuji@46: @dots{} preview yuuji@58: @item [prefix] t l yuuji@46: @dots{} lpr dvi-file yuuji@58: @item [prefix] t s yuuji@58: @dots{} search current string on xdvi-remote yuuji@20: @end table yuuji@20: yuuji@58: @menu yuuji@471: * Calling typesetter:: yuuji@471: * Calling previewer:: yuuji@471: * Printing out:: yuuji@58: @end menu yuuji@58: yuuji@58: @node Calling typesetter, Calling previewer, Typesetting, Typesetting yuuji@58: @comment node-name, next, previous, up yuuji@68: @section Calling typesetter yuuji@58: yuuji@58: Typing @kbd{[prefix] t j}, the current editing window will be divided yuuji@58: horizontally when you invoke latex command, and log message of La@TeX{} yuuji@58: typesetting will be displayed in the other window; called typesetting yuuji@58: buffer. The typesetting buffer automatically scrolls up and traces yuuji@58: La@TeX{} warnings and error messages. If you see latex stopping by an yuuji@20: error, you can send string to latex in the typesetting buffer. yuuji@20: yuuji@20: If an error stops the La@TeX{} typesetting, this key stroke will yuuji@20: move the cursor to the line where La@TeX{} error is detected. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] ' yuuji@20: @itemx ([prefix]+single quotation) yuuji@20: yuuji@46: @dots{} jump to the previous error or warning yuuji@20: @end table yuuji@20: yuuji@20: If you find a noticeable error, move to the typesetting buffer and move yuuji@20: the cursor on the line of error message and type @kbd{SPACE} key. This yuuji@20: makes the cursor move to corresponding source line. yuuji@20: yuuji@131: YaTeX-typeset-region invoked by @kbd{[prefix] tr} call typesetter yuuji@131: for region. The region is specified by standard point and mark, or yuuji@131: by @code{%#BEGIN} and @code{%#END} marks. Selected region will be yuuji@131: copied to the temporary file @file{texput.tex} with the same preamble yuuji@131: as the main file of current editing sources. Be sure to put yuuji@265: all local macro settings in preamble, not after @code{\begin@{document@}}. yuuji@131: The method of specification of the region is shown in the yuuji@68: section @xref{%#notation}. yuuji@20: yuuji@73: The documentclass for typeset-region is the same as that of editing yuuji@20: file if you edit one file, and is the same as main file's if you yuuji@20: edit splitting files. yuuji@20: yuuji@130: The @kbd{[prefix] te} key automatically marks current inner environment yuuji@392: or inner math mode or paragraph, and then call typeset-region with marked yuuji@392: region. This yuuji@130: is convenient to quick view of current tabular environment or current yuuji@392: editing formulas. If running Emacs has the ability of displaying images, yuuji@392: typeset image will be shown in the next window. Further more, yuuji@392: if you modify the content within that environment, YaTeX performs yuuji@392: `on-the-fly' preview that automatically update preview image as you typed. yuuji@392: yuuji@392: If your Emacs does not supply on-the-fly preview, yuuji@392: keeping previewer window for @file{texput.dvi} is handy yuuji@131: for debugging. Since @kbd{[prefix] te} selects the inner-most environment yuuji@131: as region, it is not suitable for partial typesetting of doubly or more yuuji@131: composed environment. If you want to do partial typesetting for a nested yuuji@131: environment, use @kbd{[prefix] tr} for static-region, which is described yuuji@131: in the section @xref{%#notation}. yuuji@130: yuuji@58: @node Calling previewer, Printing out, Calling typesetter, Typesetting yuuji@58: @comment node-name, next, previous, up yuuji@68: @section Calling previewer yuuji@58: yuuji@58: @kbd{[prefix] t p} invokes the TeX previewer. And if you are using yuuji@58: xdvi-remote, which can be controled from other terminals, @kbd{[prefix] t yuuji@58: s} enables you to search current string at the cursor on the running xdvi yuuji@72: window. yuuji@58: yuuji@58: @node Printing out, , Calling previewer, Typesetting yuuji@58: @comment node-name, next, previous, up yuuji@68: @section Printing out yuuji@58: yuuji@58: When you type @code{[preifx] t l}, YaTeX asks you the range of yuuji@58: dvi-printing by default. You can skip this by invoking it with yuuji@58: universal-argument as follows: yuuji@20: yuuji@20: @example yuuji@49: C-u [prefix] tl yuuji@20: @end example yuuji@20: yuuji@68: @node %#notation, Completion, Typesetting, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter %# notation yuuji@20: @cindex %# notation yuuji@20: yuuji@20: You can control the typesetting process by describing @code{%#} yuuji@20: notations in the source text. yuuji@20: yuuji@20: @menu yuuji@471: * Changing typesetter:: yuuji@471: * Splitting input files:: yuuji@471: * Static region for typesetting:: yuuji@517: * Special Filtering Region:: yuuji@471: * Lpr format:: yuuji@471: * Controlling which command to invoke:: yuuji@471: * Editing %# notation:: yuuji@20: @end menu yuuji@20: yuuji@70: @node Changing typesetter, Splitting input files, %#notation, %#notation yuuji@20: @comment node-name, next, previous, up yuuji@20: @section To change the `latex' command or to split a source text. yuuji@20: @cindex typesetter yuuji@20: yuuji@20: To change the typesetting command, write yuuji@20: yuuji@20: @example yuuji@46: %#!latex-big yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@51: anywhere in the source text. This is useful for changing yuuji@51: typesetter. yuuji@51: yuuji@68: @node Splitting input files, Static region for typesetting, Changing typesetter, %#notation yuuji@51: @comment node-name, next, previous, up yuuji@70: @section Splitting input files yuuji@51: yuuji@51: And if you split the source text and yuuji@20: edit subfile that should be included from main text. yuuji@20: yuuji@20: @example yuuji@46: %#!latex main.tex yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: will be helpful to execute latex on main file from sub text buffer. Since yuuji@20: this command line after @kbd{%#!} will be sent to shell literally, next yuuji@20: description makes it convenient to use ghostview as dvi-previewer. yuuji@20: yuuji@20: @example yuuji@242: %#!latex main && dvi2ps main.dvi > main yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: Note that YaTeX assumes the component before the last period of yuuji@20: the last word in this line as base name of the main La@TeX{} source. yuuji@80: The @code{%f} notation in this line is replaced by main file name, and yuuji@80: @code{%r} replaced by root name of main file name. If you specify yuuji@80: @code{%f} or @code{%r}, YaTeX always ask you the name of main file at the yuuji@80: first typesetting. yuuji@20: yuuji@51: To make best use of the feature of inter-file jumping by yuuji@51: @kbd{[prefix] g} (see @ref{Cursor jump}), take described below into yuuji@51: consideration. yuuji@20: yuuji@20: @itemize yuuji@20: @item You can put split texts in sub directory, but not in yuuji@20: sub directory of sub directory. yuuji@51: @item In the main text, specify the child file name with relative path name yuuji@70: such as \include@{chap1/sub@}, when you include the file in yuuji@20: a sub-directory. yuuji@20: @item In a sub-text, write @code{%#!latex main.tex} even if @file{main.tex} yuuji@20: is in the parent directory(not %#!latex ../main.tex). yuuji@20: @end itemize yuuji@20: yuuji@70: @node Static region for typesetting, Lpr format, Splitting input files, %#notation yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Static region yuuji@20: @cindex static region yuuji@20: @cindex Fixed region yuuji@20: yuuji@20: Typeset-region by @kbd{[prefix] tr} passes the region between point and yuuji@20: mark to typesetting command by default. But when you want to typeset yuuji@20: static region, enclose the region by @code{%#BEGIN} and @code{%#END} as yuuji@20: follows. yuuji@20: yuuji@20: @example yuuji@46: %#BEGIN yuuji@46: TheRegionYouWantToTypesetManyTimes yuuji@46: %#END yuuji@20: @end example yuuji@20: yuuji@20: This is the rule of deciding the region. yuuji@20: yuuji@20: @enumerate yuuji@20: @item yuuji@20: If there exists %#BEGIN before point, yuuji@20: yuuji@20: @enumerate yuuji@20: @item yuuji@20: If there exists %#END after %#BEGIN, yuuji@20: @itemize yuuji@20: @item From %#BEGIN to %#END. yuuji@20: @end itemize yuuji@20: yuuji@20: @item yuuji@20: If %#END does not exist after %#BEGIN, yuuji@20: @itemize yuuji@20: @item From %#BEGIN to the end of buffer. yuuji@20: @end itemize yuuji@20: @end enumerate yuuji@20: yuuji@20: @item yuuji@20: If there does not exist %#BEGIN before point, yuuji@20: @itemize yuuji@20: @item Between point and mark(standard method of Emacs). yuuji@20: @end itemize yuuji@20: @end enumerate yuuji@20: yuuji@20: It is useful to write @code{%#BEGIN} in the previous line of \begin and yuuji@20: @code{%#END} in the next line of \@code{end} when you try complex yuuji@20: environment such as `tabular' many times. It is also useful to put only yuuji@20: @code{%#BEGIN} alone at the middle of very long text. Do not forget to yuuji@20: erase @code{%#BEGIN} @code{%#END} pair. yuuji@20: yuuji@517: @node Special Filtering Region, Lpr format, Static region for typesetting, %#notation yuuji@517: @section Special Filtering Region yuuji@517: A region like below will be passed to external filter command. yuuji@517: @example yuuji@517: %#BEGIN FILTER{foo.pdf}{dot -T %t -o %o} yuuji@517: \if0 yuuji@517: ....blah blah blah... yuuji@517: ....blah blah blah... yuuji@517: ....blah blah blah... yuuji@517: \fi yuuji@517: %#END yuuji@517: @end example yuuji@517: yuuji@517: In this case, typing @kbd{[prefix] t e} send three `blah' lines yuuji@517: to "dot -T pdf -o foo.pdf" as standard-input. It is useful to yuuji@517: have source of text-origin graphic generated by such tools as yuuji@517: graphviz or blockdiag, in La@TeX{} source. This special form of region yuuji@517: can be inserted via feeding @code{.dot} into environment completion by yuuji@517: @kbd{[prefix] t b}. yuuji@517: yuuji@517: yuuji@517: yuuji@471: @node Lpr format, Controlling which command to invoke, Static region for typesetting, %#notation yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Lpr format yuuji@20: @cindex lpr format yuuji@20: yuuji@20: Lpr format is specified by three Lisp variables. Here are the yuuji@20: default values of them. yuuji@20: yuuji@20: @table @code yuuji@20: @item (1)dviprint-command-format yuuji@46: @code{"dvi2ps %f %t %s | lpr"} yuuji@20: @item (2)dviprint-from-format yuuji@46: @code{"-f %b"} yuuji@20: @item (3)dviprint-to-format yuuji@46: @code{"-t %e"} yuuji@20: @end table yuuji@20: yuuji@20: On YaTeX-lpr, @code{%s} in (1) is replaced by the file name of main yuuji@20: text, @code{%f} by contents of (2), %t by contents of (3). At these yuuji@20: replacements, @code{%b} in (2) is also replaced by the number of beginning yuuji@20: page, @code{%e} in (3) is replaced by the number of ending page. But yuuji@20: @code{%f} and @code{%t} are ignored when you omit the range of print-out yuuji@20: by @kbd{C-u [prefix] tl}. yuuji@20: yuuji@20: If you want to change this lpr format temporarily, put a command yuuji@20: such as follows somewhere in the text: yuuji@20: yuuji@20: @example yuuji@46: %#LPR dvi2ps %f %t %s | 4up -page 4 | texfix | lpr -Plp2 yuuji@20: @end example yuuji@20: yuuji@20: And if you want YaTeX not to ask you the range of printing yuuji@20: out, the next example may be helpful. yuuji@20: yuuji@20: @example yuuji@46: %#LPR dvi2ps %s | lpr yuuji@20: @end example yuuji@20: yuuji@269: @node Controlling which command to invoke, Editing %# notation, Lpr format, %#notation yuuji@242: @comment node-name, next, previous, up yuuji@242: @section Controlling which command to invoke yuuji@242: yuuji@242: These %# notation below can control which command to invoke for yuuji@242: La@TeX{} related process. yuuji@242: yuuji@242: @table @code yuuji@410: @item %#PREVIEW yuuji@410: @dots{} Command line for DVI viewing ([prefix] t p) yuuji@410: @item %#MAKEINDEX yuuji@410: @dots{} Command line for makeindex ([prefix] t i) yuuji@242: @item %#BIBTEX yuuji@242: @dots{} Command line for bibtex ([prefix] t b) yuuji@329: @item %#DVIPDF yuuji@329: @dots{} Command line for dvipdf(mx) ([prefix] t b) yuuji@410: @item %#LPR yuuji@410: @dots{} Command line for printing out([prefix] t l) yuuji@410: @item %#PDFVIEW yuuji@410: @dots{} Command line for PDF viewing yuuji@410: @item %#IMAGEDPI yuuji@410: @dots{} DPI value for converting to on-the-fly prewview image yuuji@242: @end table yuuji@242: yuuji@242: If you want to invoke ``makeidx hogehoge'' to update index, yuuji@242: put the next line some upper place in the source, for example. yuuji@242: yuuji@242: @example yuuji@242: %#MAKEINDEX makeidx hogehoge yuuji@242: @end example yuuji@242: yuuji@242: yuuji@269: @node Editing %# notation, , Controlling which command to invoke, %#notation yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Editing %# notation yuuji@20: yuuji@20: To edit @code{%#} notation described above, type yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] % yuuji@46: @dots{} editing %# notation menu yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: and select one of the entry of the menu as follows. yuuji@20: yuuji@20: @example yuuji@46: !)Edit-%#! B)EGIN-END-region L)Edit-%#LPR yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: Type @kbd{!} to edit @code{%#!} entry, @code{b} to enclose the region with yuuji@20: @code{%#BEGIN} and @code{%#END}, and @code{l} to edit @code{%#LPR} entry. yuuji@20: When you type @kbd{b}, all @code{%#BEGIN} and @code{%#END} are yuuji@20: automatically erased. yuuji@20: yuuji@68: @node Completion, Local dictionaries, %#notation, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Completion yuuji@20: @cindex completion yuuji@20: yuuji@20: YaTeX makes it easy to input the La@TeX{} commands. There are several yuuji@20: kinds of completion type, begin-type, section-type, large-type, etc... yuuji@20: yuuji@20: @menu yuuji@392: * Begin-type completion:: yuuji@392: * Section-type completion:: yuuji@471: * Label Generation:: yuuji@392: * Large-type completion:: yuuji@392: * Maketitle-type completion:: yuuji@392: * Arbitrary completion:: yuuji@392: * End completion:: yuuji@392: * Accent completion:: yuuji@392: * Image completion:: yuuji@392: * Greek letters completion:: yuuji@392: * Inserting parentheses:: yuuji@20: @end menu yuuji@20: yuuji@33: @node Begin-type completion, Section-type completion, Completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Begin-type completion yuuji@20: @cindex begin-type completion yuuji@20: @cindex environment yuuji@20: @cindex prefix b yuuji@20: yuuji@20: "Begin-type completion" completes commands of @code{\begin@{env@}} ... yuuji@20: @code{\end@{env@}}. All of the begin-type completions begin with this key yuuji@20: sequence. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] b yuuji@46: @dots{} start begin-type completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: An additional key stroke immediately completes a frequently used yuuji@20: La@TeX{} @code{\begin@{@}}...@code{\@code{end}@{@}} environment. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] b c yuuji@46: @dots{} @code{\begin@{center@}...\end@{center@}} yuuji@20: @item [prefix] b d yuuji@46: @dots{} @code{\begin@{document@}...\end@{document@}} yuuji@20: @item [prefix] b D yuuji@46: @dots{} @code{\begin@{description@}...\end@{description@}} yuuji@20: @item [prefix] b e yuuji@46: @dots{} @code{\begin@{enumerate@}...\end@{enumerate@}} yuuji@20: @item [prefix] b E yuuji@46: @dots{} @code{\begin@{equation@}...\end@{equation@}} yuuji@20: @item [prefix] b i yuuji@46: @dots{} @code{\begin@{itemize@}...\end@{itemize@}} yuuji@20: @item [prefix] b l yuuji@46: @dots{} @code{\begin@{flushleft@}...\end@{flushleft@}} yuuji@20: @item [prefix] b m yuuji@46: @dots{} @code{\begin@{minipage@}...\end@{minipage@}} yuuji@20: @item [prefix] b t yuuji@46: @dots{} @code{\begin@{tabbing@}...\end@{tabbing@}} yuuji@20: @item [prefix] b T yuuji@46: @dots{} @code{\begin@{tabular@}...\end@{tabular@}} yuuji@20: @item [prefix] b^T yuuji@46: @dots{} @code{\begin@{table@}...\end@{table@}} yuuji@20: @item [prefix] b p yuuji@46: @dots{} @code{\begin@{picture@}...\end@{picture@}} yuuji@20: @item [prefix] b q yuuji@46: @dots{} @code{\begin@{quote@}...\end@{quote@}} yuuji@20: @item [prefix] b Q yuuji@46: @dots{} @code{\begin@{quotation@}...\end@{quotation@}} yuuji@20: @item [prefix] b r yuuji@46: @dots{} @code{\begin@{flushright@}...\end@{flushright@}} yuuji@20: @item [prefix] b v yuuji@46: @dots{} @code{\begin@{verbatim@}...\end@{verbatim@}} yuuji@20: @item [prefix] b V yuuji@46: @dots{} @code{\begin@{verse@}...\end@{verse@}} yuuji@20: @end table yuuji@20: yuuji@20: Any other La@TeX{} environments are made by completing-read of the yuuji@20: Emacs function. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] b SPACE yuuji@46: @dots{} begin-type completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: The next message will show up in the minibuffer yuuji@20: yuuji@20: @example yuuji@46: Begin environment(default document): yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: by typing @kbd{[prefix] b}. Put the wishing environment with completion yuuji@20: in the minibuffer, and @code{\begin@{env@}}...\@code{\end@{env@}} will be yuuji@20: inserted in the La@TeX{} source text. If the environment you want to put yuuji@20: does not exist in the YaTeX completion table, it will be registered in the yuuji@20: user completion table. YaTeX automatically saves the user completion yuuji@20: table in the user dictionary file at exiting of emacs. yuuji@20: yuuji@58: At the completion of certain environments, the expected initial entry will yuuji@58: automatically inserted such as @code{\item} for @code{itemize} yuuji@58: environment. If you don't want the entry, it can be removed by undoing. yuuji@58: yuuji@392: If you want to enclose some paragraphs which have already been written yuuji@392: into environment, invoke the begin-type completion right after region marking. yuuji@20: @cindex enclose region into environment yuuji@20: yuuji@392: If you set @code{transient-mark-mode} to @code{nil} in your yuuji@392: @file{~/.emacs}, typing @kbd{C-space} (@code{set-mark-command}) twice yuuji@392: turns @code{transient-mark-mode} on temporarily. Then, type call yuuji@392: begin-type completion to enclose text into a environment. yuuji@392: yuuji@20: yuuji@517: @node Section-type completion, Label Generation, Begin-type completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Section-type completion yuuji@20: @cindex section-type completion yuuji@20: @cindex prefix s yuuji@20: yuuji@20: "Section-type completion" completes section-type commands which take an yuuji@20: argument or more such as @code{\section@{foo@}}. To invoke section-type yuuji@20: completion, type yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] s yuuji@46: @dots{} section-type completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: then the prompt yuuji@20: yuuji@20: @example yuuji@73: (C-v for view) \???@{@} (default documentclass): yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: will show up in the minibuffer. Section-type La@TeX{} commands are yuuji@20: completed by space key, and the default value is selected when you yuuji@20: type nothing in the minibuffer. yuuji@20: yuuji@20: Next, yuuji@20: yuuji@20: @example yuuji@46: \section@{???@}: yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: prompts you the argument of section-type La@TeX{} command. For yuuji@20: example, the following inputs yuuji@20: yuuji@20: @example yuuji@73: \???@{@} (default documentclass): section yuuji@70: \section@{???@}: Hello world. yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: will insert the string yuuji@20: yuuji@20: @example yuuji@46: \section@{Hello world.@} yuuji@20: @end example yuuji@20: yuuji@20: in your La@TeX{} source. When you neglect argument such as yuuji@20: yuuji@20: @example yuuji@46: (C-v for view) \???@{@} (default section): vspace* yuuji@46: \vspace*@{???@}: yuuji@20: @end example yuuji@20: yuuji@20: YaTeX puts yuuji@20: yuuji@20: @example yuuji@46: \vspace*@{@} yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: and move the cursor in the braces. yuuji@20: yuuji@20: In La@TeX{} command, there are commands which take more than one yuuji@70: arguments such as @code{\addtolength@{\topmargin@}@{8mm@}}. To complete these yuuji@20: commands, invoke section-type completion with universal argument as, yuuji@20: @cindex number of argument yuuji@20: yuuji@20: @example yuuji@49: C-u 2 [prefix] s (or ESC 2 [prefix] s) yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: and make answers in minibuffer like this. yuuji@20: yuuji@20: @example yuuji@46: (C-v for view) \???@{@} (default vspace*): addtolength yuuji@46: \addtolength@{???@}: \topmargin yuuji@46: Argument 2: 8mm yuuji@20: @end example yuuji@20: yuuji@20: @code{\addtolength} and the first argument @code{\topmargin} can be typed yuuji@20: easily by completing read. Since YaTeX also learns the number of yuuji@20: arguments of section-type command and will ask that many arguments in yuuji@20: future completion, you had better tell the number of arguments to YaTeX at yuuji@20: the first completion of the new word. But you can change the number of yuuji@20: arguments by calling the completion with different universal argument yuuji@20: again. yuuji@20: yuuji@20: yuuji@20: Invoking section-type completion with @code{[Prefix] S} (Capital `S') yuuji@20: includes the region as the first argument of section-type command. yuuji@20: yuuji@20: The section/large/maketitle type completion can work at the yuuji@20: prompt for the argument of other section-type completion. yuuji@20: Nested La@TeX{} commands are efficiently read with the recursive yuuji@20: completion by typing YaTeX's completion key sequence in the yuuji@20: minibuffer. yuuji@20: yuuji@20: @menu yuuji@471: * view-sectioning:: yuuji@20: @end menu yuuji@20: yuuji@33: @node view-sectioning, , Section-type completion, Section-type completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @subsection view-sectioning yuuji@20: @cindex view sectioning yuuji@20: @cindex outline yuuji@20: yuuji@20: In the minibuffer at the prompt of section-type command completion, yuuji@20: typing @kbd{C-v} shows a list of sectioning commands in source text(The yuuji@20: line with @code{<<--} mark is the nearest sectioning command). Then, yuuji@20: default sectioning command appears in the minibuffer. You can go up/down yuuji@20: sectioning command by typing @kbd{C-p}/@kbd{C-n}, can scrolls up/down the yuuji@20: listing buffer by @kbd{C-v}/@kbd{M-v}, and can hide sectioning commands yuuji@20: under certain level by 0 through 6. Type @kbd{?} in the minibuffer of yuuji@20: sectioning prompt for more information. yuuji@20: yuuji@58: You can generate this listing buffer (@code{*Sectioning Lines*} buffer) yuuji@58: by typing yuuji@58: @table @kbd yuuji@58: @item M-x YaTeX-section-overview yuuji@58: @dots{} Generate *Sectioning Lines* buffer yuuji@58: @end table yuuji@58: @cindex{Generate the listing of sectioning units} yuuji@58: from the LaTeX source buffer. In this listing buffer, typing @kbd{u} on yuuji@58: the sectioning command shifts up the corresponding sectioning command in yuuji@58: source text and @kbd{d} shifts down. After marking lines in the listing yuuji@58: buffer, typing @kbd{U} shifts up all sectioning commands in the region, yuuji@58: and @kbd{U} shifts down. Here are all the key bindings of yuuji@58: @code{*Sectioning Lines*} buffer. yuuji@58: yuuji@58: @table @kbd yuuji@58: @item SPC yuuji@58: @dots{} Jump to corresponding source line yuuji@58: @item . yuuji@58: @dots{} Display corresponding source line yuuji@58: @item u yuuji@58: @dots{} Shift up a sectioning line yuuji@58: @item d yuuji@58: @dots{} Shift down a sectioning line yuuji@58: @item U yuuji@58: @dots{} Shift up sectioning lines in region yuuji@58: @item D yuuji@58: @dots{} Shift down sectioning lines in region yuuji@68: @item 0@dots{}6 yuuji@58: @dots{} Hide sectioning commands whose level is lower than n yuuji@58: @end table yuuji@58: yuuji@471: @node Label Generation, Large-type completion, Section-type completion, Completion yuuji@471: @section Label Generation yuuji@471: @comment label generation yuuji@471: @cindex label generation yuuji@471: @cindex ref label cite yuuji@471: yuuji@471: When you want to type-in references of @code{\ref} or @code{\cite}, yuuji@471: all you have to do is type @kbd{[prefix] s ref} without adding labels yuuji@471: beforehand. You will see possible La@TeX{}-counters in the next window yuuji@471: even if some counter does not have @code{\label}. Selecting the counter yuuji@471: will automatically set the label to that counter. yuuji@471: yuuji@471: All possible counter list in the buffer tends to be large. yuuji@471: You can reduce the number of list by filtering type of counters by yuuji@471: key-commands as follows. yuuji@471: @table @kbd yuuji@471: @item M-a yuuji@471: @dots{} Show all(disable filtering) yuuji@471: @item M-c yuuji@471: @dots{} Captions only yuuji@471: @item M-e yuuji@471: @dots{} equations (with counters) only yuuji@471: @item M-i yuuji@471: @dots{} numbers items only yuuji@471: @item M-s yuuji@471: @dots{} sections only yuuji@471: @item M-m yuuji@471: @dots{} other counters only yuuji@471: @end table yuuji@471: yuuji@471: yuuji@471: @node Large-type completion, Maketitle-type completion, Label Generation, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Large-type completion yuuji@20: yuuji@20: "Large-type completion" inputs the font or size changing yuuji@20: descriptions such as @code{@{\large @}}. When you type yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] l yuuji@46: @dots{} large-type completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: the message in the minibuffer yuuji@20: yuuji@20: @example yuuji@46: @{\??? @} (default large): yuuji@20: @end example yuuji@20: yuuji@20: prompts prompts you large-type command with completing-read. There are yuuji@20: TeX commands to change fonts or sizes, @code{it}, @code{huge} and so on, yuuji@20: in the completion table. yuuji@20: yuuji@392: Region-based completion is also invoked by calling completion yuuji@392: after region activated. yuuji@20: yuuji@20: @node Maketitle-type completion, Arbitrary completion, Large-type completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Maketitle-type completion yuuji@20: @cindex maketitle-type completion yuuji@20: yuuji@20: We call it "maketitle-type completion" which completes commands such as yuuji@20: @code{\maketitle}. Take notice that maketitle-type commands take no yuuji@20: arguments. Then, typing yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] m yuuji@46: @dots{} maketitle-type completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: begins maketitle-completion. Above mentioned method is true for yuuji@20: maketitle-completion, and there are La@TeX{} commands with no yuuji@20: arguments in completion table. yuuji@20: yuuji@20: @node Arbitrary completion, End completion, Maketitle-type completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Arbitrary completion yuuji@20: @cindex arbitrary completion yuuji@20: yuuji@20: @noindent yuuji@20: You can complete certain La@TeX{} command anywhere without typical yuuji@20: completing method as described, by typing yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] SPC yuuji@46: @dots{} arbitrary completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: after the initial string of La@TeX{} command that is preceded by @code{\}. yuuji@20: yuuji@20: @node End completion, Accent completion, Arbitrary completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section End completion yuuji@20: @cindex end completion yuuji@20: yuuji@20: @noindent yuuji@20: YaTeX automatically detects the opened environment and close it with yuuji@20: \@code{\end@{environment@}}. Though proficient YaTeX users never fail to yuuji@20: make environment with begin-type completion, some may begin an environment yuuji@20: manually. In that case, type yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] e yuuji@46: @dots{} @code{end} completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: at the end of the opened environment. yuuji@20: yuuji@20: @node Accent completion, Image completion, End completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Accent completion yuuji@20: @cindex accent completion yuuji@20: yuuji@20: When you want to write the European accent marks(like @code{\`@{o@}}), yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] a yuuji@46: @dots{} accent completion yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: shows the menu yuuji@20: yuuji@20: @example yuuji@46: 1:` 2:' 3:^ 4:" 5:~ 6:= 7:. u v H t c d b yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: in the minibuffer. Chose one character or corresponding numeric, yuuji@20: and you will see yuuji@20: yuuji@20: @example yuuji@70: \`@{@} yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: in the editing buffer with the cursor positioned in braces. Type yuuji@20: one more character `o' for example, then yuuji@20: yuuji@20: @example yuuji@70: \`@{o@} yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: will be completed, and the cursor gets out from braces. yuuji@20: yuuji@20: @node Image completion, Greek letters completion, Accent completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Image completion of mathematical sign yuuji@20: @cindex image completion yuuji@20: @cindex math-mode yuuji@20: @cindex sigma yuuji@20: @cindex leftarrow yuuji@20: @cindex ; yuuji@20: yuuji@20: Arrow marks, sigma mark and those signs mainly used in the yuuji@20: TeX's math environment are completed by key sequences which yuuji@20: imitate the corresponding symbols graphically. This completion yuuji@20: only works in the math environment. YaTeX automatically detects yuuji@20: whether the cursor located in math environment or not, and yuuji@52: change the behavior of key strokes @kbd{;} and @kbd{:}. yuuji@20: yuuji@20: By the way, we often express the leftarrow mark by `<-' for example. yuuji@20: Considering such image, you can write @code{\leftarrow} by typing @kbd{<-} yuuji@20: after @kbd{;} (semicolon) as a prefix. In the same way, yuuji@20: @code{\longleftarrow} (@code{<--}) is completed by typing @kbd{;<--}, yuuji@20: infinity mark which is imitated by @code{oo} is completed by typing yuuji@20: @kbd{;oo}. yuuji@20: yuuji@20: Here are the sample operations in YaTeX math-mode. yuuji@20: yuuji@20: @example yuuji@20: INPUT Completed La@TeX{} commands yuuji@20: ; < - @code{\leftarrow} yuuji@20: ; < - - @code{\longleftarrow} yuuji@20: ; < - - > @code{\longleftrightarrow} yuuji@20: ; o @code{\circ} yuuji@20: ; o o @code{\infty} yuuji@20: @end example yuuji@20: yuuji@20: In any case, you can quit from image completion and can move yuuji@20: to the next editing operation if the La@TeX{} command you want is yuuji@20: shown in the buffer. yuuji@20: yuuji@20: @code{;} itself in math-environment is inserted by @kbd{;;}. Typing yuuji@20: @kbd{TAB} in the midst of image completion shows all of the La@TeX{} yuuji@20: commands that start with the same name as string you previously typed in. yuuji@20: In this menu buffer, press @kbd{RET} after moving the cursor (by @kbd{n}, yuuji@20: @kbd{p}, @kbd{b}, @kbd{f}) to insert the La@TeX{} command. yuuji@20: yuuji@20: To know all of the completion table, type @kbd{TAB} just after @kbd{;}. yuuji@20: And here is the sample menu by @kbd{TAB} after @kbd{;<}. yuuji@20: yuuji@20: @example yuuji@20: KEY LaTeX sequence sign yuuji@20: < \leq < yuuji@20: ~ yuuji@20: << \ll << yuuji@20: <- \leftarrow <- yuuji@20: <= \Leftarrow <= yuuji@20: @end example yuuji@20: yuuji@20: You can define your favorite key-vs-sequence completion table in the yuuji@20: Emacs-Lisp variable @code{YaTeX-math-sign-alist-private}. See also yuuji@20: @file{yatexmth.el} for the information of the structure of this variable. yuuji@20: yuuji@392: @node Greek letters completion, Inserting parentheses, Image completion, Completion yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Greek letters completion yuuji@20: @cindex Greek letters completion yuuji@52: @cindex : yuuji@20: yuuji@20: Math-mode of YaTeX provides another image completion, Greek letters yuuji@52: completion in the same method. After prefix @kbd{:}, typing @kbd{a} makes yuuji@20: @code{\alpha}, @kbd{b} makes @code{\beta} and @kbd{g} makes @code{\gamma} yuuji@58: and so on. First, type @kbd{:TAB} to know all the correspondence of yuuji@58: alphabets vs. Greek letters. yuuji@20: yuuji@52: If you will find @kbd{;} or @kbd{:} doesn't work in correct position of yuuji@20: math environment, it may be a bug of YaTeX. Please send me a bug report yuuji@20: with the configuration of your text, and avoid it temporarily by typing yuuji@52: @kbd{;} or @kbd{:} after universal-argument(@kbd{C-u}) which forces yuuji@52: @kbd{;} and @kbd{:} to work as math-prefix. yuuji@20: yuuji@392: @node Inserting parentheses, , Greek letters completion, Completion yuuji@392: @section Inserting parentheses yuuji@392: yuuji@392: Typing opening parenthesis, one of @code{(}, @code{@{ and @code{[}}, yuuji@392: automatically inserts the closing one. If a opening bracket is typed yuuji@392: after @code{\}, @code{\]} is automatically inserted with computed yuuji@392: indentation. If you stop automatic insertion, type @kbd{C-q} before yuuji@392: opening parenthesis. yuuji@392: yuuji@49: @node Local dictionaries, Commenting out, Completion, Top yuuji@49: @comment node-name, next, previous, up yuuji@49: @chapter Local dictionaries yuuji@49: @cindex local dictionaries yuuji@49: @cindex nervous users yuuji@49: yuuji@49: Tables for completion consist of three dictionaries; `standard yuuji@49: dictionary' built in @file{yatex.el}, `user dictionary' for your common yuuji@49: private commands, and `local dictionary' that is effective in a certain yuuji@49: directory. yuuji@49: yuuji@49: When you input the command unknown to YaTeX at a completion in the yuuji@49: minibuffer, YaTeX asks you with the following prompt; yuuji@49: yuuji@49: @example yuuji@73: `foo' is not in table. Register into: U)serDic L)ocalDic N)one D)iscard yuuji@49: @end example yuuji@49: yuuji@265: @noindent yuuji@51: In this menu, typing @kbd{u} updates your `user dictionary', @kbd{l} yuuji@51: updates your local dictionary, @kbd{n} updates only on-memory dictionary yuuji@51: which go through only current Emacs session, and @kbd{d} updates no yuuji@51: dictionary and throws the new word away. yuuji@49: yuuji@49: If you find this switching feature meaningless and bothersome, put the yuuji@49: next expression into your @file{~/.emacs} yuuji@49: yuuji@49: @lisp yuuji@49: (setq YaTeX-nervous nil) yuuji@49: @end lisp yuuji@49: yuuji@49: @node Commenting out, Cursor jump, Local dictionaries, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Commenting out yuuji@20: @cindex commenting out yuuji@20: @cindex prefix > yuuji@20: @cindex prefix < yuuji@20: @cindex prefix , yuuji@20: @cindex prefix . yuuji@20: yuuji@20: You may want to comment out some region. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] > yuuji@46: @dots{} comment out region by % yuuji@20: @item [prefix] < yuuji@46: @dots{} uncomment region yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: cause an operation to the region between point and mark. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] . yuuji@46: @dots{} comment out current paragraph yuuji@20: @item [prefix] , yuuji@46: @dots{} uncomment current paragraph yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: comments or uncomments the paragraph where the cursor belongs. yuuji@20: This `paragraph' means the region marked by the function yuuji@20: mark-paragraph, bound to @kbd{ESC h} by default. It is NOT yuuji@20: predictable what will happen when you continuously comment out yuuji@20: some paragraph many times. yuuji@20: yuuji@20: You can also comment out an environment between @code{\begin} and yuuji@20: @code{\end}, or a @code{\begin}-\@code{\end} pair themselves, by making the yuuji@20: following key strokes on the line where @code{\begin@{@}} or yuuji@20: @code{\end@{@}} exists. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] > yuuji@46: @dots{} comment out from \begin to \@code{end} yuuji@20: @item [prefix] < yuuji@46: @dots{} uncomment from \begin to \@code{end} yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: comment whole the contents of environment. Moreover, yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] . yuuji@46: @dots{} comment out \begin and \@code{end} yuuji@20: @item [prefix] , yuuji@46: @dots{} uncomment \begin and \@code{end} yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: (un)comments out only environment declaration: @code{\begin@{@}} and yuuji@20: @code{\end@{@}}. NOTE that even if you intend to comment out some region, yuuji@20: invoking @kbd{[prefix] >} on the @code{\begin},@code{\end} line decides to yuuji@20: work in `commenting out from @code{\begin} to @code{\end}' mode. yuuji@20: yuuji@20: yuuji@20: @node Cursor jump, Changing and Deleting, Commenting out, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Cursor jump yuuji@20: @cindex cursor jump yuuji@20: @cindex prefix g yuuji@20: yuuji@68: yuuji@68: @menu yuuji@471: * Jump to corresponding object:: yuuji@471: * Invoking image processor:: yuuji@471: * Jump to main file:: yuuji@471: * Jumping around the environment:: yuuji@471: * Jumping to last completion position:: yuuji@68: @end menu yuuji@68: yuuji@68: @node Jump to corresponding object, Invoking image processor, Cursor jump, Cursor jump yuuji@68: @comment node-name, next, previous, up yuuji@51: @section Jump to corresponding object yuuji@51: yuuji@48: Typing yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] g yuuji@46: @dots{} go to corresponding object yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@48: in a certain place move the cursor to the place corresponding to the yuuji@48: La@TeX{} command of last place. YaTeX recognize the followings as pairs yuuji@48: that have relation each other. yuuji@48: yuuji@49: @itemize @bullet yuuji@48: @item @code{\begin@{@}} <-> @code{\end@{@}} yuuji@48: @item @code{%#BEGIN} <-> @code{%#END} yuuji@59: @item On the image-including line -> corresponding viewer or drawing tool yuuji@48: @item @code{\label@{@}} <-> @code{\ref@{@}} yuuji@48: @item @code{\include(\input)} -> included file yuuji@48: @item @code{\bibitem@{@}} <-> @code{\cite@{@}} yuuji@49: @end itemize yuuji@48: yuuji@49: On a @code{\begin},@code{\end} line, typing @kbd{[prefix] g} moves the yuuji@49: cursor to the corresponding @code{\end},@code{\begin} line, if its partner yuuji@51: really exists. The behavior on the line @code{%#BEGIN} and @code{%#END} yuuji@49: are the same. Note that if the correspondent of @code{label/ref} or yuuji@51: @code{cite/bibitem} exists in another file, that file have to be opened to yuuji@49: make a round trip between references by @kbd{[prefix] g}. yuuji@20: yuuji@20: If you type @code{[prefix] g} on the line of @code{\include@{chap1@}}, yuuji@48: typically in the main text, YaTeX switches buffer to @file{chap1.tex}. yuuji@51: yuuji@51: @table @kbd yuuji@51: @item [prefix] 4 g yuuji@51: @dots{} go to corresponding object in other window yuuji@51: @end table yuuji@51: yuuji@51: @noindent yuuji@51: do the same job as @kbd{[prefix] g} except it's done in other window. yuuji@51: Note that this function doesn't work on @code{begin/end}, yuuji@51: @code{%#BEGIN/%#END} pairs because it is meaningless. yuuji@51: yuuji@68: @node Invoking image processor, Jump to main file, Jump to corresponding object, Cursor jump yuuji@68: @comment node-name, next, previous, up yuuji@68: @section Invoking image processor yuuji@59: @cindex{Drawing tool invocation} yuuji@59: yuuji@59: `image-including line' described above means such lines as yuuji@59: @code{\epsfile@{file=foo.ps@}}. If you type @kbd{[prefix] g} on that yuuji@59: line, YaTeX automatically searches source of `foo.ps' and invokes image yuuji@59: viewer or drawing tool correspoinding to it. For example; if you draw yuuji@59: an image foo.obj with Tgif and enclose its product named foo.eps by yuuji@59: @code{\epsfile} command. Typing @kbd{[prefix] g} on @code{\epsfile} line yuuji@59: make YaTeX invoke @code{tgif foo.obj}. How a processor is choosen is as yuuji@59: follows. yuuji@59: yuuji@59: @enumerate yuuji@59: @item yuuji@59: If there is an expression matching with one of the pattern yuuji@59: defined in @code{YaTeX-processed-file-regexp-alist}, extract file name yuuji@59: from regexp group surrounded by \\(\\). (Which group corresponds is yuuji@59: written in the cdr part of each list.) If no matches were found, do yuuji@59: nothing. yuuji@59: @item yuuji@59: If there is a pattern as `%PROCESSOR' which is defined in the variable yuuji@59: @code{YaTeX-file-processor-alist}, call that processor giving the yuuji@59: file name with corresponding extension. yuuji@59: @item yuuji@59: If not, check the existence of each file which is supplied the yuuji@59: extension in the cdr part of each list of yuuji@59: @code{YaTeX-file-processor-alist}. If any, call the corresponding yuuji@59: image viewer or drawing tool. yuuji@59: @end enumerate yuuji@59: yuuji@68: @node Jump to main file, Jumping around the environment, Invoking image processor, Cursor jump yuuji@68: @comment node-name, next, previous, up yuuji@51: @section Jump to main file yuuji@51: yuuji@51: Typing yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] ^ yuuji@46: @dots{} visit main file yuuji@20: @item [prefix] 4^ yuuji@46: @dots{} visit main file in other buffer yuuji@20: @end table yuuji@20: @cindex prefix ^ yuuji@20: @cindex prefix 4 ^ yuuji@20: yuuji@20: in a sub text switch the buffer to the main text specified by yuuji@20: @code{%#!} notation. yuuji@20: yuuji@68: @node Jumping around the environment, Jumping to last completion position, Jump to main file, Cursor jump yuuji@68: @comment node-name, next, previous, up yuuji@68: @section Jumping around the environment yuuji@51: yuuji@20: And these are the functions which work on the current La@TeX{} yuuji@20: environment: yuuji@20: yuuji@20: @table @kbd yuuji@20: @item M-C-a yuuji@46: @dots{} beginning of environment yuuji@20: @item M-C-e yuuji@46: @dots{} @code{end} of environment yuuji@20: @item M-C-@@ yuuji@46: @dots{} mark environment yuuji@20: @end table yuuji@20: @cindex M-C-a yuuji@20: @cindex M-C-e yuuji@20: @cindex M-C-@@ yuuji@20: yuuji@68: @node Jumping to last completion position, , Jumping around the environment, Cursor jump yuuji@68: @comment node-name, next, previous, up yuuji@68: @section Jumping to last completion position yuuji@68: yuuji@68: YaTeX always memorize the position of completion into register @code{3}. yuuji@68: So every time you make a trip to any other part of text other than you are yuuji@68: writing, you can return to the editing paragraph by calling yuuji@68: register-to-point with argument YaTeX-current-position-register, which is yuuji@68: achieved by typing @kbd{C-x j 3}(by default). yuuji@68: yuuji@51: @node Changing and Deleting, Filling, Cursor jump, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Changing and Deleting yuuji@20: yuuji@20: These functions are for change or deletion of La@TeX{} commands yuuji@20: already entered. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] c yuuji@46: @dots{} change La@TeX{} command yuuji@20: @item [prefix] k yuuji@46: @dots{} kill La@TeX{} command yuuji@20: @end table yuuji@20: @cindex prefix c yuuji@20: @cindex prefix k yuuji@20: yuuji@49: @menu yuuji@471: * Changing LaTeX commands:: yuuji@471: * Killing LaTeX commands:: yuuji@49: @end menu yuuji@49: yuuji@68: @node Changing LaTeX commands, Killing LaTeX commands, Changing and Deleting, Changing and Deleting yuuji@49: @comment node-name, next, previous, up yuuji@49: @section Changing La@TeX{} commands yuuji@49: yuuji@49: @kbd{[prefix] c} can change the various (La)@TeX{} commands. This can yuuji@49: change the followings. yuuji@49: @itemize @bullet yuuji@49: @item Environment names yuuji@49: @item Section-type commands yuuji@49: @item Argument of section-type commands yuuji@49: @item Optional parameters (enclosed by []) of section-type commands yuuji@49: @item Font/size designators yuuji@52: @item Math-mode's maketitle-type commands that can be inputted with yuuji@52: image completion yuuji@49: @end itemize yuuji@49: yuuji@49: Typing @kbd{[prefix] c} on one of above objects you want to change yuuji@49: brings a suitable reading function sometimes with completion. yuuji@49: Note: If you want to change the argument of section-type command that yuuji@49: contains other La@TeX{} commands, type @kbd{[prefix] c} either of yuuji@49: surrounding braces of the argument in order to make YaTeX ignore the yuuji@49: internal La@TeX{} sequences as an object of changing. Anyway, it is yuuji@49: very difficult to know which argument position the cursor belongs because yuuji@49: the La@TeX{} commands can be nested and braces can freely emerge. So keep yuuji@49: it mind to put the cursor on a brace when you are thinking of changing a yuuji@49: complicated argument. yuuji@49: yuuji@68: @node Killing LaTeX commands, , Changing LaTeX commands, Changing and Deleting yuuji@49: @comment node-name, next, previous, up yuuji@49: @section Killing La@TeX{} commands yuuji@49: @cindex Killing La@TeX{} commands yuuji@49: yuuji@49: @kbd{[prefix] k} kills the La@TeX{} commands sometimes with their yuuji@49: arguments. Following table illustrates the correspondence of the invoking yuuji@49: position and what is killed. yuuji@20: yuuji@20: @example yuuji@20: [Invoking position] [action] yuuji@49: \begin, \end line kill \begin,\end pairs yuuji@49: %#BEGIN, %#END line kill %#BEGIN,%#END pairs yuuji@20: on a Section-type command kill section-type command yuuji@20: on a parenthesis kill parentheses yuuji@20: @end example yuuji@20: yuuji@49: Note that when killing @code{\begin, \end} or @code{%#BEGIN, %#END} pair, yuuji@49: the lines @code{\begin, \end} or @code{%#BEGIN, %#END} exist will be yuuji@49: killed entirely. So take care not to create any line that contains more yuuji@49: than one @code{\begin} or so. yuuji@49: yuuji@20: While all operations above are to kill `containers' which surround some yuuji@20: text, universal argument (@kbd{C-u}) for these commands kills not only yuuji@20: `containers' but also `contents' of them. See below as a sample. yuuji@20: yuuji@20: @example yuuji@46: Original text: [prefix] k C-u [prefix] k yuuji@46: Main \footnote@{note@} here. Main note here. Main here. yuuji@20: ~(cursor) yuuji@20: @end example yuuji@20: yuuji@58: @node Filling, Updation of includeonly, Changing and Deleting, Top yuuji@20: @comment node-name, next, previous, up yuuji@51: @chapter Filling yuuji@51: @cindex filling yuuji@51: yuuji@51: @section Filling an item yuuji@20: @cindex filling an item yuuji@20: @cindex prefix i yuuji@20: yuuji@51: To fill a term (descriptive sentences) of @code{\item}, type yuuji@20: yuuji@58: @c @table @kbd yuuji@58: @c @item [prefix] i yuuji@58: @c @dots{} fill item yuuji@58: @c @end table yuuji@20: @table @kbd yuuji@58: @item M-q yuuji@46: @dots{} fill item yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: on that item. yuuji@20: yuuji@20: YaTeX uses the value of the variable @code{YaTeX-item-regexp} as the yuuji@20: regular expression to search item header in itemize environment. yuuji@51: If you make a newcommand to itemize terms(e.g. @code{\underlineitem}), put yuuji@20: yuuji@20: @lisp yuuji@46: (setq YaTeX-item-regexp yuuji@58: "\\(\\\\\\(sub\\)*item\\)\\|\\(\\\\underlineitem\\)") yuuji@20: @end lisp yuuji@20: @cindex YaTeX-item-regexp yuuji@20: yuuji@20: in your @file{~/.emacs}. If you are not familiar with regular expression yuuji@20: for Emacs-Lisp, name a newcommand for `itemize' beginning with yuuji@20: @code{\item} such as @code{\itembf}, not @code{\bfitem}. yuuji@20: yuuji@58: This function reformats the @code{\item} into `hang-indented' style. yuuji@58: For example: yuuji@51: yuuji@51: @example yuuji@58: itemize, enumerate environment: yuuji@51: > yuuji@51: >\item[foo] `foo' is the typical word for describing an yuuji@51: > arbitrarily written.... yuuji@58: description environment: yuuji@58: > \item[bar] When the word `for' is used as an arbitrarily yuuji@58: > word, `bar' is bound to follow it. yuuji@51: @end example yuuji@51: yuuji@52: Note that the indent depth of an @code{\item} word and its descriptive yuuji@51: paragraph are the same in latter case. If you want to use different yuuji@51: depth, invoke fill-paragraph at the beginning of non-whitespace yuuji@51: character(see below). yuuji@51: yuuji@51: @section Filling paragraph yuuji@51: @cindex Filling paragraph yuuji@51: @cindex M-q yuuji@51: yuuji@51: Fill-paragraph is little bit adapted for La@TeX{} sources. It retains from yuuji@51: filling in certain environments where formatting leads to a disaster such yuuji@51: as verbatim, tabular, or so. And it protects @code{\verb} expressions yuuji@51: from being folded (The variable @code{YaTeX-verb-regexp} controls this). yuuji@51: Besides, putting cursor on the first occurrence of non-whitespace yuuji@51: character on a line changes the fill-prefix temporarily to the depth of yuuji@51: the line. yuuji@51: yuuji@59: @node Updation of includeonly, What column, Filling, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Updation of @code{\includeonly} yuuji@20: @cindex includeonly yuuji@20: yuuji@20: When you edit splitting source texts, the notation yuuji@20: yuuji@20: @example yuuji@46: \includeonly@{CurrentEditingFileName@} yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: in the main file reduces the time of typesetting. If you want yuuji@20: to hack other file a little however, you have to rewrite it to yuuji@20: yuuji@20: @example yuuji@46: \includeonly@{OtherFileNameYouWantToFix@} yuuji@20: @end example yuuji@20: yuuji@20: @noindent yuuji@20: in the main file. YaTeX automatically detects that the current yuuji@20: edited text is not in includeonly list and prompts you yuuji@20: yuuji@20: @example yuuji@46: A)dd R)eplace %)comment? yuuji@20: @end example yuuji@20: yuuji@20: in the minibuffer. Type @kbd{a} if you want to add the current file name yuuji@20: to @code{\includeonly} list, @kbd{r} to replace \@code{includeonly} list yuuji@79: with the current file, and type @kbd{%} to comment out the yuuji@20: @code{\includeonly} line. yuuji@20: yuuji@59: @node What column, Intelligent newline, Updation of includeonly, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter What column? yuuji@20: @cindex what column yuuji@20: @cindex complex tabular yuuji@20: @cindex prefix & yuuji@20: yuuji@20: We are often get tired of finding the corresponding column in yuuji@20: large tabulars. For example, yuuji@20: yuuji@20: @example yuuji@20: \begin@{tabular@}@{|c|c|c|c|c|c|c|c|@}\hline yuuji@20: Name&Position&Post No.&Addr.&Phone No.&FAX No.& yuuji@20: Home Addr.&Home Phone\\ \hline yuuji@20: Thunder Bird & 6 & 223 & LA & xxx-yyy & yuuji@20: zzz-www & Japan & 9876-54321 \\ yuuji@20: & 2 & \multicolumn@{2@}@{c|@}@{Unknown@} yuuji@20: &&&(???) yuuji@20: \\ \hline yuuji@20: \end@{tabular@} yuuji@20: @end example yuuji@20: yuuji@20: Suppose you have the cursor located at @code{(???)} mark, can you tell yuuji@20: which column it is belonging at once? Maybe no. In such case, yuuji@20: type yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] & yuuji@46: @dots{} What column yuuji@20: @end table yuuji@20: yuuji@20: @noindent yuuji@20: in that position. YaTeX tells you the column header of the yuuji@20: current field. Since YaTeX assumes the first line of tabular yuuji@20: environment as a row of column headers, you can create a row of yuuji@20: virtual column headers by putting them in the first line and yuuji@20: commenting that line with @code{%}. yuuji@20: yuuji@79: @node Intelligent newline, Usepackage checker, What column, Top yuuji@28: @comment node-name, next, previous, up yuuji@28: @chapter Intelligent newline yuuji@28: @cindex Intelligent newline yuuji@28: @cindex ESC RET yuuji@28: @cindex M-C-m yuuji@28: yuuji@58: At the end of begin-type completion of tabular[*], array, itemize, yuuji@58: enumerate or tabbing environment, or typing yuuji@28: yuuji@28: @table @kbd yuuji@28: @item ESC RET yuuji@46: @dots{} Intelligent newline yuuji@28: @end table yuuji@28: yuuji@265: @noindent yuuji@58: in these environments inserts the contents corresponding to the current yuuji@58: environment in the next line. (At the begin-type completion, this yuuji@58: contents can be removed by `undo'.) In @code{tabular} environment, for yuuji@58: example, @kbd{ESC RET} inserts the certain number of @code{&} and trailing yuuji@58: @code{\\}, and @code{\hline} if other @code{\hline} is found in backward. yuuji@58: Here are the list of contents vs. environments. yuuji@28: yuuji@28: @itemize yuuji@28: @item @code{tabular}, @code{tabular*}, @code{array} yuuji@28: yuuji@46: Corresponding number of @code{&} and @code{\\}. yuuji@46: And @code{\hline} if needed. yuuji@28: yuuji@28: @item @code{tabbing} yuuji@28: yuuji@46: The same number of @code{\>} as @code{\=} in the first line. yuuji@28: yuuji@28: @item @code{itemize}, @code{enumerate}, @code{description}, @code{list} yuuji@28: yuuji@46: @code{\item} or @code{item[]}. yuuji@28: @end itemize yuuji@28: yuuji@28: Note that since this function works seeing the contents of the first yuuji@28: line, please call this after the second line if possible. yuuji@28: yuuji@28: If you want to apply these trick to other environments, @code{foo} yuuji@28: environment for example, define the function named yuuji@28: @code{YaTeX-intelligent-newline-foo} to insert corresponding contents. yuuji@28: That function will be called at the beginning of the next line after the yuuji@28: newline is inserted to the current line. Since the function yuuji@28: @code{YaTeX-indent-line} is designed to indent the current line properly, yuuji@28: calling this function before your code to insert certain contents must be yuuji@28: useful. See the definition of the function yuuji@28: @code{YaTeX-intelligent-newline-itemize} as an example. yuuji@28: yuuji@79: @node Usepackage checker, Online help, Intelligent newline, Top yuuji@79: @comment node-name, next, previous, up yuuji@79: @chapter Usepackage checker yuuji@79: @cindex usepackage yuuji@79: yuuji@79: When you input begint-type, section-type, maketitle-type macros with yuuji@79: completion, and it requires some LaTeX2e package, YaTeX examines yuuji@79: the existence of correct @code{\usepackage}. If not, YaTeX inserts yuuji@79: the @code{\usepackage@{@}} declaration corresponding to input macro. yuuji@79: yuuji@79: To activate the package completion for your favarite package, yuuji@79: set the variable @code{YaTeX-package-alist-private} correctly. yuuji@79: Please refere the value of @code{YaTeX-package-alist-default} as an yuuji@79: example. yuuji@79: yuuji@79: @node Online help, Browsing file hierarchy, Usepackage checker, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Online help yuuji@20: @cindex online help yuuji@20: @cindex prefix ? yuuji@20: @cindex prefix / yuuji@20: @cindex apropos yuuji@20: @cindex keyword search yuuji@20: yuuji@20: YaTeX provides you the online help with popular La@TeX{} commands. yuuji@20: yuuji@20: Here are the key strokes for the online help. yuuji@20: yuuji@20: @table @kbd yuuji@20: @item [prefix] ? yuuji@46: @dots{} Online help yuuji@20: @item [prefix] / yuuji@46: @dots{} Online apropos yuuji@20: @end table yuuji@20: yuuji@20: @section Online help yuuji@20: yuuji@20: `Online help' shows the documentation for the popular La@TeX{} yuuji@20: commands(defaults to the commands on the cursor) in the next buffer. yuuji@20: There are two help file, `global help' and `private help'. The former yuuji@20: file contains the descriptions on the standard La@TeX{} command and is yuuji@20: specified its name by variable @code{YaTeX-help-file}. Usually, the yuuji@20: global help file should be located in public space (@code{$EMACSEXECPATH} yuuji@20: by default) and should be world writable so that anyone can update it to yuuji@20: enrich its contents. The latter file contains descriptions on yuuji@20: non-standard or personal command definitions and is specified by yuuji@20: @code{YaTeX-help-file-private}. This file should be put into private yuuji@20: directory. yuuji@20: yuuji@20: @section Online apropos yuuji@20: yuuji@20: `Online apropos' is an equivalent of GNU Emacs's apropos. It yuuji@20: shows all the documentations that contains the keyword entered by yuuji@20: the user. yuuji@20: yuuji@20: @section When no descriptions are found... yuuji@20: yuuji@20: If there is no description on a command in help files, YaTeX yuuji@20: requires you to write a description on that command. If you are yuuji@20: willing to do, determine which help file to add and write the yuuji@20: description on it referring your manual of (La)TeX. Please send yuuji@20: me your additional descriptions if you describe the help on some yuuji@20: standard commands. I might want to include it in the next yuuji@20: distribution. yuuji@20: yuuji@53: @node Browsing file hierarchy, Cooperation with other packages, Online help, Top yuuji@53: @comment node-name, next, previous, up yuuji@53: @chapter Browsing file hierarchy yuuji@53: @cindex hierarchy yuuji@53: @cindex browsing yuuji@53: yuuji@53: When you are editing multi-file source, typing yuuji@53: yuuji@53: @table @kbd yuuji@53: @item [prefix] d yuuji@53: @dots{} browse file hierarchy yuuji@53: @end table yuuji@53: yuuji@53: @noindent yuuji@53: asks you the parent-most file (which may be defaulted) and displays the yuuji@53: documentation hierarchy in the next window. In this buffer, the following yuuji@53: commands are available. yuuji@53: yuuji@53: @table @kbd yuuji@53: @item n yuuji@53: @dots{} move to the next line and show its contents yuuji@53: @item p yuuji@53: @dots{} move to the previous line and show its contents yuuji@53: @item N yuuji@53: @dots{} move to the next file in the same inclusion level yuuji@53: @item P yuuji@53: @dots{} move to the previous file in the same inclusion level yuuji@53: @item j yuuji@53: @dots{} move to the next line yuuji@53: @item k yuuji@53: @dots{} move to the previous line yuuji@53: @item u yuuji@53: @dots{} move to the parent file yuuji@53: @item . yuuji@53: @dots{} show the current files contents in the next window yuuji@53: @item SPC yuuji@53: @dots{} scroll up the current file window yuuji@53: @item DEL, b yuuji@53: @dots{} scroll down the current file window yuuji@53: @item < yuuji@53: @dots{} show the beginning of the current file yuuji@53: @item > yuuji@53: @dots{} show the end of the current file yuuji@53: @item > yuuji@53: @dots{} return to the previous postion after @kbd{<} or @kbd{>} yuuji@53: @item RET, g yuuji@53: @dots{} open the current file in the next window yuuji@53: @item mouse-2 yuuji@53: @dots{} same as RET(available only with window system) yuuji@53: @item o yuuji@53: @dots{} other window yuuji@53: @item 1 yuuji@53: @dots{} delete other windows yuuji@53: @item - yuuji@53: @dots{} shrink hierarchy buffer window yuuji@53: @item + yuuji@53: @dots{} enlarge hierarchy buffer window yuuji@53: @item ? yuuji@53: @dots{} describe mode yuuji@53: @item q yuuji@53: @dots{} quit yuuji@53: @end table yuuji@53: yuuji@53: Note that operations on the file contents in the next window do not work yuuji@53: correctly when you close the corresponding file. yuuji@53: yuuji@53: @node Cooperation with other packages, Customizations, Browsing file hierarchy, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Cooperation with other packages yuuji@20: yuuji@20: YaTeX works better with other brilliant packages. yuuji@20: yuuji@20: @section gmhist yuuji@20: @cindex gmhist yuuji@20: @cindex command history yuuji@20: @cindex minibuffer history yuuji@20: yuuji@20: When you are loading @file{gmhist.el} and @file{gmhist-mh.el}, you can yuuji@20: use independent command history list at the prompt of preview command yuuji@20: (@kbd{[prefix] tp}) and print command (@kbd{[prefix] tl}). On each yuuji@20: prompt, you can enter the previous command line string repeatedly by yuuji@20: typing @kbd{M-p}. yuuji@20: yuuji@20: @section min-out yuuji@20: @cindex min-out yuuji@20: yuuji@20: @file{min-out}, the outline minor mode, can be used in yatex-mode yuuji@20: buffers. If you want to use it with YaTeX, please refer the yuuji@20: file @file{yatexm-o.el} as an example. yuuji@20: yuuji@20: @node Customizations, Etcetera, Cooperation with other packages, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Customizations yuuji@20: @cindex customizations yuuji@20: yuuji@20: You can customize YaTeX by setting Emacs-Lisp variables and by making yuuji@20: add-in functions. yuuji@20: yuuji@20: @menu yuuji@471: * Lisp variables:: yuuji@471: * Add-in functions:: yuuji@471: * Add-in generator:: yuuji@20: @end menu yuuji@20: yuuji@33: @node Lisp variables, Add-in functions, Customizations, Customizations yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Lisp variables yuuji@20: @cindex customizable variables yuuji@20: yuuji@60: You can change the key assignments or make completion more comfortable yuuji@60: by setting the values of various variables which control the movement of yuuji@60: yatex-mode. yuuji@20: yuuji@20: For example, if you want to change the prefix key stroke from @kbd{C-c} yuuji@20: to any other sequence, set YaTeX-prefix to whatever you want to use. If yuuji@20: you don't want to use the key sequence @kbd{C-c letter} which is assumed yuuji@20: to be the user reserved sequence in Emacs world, set yuuji@20: @code{YaTeX-inhibit-prefix-letter} to @code{t}, and all of the default key yuuji@20: bind of @kbd{C-c letter} will turn to the corresponding @kbd{C-c C-letter} yuuji@20: (but the region based completions that is invoked with @kbd{C-c yuuji@20: Capital-letter} remain valid, if you want to disable those bindings, set yuuji@20: that variable to 1 instead of @code{t}). yuuji@20: yuuji@20: @menu yuuji@471: * All customizable variables:: yuuji@471: * Sample definitions:: yuuji@471: * Hook variables:: yuuji@471: * Hook file:: yuuji@20: @end menu yuuji@20: yuuji@33: @node All customizable variables, Sample definitions, Lisp variables, Lisp variables yuuji@20: @comment node-name, next, previous, up yuuji@20: @subsection All customizable variables yuuji@20: @cindex all customizable variables yuuji@20: yuuji@20: Here are the customizable variables of yatex-mode. Each value setq-ed yuuji@20: in @file{~/.emacs} is preferred and that of defined in @file{yatex.el} is yuuji@49: neglected. Parenthesized contents stands for the default value. When you yuuji@49: are to change some of these variables, see more detailed documentation of yuuji@49: the variable by @kbd{M-x describe-variable}. yuuji@20: yuuji@79: @defvar YaTeX-japan yuuji@79: Set this nil to produce all messages in English yuuji@79: (@code{Depends on Japanese feature of Emacs}) yuuji@79: @end defvar yuuji@79: yuuji@79: @defvar YaTeX-kanji-code yuuji@79: Default buffer-file-coding-system for YaTeX modes' buffer. yuuji@79: Set this 0 to no language conversion. Nil to preserve original yuuji@118: coding-system. 1=Shift JIS, 2=JIS, 3=EUC, 4=UTF-8 (@code{1 or 2}) yuuji@79: @end defvar yuuji@79: yuuji@46: @defvar YaTeX-prefix yuuji@60: Prefix key stroke (@kbd{C-c}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-inhibit-prefix-letter yuuji@60: Change key stroke from @kbd{C-c letter} to @kbd{C-c C-letter} (@code{nil}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-fill-prefix yuuji@60: Fill-prefix used in yatex-mode (@code{nil}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-user-completion-table yuuji@60: Name of user dictionary where learned completion table will be stored. yuuji@60: (@code{"~/.yatexrc"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar tex-command yuuji@60: La@TeX{} typesetter command (@code{"latex"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar dvi2-command yuuji@60: Preview command (@code{"xdvi -geo +0+0 -s 4"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar dviprint-command-format yuuji@60: Command format to print dvi file (@code{"dvi2ps %f %t %s | lpr"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar dviprint-from-format yuuji@60: Start page format of above %f. %b will turn to start page (@code{"-f %b"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar dviprint-to-format yuuji@60: End page format of above %t. %e will turn to @code{end} page (@code{"-t %e"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar makeindex-command yuuji@60: Default makeindex command (@code{"makeindex"} (@code{"makeind"} on MS-DOS)) yuuji@60: @end defvar yuuji@60: yuuji@126: @defvar YaTeX-dvipdf-command yuuji@126: Default command name to convert .dvi to PDF (@code{"dvipdfmx"}) yuuji@126: @end defvar yuuji@126: yuuji@379: @defvar YaTeX-on-the-fly-preview-interval yuuji@379: Interval time in seconds of idle to trigger on-the-fly preview of yuuji@379: environment by @kbd{[prefix] t e}(0.9). yuuji@379: @code{Nil} disables on-the-fly preview. yuuji@379: @end defvar yuuji@379: yuuji@392: @defvar YaTeX-on-the-fly-math-preview-engine yuuji@392: Function symbol to use on-the-fly preview of MATH environment yuuji@392: started by @kbd{[prefix] t e} (@code{'YaTeX-typeset-environment-by-lmp} yuuji@392: which calls latex-math-preview-expression function if latex-math-preview yuuji@392: is available, otherwise @code{'YaTeX-typeset-environment-by-builtin} which yuuji@392: alls built-in function). yuuji@392: yuuji@392: @code{Nil} disables on-the-fly preview. yuuji@392: @end defvar yuuji@392: yuuji@336: @defvar YaTeX-cmd-gimp yuuji@336: Command name of GIMP (code{"gimp"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-tgif yuuji@336: Command name of tgif (code{"tgif"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-inkscape yuuji@336: Command name of Inkscape (code{"inkscape"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-dia yuuji@336: Command name of Dia (code{"dia"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-ooo yuuji@336: Command name of OpenOffice.org/LibreOffice (code{"soffice"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-gs yuuji@336: Command name of Ghostscript (code{"gs"}) yuuji@336: @end defvar yuuji@363: @defvar YaTeX-cmd-dvips yuuji@363: Command name of dvips (code{"dvips"}) yuuji@363: @end defvar yuuji@363: @defvar YaTeX-cmd-displayline yuuji@363: Command name of displayline yuuji@363: (code{"/Applications/Skim.app/Contents/SharedSupport/displayline"}) yuuji@363: @end defvar yuuji@336: @defvar YaTeX-cmd-edit-ps yuuji@336: Command name for editing PostScript files(Value of code{"YaTeX-cmd-gimp"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-edit-pdf yuuji@336: Command name for editing PDF files(Value of code{"YaTeX-cmd-ooo"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-edit-ai yuuji@336: Command name for editing `.ai' files(Value of code{"YaTeX-cmd-inkscape"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-edit-svg yuuji@336: Command name for editing SVG files(Value of code{"YaTeX-cmd-inkscape"}) yuuji@336: @end defvar yuuji@336: @defvar YaTeX-cmd-edit-images yuuji@336: Command name for editing image files(Value of code{"YaTeX-cmd-gimp"}) yuuji@336: @end defvar yuuji@336: yuuji@60: @defvar YaTeX-need-nonstop yuuji@60: Put @code{\nonstopmode@{@}} or not (@code{nil}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar latex-warning-regexp yuuji@60: Regular expression of warning message latex command puts out yuuji@60: (@code{"line.* [0-9]*"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar latex-error-regexp yuuji@60: Regular expression of error message (@code{"l\\.[1-9][0-9]*"}) yuuji@60: @end defvar yuuji@60: yuuji@60: @defvar latex-dos-emergency-message yuuji@60: Message latex command running on DOS puts at abort (@code{"Emergency stop"}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-item-regexp yuuji@60: Regular expression of item command (@code{"\\\\item"}) yuuji@46: @end defvar yuuji@20: yuuji@51: @defvar YaTeX-verb-regexp yuuji@60: Regexp of verb family. Omit \\\\. (@code{"verb\\*?\\|path"}) yuuji@51: @end defvar yuuji@51: yuuji@60: @defvar YaTeX-nervous yuuji@60: T for using local dictionary (@code{t}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-sectioning-regexp yuuji@60: Regexp of La@TeX{} sectioning command yuuji@60: (@code{"\\(part\\|chapter\\*?\\|\\(sub\\)*\\(section\\|paragraph\\)\\*?\\)\\b"}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-fill-inhibit-environments yuuji@60: Inhibit fill in these environments yuuji@60: (@code{'("tabular" "tabular*" "array" "picture" "eqnarray" "eqnarray*" "equation" "math" "displaymath" "verbatim" "verbatim*")}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-uncomment-once yuuji@60: T for deleting all preceding @code{%} (@code{nil}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-close-paren-always yuuji@60: T for always close all parenthesis automatically, @code{nil} for only eol yuuji@60: (@code{t}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-auto-math-mode yuuji@60: Switch math-mode automatically (@code{t}) yuuji@46: @end defvar yuuji@20: yuuji@51: @defvar YaTeX-math-key-list-private yuuji@60: User defined alist, math-mode-prefix vs completion alist yuuji@60: used in image completion (@code{nil}). See @file{yatexmth.el} yuuji@60: for the information about how to define a completion alist. yuuji@51: @end defvar yuuji@51: yuuji@46: @defvar YaTeX-default-pop-window-height yuuji@60: Initial height of typesetting buffer when one-window. yuuji@60: Number for the lines of the buffer, numerical string for yuuji@60: the percentage of the screen-height. @code{nil} for half height (10) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-help-file yuuji@73: Global online help file name (@file{$doc-directory/../../site-lisp/YATEXHLP.eng}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-help-file-private yuuji@73: Private online help file name (@file{"~/YATEXHLP.eng"}) yuuji@46: @end defvar yuuji@20: yuuji@46: @defvar YaTeX-no-begend-shortcut yuuji@60: Disable [prefix] b ?? shortcut (@code{nil)} yuuji@46: @end defvar yuuji@20: yuuji@49: @defvar YaTeX-hilit-pattern-adjustment-private yuuji@49: List of the list that contain the regular expression and the symbol of yuuji@49: logical meaning of the string that matches the pattern. See also the yuuji@49: value from @code{(assq 'yatex-mode hilit-patterns-alist)} and the value of yuuji@49: @code{YaTeX-hilit-pattern-adjustment-default} (and even the document of yuuji@49: hilit19.el). yuuji@49: @end defvar yuuji@49: yuuji@49: @defvar YaTeX-sectioning-level yuuji@49: Alist of LaTeX's sectioning command vs its height. yuuji@49: @end defvar yuuji@49: yuuji@53: @defvar YaTeX-hierarchy-ignore-heading-regexp yuuji@53: @code{YaTeX-display-hierarchy} searches for sectioning command first, and yuuji@53: comment line secondary as a file headings. In latter case, ignore lines yuuji@53: that match with regular expression of this variable. Default value of yuuji@53: this variable is RCS header expressions and mode specifying line `-*- xxxx yuuji@53: -*'. yuuji@53: @end defvar yuuji@53: yuuji@54: @defvar YaTeX-skip-default-reader yuuji@54: Non-nil for this variable skips the default argument reader of yuuji@60: section-type command when add-in function for it is not defined yuuji@60: (@code{nil}) yuuji@54: @end defvar yuuji@54: yuuji@56: @defvar YaTeX-create-file-prefix-g yuuji@56: When typing @kbd{prefix g} on the @code{\include} line, yuuji@60: open the target file even if the file doesn't exist (@code{nil}) yuuji@56: @end defvar yuuji@56: yuuji@56: @defvar YaTeX-simple-messages yuuji@60: Simplyfy messages of various completions (@code{nil}) yuuji@56: @end defvar yuuji@56: yuuji@57: @defvar YaTeX-hilit-sectioning-face yuuji@57: When hilit19 and yatex19 is active, YaTeX colors the sectioning commands. yuuji@57: This variable specifies the foreground and background color of yuuji@57: @code{\part} macro. The default value is @code{'(yellow/dodgerblue yuuji@57: yellow/slateblue)}. The first element of this list is for the screen when yuuji@57: @code{hilit-background-mode} is @code{'light}, and the second element is yuuji@57: for @code{'dark}. You should specify both color as `forecolor/backcolor'. yuuji@57: @end defvar yuuji@57: yuuji@57: @defvar YaTeX-hilit-sectioning-attenuation-rate yuuji@57: When color mode, this variable specifies how much attenuate the color yuuji@60: density of @code{\subparagraph} compared with that of @code{\chapter} yuuji@60: (@code{'(15 40)}) See also @code{YaTeX-hilit-sectioning-face}. yuuji@57: @end defvar yuuji@56: yuuji@58: @defvar YaTeX-use-AMS-LaTeX yuuji@60: If you use AMS-LaTeX, set to @code{t} (@code{nil}) yuuji@58: @end defvar yuuji@56: yuuji@70: @defvar YaTeX-use-LaTeX2e yuuji@73: If you use LaTeX2e, set to @code{t} (@code{t}) yuuji@70: @end defvar yuuji@70: yuuji@65: @defvar YaTeX-template-file yuuji@65: File name which is automatically inserted at creation yuuji@65: (@code{~/work/template.tex}) yuuji@65: @end defvar yuuji@65: yuuji@72: @defvar YaTeX-search-file-from-top-directory yuuji@72: Non-nil means to search input-files from the directory where main file exists yuuji@72: (@code{t}) yuuji@72: @end defvar yuuji@72: yuuji@72: @defvar YaTeX-use-font-lock yuuji@72: Use font-lock to fontify buffer or not (@code{(featurep 'font-lock)} yuuji@72: @end defvar yuuji@72: yuuji@72: @defvar YaTeX-use-hilit19 yuuji@72: Use hilit19 to highlight buffer or not (@code{(featurep 'hilit19)} yuuji@72: @end defvar yuuji@72: yuuji@72: @defvar YaTeX-use-italic-bold yuuji@72: YaTeX tries to search italic, bold fontsets or not yuuji@72: (@code{t} if Emacs-20 or later). This variable is effective only when yuuji@72: font-lock is used. yuuji@72: (@code{(featurep 'hilit19)} yuuji@72: @end defvar yuuji@72: yuuji@79: @defvar YaTeX-singlecmd-suffix yuuji@79: Suffix which is always inserted after maketitle-type macros. yuuji@265: @code{"@{@}"} is recommended. yuuji@79: @end defvar yuuji@79: yuuji@79: @defvar YaTeX-package-alist-private yuuji@79: Alist of LaTeX2e-package name vs. lists of macros in it. yuuji@79: Set this alist properly and YaTeX automatically check the declaratiion of yuuji@79: `usepackage' for corresponding macro, when you input that macro with yuuji@79: completion. If required `usepackage' is not found, YaTeX also yuuji@79: automatically inserts `\usepackage'. Alist is as follows; yuuji@79: @lisp yuuji@79: '((PackageName1 yuuji@79: (completionType ListOfMacro) yuuji@79: (completionType ListOfMacro)) yuuji@79: (PackageName2 yuuji@79: (completionType ListOfMacro) yuuji@79: (completionType ListOfMacro...))....) yuuji@79: @end lisp yuuji@79: completionType is one of @code{env, section, maketitle}. yuuji@79: Consult the value of @code{YaTeX-package-alist-default} as an example. yuuji@79: @end defvar yuuji@72: yuuji@80: @defvar YaTeX-tabular-indentation yuuji@80: At indentation by @kbd{C-i} in tabular or array environment, yuuji@80: YaTeX put the additional spaces to the normail indentation depth. yuuji@80: The number of additional spaces is the product of YaTeX-tabular-indentation yuuji@80: and the number of column position in tabular. yuuji@80: @end defvar yuuji@80: yuuji@80: @defvar YaTeX-noindent-env-regexp yuuji@80: Regexp of environment names that should begin with no indentation. yuuji@80: All verbatime-like environment name should match with. yuuji@80: @end defvar yuuji@80: yuuji@409: @defvar YaTeX-electric-indent-mode yuuji@409: Emacs 24.4 introduces automatic indentation of current and new lines. yuuji@409: This might be annoying for some people. Pass this value to the function yuuji@409: 'electric-indent-local-mode. If you prefer to stop electric-indent-mode yuuji@409: in yatex-mode, set `-1' to this variable. yuuji@409: @end defvar yuuji@409: yuuji@80: @defvar YaTeX-ref-default-label-string yuuji@80: Default \\ref time string format. yuuji@80: This format is like strftime(3) but allowed conversion char are as follows; yuuji@80: %y -> Last 2 digit of year, %b -> Month name, %m -> Monthe number(1-12), yuuji@80: %d -> Day, %H -> Hour, %M -> Minute, %S -> Second, yuuji@80: %qx -> alphabetical-decimal conversion of yymmdd. yuuji@80: %qX -> alphabetical-decimal conversion of HHMMSS. yuuji@80: Beware defualt label-string should be always unique. So this format string yuuji@80: should have both time part (%H+%M+%S or %qX) and date yuuji@80: part (%y+(%b|%m)+%d or %qx). yuuji@80: @end defvar yuuji@80: yuuji@80: @defvar YaTeX-ref-generate-label-function yuuji@265: Function to generate default label string for unnamed \\label@{@}s. yuuji@80: The function pointed to this value should take two arguments. yuuji@80: First argument is LaTeX macro's name, second is macro's argument. yuuji@80: Here is an example for using this value. yuuji@80: @lisp yuuji@80: (setq YaTeX-ref-generate-label-function 'my-yatex-generate-label) yuuji@80: (defun my-yatex-generate-label (command value) yuuji@80: (and (string= command "caption") yuuji@265: (re-search-backward "\\\\begin@{\\(figure\\|table\\)@}" nil t) yuuji@80: (setq command (match-string 1))) yuuji@80: (let ((alist '(("chapter" . "chap") yuuji@80: ("section" . "sec") yuuji@80: ("subsection" . "subsec") yuuji@80: ("figure" . "fig") yuuji@80: ("table" . "tbl")))) yuuji@80: (if (setq command (cdr (assoc command alist))) yuuji@80: (concat command ":" value) yuuji@80: (YaTeX::ref-generate-label nil nil)))) yuuji@80: @end lisp yuuji@80: @end defvar yuuji@80: yuuji@80: yuuji@20: @node Sample definitions, Hook variables, All customizable variables, Lisp variables yuuji@20: @comment node-name, next, previous, up yuuji@20: @subsection Sample definitions yuuji@20: @cindex prefix key stroke yuuji@20: @cindex fill-prefix yuuji@20: yuuji@20: For instance, to change the prefix key stroke to @kbd{ESC}, and name of yuuji@20: the user dictionary @file{~/src/emacs/yatexrc}, and set @code{fill-prefix} yuuji@20: to single TAB character, add the following @code{setq} to @file{~/.emacs}. yuuji@20: yuuji@20: @lisp yuuji@46: (setq YaTeX-prefix "\e" yuuji@46: YaTeX-user-completion-table "~/src/emacs/yatexrc" yuuji@46: YaTeX-fill-prefix " ") yuuji@20: @end lisp yuuji@20: yuuji@20: @node Hook variables, Hook file, Sample definitions, Lisp variables yuuji@20: @comment node-name, next, previous, up yuuji@20: @subsection Hook variables yuuji@20: @cindex hook variables yuuji@20: yuuji@20: More customizations will be done by the hook-function defined in yuuji@20: hook-variable @code{yatex-mode-hook}. This is useful to define a shortcut yuuji@20: key sequence to enter some environments other than @code{document} and yuuji@20: @code{enumerate} etc. The following statement defines @code{[prefix] ba} yuuji@20: to enter @code{\begin@{abstract@}} ... @code{=end@{abstract@}} yuuji@20: immediately. yuuji@20: yuuji@20: @lisp yuuji@46: (setq yatex-mode-hook yuuji@46: '(lambda() (YaTeX-define-begend-key "ba" "abstract"))) yuuji@20: @end lisp yuuji@20: yuuji@46: You should use functions @code{YaTeX-define-key}, or yuuji@46: @code{YaTeX-define-begend-key} to define all the key sequences of yuuji@20: yatex-mode. yuuji@20: yuuji@20: @node Hook file, , Hook variables, Lisp variables yuuji@20: @comment node-name, next, previous, up yuuji@20: @subsection Hook file yuuji@20: @cindex hook file yuuji@20: yuuji@58: You can stuff all of YaTeX related expressions into a file named yuuji@20: @file{yatexhks.el} if you have a lot of codes. YaTeX automatically load yuuji@20: this file at the initialization of itself. Using @file{yatexhks.el} yuuji@20: makes @code{yatex-mode-load-hook} unnecessary. yuuji@20: yuuji@49: @node Add-in functions, Add-in generator, Lisp variables, Customizations yuuji@20: @comment node-name, next, previous, up yuuji@20: @section Add-in functions yuuji@20: @cindex add-in functions yuuji@49: @cindex yatexadd.el yuuji@20: yuuji@20: You can easily define a function to input detailed arguments yuuji@49: with completion according to La@TeX{} environments or commands. yuuji@20: yuuji@49: @c @node What is add-in functions?, , Add-in functions, Add-in functions yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsection What is add-in functions? yuuji@49: @cindex tabular yuuji@49: yuuji@49: When you input @code{tabular} environment, don't you think ``I want yuuji@49: YaTeX to complete its argument toward my favorite one such as yuuji@49: @code{@{|c|c|c|@}}...''? Yes, you can define the function to complete yuuji@49: arguments for any environment and any La@TeX{} commands. yuuji@49: yuuji@49: @subsection Procedure yuuji@49: yuuji@49: Here is the procedure to define add-in functions. yuuji@49: @enumerate yuuji@49: @item yuuji@49: Define the function yuuji@49: @item yuuji@49: Put the function into @file{yatexhks.el} yuuji@49: @end enumerate yuuji@49: yuuji@49: @menu yuuji@471: * How the add-in function works:: yuuji@471: * How the function is called:: yuuji@471: * Useful functions for creating add-in:: yuuji@471: * Contribution:: yuuji@49: @end menu yuuji@49: yuuji@58: @node How the add-in function works, How the function is called, Add-in functions, Add-in functions yuuji@49: @comment node-name, next, previous, up yuuji@58: @subsection How the add-in function works yuuji@49: yuuji@79: There are three types of add-in. yuuji@79: yuuji@79: @enumerate yuuji@79: @item yuuji@79: Option add-in yuuji@79: @item yuuji@79: argument add-in yuuji@79: @item yuuji@79: enclosing add-in yuuji@79: @end enumerate yuuji@79: yuuji@79: @dfn{Option add-in} returns the yuuji@49: La@TeX{}'s optional parameters such as optional strings after yuuji@49: @code{\begin@{ENV@}}, optional strings between a section-type command yuuji@49: and its first argument, and optional strings just after type yuuji@49: maketitle-type command. The following illustrates the name of add-in yuuji@49: functions, where underlined strings are generated by add-in functions. yuuji@49: yuuji@49: @display yuuji@70: \begin@{table@}[ht] (Function name: YaTeX:table) yuuji@49: ~~~~ yuuji@70: \put(100,200)@{@} (Function name: YaTeX:put) yuuji@49: ~~~~~~~~~ yuuji@70: \sum_@{i=0@}^@{n@} (Function name: YaTeX:sum) yuuji@49: ~~~~~~~~~~ yuuji@49: @end display yuuji@49: yuuji@49: Obviously, the function name is decided by concatenating the prefix yuuji@49: `YaTeX:' and La@TeX{} command's name. yuuji@49: yuuji@49: Another add-in type is @dfn{argument add-in}, which completes arguments yuuji@49: for section-type commands. yuuji@49: yuuji@49: @display yuuji@70: \newcommand@{\foo@}@{bar@} (Function name: YaTeX::newcommand) yuuji@49: ~~~~ ~~~ yuuji@49: @end display yuuji@49: yuuji@49: When the section-type command is inputted, the function named by yuuji@49: concatenating `YaTeX::' and section-type command, is called automatically yuuji@49: with an integer argument which indicates which argument of section-type yuuji@49: command is being read. Thus the add-in should determine the yuuji@51: job referring the value of its argument. yuuji@49: yuuji@79: @dfn{enclosing add-in} is for modifying and/or checking the region that yuuji@79: will be enclosed by section-type commands via @kbd{[prefix] S}. An yuuji@79: enclosing add-in function will be called with two arguments, beginning of yuuji@79: the enclosed region and end of the region. Suppose you want to enclose yuuji@265: the existing text @code{(a+b)/c} by @code{\frac@{@}}. yuuji@79: yuuji@79: @display yuuji@79: a/c yuuji@79: | | yuuji@79: A B yuuji@79: @end display yuuji@79: yuuji@79: You do set-mark-command at point A and then move to point B. Typing yuuji@79: @kbd{[prefix] S} and input @code{frac} enclose the region like this; yuuji@79: yuuji@79: @display yuuji@265: \frac@{a/c@} yuuji@79: @end display yuuji@79: yuuji@79: Normally, the expression @code{a/c} is translated to yuuji@79: @code{\frac@{a@}@{c@}}. An enclosing add-in is useful for modifying yuuji@79: @code{/} to @code{@}@{}. yuuji@79: yuuji@49: @menu yuuji@471: * Defining option-add-in:: yuuji@471: * Defining argument-add-in:: yuuji@471: * Defining enclosing-add-in:: yuuji@49: @end menu yuuji@49: yuuji@68: @node Defining option-add-in, Defining argument-add-in, How the add-in function works, How the add-in function works yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsubsection Defining `option add-in' yuuji@49: yuuji@49: If you want @code{@{|c|c|c|@}} for all @code{tabular} environment, yuuji@49: yuuji@49: @lisp yuuji@49: (defun YaTeX:tabular () yuuji@70: "@{|c|c|c|@}") yuuji@49: @end lisp yuuji@49: yuuji@49: @noindent yuuji@49: is enough. If you want more complicated format, define as below. yuuji@49: yuuji@49: @lisp yuuji@49: (defun YaTeX:tabular () yuuji@49: "@{@@@{\\vrule width 1pt\\ @}|||@@@{\\ \\vrule width 1pt@}@}") yuuji@49: @end lisp yuuji@49: yuuji@49: @noindent yuuji@49: Note that the character @code{\} must be described as @code{\\} in yuuji@49: Emacs-Lisp. The next example reads the tabular format from keyboard. yuuji@49: @lisp yuuji@49: (defun YaTeX:tabular () yuuji@70: (concat "@{" (read-string "Rule: ") "@}")) yuuji@49: @end lisp yuuji@49: yuuji@79: @node Defining argument-add-in, Defining enclosing-add-in, Defining option-add-in, How the add-in function works yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsubsection Defining `argument add-in' yuuji@49: yuuji@49: This section describes how to define the add-in function for yuuji@49: @code{\newcommand}. yuuji@49: yuuji@49: The first argument of @code{\newcommand} begins always with @code{\}. yuuji@49: The second argument is usually so complex that we can not edit them in the yuuji@49: minibuffer. Here is the created function considering this. yuuji@49: yuuji@49: @lisp yuuji@49: (defun YaTeX::newcommand (n) ;n is argument position yuuji@49: (cond yuuji@49: ((= n 1) ;1st argument is macro name yuuji@49: (read-string "Command: " "\\")) ;initial input `\' yuuji@49: ((= n 2) "") ;do nothing when reading arg#2 yuuji@49: (t nil))) yuuji@49: @end lisp yuuji@49: yuuji@49: Note that when the `argument add-in' function return `nil', normal yuuji@49: argument reader will be called. yuuji@49: yuuji@79: @node Defining enclosing-add-in, , Defining argument-add-in, How the add-in function works yuuji@79: @comment node-name, next, previous, up yuuji@79: @subsubsection Defining `enclosing add-in' yuuji@79: yuuji@79: This section describes how to define the add-in function for yuuji@79: text enclosed by @code{\frac@{@}}. yuuji@79: yuuji@79: When enclosing the text @code{5/3} by @code{\frac@{@}}, you might want to yuuji@79: replace @code{/} with @code{@}@{}. Enclosing function yuuji@79: @code{YaTeX::frac-region} is called with two arguments, beginning of yuuji@79: enclosed text and end of enclosed text. The function is expected to yuuji@79: replace @code{/} with @code{@}@{}. Here is an example expression. yuuji@79: yuuji@79: @lisp yuuji@79: (defun YaTeX::frac-region (beg end) yuuji@79: (catch 'done yuuji@79: (while (search-forward "/" end t) yuuji@79: (goto-char (match-beginning 0)) yuuji@269: (if (y-or-n-p "Replace this slash(/) with `@}@{'") yuuji@269: (throw 'done (replace-match "@}@{"))) yuuji@79: (goto-char (match-end 0))))) yuuji@79: @end lisp yuuji@79: yuuji@58: @node How the function is called, Useful functions for creating add-in, How the add-in function works, Add-in functions yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsection How the function is called yuuji@49: yuuji@49: YaTeX calls the add-in functions for specified begin-type, section-type, yuuji@49: and maketitle-type command, if any. `Option add-in' functions for yuuji@49: begin-type are called when @code{\begin@{ENV@}} has been inserted, yuuji@49: functions for section-type are called just before input of the first yuuji@49: argument, and functions for maketitle-type is called after maketitle-type yuuji@49: command has been inserted. `Argument add-in' functions are called at each yuuji@49: entry of arguments for section-type commands. yuuji@49: yuuji@49: @node Useful functions for creating add-in, Contribution, How the function is called, Add-in functions yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsection Useful functions for creating add-in yuuji@49: yuuji@49: Many add-in functions for typical La@TeX{} commands are defined in yuuji@49: @file{yatexadd.el}. Those are also useful as references. Here are the yuuji@49: short descriptions on useful functions, where [F] means function, [A] yuuji@49: means arguments, [D] means description. yuuji@49: yuuji@69: @table @kbd yuuji@49: @item [F] yuuji@49: YaTeX:read-position yuuji@49: @itemx [A] yuuji@49: Character list which can show up in the brackets yuuji@49: @itemx [D] yuuji@49: Return the location specifier such as `[htb]'. When yuuji@49: nothing is entered, omit [] itself. If the possible characters yuuji@49: are "htbp", call this function as yuuji@49: @code{(YaTeX:read-position "htbp")} yuuji@49: yuuji@49: @item [F] yuuji@49: YaTeX:read-coordinates yuuji@49: @itemx [A] yuuji@49: Base prompt, X-axis prompt, Y-axis prompt (each optional) yuuji@49: @itemx [D] yuuji@51: Read the coordinates with the prompt ``BasePrompt X-axisPrompt:'' for yuuji@49: X-axis, ``BasePrompt Y-axisPrompt:'' for Y-axis, and return it in the form yuuji@51: of ``(X,Y)''. The default prompts are @code{Dimension}, @code{X}, yuuji@49: @code{Y} respectively. yuuji@49: yuuji@49: @item [F] yuuji@51: YaTeX:check-completion-type yuuji@49: @itemx [A] yuuji@49: One of the symbols: 'begin, 'section, or 'maketitle yuuji@49: @itemx [D] yuuji@49: Check the current completion type is specified one and cause error if yuuji@49: not. The variable @code{YaTeX-current-completion-type} holds the symbol yuuji@49: according to the current completion type. yuuji@69: @end table yuuji@49: yuuji@49: @node Contribution, , Useful functions for creating add-in, Add-in functions yuuji@49: @comment node-name, next, previous, up yuuji@49: @subsection Contribution yuuji@49: yuuji@49: If you make your own pretty function and you let it be in public, please yuuji@49: send me the function. I'm going to include it in the next release. yuuji@49: yuuji@49: @node Add-in generator, , Add-in functions, Customizations yuuji@49: @comment node-name, next, previous, up yuuji@49: @section Add-in generator yuuji@49: yuuji@49: First, don't forget to read the section of add-in functions @ref{Add-in yuuji@49: functions}. If you easily understand how to define them, there's no need yuuji@49: to read this section. But being not familiar with Emacs-Lisp, when you yuuji@49: don't have clear idea what to do, this section describes how to get YaTeX yuuji@49: make add-in function. yuuji@49: yuuji@49: There are two methods of generation. One is for fully interactive yuuji@49: generator for beginners and another requires little knowledge of yuuji@49: Emacs-Lisp. yuuji@49: yuuji@49: @subsection Generator for beginners yuuji@49: The former generator is called by yuuji@49: @center @kbd{M-x YaTeX-generate} yuuji@49: yuuji@49: @noindent yuuji@49: strokes. All you have to do is follow the guidances. Defying them may cases yuuji@49: the disaster (I wonder what is it???). So when you make some mistake, it yuuji@49: is recommendable to type @kbd{C-g} and start afresh. yuuji@49: yuuji@49: @subsection Simple generator yuuji@49: yuuji@49: The latter generator is invoked by the next sequence. yuuji@49: @center @kbd{M-x YaTeX-generate-simple} yuuji@49: This generator can make both ``option add-in'' and ``argument add-in'' yuuji@49: (@emph{refer the section add-in functions} yuuji@68: @ref{How the add-in function works}), whereas @code{YaTeX-generate} yuuji@49: cannot make ``argument addin''. yuuji@49: yuuji@49: For example, assume you have the LaTeX command as follows. yuuji@49: yuuji@49: @example yuuji@70: \epsinput[t](250,50)@{hoge.eps@}@{plain@}@{Picture of foo@} yuuji@49: (A) (B) (1) (2) (3) yuuji@49: (A)Optional parameter to specify the position yuuji@49: One of t(top), b(bottom), l(left), r(right) yuuji@49: (B)Maximum size of frame yuuji@49: (1)1st argument is filename of EPS file yuuji@49: (2)2nd argument indicates yuuji@49: plain do nothing yuuji@49: frame make frame around image yuuji@49: dframe make double-frame around image yuuji@49: for included EPS file. yuuji@49: (3)Caption for the picture yuuji@49: @end example yuuji@49: yuuji@49: Now get start with generation. Typing @kbd{M-x YaTeX-generate-simple} yuuji@49: brings the prompt: yuuji@49: @display yuuji@49: (O)ption? (A)rgument? yuuji@49: @end display yuuji@49: yuuji@49: @subsubsection Generating ``option add-in'' yuuji@49: @cindex option add-in yuuji@49: yuuji@49: Since (A), (B) above are optional argument, all we have to do to yuuji@49: complete them is define the option add-in for them. Let's generate the yuuji@49: function to complete (A). yuuji@49: yuuji@49: @display yuuji@49: M-x YaTeX-generate-simple RET yuuji@49: epsinput RET yuuji@49: o yuuji@49: @end display yuuji@49: yuuji@49: @noindent yuuji@49: Typing as above leads the next prompt. yuuji@49: yuuji@49: @display yuuji@49: Read type(1): (S)tring (C)omplete (F)ile ([)option (P)osition co(O)rd. (q)uit yuuji@49: @end display yuuji@49: yuuji@49: @noindent yuuji@49: This asks that ``Which type is the completion style of 1st argument?''. yuuji@49: Here are the possible completion style. yuuji@49: yuuji@49: @table @code yuuji@49: @item String yuuji@49: read plain string yuuji@49: @item Complete yuuji@49: read with completion yuuji@49: @item File yuuji@49: read file name yuuji@49: @item Option yuuji@49: read optional string (if string omitted, omit [] too) yuuji@49: @item Position yuuji@49: read positional option (like [htbp]) yuuji@49: @item Coord. yuuji@51: read coordinates yuuji@49: @item Quit yuuji@51: quit from generating yuuji@49: @end table yuuji@49: yuuji@49: Since (A) is the optional argument to specify the location of included yuuji@49: EPS file, the completion style is @code{Position}, and the possible yuuji@49: characters are t, b, l, and r. To tell these information to generator, yuuji@49: operate as follows. yuuji@49: yuuji@49: @display yuuji@49: Read type(1).... p yuuji@49: Acceptable characters: tblr RET yuuji@49: @end display yuuji@49: yuuji@49: (B) is coordinate. So its completion style is coOrd. We want a prompt yuuji@49: meaning ``Maximum size'' when completion. yuuji@49: yuuji@49: @display yuuji@49: Read type(2).... o yuuji@49: Prompt for coordinates: Max size RET yuuji@49: @end display yuuji@49: yuuji@49: That's all for optional argument. Select quit. yuuji@49: yuuji@49: @display yuuji@49: Read type(3).... q yuuji@49: @end display yuuji@49: yuuji@49: Then the generated option add-in function for \epsinput will be shown in yuuji@49: the next window. yuuji@49: yuuji@49: @subsubsection Generating ``argument add-in'' yuuji@49: @cindex argument add-in yuuji@49: yuuji@49: Next, create the argument add-in. The arguments for \epsinput are EPS yuuji@49: file name, framing style, and caption string in sequence. yuuji@49: yuuji@49: @display yuuji@49: M-x YaTeX-generate-simple RET yuuji@49: epsinput RET yuuji@49: a yuuji@49: @end display yuuji@49: yuuji@49: Above key strokes bring the prompt that asks the number of argument. yuuji@49: Answer it with 3. yuuji@49: yuuji@49: @display yuuji@49: How many arguments?: 3 RET yuuji@49: @end display yuuji@49: yuuji@49: Then the generator asks the completion style and prompt for completion. yuuji@49: Answer them. @kbd{f} for FileName and prompt string. yuuji@49: yuuji@49: @display yuuji@49: Read type(1).... f yuuji@49: Prompt for argument#1 EPS file name RET yuuji@49: @end display yuuji@49: yuuji@49: The second argument is one of selected symbol. So the completion type yuuji@49: is @code{Completion}. yuuji@49: yuuji@49: @display yuuji@49: Read type(2).... c yuuji@49: Prompt for argument#2 Include style RET yuuji@49: @end display yuuji@49: yuuji@49: Then all the candidates ready to be read. Type single RET after yuuji@49: entering all. yuuji@49: yuuji@49: @display yuuji@49: Item[1](RET to exit): plain RET yuuji@49: Item[2](RET to exit): frame RET yuuji@49: Item[3](RET to exit): dframe RET yuuji@49: Item[4](RET to exit): RET yuuji@49: @end display yuuji@49: yuuji@49: The following prompt asks whether the entered string must belong to yuuji@49: candidates or not. In this case, since the argument must be one of yuuji@49: @code{plain}, @code{frame}, and @code{dframe}, type @code{y}. yuuji@49: yuuji@49: @display yuuji@49: Require match? (y or n) y yuuji@49: @end display yuuji@49: yuuji@49: The last argument is the caption string for which any completion is yuuji@49: needed. yuuji@49: yuuji@49: @display yuuji@49: Read type(3).... s yuuji@49: Prompt for argument#3 Caption RET yuuji@49: default: Figure of RET yuuji@49: @end display yuuji@49: yuuji@49: Finally we'll get the argument add-in in the next window. yuuji@49: yuuji@49: @subsection Contribution yuuji@49: yuuji@49: If you get your own pretty function and you let it be in public, please yuuji@51: steel yourself in the happy atmosphere and do not send me the function. yuuji@49: I do know it is not fine because it is generated by yatexgen:-p. yuuji@20: yuuji@20: @node Etcetera, Copying, Customizations, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Etcetera yuuji@20: yuuji@20: The standard completion tables provided in @file{yatex.el} contain a yuuji@20: few La@TeX{} commands I frequently use. This is to lessen the key yuuji@20: strokes to complete entire word, because too many candidates yuuji@20: rarely used often cause too many hits. Therefore always try to yuuji@20: use completion in order to enrich your dictionary, and you will yuuji@20: also find `Wild Bird' growing suitable for your La@TeX{} style. yuuji@20: yuuji@51: The package name `Wild Bird' is the English translation of Japanese yuuji@51: title `Yachou', which is a trick on words of Japanese. yuuji@20: yuuji@20: @node Copying, , Etcetera, Top yuuji@20: @comment node-name, next, previous, up yuuji@20: @chapter Copying yuuji@20: yuuji@80: This program is distributed as a free software. You can yuuji@80: use/copy/modify/redistribute this software freely but with NO warranty to yuuji@80: anything as a result of using this software. Adopting code from this yuuji@80: program is also free. But I would not do contract act. yuuji@80: yuuji@472: This software can be treated with: ``The 2-Clause BSD License'' yuuji@472: (since 2017-09-09, yatex 1.80). yuuji@472: yuuji@80: Any reports and suggestions are welcome as long as I feel interests in yuuji@80: this software. My possible e-mail address is `yuuji@@yatex.org'. (as of yuuji@472: Sep.2017) And there is mailing list for YaTeX. Although the common yuuji@80: language is Japanese, questions in English will be welcome. To join the yuuji@80: ML, send the mail whose subject is `append' to the address yuuji@80: `yatex@@yatex.org. If you have some question, please ask to yuuji@80: `yatex-admin@@yatex.org'. yuuji@20: yuuji@20: The specification of this software will be surely modified yuuji@20: (depending on my feelings) without notice :-p. yuuji@20: yuuji@20: yuuji@20: @flushright yuuji@20: HIROSE Yuuji yuuji@20: @end flushright yuuji@20: @bye yuuji@20: yuuji@20: Local variables: yuuji@20: mode: texinfo yuuji@20: fill-prefix: nil yuuji@20: fill-column: 74 yuuji@20: End: