% File: latex.sl -*- mode: SLang; mode: fold -*- % % Author: Guido Gonzato, guido.gonzato@univr.it % Contributions by G\"unter Milde, % Milde@ife.et.tu-dresden.de; % J\"org Sommer, joerg@alea.gnuu.de % % Description: an enhanced latex mode that aims at making the writing % of LaTeX documents a breeze. % % Installation: copy latex.sl to $JED_ROOT/lib (back up the original file % latex.sl beforehand), then add these lines to your .jedrc: % % add_mode_for_extension ("latex", "tex"); % enable_dfa_syntax_for_mode ("LaTeX"); % % You'll also want to create the DFA cache table. Add % "latex.sl" to the list in the file preparse.sl, then % (as root) run the command: % % jed -batch -n -l preparse % % CAVEAT: this file is incompatible with folding mode, % due to clashing ^Cf key binding. See the documentation % for details. % % Version: 1.4.4 % % Last updated: 20 February 2004 % ----- require ("keydefs"); % custom variables % output profile: "dvi", "ps", "eps", "dvipdf", "pdf" custom_variable ("LaTeX_Default_Output", "dvi"); custom_variable ("LaTeX_Indent", 2); custom_variable ("LaTeX_Article_Default_Options", "a4paper,12pt"); custom_variable ("LaTeX_Book_Default_Options", "twoside,11pt"); custom_variable ("LaTeX_Letter_Default_Options", "a4paper,12pt"); custom_variable ("LaTeX_Report_Default_Options", "twoside,12pt"); custom_variable ("LaTeX_Slides_Default_Options", "a4paper,landscape"); custom_variable ("LaTeX_Default_Language", "english,italian"); % for Babel custom_variable ("LaTeX_Rerun", "y"); % for xrefs custom_variable ("LaTeX_Load_Modules", "y"); % DOS/Windows users: make sure helper programs are in the PATH #ifdef WIN32 custom_variable ("LaTeX_View_Dvi_Cmd", "yap"); custom_variable ("LaTeX_View_Ps_Cmd", "gsview32"); custom_variable ("LaTeX_View_Pdf_Cmd", "gsview32"); custom_variable ("LaTeX_Print_Cmd", "gsview32"); custom_variable ("LaTeX_Clearup_Cmd", "del *.out *.aux *.lo? *.to?"); custom_variable ("LaTeX_Modules_Dir", JED_ROOT + "\\lib\\latex\\"); #else custom_variable ("LaTeX_View_Dvi_Cmd", "xdvi"); custom_variable ("LaTeX_View_Ps_Cmd", "gv -watch"); custom_variable ("LaTeX_View_Pdf_Cmd", "xpdf -z width"); custom_variable ("LaTeX_Print_Cmd", "lpr"); custom_variable ("LaTeX_Clearup_Cmd", "/bin/rm -f *.out *.aux *.lo? *.to?"); custom_variable ("LaTeX_Modules_Dir", JED_ROOT + "/lib/latex/"); #endif variable custom_variables = "LaTeX_Indent,LaTeX_Article_Default_Options," + "LaTeX_Book_Default_Options,LaTeX_Letter_Default_Options," + "LaTeX_Report_Default_Options,LaTeX_Slides_Default_Options," + "LaTeX_Default_Language,LaTeX_Rerun,LaTeX_View_Dvi_Cmd," + "LaTeX_View_Ps_Cmd,LaTeX_View_Pdf_Cmd,LaTeX_Print_Cmd"; static variable TRUE = 1; static variable FALSE = 0; static variable NOTFOUND = 0; static variable ERROR = 255; static variable WARNING = -1; static variable RERUN = -2; static variable NO_PUSH_SPOT = FALSE; static variable PUSH_SPOT = TRUE; static variable NO_POP_SPOT = FALSE; static variable POP_SPOT = TRUE; static variable ITEM_LABEL = FALSE; static variable USE_MASTER = FALSE; #ifdef UNIX static variable devnull = " >/dev/null 2>&1 &"; #else static variable devnull = " >NUL"; #endif static variable LaTeX_Compose_Cmd = "latex" + " -interaction=nonstopmode"; static variable LaTeX_Compose_Pdf_Cmd = "pdflatex" + " -interaction=nonstopmode"; static variable LaTeX_Dvips_Cmd = "dvips"; static variable LaTeX_Eps_Options = " -i -E"; % every page a file, eps output static variable LaTeX_Dvipdf_Cmd = "dvipdf"; static variable LaTeX_Bibtex_Cmd = "bibtex"; static variable LaTeX_Makeindex_Cmd = "makeindex"; static variable LaTeX_Buffer; static variable Math_Mode = FALSE; % ----- % this function is sto^H^H^H borrowed from the original latex.sl define tex_complete_symbol () { variable symbol, completion; variable insertbuf = whatbuf(), searchbuf = "*ltx-comp*"; !if (bufferp(searchbuf)) { sw2buf(searchbuf); insert_file( expand_jedlib_file("ltx-comp.dat") ); bob(); set_buffer_modified_flag(0); sw2buf(insertbuf); bury_buffer(searchbuf); } push_spot(); push_mark(); bskip_word(); symbol = bufsubstr(); setbuf(searchbuf); !if (bol_fsearch(sprintf("\\%s", symbol))) bob(); % wrap to start if (bol_fsearch(sprintf("\\%s", symbol))) { go_right_1 (); go_right(strlen(symbol)); push_mark_eol(); completion = bufsubstr(); } else { setbuf(insertbuf); pop_mark_0 (); pop_spot(); error("No completion found"); } setbuf(insertbuf); goto_spot (); push_mark(); !if (ffind_char (' ')) eol(); del_region(); insert(completion); pop_spot(); } % ----- % this is copied from my context-sensitive help system. % Maybe some day it'll be included in the Jed distribution; % in that case, I'll remove this duplicated function. define latex_info_help () { variable str, topic; % get the word under the cursor push_spot (); define_word ("_0-9A-Za-z\\"); skip_word (); push_mark (); bskip_word (); topic = bufsubstr (); pop_mark_0 (); pop_spot (); info_mode (); info_find_node ("(latex)"); info_find_node ("Command Index"); !if (fsearch ("* " + topic)) error (sprintf ("%s not found!", topic)); skip_word (); () = right (1); skip_word (); bskip_word (); % beginning of node name push_spot (); push_mark (); eol (); () = left (1); str = bufsubstr (); pop_mark_0 (); pop_spot (); info_find_node (str); () = fsearch (topic); } % code to manage compressed files; from compress.sl static variable Compressed_File_Exts = [".gz", ".Z", ".bz2"], Compress_File_Pgms = ["gzip %s", "compress %s", "bzip2 %s"], Uncompress_File_Pgms = ["gzip -d %s", "uncompress %s", "bzip2 -d %s"], compressed = FALSE, cmp_method, tmpfile; static define check_is_compressed (file) { variable ext = path_extname (file); variable i = where (ext == Compressed_File_Exts); if (length (i)) { compressed = TRUE; return i[0]; } compressed = FALSE; return -1; } % required stuff and variables require ("texcom"); % autoload ("latex_toggle_math_mode", "ltx-math"); autoload ("latex_insert_math", "ltx-math"); autoload ("latex_math_mode", "ltx-math"); WRAP_INDENTS = 1; % you really want this % very simple (but effective!) parsing mechanism of the LaTeX log static define getline (); static variable LaTeX_Compile_Buffer = "*LaTeX log*", LaTeX_Dvips_Buffer = "*dvips log*", LaTeX_Bibtex_Buffer = "*bibtex log*", LaTeX_Makeindex_Buffer = "*makeindex log*", LaTeX_Xdvi_Buffer = "*xdvi log*", LaTeX_Xpdf_Buffer = "*xpdf log*", LaTeX_Gv_Buffer = "*gv log*", LaTeX_Tree_Buffer = "*LaTeX Tree*", latex_file, latex_file_dir, line_mark, errors_parsed = FALSE; define goto_error_line () { variable line, tmp = get_word_chars (); bol (); define_word ("0-9"); skip_word (); push_mark (); bskip_word (); line = integer (bufsubstr ()); sw2buf (LaTeX_Buffer); call ("one_window"); goto_line (line); define_word (tmp); } define find_next_error () { variable str, found; if (FALSE == errors_parsed) return; pop2buf (LaTeX_Compile_Buffer); found = fsearch ("! "); % TODO: skip warnings % some LaTeX error messages don't start in "! " if (NOTFOUND == found) found = fsearch ("l."); () = right (2); (str,) = getline (); beep (); flush (str); if (NOTFOUND != found) { eol (); % move over % fix "file not found" found = fsearch ("not found on input"); } goto_error_line (); } define latex_parse_errors () { if (TRUE == compressed) { variable cmd; (,latex_file_dir,,) = getbuf_info (); cmd = sprintf (Compress_File_Pgms [cmp_method], dircat (latex_file_dir, tmpfile)); run_shell_cmd (cmd); } pop2buf (LaTeX_Compile_Buffer); set_readonly (1); bob (); errors_parsed = TRUE; find_next_error (); } % ----- define latex_compile_and_parse (cmd) { variable key, exitcode = TRUE, exit_status; LaTeX_Buffer = whatbuf (); sw2buf (LaTeX_Compile_Buffer); set_readonly (0); erase_buffer (); exit_status = run_shell_cmd (cmd); if (FALSE == exit_status) { % handle warnings bob (); if (0 != fsearch ("Font Warning")) { flush ("Font Warning."); beep (); usleep (1000); exitcode = WARNING; } if (0 != fsearch ("Overfull")) { flush ("Warning - Overfulls."); beep (); usleep (1000); exitcode = WARNING; } if (0 != fsearch ("Underfull")) { flush ("Warning - Underfulls."); beep (); usleep (1000); exitcode = WARNING; } % else if (0 != fsearch ("Rerun to get")) { flush ("Rerun to get cross-references right."); beep (); usleep (1000); exitcode = RERUN; } % else % after "Rerun to get" = no hope if (0 != fsearch ("There were undefined")) { flush ("There were undefined references."); beep (); exitcode = WARNING; } % else if ( (WARNING != exitcode) and (RERUN != exitcode)) { flush ("Success!"); exitcode = TRUE; } sw2buf (LaTeX_Buffer); return exitcode; } else { % latex returned != 0, errors or warnings found latex_parse_errors (); return ERROR; } } % latex_compile_and_parse () % ----- % composing public define latex_select_output () { variable default = LaTeX_Default_Output; LaTeX_Default_Output = read_with_completion ("dvi,ps,eps,pdf,dvipdf", "LaTeX output: dvi,ps,eps,pdf,dvipdf", default, "", 's'); if (andelse {strcmp (LaTeX_Default_Output, "dvi")} {strcmp (LaTeX_Default_Output, "ps")} {strcmp (LaTeX_Default_Output, "eps")} {strcmp (LaTeX_Default_Output, "pdf")} {strcmp (LaTeX_Default_Output, "dvipdf")}) { beep (); flush ("Unknown output format - defaulting to 'dvi'."); LaTeX_Default_Output = "dvi"; } } % ----- public define latex_clearup () { variable bat; #ifdef UNIX run_shell_cmd ("cd " + latex_file_dir + "; " + LaTeX_Clearup_Cmd); #elifdef WIN32 delete_file (bat); write_string_to_file ("cd " + latex_file_dir + "\n", bat); append_string_to_file (LaTeX_Clearup_Cmd + "\n", bat); run_shell_cmd (bat); #endif flush ("Temporary files deleted."); } public define latex_compose () { variable tmp, bat, dvi, cmd, cmd2, status; !if (USE_MASTER) (latex_file, latex_file_dir,,) = getbuf_info (); % is this a compressed file? cmp_method = check_is_compressed (dircat (latex_file_dir, latex_file)); if (-1 != cmp_method) { tmpfile = path_sans_extname (latex_file); cmd = sprintf (Uncompress_File_Pgms [cmp_method], dircat (latex_file_dir, latex_file)); flush ("Uncompressing buffer..."); run_shell_cmd (cmd); latex_file = path_sans_extname (latex_file); } dvi = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".dvi"; bat = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".bat"; switch (LaTeX_Default_Output) { case "dvi": cmd = LaTeX_Compose_Cmd; cmd2 = ""; } { case "ps": cmd = LaTeX_Compose_Cmd; cmd2 = LaTeX_Dvips_Cmd; } { case "eps": cmd = LaTeX_Compose_Cmd; cmd2 = LaTeX_Dvips_Cmd + LaTeX_Eps_Options; } { case "dvipdf": cmd = LaTeX_Compose_Cmd; cmd2 = LaTeX_Dvipdf_Cmd; } { case "pdf": cmd = LaTeX_Compose_Pdf_Cmd; cmd2 = ""; } % run latex or whatever save_buffers (); flush ("Composing... (output profile: " + LaTeX_Default_Output + ")"); % cd to the right directory tmp = "cd " + latex_file_dir + "; " + cmd + " " + dircat (latex_file_dir, latex_file); #ifdef UNIX !if (strcmp ("y", LaTeX_Rerun)) { do { status = latex_compile_and_parse (tmp); if (ERROR != status) flush ("Rerunning..."); } while (RERUN == status); if (ERROR != status) { flush ("All runs done."); errors_parsed = FALSE; } } else status = latex_compile_and_parse (tmp); #elifdef WIN32 % build a .bat file, then run it if (TRUE == file_status (bat)) delete_file (bat); write_string_to_file ("cd " + latex_file_dir + "\n", bat); append_string_to_file (cmd + " " + dircat (latex_file_dir, latex_file) + "\n", bat); !if (strcmp ("y", LaTeX_Rerun)) { do { status = latex_compile_and_parse (bat); if (ERROR != status) flush ("Rerunning..."); } while (RERUN == status); if (ERROR != status) { flush ("All runs done."); errors_parsed = FALSE; } } else status = latex_compile_and_parse (bat); % the .bat file will be deleted later #endif if (ERROR == status) return; % if cmd2 isn't void, run dvips or whatever if (strlen(cmd2)) { flush ("Running: " + cmd2 + " " + dircat (latex_file_dir, dvi)); sw2buf (LaTeX_Dvips_Buffer); set_readonly (0); erase_buffer (); #ifdef UNIX % cd to the source directory, so that included files can be found if (0 != run_shell_cmd ("cd " + latex_file_dir + "; " + cmd2 + " " + dvi + " 2>&1")) #elifdef WIN32 delete_file (bat); write_string_to_file ("cd " + latex_file_dir + "\n", bat); append_string_to_file (cmd2 + " " + dvi + "\n", bat); if (0 != run_shell_cmd (bat)) #endif error ("Could not run " + cmd2 + " " + dircat (latex_file_dir, latex_file)); } % if (strlen(cmd2)) if (TRUE == compressed) { cmd = sprintf (Compress_File_Pgms [cmp_method], dircat (latex_file_dir, tmpfile)); run_shell_cmd (cmd); } % if (ERROR != status) flush ("Done."); errors_parsed = FALSE; sw2buf (LaTeX_Buffer); } % customising, viewing, printing, etc. % ----- public define latex_customise () { variable tmp, var, value; var = read_with_completion (custom_variables, "Variable to change (press TAB to list):", "", "", 's'); tmp = sprintf ("New value (now \"%s\"):", string (eval (var))); value = (read_mini (tmp, "", "")); !if (strcmp (var, "LaTeX_Indent")) tmp = string (value); else tmp = "\"" + string (value) + "\""; eval (var + "=" + tmp); } define latex_master_file () { variable mf = read_mini ("Set this buffer as master file (y/n)?", "n", ""); if ( (mf [0] == 'y') or (mf [0] == 'Y') ) { USE_MASTER = TRUE; (latex_file, latex_file_dir,,) = getbuf_info (); } else USE_MASTER = FALSE; } public define latex_view () { variable i, dvi, ps, pdf; !if (USE_MASTER) (latex_file, latex_file_dir,,) = getbuf_info (); i = check_is_compressed (dircat (latex_file_dir, latex_file)); if (-1 != i) % remove the extension latex_file = path_sans_extname (latex_file); dvi = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".dvi"; ps = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".ps"; pdf = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".pdf"; switch (LaTeX_Default_Output) { case "dvi": if (1 != file_status (dvi)) { beep (); flush ("No file " + dvi + "! Building it..."); usleep (2000); LaTeX_Default_Output = "dvi"; latex_compose (); } flush ("Running: " + LaTeX_View_Dvi_Cmd + " " + dvi + " (building fonts...)"); sw2buf (LaTeX_Xdvi_Buffer); set_readonly (0); erase_buffer (); #ifdef UNIX if (0 != run_shell_cmd ("cd " + latex_file_dir + "; " + LaTeX_View_Dvi_Cmd + " " + dvi + devnull)) #elifdef WIN32 if (0 != run_shell_cmd (LaTeX_View_Dvi_Cmd + " " + dvi)) #endif error ("Could not run " + LaTeX_View_Dvi_Cmd + " " + dvi); sw2buf (LaTeX_Buffer); } { case "ps": if (1 != file_status (dvi)) { beep (); flush ("No file " + dvi + "! Building it..."); usleep (2000); LaTeX_Default_Output = "dvi"; latex_compose (); } flush ("Running: " + LaTeX_View_Ps_Cmd + " " + ps); sw2buf (LaTeX_Gv_Buffer); set_readonly (0); erase_buffer (); if (0 != run_shell_cmd (LaTeX_View_Ps_Cmd + " " + ps + devnull)) error ("Could not run " + LaTeX_View_Ps_Cmd + " " + ps); sw2buf (LaTeX_Buffer); } { case "dvipdf" or case "pdf": if (1 != file_status (pdf)) { beep (); flush ("No file " + pdf + "! Building it..."); usleep (2000); LaTeX_Default_Output = "pdf"; latex_compose (); } flush ("Running: " + LaTeX_View_Pdf_Cmd + " " + pdf); sw2buf (LaTeX_Xpdf_Buffer); set_readonly (0); erase_buffer (); if (0 != run_shell_cmd (LaTeX_View_Pdf_Cmd + " " + pdf + devnull)) error ("Could not run " + LaTeX_View_Pdf_Cmd + " " + pdf); sw2buf (LaTeX_Buffer); } } % ----- public define latex_psprint () { variable cmd, ps; !if (USE_MASTER) (latex_file, latex_file_dir,,) = getbuf_info (); % is this a compressed file? % cmp_method = check_is_compressed (dircat (latex_file_dir, latex_file)); if (TRUE == compressed) latex_file = path_sans_extname (latex_file); ps = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".ps"; if (1 != file_status (ps)) error ("No file " + ps + " to print!"); cmd = LaTeX_Print_Cmd + " " + ps; cmd = read_mini ("Print command:", "", cmd); () = run_shell_cmd (cmd + devnull); flush ("Done (printing)."); } % ----- public define latex_bibtex () { variable bib; !if (USE_MASTER) (latex_file, latex_file_dir,,) = getbuf_info (); if (TRUE == compressed) latex_file = path_sans_extname (latex_file); bib = path_sans_extname (dircat (latex_file_dir, latex_file)); flush ("BibTeX'ing " + bib); sw2buf (LaTeX_Bibtex_Buffer); if (0 != run_shell_cmd (LaTeX_Bibtex_Cmd + " " + bib)) error ("Error bibTeX'ing " + bib + "!"); sw2buf (LaTeX_Buffer); flush ("Done."); } % ----- public define latex_makeindex () { variable idx; !if (USE_MASTER) (latex_file, latex_file_dir,,) = getbuf_info (); if (TRUE == compressed) latex_file = path_sans_extname (latex_file); idx = path_sans_extname (dircat (latex_file_dir, latex_file)) + ".idx"; flush ("Processing the index..."); sw2buf (LaTeX_Makeindex_Buffer); if (0 != run_shell_cmd (LaTeX_Makeindex_Cmd + " " + idx)) error ("Error processing " + idx + "!"); sw2buf (LaTeX_Buffer); flush ("Done."); } % ----- define latex_mode_help () { variable file = expand_jedlib_file ("latex.hlp"); () = read_file (file); pop2buf (whatbuf ()); most_mode (); call ("one_window"); set_readonly (1); } % some utility functions % this function is used to make indented environments static define latex_insert_pair_around_lines (left, right) { variable col; check_region (1); % spot pushed narrow (); bob (); col = what_column () - 1; insert (left); insert_spaces (col); do { insert_spaces (LaTeX_Indent); bol (); } while (down (1)); eob (); insert ("\n"); insert_spaces (col); insert (right); widen (); pop_spot (); } static define latex_insert_pair_around_region (left, right) { exchange_point_and_mark (); insert (left); exchange_point_and_mark (); insert (right); pop_spot (); pop_mark_0 (); } define latex_insert_tags (tag1, tag2, do_push_spot, do_pop_spot) { variable chr = what_char (), tmp = get_word_chars (); if ('\\' == chr) chr = '\0'; % avoid the \ problem % if the current position is within a word, then select it if ( (0 == markp ()) and % no region defined (0 == string_match (" \t\n", char (chr), 1)) ) { % ok, the cursor isn't on a space () = right (1); define_word ("_0-9A-Za-z\\"); bskip_word (); push_mark (); skip_word (); define_word (tmp); } % if a region is defined, insert the tags around it if (markp () ) { check_region (0); latex_insert_pair_around_region (tag1, tag2); return; } % the remaining cases insert (tag1); if (do_push_spot) push_spot (); insert (tag2); if (do_pop_spot) pop_spot (); } % ----- define latex_begin_end (param1, param2, do_push_spot, do_pop_spot) { variable col = what_column () - 1; variable env1, env2; env1 = sprintf ("\\begin{%s}%s\n", param1, param2); env2 = sprintf ("\\end{%s}", param1); if (markp () ) { check_region (0); latex_insert_pair_around_lines (env1, env2); return; } insert (env1); insert_spaces (col + LaTeX_Indent); if (do_push_spot) push_spot (); insert ("\n"); insert_spaces (col); insert (env2); if (do_pop_spot) pop_spot (); } % ----- define latex_cmd (cmd, do_push_spot) { latex_insert_tags (sprintf ("\\%s{", cmd), "}", do_push_spot, do_push_spot); } define latex_loglike (cmd) { latex_insert_tags (sprintf ("\\%s(", cmd), ")", PUSH_SPOT, POP_SPOT); } % ----- define latex_cmd_with_arg (cmd, arg) { latex_insert_tags (sprintf ("\\%s{", cmd), "}", PUSH_SPOT, NO_POP_SPOT); insert (sprintf ("{%s}", arg)); pop_spot (); } % ----- static variable benv_line, eenv_line; % needed later define latex_is_within_environment () { variable eline, benv, eenv; push_spot (); if (0 == bsearch ("\\begin{")) return FALSE; () = right (7); % skip \begin{ push_mark (); skip_chars ("A-Za-z0-9"); benv = bufsubstr (); benv_line = what_line (); pop_mark_0 (); if (0 == fsearch ("\\end{")) return FALSE; eline = what_line; () = right (5); push_mark (); skip_chars ("A-Za-z0-9"); eenv = bufsubstr (); eenv_line = what_line (); pop_mark_0 (); pop_spot (); if (eline <= what_line) return FALSE; if (strcmp (benv, eenv)) return FALSE; else return TRUE; } % ----- static variable std_env = "abstract,array,center,description,displaymath," + "enumerate,eqnarray,equation,figure,flushleft," + "flushright,itemize,list,minipage,picture," + "quotation,quote,tabbing,table,tabular," + "thebibliography,theorem,titlepage,verbatim,verse"; define latex_rename_environment () { variable newenv; if (FALSE == latex_is_within_environment ()) error ("Not within an environment!"); newenv = read_with_completion (std_env, "Which environment (TAB to list)?", "", "", 's'); push_spot (); () = bsearch ("\\begin{"); () = right (7); delete_word (); insert (newenv); () = fsearch ("\\end{"); () = right (5); delete_word (); insert (newenv); pop_spot (); } % ----- static variable std_fonts = "textrm,textit,emph,textmd,textbf,textup,textsl," + "textsf,textsc,texttt,verb,textnormal,underline"; static variable std_sizes = "tiny,scriptsize,footnotesize,small," + "normalsize,large,Large,LARGE,huge,Huge"; define latex_modify_font (oldfont, newfont) { variable chr = what_char (), font, tmp = get_word_chars (); push_spot (); if (0 == bsearch ("\\")) { beep (); flush ("The cursor is not within curly braces."); } () = right (1); define_word ("A-Za-z"); push_mark (); skip_word (); font = bufsubstr (); pop_mark_0 (); if (is_substr (oldfont, font)) { % delete the font definition if (0 == strlen (newfont)) { define_word ("\\A-Za-z{"); bskip_word (); % back to \ define_word ("\\A-Za-z"); delete_word (); call ("delete_char_cmd"); % delete '}' then its match push_spot (); if (1 != find_matching_delimiter ('{')) { pop_spot (); pop_spot (); error ("Warning - there were unbalanced braces!"); } call ("delete_char_cmd"); % delete '{' pop_spot (); } else { % rename the font - no warnings for unbalanced {} define_word ("A-Za-z"); bskip_word (); delete_word (); insert (newfont); } } else { beep (); flush ("Could not find a valid font definition."); } define_word (tmp); pop_spot (); } define latex_rename_font () { variable newfont = read_with_completion (std_fonts, "Which font (TAB to list)?", "", "", 's'); latex_modify_font (std_fonts, newfont); } define latex_insert_font () { variable tmp = read_with_completion (std_fonts, "Which font (TAB to list)?", "", "", 's'); !if (strcmp (tmp, "verb")) latex_insert_tags ("\\verb|", "|", TRUE, TRUE); else latex_cmd (tmp, TRUE); } define latex_resize_font () { variable newsize = read_with_completion (std_sizes, "Which size (TAB to list)?", "", "", 's'); latex_modify_font (std_sizes, newsize); } % ----- define latex_insert (cmd) { vinsert ("\\%s ", cmd); } define latex_insert_nospace (cmd) { vinsert ("\\%s", cmd); } define latex_insert_newline (cmd) { vinsert ("\\%s\n", cmd); } define latex_open_env () { variable col = what_column (), env = read_with_completion (std_env, "Which environment (TAB to list)?", "", "", 's'); vinsert ("\\begin{%s}\n", env); insert_spaces (col + LaTeX_Indent - 1); } % this is J\"org's define latex_close_env () { push_spot (); ERROR_BLOCK { pop_spot (); } % Idea: increase for every \end we found and decrease for ever \begin % we found. If we have 0, the founded \begin is for our \end. variable ends = 1; forever { push_mark (); !if (bsearch("\\begin{")) { pop_mark (1); error ("No \\begin{} found"); } --ends; push_spot (); variable tmp = bufsubstr(), pos = 0; % see if there are any \ends between our \end and the found \begin do { variable ret = is_substr(tmp[[pos:]], "\\end{"); pos += ret; if (ret > 0) ++ends; } while (ret > 0); pop_spot(); if (ends == 0) { () = right (7); push_mark (); if (ffind_char ('}') == 0) { pop_mark (1); error("Malformed \\begin{}"); } variable env = bufsubstr(); pop_spot (); if (what_column () > LaTeX_Indent) { () = left (LaTeX_Indent); deln (LaTeX_Indent); } insert ("\\end{" + env + "}"); return; } } } % ----- % Templates define latex_article () { vinsert ("\\documentclass[%s]{article}\n\n", LaTeX_Article_Default_Options); insert ("\\begin{document}\n\n"); insert ("\\title{"); push_spot (); insert ("}\n\n"); insert ("\\author{}\n\n"); insert ("\\date{}\n\n"); insert ("\\thanks{}\n\n"); insert ("\\maketitle\n\n"); insert ("\\begin{abstract}\n"); insert ("\\end{abstract}\n\n"); insert ("\\tableofcontents\n"); insert ("\\listoftables\n"); insert ("\\listoffigures\n\n"); insert ("\\section{}\n\n"); insert ("\\end{document}"); pop_spot (); } define latex_book () { vinsert ("\\documentclass[%s]{book}\n\n", LaTeX_Book_Default_Options); insert ("\\begin{document}\n\n"); insert ("\\frontmatter\n"); insert ("\\title{"); push_spot (); insert ("}\n\n"); insert ("\\author{}\n\n"); insert ("\\date{}\n\n"); insert ("\\maketitle\n\n"); insert ("\\tableofcontents\n"); insert ("\\listoftables\n"); insert ("\\listoffigures\n\n"); insert ("\\mainmatter\n\n"); insert ("\\part{}\n\n"); insert ("\\chapter{}\n\n"); insert ("\\section{}\n\n"); insert ("\\end{document}"); pop_spot (); } define latex_letter () { vinsert ("\\documentclass[%s]{letter}\n\n", LaTeX_Letter_Default_Options); insert ("\\begin{document}\n\n"); insert ("\\address\n{\n% return address\n}\n"); insert ("\\signature{"); push_spot (); insert ("}\n"); insert ("\\begin{letter}\n{\n% recipient's address\n}\n"); insert ("\\opening{}\n\n"); insert ("\\closing{}\n"); insert ("\\ps{}\n"); insert ("\\cc{}\n"); insert ("\\encl{}\n"); insert ("\\end{letter}\n"); insert ("\\end{document}\n"); pop_spot (); } define latex_report () { vinsert ("\\documentclass[%s]{report}\n\n", LaTeX_Report_Default_Options); insert ("\\begin{document}\n\n"); insert ("\\title{}\n"); push_spot (); insert ("\\author{}\n\n"); insert ("\\date{}\n\n"); insert ("\\maketitle\n\n"); insert ("\\begin{abstract}\n"); insert ("\\end{abstract}\n\n"); insert ("\\tableofcontents\n"); insert ("\\listoftables\n"); insert ("\\listoffigures\n\n"); insert ("\\part{}\n\n"); insert ("\\chapter{}\n\n"); insert ("\\section{}\n\n"); insert ("\\end{document}"); pop_spot (); } define latex_slides () { vinsert ("\\documentclass[%s]{slides}\n\n", LaTeX_Slides_Default_Options); insert ("\\begin{document}\n\n"); insert ("\\title{"); push_spot (); insert ("}\n\\author{}\n"); insert ("\\date{}\n\n"); insert ("\\maketitle\n\n"); insert ("\\end{document}"); pop_spot (); } % Environments define latex_insert_package (msg) { variable spot, tmp; % look for the appropriate package push_spot (); bob (); spot = re_fsearch (sprintf ("\\usepackage.*{%s}", msg)); if (0 == spot) { % not found () = fsearch ("\\documentclass"); eol (); vinsert ("\n\\usepackage{%s}", msg); flush (sprintf ("Note: \\usepackage{%s} inserted.", msg)); } pop_spot (); } define latex_env_item () { variable tmp; if (TRUE == ITEM_LABEL) tmp = "item []"; else tmp = "item"; latex_insert (tmp); } define latex_env_itemize (what) { variable col = what_column () - 1; !if (strcmp (what, "itemize")) ITEM_LABEL = FALSE; else ITEM_LABEL = TRUE; insert (sprintf ("\\begin{%s}\n", what)); insert_spaces (col + LaTeX_Indent); latex_env_item (); push_spot (); insert ("\n"); insert_spaces (col); insert (sprintf ("\\end{%s}\n", what)); pop_spot (); } define latex_env_description () { latex_begin_end ("description", "", PUSH_SPOT, POP_SPOT); ITEM_LABEL = TRUE; } define latex_env_figure () { % if a prefix argument (e.g. ESC 1) was entered, % then insert the extended form variable col = what_column () - 1, arg = prefix_argument (-1); insert ("\\begin{figure}[htbp]\n"); insert_spaces (col + LaTeX_Indent); insert ("\\centering\n"); insert_spaces (col + LaTeX_Indent); push_spot (); if (arg == -1) insert ("\\includegraphics[scale=|width=|height=]{file.eps}\n"); else insert ("\\includegraphics{}\n"); insert_spaces (col + LaTeX_Indent); insert ("\\caption{}\n"); insert_spaces (col + LaTeX_Indent); insert ("\\label{fig:}\n"); insert_spaces (col); insert ("\\end{figure}"); latex_insert_package ("graphicx"); pop_spot (); } define latex_env_picture () { latex_begin_end ("picture", "(width,height)(x offset,y offset)", PUSH_SPOT, POP_SPOT); } define latex_env_custom () { variable custom = read_mini ("What environment?", Null_String, ""); latex_begin_end (custom, "", PUSH_SPOT, POP_SPOT); } % tables static variable table_columns = 3; define latex_table_row (do_push_spot) { variable i, col; col = what_column () - 1; if (do_push_spot) push_spot (); loop (table_columns - 1) { insert (" &"); } insert (" \\\\"); if (do_push_spot) pop_spot (); } define is_integer (str) { if (Integer_Type == _slang_guess_type (str)) return (integer (str)); else return -1; } define latex_table_template (flag_tabular) { variable col = what_column () - 1; variable i, align, table_col_str, ok; do { table_col_str = read_mini ("Columns?", Null_String, "4"); table_columns = is_integer (table_col_str); if (-1 == table_columns) { ok = FALSE; beep (); message ("Wrong value! "); } else ok = TRUE; } while (FALSE == ok); align = "{|"; loop (table_columns) align = align + "l|"; align = align + "}"; !if (flag_tabular) { insert ("\\begin{table}[htbp]\n"); insert_spaces (col + LaTeX_Indent); } insert ("\\centering\n"); insert_spaces (col + LaTeX_Indent); vinsert ("\\begin{tabular}%s\n", align); insert_spaces (col + LaTeX_Indent); insert ("\\hline\n"); insert_spaces (col + LaTeX_Indent); push_spot (); latex_table_row (NO_PUSH_SPOT); insert ("\n"); insert_spaces (col + LaTeX_Indent); insert ("\\hline\n"); if (flag_tabular) insert ("\\end{tabular}\n"); else { insert_spaces (col + LaTeX_Indent); insert ("\\end{tabular}\n"); insert_spaces (col + LaTeX_Indent); latex_cmd ("caption", NO_PUSH_SPOT); insert ("\n"); insert_spaces (col + LaTeX_Indent); insert ("\\label{tab:}\n"); insert_spaces (col); insert ("\\end{table}"); } pop_spot (); } define latex_complete_environment () { variable tmp = read_with_completion (std_env, "Which environment (TAB to list)?", "", "", 's'); switch (tmp) { case "description": latex_env_description (); } { case "figure": latex_env_figure (); } { case "minipage": latex_begin_end ("minipage", "[c]{\\linewidth}", TRUE, TRUE); } { case "tabular": latex_table_template (TRUE); } { case "table": latex_table_template (TRUE); } { case "thebibliography": latex_begin_end ("thebibliography", "{99}", TRUE, TRUE); } { latex_begin_end (tmp, "", TRUE, TRUE); } } % ----- % Paragraph define latex_par_frame () { variable str; str = "\\begin{boxedminipage}[c]{\\linewidth}\n"; latex_insert_tags (str, "\\end{boxedminipage}\n", PUSH_SPOT, POP_SPOT); latex_insert_package ("boxedminipage"); } define latex_par_bgcolour () { variable str; variable colour = read_mini ("What colour?", Null_String, ""); str = sprintf ("\\colorbox{%s}{", colour); latex_insert_tags (str, "}", PUSH_SPOT, POP_SPOT); latex_insert_package ("color"); } define latex_par_fgcolour () { variable str; variable colour = read_mini ("What colour?", Null_String, ""); str = sprintf ("\\textcolor{%s}{", colour); latex_insert_tags (str, "}", PUSH_SPOT, POP_SPOT); latex_insert_package ("color"); } define latex_includegraphics () { % if a prefix argument (e.g. ESC 1) was given, then insert % the extended form variable arg = prefix_argument (-1); if (arg == -1) % no prefix argument latex_cmd ("includegraphics", PUSH_SPOT); else latex_cmd ("includegraphics[scale=|width=|height=]", PUSH_SPOT); latex_insert_package ("graphicx"); } define latex_linebreak () { insert ("\\\\*["); push_spot (); insert ("]"); pop_spot (); } % misc define latex_insert_braces () { insert ("{}"); go_left_1 (); } define latex_insert_dollar () { insert ("$$"); go_left_1 (); } define latex_greek_letter () { variable tmp = expand_keystring (_Reserved_Key_Prefix); flush (sprintf ("Press %sm + letter (e.g. %sma = \\alpha)", tmp, tmp)); } define latex_arrow () { % right arrows if (LAST_CHAR == '>') { % 3 chars if (blooking_at ("|--")) { () = left (3); deln (3); insert ("{\\longmapsto}"); return; } % 2 chars if (blooking_at ("--")) { go_left (2); deln (2); insert ("{\\longrightarrow}"); return; } if (blooking_at ("==")) { go_left (2); deln (2); insert ("{\\Longrightarrow}"); return; } if (blooking_at ("|-")) { () = left (2); deln (2); insert ("{\\mapsto}"); return; } % left-right if (blooking_at ("< -")) { go_left (3); deln (3); insert ("{\\leftrightarrow}"); return; } if (blooking_at ("< =")) { go_left (3); deln (3); insert ("{\\Leftrightarrow}"); return; } if (blooking_at ("-")) { go_left (1); deln (1); insert ("{\\rightarrow}"); return; } if (blooking_at ("=")) { go_left (1); deln (1); insert ("{\\Rightarrow}"); return; } insert (">"); } % simple left arrows if (LAST_CHAR == '-') { if (blooking_at ("< -")) { go_left (3); deln (3); insert ("{\\longleftarrow}"); return; } if (blooking_at ("<")) { go_left (1); deln (1); insert ("{\\leftarrow}"); return; } insert ("-"); } % double left arrows if (LAST_CHAR == '=') { if (blooking_at ("< =")) { go_left (3); deln (3); insert ("{\\Longleftarrow}"); return; } if (blooking_at ("<")) { go_left (1); deln (1); insert ("{\\Leftarrow}"); return; } insert ("="); } } define toggle_math_mode () { $1 = "LaTeX-Mode"; if (FALSE == Math_Mode) { Math_Mode = TRUE; definekey ("latex_insert_math", "`", $1); flush ("Math mode enabled."); } else { Math_Mode = FALSE; undefinekey ("`", $1); definekey ("quoted_insert", "`", $1); flush ("Math mode disabled."); } } define latex_url () { latex_insert_tags ("\\url{", "}", PUSH_SPOT, POP_SPOT); latex_insert_package ("url"); } define latex_indent_line () { variable arg = prefix_argument (-1); push_spot (); bol (); if (arg == -1) % no prefix argument insert_spaces (LaTeX_Indent); else loop (LaTeX_Indent) if (' ' == what_char ()) call ("delete_char_cmd"); pop_spot (); } define latex_indent_environment () { if (FALSE == latex_is_within_environment ()) error ("Not within an environment!"); push_spot (); goto_line (benv_line); down (1); while (what_line () < eenv_line) { latex_indent_line (); () = down (1); } pop_spot (); } % let's finish % this function is for the Template/Packages menu define latex_babel () { variable tmp = sprintf ("\\usepackage[%s]{babel}\n", LaTeX_Default_Language); insert (tmp); } define latex_index_word () { variable tmp; if ( (0 == markp ()) and % no region defined (0 == string_match (" \t\n", char (what_char()), 1)) ) { % ok, the cursor isn't on a space () = right (1); bskip_word (); push_mark (); skip_word (); tmp = bufsubstr (); pop_mark_0 (); } else { beep (); flush ("The cursor is not on a word."); return; } bskip_word (); insert ("\\index{" + tmp + "}"); } define latex_makeidx () { push_spot (); bob (); if (0 == fsearch ("\\documentclass")) { error ("No \\documentclass definition yet."); return; } () = down (1); insert ("\\usepackage{makeidx}\n"); if (0 == fsearch ("\\begin{document}")) { error ("No \\begin{document} definition yet."); return; } insert ("\\makeindex\n\n"); eob (); if (0 == bsearch ("\\end{document}")) { error ("No \\end{document} definition yet."); return; } insert ("\\printindex\n\n"); pop_spot (); } define latex_index_subentry () { latex_cmd ("index", TRUE); if ('}' != what_char ()) () = left (1); insert ("!"); } define latex_index_beginrange () { latex_cmd ("index", TRUE); if ('}' != what_char ()) () = left (1); insert ("|("); } define latex_index_endrange () { latex_cmd ("index", TRUE); if ('}' != what_char ()) () = left (1); insert ("|)"); } define latex_index_sortorder () { latex_cmd ("index", TRUE); if ('}' != what_char ()) () = left (1); insert ("@"); } define latex_index_specialformat () { latex_cmd ("index", TRUE); if ('}' != what_char ()) () = left (1); insert ("|"); } % ----- % Document structure static define getline () { variable line, numline; push_mark (); eol (); line = bufsubstr (); pop_mark_0 (); numline = what_line (); return (line, numline); } % this one creates the buffer that contains the % document tree (structure) define latex_build_doc_tree () { variable i, found, line, numline, num_sections = 0, level = -1, case_search = CASE_SEARCH; variable sections = String_Type [8]; LaTeX_Buffer = whatbuf (); sw2buf (LaTeX_Tree_Buffer); set_readonly (0); erase_buffer (); insert ("Document structure ('q' to quit, or double click to select):\n\n"); sw2buf (LaTeX_Buffer); push_spot (); bob (); % let's start with \begin{document} if (0 == fsearch ("\\begin{document}")) error ("No \\begin{document} found!"); % get the line (line, numline) = getline (); sw2buf (LaTeX_Tree_Buffer); % TODO: find a better solution vinsert ("%6d%s", numline, " "); insert (line + "\n"); sections [0] = "\\part{"; sections [1] = "\\chapter{"; sections [2] = "\\section{"; sections [3] = "\\subsection{"; sections [4] = "\\subsubsection{"; sections [5] = "\\paragraph{"; sections [6] = "\\subparagraph{"; sections [7] = "\\label{"; % now, let's search for sectioning commands. % The algorithm is horrible, but it works and is probably more % efficient than the "right" one. CASE_SEARCH = 1; for (i = 0; i < 8; i++) { sw2buf (LaTeX_Buffer); bob (); do { found = FALSE; sw2buf (LaTeX_Buffer); if (0 != fsearch (sections [i])) { if (-1 == level) level = i; % first level of indentation if (0 == bfind ("%")) { % not in a comment (line, numline) = getline (); num_sections++; sw2buf (LaTeX_Tree_Buffer); vinsert ("%6d%s", numline, " "); insert_spaces ((i - level + 1) * LaTeX_Indent); insert (line + "\n"); } found = TRUE; () = down (1); } } while (TRUE == found); } CASE_SEARCH = case_search; % ok, now the tree is done; let's sort it sw2buf (LaTeX_Tree_Buffer); bob (); () = down (2); push_mark (); () = down (num_sections); eol (); sort (); pop_mark_0 (); set_readonly (1); latex_mode (); setbuf_info (getbuf_info () & 0xFE); % not modified sw2buf (LaTeX_Buffer); pop_spot (); } static define update_tree_hook () { line_mark = create_line_mark (color_number ("menu_selection")); } define latex_browse_tree () { variable tmode = "tree"; !if (keymap_p (tmode)) make_keymap (tmode); definekey ("delbuf (whatbuf())", "q", tmode); definekey ("goto_error_line", "\r", tmode); latex_build_doc_tree (); sw2buf (LaTeX_Tree_Buffer); set_buffer_hook ("update_hook", &update_tree_hook); set_readonly (1); use_keymap (tmode); set_mode (tmode, 0); set_buffer_hook ("mouse_2click", "goto_error_line"); } % The Menu % ----- % copied from popups.sl static define add_files_popup_with_callback (parent, popup, dir, pattern) { variable files, i; if (strcmp ("y", LaTeX_Load_Modules)) return; files = listdir (dir); if (files == NULL) return; i = where (array_map (Int_Type, &string_match, files, pattern, 1)); if (length (i) == 0) return; files = files [i]; files = files [array_sort (files)]; menu_append_popup (parent, popup); popup = parent + "." + popup; foreach (files) { variable file = (); file = path_sans_extname (file); menu_append_popup (popup, file); () = evalfile (dircat (LaTeX_Modules_Dir, file)); } } % ----- define latex_goto_next_paragraph () { if (0 != re_fsearch ("^$")) () = right (1); } define latex_goto_prev_paragraph () { if (0 != re_bsearch ("^$")) () = left (1); } % ----- define init_menu (menu) { variable tmp; % templates menu_append_popup (menu, "&Templates"); $1 = sprintf ("%s.&Templates", menu); menu_append_item ($1, "&article", "latex_article"); menu_append_item ($1, "&book", "latex_book"); menu_append_item ($1, "&letter", "latex_letter"); menu_append_item ($1, "&report", "latex_report"); menu_append_item ($1, "&slides", "latex_slides"); % templates/packages % these aren't bound to any key menu_append_popup ($1, "&Packages"); $1 = sprintf ("%s.&Templates.&Packages", menu); menu_append_item ($1, "alltt", "latex_insert_newline (\"usepackage\{alltt\}\")"); menu_append_item ($1, "amsmath", "latex_insert_newline (\"usepackage\{amsmath\}\")"); menu_append_item ($1, "babel", "latex_babel"); menu_append_item ($1, "booktabs", "latex_insert_newline (\"usepackage\{booktabs\}\")"); menu_append_item ($1, "calc", "latex_insert_newline (\"usepackage\{calc\}\")"); menu_append_item ($1, "color", "latex_insert_newline (\"usepackage\{color\}\")"); tmp = "latex_insert_newline (\"usepackage\{epic\}\");"; tmp = tmp + "latex_insert_newline (\"usepackage\{eepic\}\")"; menu_append_item ($1, "eepic", tmp); tmp = "latex_insert_newline (\"usepackage\{fancyhdr\}\");"; tmp = tmp + "latex_insert_newline (\"pagestyle\{fancy\}\")"; menu_append_item ($1, "fancyhdr", tmp); menu_append_item ($1, "fancyvrb", "latex_insert_newline (\"usepackage\{fancyvrb\}\")"); menu_append_item ($1, "geometry", "latex_insert_newline (\"usepackage\{geometry\}\")"); menu_append_item ($1, "graphicx", "latex_insert_newline (\"usepackage\{graphicx\}\")"); menu_append_item ($1, "hyperref", "latex_insert_newline (\"usepackage" + "[colorlinks,urlcolor=blue]\{hyperref\}\")"); menu_append_item ($1, "inputenc", "latex_insert_newline (\"usepackage[latin1]\{inputenc\}}\")"); menu_append_item ($1, "longtable", "latex_insert_newline (\"usepackage\{longtable\}\")"); menu_append_item ($1, "makeidx", "latex_insert_newline (\"usepackage\{makeidx\}\")"); menu_append_item ($1, "moreverb", "latex_insert_newline (\"usepackage\{moreverb\}\")"); menu_append_item ($1, "makeidx", "latex_makeidx"); menu_append_item ($1, "psfrag", "latex_insert_newline (\"usepackage\{psfrag\}\")"); menu_append_item ($1, "pslatex", "latex_insert_newline (\"usepackage\{pslatex\}\")"); menu_append_item ($1, "rotating", "latex_insert_newline (\"usepackage\{rotating\}\")"); menu_append_item ($1, "url", "latex_insert_newline (\"usepackage\{url\}\")"); % environments menu_append_popup (menu, "&Environments"); $1 = sprintf ("%s.&Environments", menu); menu_append_item ($1, "&array", "latex_begin_end (\"array\", \"{ll}\", 1, 1)"); menu_append_item ($1, "¢er", "latex_begin_end (\"center\", \"\", 1, 1)"); menu_append_item ($1, "&description", "latex_env_itemize (\"description\")"); menu_append_item ($1, "displaymat&h", "latex_begin_end (\"displaymath\", \"\", 1, 1)"); menu_append_item ($1, "&enumerate", "latex_begin_end (\"enumerate\", \"\", 1, 1)"); menu_append_item ($1, "eq&narray", "latex_begin_end (\"eqnarray\", \"\", 1, 1)"); menu_append_item ($1, "e&quation", "latex_begin_end (\"equation\", \"\", 1, 1)"); menu_append_item ($1, "&figure", "latex_env_figure ()"); menu_append_item ($1, "flush&left", "latex_begin_end (\"flushleft\", \"\", 1, 1)"); menu_append_item ($1, "flush&Right", "latex_begin_end (\"flushright\", \"\", 1, 1)"); menu_append_item ($1, "&Itemize", "latex_env_itemize (\"itemize\")"); menu_append_item ($1, "\\&item", "latex_env_item"); % menu_append_item ($1, "&Letter", "latex_env_letter ()"); menu_append_item ($1, "&List", "latex_begin_end (\"list\", \"\", 1, 1)"); menu_append_item ($1, "&minipage", "latex_begin_end (\"minipage\", \"[c]{\\\\linewidth}\", 1, 1)"); menu_append_item ($1, "&picture", "latex_begin_end (\"picture\", \"\", 1, 1)"); menu_append_item ($1, "&Quotation", "latex_begin_end (\"quotation\", \"\", 1, 1)"); menu_append_item ($1, "qu&ote", "latex_begin_end (\"quote\", \"\", 1, 1)"); menu_append_item ($1, "ta&bbing", "latex_begin_end (\"tabbing\", \"\", 1, 1)"); menu_append_item ($1, "&table", "latex_table_template (0)"); menu_append_item ($1, "table &row", "latex_table_row (1)"); menu_append_item ($1, "tab&ular", "latex_table_template (1)"); menu_append_item ($1, "thebibliograph&y", "latex_begin_end (\"thebibliography\", \"{99}\", 1, 1)"); menu_append_item ($1, "t&Heorem", "latex_begin_end (\"theorem\", \"\", 1, 1)"); menu_append_item ($1, "titlepa&ge", "latex_begin_end (\"titlepage\", \"\", 1, 1)"); menu_append_item ($1, "&verbatim", "latex_begin_end (\"verbatim\", \"\", 1, 1)"); menu_append_item ($1, "ver&se", "latex_begin_end (\"verse\", \"\", 1, 1)"); menu_append_item ($1, "&Custom...", "latex_env_custom"); menu_append_item ($1, "re&Name...", "latex_rename_environment"); menu_append_item ($1, "in&Dent", "latex_indent_environment"); % font menu_append_popup (menu, "&Font"); $1 = sprintf ("%s.&Font", menu); menu_append_item ($1, "\\text&rm", "latex_cmd (\"textrm\", 1)"); menu_append_item ($1, "\\text&it", "latex_cmd (\"textit\", 1)"); menu_append_item ($1, "\\&emph", "latex_cmd (\"emph\", 1)"); menu_append_item ($1, "\\text&md", "latex_cmd (\"textmd\", 1)"); menu_append_item ($1, "\\text&bf", "latex_cmd (\"textmd\", 1)"); menu_append_item ($1, "\\text&up", "latex_cmd (\"textup\", 1)"); menu_append_item ($1, "\\text&sl", "latex_cmd (\"textsl\", 1)"); menu_append_item ($1, "\\texts&f", "latex_cmd (\"textsf\", 1)"); menu_append_item ($1, "\\texts&c", "latex_cmd (\"textsc\", 1)"); menu_append_item ($1, "\\text&tt", "latex_cmd (\"texttt\", 1)"); menu_append_item ($1, "\\&verb", "latex_insert_tags (\"\\\\verb|\", \"|\", 1, 1)"); menu_append_item ($1, "\\text&normal", "latex_cmd (\"textnormal\", 1)"); menu_append_item ($1, "\\un&derline", "latex_cmd (\"underline\", 1)"); menu_append_item ($1, "&Delete", "latex_modify_font (\"\")"); menu_append_item ($1, "re&Name", "latex_rename_font"); % Font popups: % font/size, font/environment, font/math menu_append_popup ($1, "&Size"); menu_append_popup ($1, "As &Environment"); menu_append_popup ($1, "&Math"); $1 = sprintf ("%s.&Font.&Size", menu); menu_append_item ($1, "\\&tiny", "latex_cmd (\"tiny\", 1)"); menu_append_item ($1, "\\s&criptsize", "latex_cmd (\"scriptsize\", 1)"); menu_append_item ($1, "\\&footnotesize", "latex_cmd (\"footnotesize\", 1)"); menu_append_item ($1, "\\&small", "latex_cmd (\"small\", 1)"); menu_append_item ($1, "\\&normalsize", "latex_cmd (\"normalsize\", 1)"); menu_append_item ($1, "\\&large", "latex_cmd (\"large\", 1)"); menu_append_item ($1, "\\&Large", "latex_cmd (\"Large\", 1)"); menu_append_item ($1, "\\L&ARGE", "latex_cmd (\"LARGE\", 1)"); menu_append_item ($1, "\\&huge", "latex_cmd (\"huge\", 1)"); menu_append_item ($1, "\\&Huge", "latex_cmd (\"Huge\", 1)"); menu_append_item ($1, "re&Size", "latex_resize_font"); % font/environment $1 = sprintf ("%s.&Font.As &Environment", menu); menu_append_item ($1, "&rmfamily", "latex_begin_end (\"rmfamily\", \"\", 1, 1)"); menu_append_item ($1, "&itshape", "latex_begin_end (\"itshape\", \"\", 1, 1)"); menu_append_item ($1, "&mdseries", "latex_begin_end (\"mdseries\", \"\", 1, 1)"); menu_append_item ($1, "&bfseries", "latex_begin_end (\"bfseries\", \"\", 1, 1)"); menu_append_item ($1, "&upshape", "latex_begin_end (\"upshape\", \"\", 1, 1)"); menu_append_item ($1, "&slshape", "latex_begin_end (\"slshape\", \"\", 1, 1)"); menu_append_item ($1, "s&ffamily", "latex_begin_end (\"sffamily\", \"\", 1, 1)"); menu_append_item ($1, "s&cshape", "latex_begin_end (\"scshape\", \"\", 1, 1)"); menu_append_item ($1, "&ttfamily", "latex_begin_end (\"ttfamily\", \"\", 1, 1)"); menu_append_item ($1, "&normalfont", "latex_begin_end (\"normalfont\", \"\", 1, 1)"); % font/math $1 = sprintf ("%s.&Font.&Math", menu); menu_append_item ($1, "\\mathr&m", "latex_cmd (\"mathrm\", 1)"); menu_append_item ($1, "\\math&bf", "latex_cmd (\"mathbf\", 1)"); menu_append_item ($1, "\\math&sf", "latex_cmd (\"mathsf\", 1)"); menu_append_item ($1, "\\math&tt", "latex_cmd (\"mathtt\", 1)"); menu_append_item ($1, "\\math&it", "latex_font_mathit"); menu_append_item ($1, "\\math&normal", "latex_cmd (\"mathnormal\", 1)"); menu_append_item ($1, "\\mathversion{bold}", "latex_cmd (\"mathversion{bold}\", 1)"); menu_append_item ($1, "\\mathversion{normal}", "latex_cmd (\"mathversion{normal}\", 1)"); % sections menu_append_popup (menu, "&Sections"); $1 = sprintf ("%s.&Sections", menu); menu_append_item ($1, "\\p&art", "latex_cmd (\"part\", 1)"); menu_append_item ($1, "\\&chapter", "latex_cmd (\"chapter\", 1)"); menu_append_item ($1, "\\§ion", "latex_cmd (\"section\", 1)"); menu_append_item ($1, "\\s&ubsection", "latex_cmd (\"subsection\", 1)"); menu_append_item ($1, "\\su&bsubsection", "latex_cmd (\"subsubsection\", 1)"); menu_append_item ($1, "\\¶graph", "latex_cmd (\"paragraph\", 1)"); menu_append_item ($1, "\\subparagrap&h", "latex_cmd (\"subparagraph\", 1)"); % paragraph menu_append_popup (menu, "&Paragraph"); $1 = sprintf ("%s.&Paragraph", menu); menu_append_item ($1, "F&ramed Paragraph", "latex_par_frame"); menu_append_item ($1, "&background Colour", "latex_par_bgcolour"); menu_append_item ($1, "&foreground Colour", "latex_par_fgcolour"); menu_append_item ($1, "\\par&indent", "insert (\"\\\\setlength{\\\\parindent}{0pt}\\n\")"); menu_append_item ($1, "\\par&skip", "insert (\"\\\\setlength{\\\\parskip}{3pt}\\n\")"); menu_append_item ($1, "\\&marginpar", "latex_cmd (\"marginpar\", 1)"); menu_append_item ($1, "\\foot¬e", "latex_cmd (\"footnote\", 1)"); menu_append_item ($1, "\\inc&ludegraphics", "latex_includegraphics"); % paragraph popups: % paragraph/margins, paragraph/breaks, paragraph/boxes, paragraph/spaces menu_append_popup ($1, "&Margins"); menu_append_popup ($1, "Brea&ks"); menu_append_popup ($1, "&Spaces"); menu_append_popup ($1, "Bo&xes"); $1 = sprintf ("%s.&Paragraph.&Margins", menu); menu_append_item ($1, "\\&leftmargin", "latex_cmd (\"setlength{\\\\leftmargin}\", 1)"); menu_append_item ($1, "\\&rightmargin", "latex_cmd (\"setlength{\\\\rightmargin}\", 1)"); menu_append_item ($1, "\\&evensidemargin", "latex_cmd (\"setlength{\\\\evensidemargin}\", 1)"); menu_append_item ($1, "\\&oddsidemargin", "latex_cmd (\"setlength{\\\\oddsidemargin}\", 1)"); menu_append_item ($1, "\\&topmargin", "latex_cmd (\"setlength{\\\\topmargin}\", 1)"); menu_append_item ($1, "\\text&width", "latex_cmd (\"setlength{\\\\textwidth}\", 1)"); menu_append_item ($1, "\\text&height", "latex_cmd (\"setlength{\\\\textheight}\", 1)"); $1 = sprintf ("%s.&Paragraph.Brea&ks", menu); menu_append_item ($1, "\\new&line", "insert (\"\\\\newline\\n\")"); menu_append_item ($1, "\\\\&*[]", "latex_linebreak"); menu_append_item ($1, "\\line&break", "insert (\"\\\\linebreak[1]\\n\")"); menu_append_item ($1, "\\new&page", "insert (\"\\\\newpage\\n\")"); menu_append_item ($1, "\\&clearpage", "insert (\"\\\\clearpage\\n\")"); menu_append_item ($1, "\\clear&doublepage", "insert (\"\\\\cleardoublepage\\n\")"); menu_append_item ($1, "\\pageb&reak", "insert (\"\\\\pagebreak\\n\")"); menu_append_item ($1, "\\&nolinebreak", "insert (\"\\\\nolinebreak[1]\\n\")"); menu_append_item ($1, "\\n&opagebreak", "insert (\"\\\\nopagebreak\\n\")"); menu_append_item ($1, "\\&enlargethispage", "insert (\"\\\\enlargethispage\\n\")"); % paragraph/spaces $1 = sprintf ("%s.&Paragraph.&Spaces", menu); menu_append_item ($1, "\\&frenchspacing", "insert (\"\\\\frenchspacing\\n\")"); menu_append_item ($1, "\\&@.", "insert (\"\\\\@.\\n\")"); menu_append_item ($1, "\\&dotfill", "insert (\"\\\\dotfill\\n\")"); menu_append_item ($1, "\\&hfill", "insert (\"\\\\hfill\\n\")"); menu_append_item ($1, "\\h&rulefill", "insert (\"\\\\hrulefill\\n\")"); menu_append_item ($1, "\\&smallskip", "insert (\"\\\\smallskip\\n\")"); menu_append_item ($1, "\\&medskip", "insert (\"\\\\medskip\\n\")"); menu_append_item ($1, "\\&bigskip", "insert (\"\\\\bigskip\\n\")"); menu_append_item ($1, "\\&vfill", "insert (\"\\\\vfill\\n\")"); menu_append_item ($1, "\\hspace", "insert (\"\\\\hspace\\n\")"); menu_append_item ($1, "\\vs&pace", "insert (\"\\\\vspace\\n\")"); menu_append_item ($1, "Set \\baselines&kip", "insert (\"\\\\baselineskip 2\\\\baselineskip\\n\")"); % paragraph/boxes $1 = sprintf ("%s.&Paragraph.Bo&xes", menu); menu_append_item ($1, "\\&fbox", "latex_cmd (\"fbox\", 1)"); menu_append_item ($1, "\\f&ramebox", "latex_cmd (\"framebox[\\\\width][c]\", 1)"); menu_append_item ($1, "\\&mbox", "latex_cmd (\"mbox\", 1)"); menu_append_item ($1, "\\ma&kebox", "latex_cmd (\"makebox[\\\\width][c]\", 1)"); menu_append_item ($1, "\\&newsavebox", "latex_cmd (\"newsavebox\", 1)"); menu_append_item ($1, "\\ru&le", "latex_cmd (\"rule{\\\\linewidth}\", 1)"); menu_append_item ($1, "\\save&box", "latex_cmd (\"savebox{}[\\\\linewidth][c]\", 1)"); menu_append_item ($1, "\\&sbox", "latex_cmd (\"sbox{}\", 1)"); menu_append_item ($1, "\\&usebox", "latex_cmd (\"usebox\", 1)"); % links menu_append_popup (menu, "&Links"); $1 = sprintf ("%s.&Links", menu); menu_append_item ($1, "\\&label", "latex_cmd (\"label\", 1)"); menu_append_item ($1, "\\&ref", "latex_cmd (\"ref\", 1)"); menu_append_item ($1, "\\&cite", "latex_cmd (\"cite\", 1)"); menu_append_item ($1, "\\&nocite", "latex_cmd (\"nocite\", 1)"); menu_append_item ($1, "\\&url", "latex_url"); % index menu_append_popup (menu, "&Index"); $1 = sprintf ("%s.&Index", menu); menu_append_item ($1, "\\&index", "latex_cmd (\"index\", 1)"); menu_append_item ($1, "\\&index{entry!subentry}", "latex_index_subentry"); menu_append_item ($1, "\\&index{entry|(}", "latex_index_beginrange"); menu_append_item ($1, "\\&index{entry|)}", "latex_index_endrange"); menu_append_item ($1, "\\&index{sortentry@textentry)}", "latex_index_sortorder"); menu_append_item ($1, "\\&index{entry|format)}", "latex_index_specialformat"); % math menu_append_popup (menu, "&Math"); $1 = sprintf ("%s.&Math", menu); % math popups: % math/greek letter, math/accents, math/binary relations, % math/operators, math/arrows, math/misc menu_append_item ($1, "&Toggle Math Mode", "toggle_math_mode"); menu_append_item ($1, "&Greek Letter...", "latex_greek_letter"); menu_append_item ($1, "&_{} subscript", "latex_insert_tags (\"_{\", \"}\", 1, 1)"); menu_append_item ($1, "&^{} superscript", "latex_insert_tags (\"^{\", \"}\", 1, 1)"); menu_append_item ($1, "\\&frac", "latex_insert_tags (\"\\\\frac{\", \"}{}\", 1, 1)"); menu_append_item ($1, "\\&int", "latex_insert_tags (\"\\\\int_{\", \"}^{}\", 1, 1)"); menu_append_item ($1, "\\&lim", "latex_insert_tags (\"\\\\lim_{\", \"}\", 1, 1)"); menu_append_item ($1, "\\&oint", "latex_insert_tags (\"\\\\oint_{\", \"}^{}\", 1, 1)"); menu_append_item ($1, "\\&prod", "latex_insert_tags (\"\\\\prod_{\", \"}^{}\", 1, 1)"); menu_append_item ($1, "\\&sum", "latex_insert_tags (\"\\\\sum_{\", \"}^{}\", 1, 1)"); menu_append_item ($1, "\\s&qrt", "latex_insert_tags (\"\\\\sqrt[]{\", \"}\", 1, 1)"); menu_append_popup ($1, "&Accents"); menu_append_popup ($1, "&Delimiters"); menu_append_popup ($1, "&Functions"); menu_append_popup ($1, "Binary &Relations"); menu_append_popup ($1, "Binary &Operators"); menu_append_popup ($1, "S&paces"); menu_append_popup ($1, "Arro&ws"); menu_append_popup ($1, "&Misc"); % math/accents $1 = sprintf ("%s.&Math.&Accents", menu); menu_append_item ($1, "\\hat", "latex_cmd (\"hat\", 1)"); menu_append_item ($1, "\\acute", "latex_cmd (\"acute\", 1)"); menu_append_item ($1, "\\bar", "latex_cmd (\"bar\", 1)"); menu_append_item ($1, "\\dot", "latex_cmd (\"dot\", 1)"); menu_append_item ($1, "\\breve", "latex_cmd (\"breve\", 1)"); menu_append_item ($1, "\\check", "latex_cmd (\"check\", 1)"); menu_append_item ($1, "\\grave", "latex_cmd (\"grave\", 1)"); menu_append_item ($1, "\\vec", "latex_cmd (\"vec\", 1)"); menu_append_item ($1, "\\ddot", "latex_cmd (\"ddot\", 1)"); menu_append_item ($1, "\\tilde", "latex_cmd (\"tilde\", 1)"); % constructs menu_append_item ($1, "\\widetilde", "latex_cmd (\"widetilde\", 1)"); menu_append_item ($1, "\\widehat", "latex_cmd (\"widehat\", 1)"); menu_append_item ($1, "\\overleftarrow", "latex_cmd (\"overleftarrow\", 1)"); menu_append_item ($1, "\\overrightarrow", "latex_cmd (\"overrightarrow\", 1)"); menu_append_item ($1, "\\overline", "latex_cmd (\"overline\", 1)"); menu_append_item ($1, "\\underline", "latex_cmd (\"underline\", 1)"); menu_append_item ($1, "\\overbrace", "latex_cmd (\"overbrace\", 1)"); menu_append_item ($1, "\\underbrace", "latex_cmd (\"underbrace\", 1)"); % math/delimiters $1 = sprintf ("%s.&Math.&Delimiters", menu); menu_append_item ($1, "\\left (", "latex_insert (\"left(\")"); menu_append_item ($1, "\\right)", "latex_insert (\"right)\")"); menu_append_item ($1, "\\left[", "latex_insert (\"left[\")"); menu_append_item ($1, "\\right]", "latex_insert (\"right[\")"); menu_append_item ($1, "\\left{", "latex_insert (\"left\\\\{\")"); menu_append_item ($1, "\\right}", "latex_insert (\"right\\\\}\")"); menu_append_item ($1, "\\rmoustache", "latex_insert (\"rmoustache\")"); menu_append_item ($1, "\\lmoustache", "latex_insert (\"lmoustache\")"); menu_append_item ($1, "\\rgroup", "latex_insert (\"rgroup\")"); menu_append_item ($1, "\\lgroup", "latex_insert (\"lgroup\")"); menu_append_item ($1, "\\arrowvert", "latex_insert (\"arrowvert\")"); menu_append_item ($1, "\\Arrowvert", "latex_insert (\"Arrowvert\")"); menu_append_item ($1, "\\bracevert", "latex_insert (\"bracevert\")"); menu_append_item ($1, "\\lfloor", "latex_insert (\"lfloor\")"); menu_append_item ($1, "\\rfloor", "latex_insert (\"rfloor\")"); menu_append_item ($1, "\\lceil", "latex_insert (\"lceil\")"); menu_append_item ($1, "\\rceil", "latex_insert (\"rceil\")"); menu_append_item ($1, "\\langle", "latex_insert (\"langle\")"); menu_append_item ($1, "\\rangle", "latex_insert (\"rangle\")"); menu_append_item ($1, "\\|", "latex_insert (\"\\|\")"); % math/functions $1 = sprintf ("%s.&Math.&Functions", menu); menu_append_item ($1, "\\arccos", "latex_loglike (\"\\arccos\")"); menu_append_item ($1, "\\arcsin", "latex_loglike (\"\\arcsin\")"); menu_append_item ($1, "\\arctan", "latex_loglike (\"\\arctan\")"); menu_append_item ($1, "\\arg", "latex_loglike (\"\\arg\")"); menu_append_item ($1, "\\cos", "latex_loglike (\"\\cos\")"); menu_append_item ($1, "\\cosh", "latex_loglike (\"\\cosh\")"); menu_append_item ($1, "\\cot", "latex_loglike (\"\\cot\")"); menu_append_item ($1, "\\coth", "latex_loglike (\"\\coth\")"); menu_append_item ($1, "\\csc", "latex_loglike (\"\\csc\")"); menu_append_item ($1, "\\deg", "latex_loglike (\"\\deg\")"); menu_append_item ($1, "\\det", "latex_loglike (\"\\det\")"); menu_append_item ($1, "\\dim", "latex_loglike (\"\\dim\")"); menu_append_item ($1, "\\exp", "latex_loglike (\"\\exp\")"); menu_append_item ($1, "\\gcd", "latex_loglike (\"\\gcd\")"); menu_append_item ($1, "\\hom", "latex_loglike (\"\\hom\")"); menu_append_item ($1, "\\inf", "latex_loglike (\"\\inf\")"); menu_append_item ($1, "\\ker", "latex_loglike (\"\\ker\")"); menu_append_item ($1, "\\lg", "latex_loglike (\"\\lg\")"); menu_append_item ($1, "\\lim", "latex_loglike (\"\\lim\")"); menu_append_item ($1, "\\liminf", "latex_loglike (\"\\liminf\")"); menu_append_item ($1, "\\limsup", "latex_loglike (\"\\limsup\")"); menu_append_item ($1, "\\ln", "latex_loglike (\"\\ln\")"); menu_append_item ($1, "\\log", "latex_loglike (\"\\log\")"); menu_append_item ($1, "\\max", "latex_loglike (\"\\max\")"); menu_append_item ($1, "\\min", "latex_loglike (\"\\min\")"); menu_append_item ($1, "\\Pr", "latex_loglike (\"\\Pr\")"); menu_append_item ($1, "\\sec", "latex_loglike (\"\\sec\")"); menu_append_item ($1, "\\sin", "latex_loglike (\"\\sin\")"); menu_append_item ($1, "\\sinh", "latex_loglike (\"\\sinh\")"); menu_append_item ($1, "\\sup", "latex_loglike (\"\\sup\")"); menu_append_item ($1, "\\tan", "latex_loglike (\"\\tan\")"); menu_append_item ($1, "\\tanh", "latex_loglike (\"\\tanh\")"); % math/binary relations $1 = sprintf ("%s.&Math.Binary &Relations", menu); menu_append_item ($1, "\\leq", "latex_insert (\"leq\")"); menu_append_item ($1, "\\geq", "latex_insert (\"geq\")"); menu_append_item ($1, "\\equiv", "latex_insert (\"equiv\")"); menu_append_item ($1, "\\models", "latex_insert (\"models\")"); menu_append_item ($1, "\\prec", "latex_insert (\"prec\")"); menu_append_item ($1, "\\succ", "latex_insert (\"succ\")"); menu_append_item ($1, "\\sim", "latex_insert (\"sim\")"); menu_append_item ($1, "\\perp", "latex_insert (\"perp\")"); menu_append_item ($1, "\\preceq", "latex_insert (\"preceq\")"); menu_append_item ($1, "\\succeq", "latex_insert (\"succeq\")"); menu_append_item ($1, "\\simeq", "latex_insert (\"simeq\")"); menu_append_item ($1, "\\mid", "latex_insert (\"mid\")"); menu_append_item ($1, "\\ll", "latex_insert (\"ll\")"); menu_append_item ($1, "\\gg", "latex_insert (\"gg\")"); menu_append_item ($1, "\\asymp", "latex_insert (\"asymp\")"); menu_append_item ($1, "\\parallel", "latex_insert (\"parallel\")"); menu_append_item ($1, "\\subset", "latex_insert (\"subset\")"); menu_append_item ($1, "\\supset", "latex_insert (\"supset\")"); menu_append_item ($1, "\\approx", "latex_insert (\"approx\")"); menu_append_item ($1, "\\bowtie", "latex_insert (\"bowtie\")"); menu_append_item ($1, "\\subseteq", "latex_insert (\"subseteq\")"); menu_append_item ($1, "\\supseteq", "latex_insert (\"supseteq\")"); menu_append_item ($1, "\\cong", "latex_insert (\"cong\")"); menu_append_item ($1, "\\Join", "latex_insert (\"Join\")"); menu_append_item ($1, "\\sqsubset", "latex_insert (\"sqsubset\")"); menu_append_item ($1, "\\sqsupset", "latex_insert (\"sqsupset\")"); menu_append_item ($1, "\\neq", "latex_insert (\"neq\")"); menu_append_item ($1, "\\smile", "latex_insert (\"smile\")"); menu_append_item ($1, "\\sqsubseteq", "latex_insert (\"sqsubseteq\")"); menu_append_item ($1, "\\sqsupseteq", "latex_insert (\"sqsupseteq\")"); menu_append_item ($1, "\\doteq", "latex_insert (\"doteq\")"); menu_append_item ($1, "\\frown", "latex_insert (\"frown\")"); menu_append_item ($1, "\\in", "latex_insert (\"in\")"); menu_append_item ($1, "\\ni", "latex_insert (\"ni\")"); menu_append_item ($1, "\\propto", "latex_insert (\"propto\")"); menu_append_item ($1, "\\vdash", "latex_insert (\"vdash \")"); menu_append_item ($1, "\\dashv", "latex_insert (\"dashv \")"); menu_append_item ($1, "\\not", "latex_insert (\"not \")"); % math/binary operators $1 = sprintf ("%s.&Math.Binary &Operators", menu); menu_append_item ($1, "\\pm", "latex_insert (\"pm\")"); menu_append_item ($1, "\\cap", "latex_insert (\"cap\")"); menu_append_item ($1, "\\diamond", "latex_insert (\"diamond\")"); menu_append_item ($1, "\\oplus", "latex_insert (\"oplus\")"); menu_append_item ($1, "\\mp", "latex_insert (\"mp\")"); menu_append_item ($1, "\\cup", "latex_insert (\"cup\")"); menu_append_item ($1, "\\bigtriangleup", "latex_insert (\"bigtriangleup\")"); menu_append_item ($1, "\\ominus", "latex_insert (\"ominus\")"); menu_append_item ($1, "\\times", "latex_insert (\"times\")"); menu_append_item ($1, "\\uplus", "latex_insert (\"uplus\")"); menu_append_item ($1, "\\bigtriangledown", "latex_insert (\"bigtriangledown\")"); menu_append_item ($1, "\\otimes", "latex_insert (\"otimes\")"); menu_append_item ($1, "\\div", "latex_insert (\"div\")"); menu_append_item ($1, "\\sqcap", "latex_insert (\"sqcap\")"); menu_append_item ($1, "\\triangleleft", "latex_insert (\"triangleleft\")"); menu_append_item ($1, "\\oslash", "latex_insert (\"oslash\")"); menu_append_item ($1, "\\ast", "latex_insert (\"ast\")"); menu_append_item ($1, "\\sqcup", "latex_insert (\"sqcup\")"); menu_append_item ($1, "\\triangleright", "latex_insert (\"triangleright\")"); menu_append_item ($1, "\\odot", "latex_insert (\"odot\")"); menu_append_item ($1, "\\star", "latex_insert (\"star\")"); menu_append_item ($1, "\\vee", "latex_insert (\"vee\")"); menu_append_item ($1, "\\bigcirc", "latex_insert (\"bigcirc\")"); menu_append_item ($1, "\\circ", "latex_insert (\"circ\")"); menu_append_item ($1, "\\wedge", "latex_insert (\"wedge\")"); menu_append_item ($1, "\\dagger", "latex_insert (\"dagger\")"); menu_append_item ($1, "\\bullet", "latex_insert (\"bullet\")"); menu_append_item ($1, "\\setminus", "latex_insert (\"setminus\")"); menu_append_item ($1, "\\ddagger", "latex_insert (\"ddagger\")"); menu_append_item ($1, "\\cdot", "latex_insert (\"cdot\")"); menu_append_item ($1, "\\wr", "latex_insert (\"wr\")"); menu_append_item ($1, "\\analg", "latex_insert (\"analg\")"); % math/spaces $1 = sprintf ("%s.&Math.S&paces", menu); menu_append_item ($1, "\\;", "insert (\"\\\\; \")"); menu_append_item ($1, "\\:", "insert (\"\\\\> \")"); menu_append_item ($1, "\\,", "insert (\"\\\\, \")"); menu_append_item ($1, "\\!", "insert (\"\\\\! \")"); % math/arrows $1 = sprintf ("%s.&Math.Arro&ws", menu); menu_append_item ($1, "\\leftarrow", "latex_insert (\"leftarrow\")"); menu_append_item ($1, "\\Leftarrow", "latex_insert (\"Leftarrow\")"); menu_append_item ($1, "\\longleftarrow", "latex_insert (\"longleftarrow\")"); menu_append_item ($1, "\\Longleftarrow", "latex_insert (\"Longleftarrow\")"); menu_append_item ($1, "\\rightarrow", "latex_insert (\"rightarrow\")"); menu_append_item ($1, "\\longrightarrow", "latex_insert (\"longrightarrow\")"); menu_append_item ($1, "\\Rightarrow", "latex_insert (\"Rightarrow\")"); menu_append_item ($1, "\\Longrightarrow", "latex_insert (\"Longrightarrow\")"); menu_append_item ($1, "\\uparrow", "latex_insert (\"uparrow\")"); menu_append_item ($1, "\\Uparrow", "latex_insert (\"Uparrow\")"); menu_append_item ($1, "\\downarrow", "latex_insert (\"downarrow\")"); menu_append_item ($1, "\\Downarrow", "latex_insert (\"Downarrow\")"); menu_append_item ($1, "\\leftrightarrow", "latex_insert (\"leftrightarrow\")"); menu_append_item ($1, "\\Leftrightarrow", "latex_insert (\"Leftrightarrow\")"); menu_append_item ($1, "\\longleftrightarrow", "latex_insert (\"longleftrightarrow\")"); menu_append_item ($1, "\\Longleftrightarrow", "latex_insert (\"Longleftrightarrow\")"); menu_append_item ($1, "\\updownarrow", "latex_insert (\"updownarrow\")"); menu_append_item ($1, "\\Updownarrow", "latex_insert (\"Updownarrow\")"); menu_append_item ($1, "\\mapsto", "latex_insert (\"mapsto\")"); menu_append_item ($1, "\\longmapsto", "latex_insert (\"longmapsto\")"); menu_append_item ($1, "\\hookleftarrow", "latex_insert (\"hookleftarrow\")"); menu_append_item ($1, "\\hookrightarrow", "latex_insert (\"hookrightarrow\")"); menu_append_item ($1, "\\leftarpoonup", "latex_insert (\"leftarpoonup\")"); menu_append_item ($1, "\\rightarpoonup", "latex_insert (\"rightarpoonup\")"); menu_append_item ($1, "\\leftarpoondown", "latex_insert (\"leftarpoondown\")"); menu_append_item ($1, "\\rightarpoondown", "latex_insert (\"rightarpoondown\")"); menu_append_item ($1, "\\nearrow", "latex_insert (\"nearrow\")"); menu_append_item ($1, "\\searrow", "latex_insert (\"searrow\")"); menu_append_item ($1, "\\swarrow", "latex_insert (\"swarrow\")"); menu_append_item ($1, "\\nwarrow", "latex_insert (\"nwarrow\")"); % math/misc $1 = sprintf ("%s.&Math.&Misc", menu); menu_append_item ($1, "\\ldots", "latex_insert (\"ldots\")"); menu_append_item ($1, "\\cdots", "latex_insert (\"cdots\")"); menu_append_item ($1, "\\vdots", "latex_insert (\"vdots\")"); menu_append_item ($1, "\\ddots", "latex_insert (\"ddots\")"); menu_append_item ($1, "\\aleph", "latex_insert (\"aleph\")"); menu_append_item ($1, "\\prime", "latex_insert (\"prime\")"); menu_append_item ($1, "\\forall", "latex_insert (\"forall\")"); menu_append_item ($1, "\\infty", "latex_insert (\"infty\")"); menu_append_item ($1, "\\hbar", "latex_insert (\"hbar\")"); menu_append_item ($1, "\\emptyset", "latex_insert (\"emptyset\")"); menu_append_item ($1, "\\exists", "latex_insert (\"exists\")"); menu_append_item ($1, "\\nabla", "latex_insert (\"nabla\")"); menu_append_item ($1, "\\surd", "latex_insert (\"surd\")"); menu_append_item ($1, "\\triangle", "latex_insert (\"triangle\")"); menu_append_item ($1, "\\imath", "latex_insert (\"imath\")"); menu_append_item ($1, "\\jmath", "latex_insert (\"jmath\")"); menu_append_item ($1, "\\ell", "latex_insert (\"ell\")"); menu_append_item ($1, "\\neg", "latex_insert (\"neg\")"); menu_append_item ($1, "\\top", "latex_insert (\"top\")"); menu_append_item ($1, "\\flat", "latex_insert (\"flat\")"); menu_append_item ($1, "\\natural", "latex_insert (\"natural\")"); menu_append_item ($1, "\\sharp", "latex_insert (\"sharp\")"); menu_append_item ($1, "\\wp", "latex_insert (\"wp\")"); menu_append_item ($1, "\\bot", "latex_insert (\"bot\")"); menu_append_item ($1, "\\clubsuit", "latex_insert (\"clubsuit\")"); menu_append_item ($1, "\\diamondsuit", "latex_insert (\"diamondsuit\")"); menu_append_item ($1, "\\heartsuit", "latex_insert (\"heartsuit\")"); menu_append_item ($1, "\\spadesuit", "latex_insert (\"spadesuit\")"); menu_append_item ($1, "\\Re", "latex_insert (\"Re\")"); menu_append_item ($1, "\\Im", "latex_insert (\"Im\")"); menu_append_item ($1, "\\angle", "latex_insert (\"angle\")"); menu_append_item ($1, "\\partial", "latex_insert (\"partial\")"); % bibliography menu_append_popup (menu, "Bibliograph&y"); $1 = sprintf ("%s.Bibliograph&y", menu); menu_append_item ($1, "&thebibliography", "latex_begin_end (\"thebibliography\", \"{99}\", 1, 1)"); menu_append_item ($1, "\\bib&item", "latex_cmd (\"bibitem\", 1)"); menu_append_item ($1, "\\&bibliography", "latex_insert (\"bibliography\")"); menu_append_item ($1, "\\bibliography&style", "latex_insert (\"bibliographystyle\")"); add_files_popup_with_callback (menu, "Mod&ules", LaTeX_Modules_Dir, "\\C^.*\\.sl$"); % separator $1 = sprintf ("%s", menu); menu_append_separator ($1); menu_append_item ($1, "&Customise Defaults", "latex_customise"); menu_append_item ($1, "Set M&aster File", "latex_master_file"); menu_append_item ($1, "Select &Output", "latex_select_output"); menu_append_item ($1, "&Compose", "latex_compose"); menu_append_item ($1, "&View", "latex_view"); #ifndef WIN32 menu_append_item ($1, "P&rint", "latex_psprint"); #endif menu_append_item ($1, "&BibTeX", "latex_bibtex"); menu_append_item ($1, "Makeinde&x", "latex_makeindex"); menu_append_item ($1, "&Document Structure", "latex_browse_tree"); menu_append_item ($1, "&Remove Tmp Files", "latex_clearup"); menu_append_separator ($1); menu_append_item(menu, "Latex &Info pages", "info_mode(); info_find_node(\"(latex)\");"); menu_append_item ($1, "LaTeX Mode &Help", "latex_mode_help"); } % The Keymap % ----- % normally, folding and latex mode are incompatible because of clashing % ^Cf... key bindings. I don't want to give up ^Cf, so this key binding % can be customized using the following variable. custom_variable ("LaTeX_Font_Key", "f"); % suggested alternative: "n" define latex_keymap () { $1 = "LaTeX-Mode"; !if (keymap_p ($1)) make_keymap ($1); use_keymap ($1); % templates - ^CT or ^C^T definekey_reserved ("latex_article", "ta", $1); definekey_reserved ("latex_article", "^T^A", $1); definekey_reserved ("latex_book", "tb", $1); definekey_reserved ("latex_book", "^T^B", $1); definekey_reserved ("latex_letter", "tl", $1); definekey_reserved ("latex_letter", "^T^L", $1); definekey_reserved ("latex_report", "tr", $1); definekey_reserved ("latex_report", "^T^R", $1); definekey_reserved ("latex_slides", "ts", $1); definekey_reserved ("latex_slides", "^T^S", $1); definekey_reserved ("latex_notice", "tn", $1); definekey_reserved ("latex_notice", "^T^N", $1); % environments - ^CE definekey_reserved ("latex_begin_end (\"array\", \"{ll}\", 1, 1)", "ea", $1); definekey_reserved ("latex_begin_end (\"array\", \"{ll}\", 1, 1)", "^E^A", $1); definekey_reserved ("latex_begin_end (\"center\", \"\", 1, 1)", "ec", $1); definekey_reserved ("latex_begin_end (\"center\", \"\", 1, 1)", "^E^C", $1); definekey_reserved ("latex_env_itemize (\"description\")", "ed", $1); definekey_reserved ("latex_env_itemize (\"description\")", "^E^D", $1); definekey_reserved ("latex_begin_end (\"displaymath\", \"\", 1, 1)", "eh", $1); definekey_reserved ("latex_begin_end (\"displaymath\", \"\", 1, 1)", "^E^H", $1); definekey_reserved ("latex_begin_end (\"enumerate\", \"\", 1, 1)", "ee", $1); definekey_reserved ("latex_begin_end (\"enumerate\", \"\", 1, 1)", "^E^E", $1); definekey_reserved ("latex_begin_end (\"eqnarray\", \"\", 1, 1)", "en", $1); definekey_reserved ("latex_begin_end (\"eqnarray\", \"\", 1, 1)", "^E^N", $1); definekey_reserved ("latex_begin_end (\"equation\", \"\", 1, 1)", "eq", $1); definekey_reserved ("latex_begin_end (\"equation\", \"\", 1, 1)", "^E^Q", $1); definekey_reserved ("latex_env_figure ()", "ef", $1); definekey_reserved ("latex_env_figure ()", "^E^F", $1); definekey_reserved ("latex_begin_end (\"flushleft\", \"\", 1, 1)", "el", $1); definekey_reserved ("latex_begin_end (\"flushright\", \"\", 1, 1)", "eR", $1); definekey_reserved ("latex_env_item", "ei", $1); definekey_reserved ("latex_env_item", "^E^I", $1); definekey_reserved ("latex_env_itemize (\"itemize\")", "eI", $1); % definekey_reserved ("latex_env_letter", "eL", $1); definekey_reserved ("latex_begin_end (\"list\", \"\", 1, 1)", "eL", $1); definekey_reserved ("latex_begin_end (\"list\", \"\", 1, 1)", "^E^L", $1); definekey_reserved ("latex_begin_end (\"minipage\"," + " \"[c]{\\\\linewidth}\", 1, 1)", "em", $1); definekey_reserved ("latex_begin_end (\"minipage\"," + " \"[c]{\\\\linewidth}\", 1, 1)", "^E^M", $1); definekey_reserved ("latex_begin_end (\"picture\", \"\", 1, 1)", "ep", $1); definekey_reserved ("latex_begin_end (\"picture\", \"\", 1, 1)", "^E^P", $1); definekey_reserved ("latex_begin_end (\"quotation\", \"\", 1, 1)", "eQ", $1); definekey_reserved ("latex_begin_end (\"quote\", \"\", 1, 1)", "eo", $1); definekey_reserved ("latex_begin_end (\"quote\", \"\", 1, 1)", "^E^O", $1); definekey_reserved ("latex_begin_end (\"tabbing\", \"\", 1, 1)", "eb", $1); definekey_reserved ("latex_begin_end (\"tabbing\", \"\", 1, 1)", "^E^B", $1); definekey_reserved ("latex_table_template (1)", "eu", $1); definekey_reserved ("latex_table_template (1)", "^E^U", $1); definekey_reserved ("latex_table_template (0)", "et", $1); definekey_reserved ("latex_table_template (0)", "^E^T", $1); definekey_reserved ("latex_table_row (1)", "er", $1); definekey_reserved ("latex_table_row (1)", "^E^R", $1); definekey_reserved ("latex_begin_end (\"thebibliography\", \"{99}\", 1, 1)", "ey", $1); definekey_reserved ("latex_begin_end (\"thebibliography\", \"{99}\", 1, 1)", "^E^Y", $1); definekey_reserved ("latex_begin_end (\"theorem\", \"\", 1, 1)", "eH", $1); definekey_reserved ("latex_begin_end (\"titlepage\", \"\", 1, 1)", "eg", $1); definekey_reserved ("latex_begin_end (\"titlepage\", \"\", 1, 1)", "^E^G", $1); definekey_reserved ("latex_begin_end (\"verbatim\", \"\", 1, 1)", "ev", $1); definekey_reserved ("latex_begin_end (\"verbatim\", \"\", 1, 1)", "^E^V", $1); definekey_reserved ("latex_begin_end (\"verse\", \"\", 1, 1)", "es", $1); definekey_reserved ("latex_begin_end (\"verse\", \"\", 1, 1)", "^E^S", $1); definekey_reserved ("latex_env_custom", "eC", $1); definekey_reserved ("latex_rename_environment", "eN", $1); definekey_reserved ("latex_indent_environment", "eD", $1); definekey_reserved ("latex_complete_environment", "e\t", $1); % fonts - ^CF (normally) definekey_reserved ("latex_cmd (\"textrm\", 1)", LaTeX_Font_Key + "r", $1); definekey_reserved ("latex_cmd (\"textit\", 1)", LaTeX_Font_Key + "i", $1); definekey_reserved ("latex_cmd (\"emph\", 1)", LaTeX_Font_Key + "e", $1); definekey_reserved ("latex_cmd (\"textmd\", 1)", LaTeX_Font_Key + "m", $1); definekey_reserved ("latex_cmd (\"textbf\", 1)", LaTeX_Font_Key + "b", $1); definekey_reserved ("latex_cmd (\"textup\", 1)", LaTeX_Font_Key + "u", $1); definekey_reserved ("latex_cmd (\"textsl\", 1)", LaTeX_Font_Key + "s", $1); definekey_reserved ("latex_cmd (\"textsf\", 1)", LaTeX_Font_Key + "f", $1); definekey_reserved ("latex_cmd (\"textsc\", 1)", LaTeX_Font_Key + "c", $1); definekey_reserved ("latex_cmd (\"texttt\", 1)", LaTeX_Font_Key + "t", $1); definekey_reserved ("latex_insert_tags (\"\\\\verb|\", \"|\", 1, 1)", LaTeX_Font_Key + "v", $1); definekey_reserved ("latex_cmd (\"textnormal\", 1)", LaTeX_Font_Key + "n", $1); definekey_reserved ("latex_cmd (\"underline\", 1)", LaTeX_Font_Key + "d", $1); definekey_reserved ("latex_modify_font (\"\")", LaTeX_Font_Key + "D", $1); definekey_reserved ("latex_rename_font", LaTeX_Font_Key + "N", $1); definekey_reserved ("latex_cmd (\"textrm\", 1)", LaTeX_Font_Key + "^R", $1); % definekey_reserved ("latex_cmd (\"textit\", 1)", LaTeX_Font_Key + "^I", $1); definekey_reserved ("latex_cmd (\"emph\", 1)", LaTeX_Font_Key + "^E", $1); definekey_reserved ("latex_cmd (\"textmd\", 1)", LaTeX_Font_Key + "^M", $1); definekey_reserved ("latex_cmd (\"textbf\", 1)", LaTeX_Font_Key + "^B", $1); definekey_reserved ("latex_cmd (\"textup\", 1)", LaTeX_Font_Key + "^U", $1); definekey_reserved ("latex_cmd (\"textsl\", 1)", LaTeX_Font_Key + "^S", $1); definekey_reserved ("latex_cmd (\"textsf\", 1)", LaTeX_Font_Key + "^F", $1); definekey_reserved ("latex_cmd (\"textsc\", 1)", LaTeX_Font_Key + "^C", $1); definekey_reserved ("latex_cmd (\"texttt\", 1)", LaTeX_Font_Key + "^T", $1); definekey_reserved ("latex_insert_tags (\"\\\\verb|\", \"|\", 1, 1)", LaTeX_Font_Key + "^V", $1); definekey_reserved ("latex_cmd (\"textnormal\", 1)", LaTeX_Font_Key + "^N", $1); definekey_reserved ("latex_cmd (\"underline\", 1)", LaTeX_Font_Key + "^D", $1); definekey_reserved ("latex_insert_font", LaTeX_Font_Key + "^I", $1); % font size - ^CZ definekey_reserved ("latex_cmd (\"tiny\", 1)", "zt", $1); definekey_reserved ("latex_cmd (\"tiny\", 1)", "^Z^T", $1); definekey_reserved ("latex_cmd (\"scriptsize\", 1)", "zc", $1); definekey_reserved ("latex_cmd (\"scriptsize\", 1)", "^Z^C", $1); definekey_reserved ("latex_cmd (\"footnotesize\", 1)", "zf", $1); definekey_reserved ("latex_cmd (\"footnotesize\", 1)", "^Z^F", $1); definekey_reserved ("latex_cmd (\"small\", 1)", "zs", $1); definekey_reserved ("latex_cmd (\"small\", 1)", "^Z^S", $1); definekey_reserved ("latex_cmd (\"normalsize\", 1)", "zn", $1); definekey_reserved ("latex_cmd (\"normalsize\", 1)", "^Z^N", $1); definekey_reserved ("latex_cmd (\"large\", 1)", "zl", $1); definekey_reserved ("latex_cmd (\"large\", 1)", "^Z^L", $1); definekey_reserved ("latex_cmd (\"Large\", 1)", "zL", $1); definekey_reserved ("latex_cmd (\"LARGE\", 1)", "zA", $1); definekey_reserved ("latex_cmd (\"LARGE\", 1)", "^Z^A", $1); definekey_reserved ("latex_cmd (\"huge\", 1)", "zh", $1); definekey_reserved ("latex_cmd (\"huge\", 1)", "^Z^H", $1); definekey_reserved ("latex_cmd (\"Huge\", 1)", "zH", $1); definekey_reserved ("latex_resize_font", "zS", $1); % sections - ^CS definekey_reserved ("latex_cmd (\"chapter\", 1)", "sc", $1); definekey_reserved ("latex_cmd (\"chapter\", 1)", "^S^C", $1); definekey_reserved ("latex_cmd (\"section\", 1)", "ss", $1); definekey_reserved ("latex_cmd (\"section\", 1)", "^S^S", $1); definekey_reserved ("latex_cmd (\"subsection\", 1)", "su", $1); definekey_reserved ("latex_cmd (\"subsection\", 1)", "^S^U", $1); definekey_reserved ("latex_cmd (\"subsubsection\", 1)", "sb", $1); definekey_reserved ("latex_cmd (\"subsubsection\", 1)", "^S^B", $1); definekey_reserved ("latex_cmd (\"paragraph\", 1)", "sp", $1); definekey_reserved ("latex_cmd (\"paragraph\", 1)", "^S^P", $1); definekey_reserved ("latex_cmd (\"subparagraph\", 1)", "sh", $1); definekey_reserved ("latex_cmd (\"subparagraph\", 1)", "^S^H", $1); definekey_reserved ("latex_cmd (\"part\", 1)", "sa", $1); definekey_reserved ("latex_cmd (\"part\", 1)", "^S^A", $1); % paragraphs - ^CP definekey_reserved ("latex_par_frame", "pr", $1); definekey_reserved ("latex_par_frame", "^P^R", $1); definekey_reserved ("latex_par_bgcolour", "pb", $1); definekey_reserved ("latex_par_bgcolour", "^P^B", $1); definekey_reserved ("latex_par_fgcolour", "pf", $1); definekey_reserved ("latex_par_fgcolour", "^P^F", $1); definekey_reserved ("insert (\"\\\\setlength{\\\\parindent}{0pt}\\n\")", "pi", $1); definekey_reserved ("insert (\"\\\\setlength{\\\\parindent}{0pt}\\n\")", "^P^I", $1); definekey_reserved ("insert (\"\\\\setlength{\\\\parskip}{3pt}\\n\")", "ps", $1); definekey_reserved ("insert (\"\\\\setlength{\\\\parskip}{3pt}\\n\")", "^P^S", $1); definekey_reserved ("latex_cmd (\"marginpar\", 1)", "pm", $1); definekey_reserved ("latex_cmd (\"marginpar\", 1)", "^P^M", $1); definekey_reserved ("latex_cmd (\"footnote\", 1)", "pn", $1); definekey_reserved ("latex_cmd (\"footnote\", 1)", "^P^N", $1); definekey_reserved ("latex_includegraphics", "pl", $1); definekey_reserved ("latex_includegraphics", "^P^L", $1); % links - ^CL definekey_reserved ("latex_cmd (\"label\", 1)", "ll", $1); definekey_reserved ("latex_cmd (\"label\", 1)", "^L^L", $1); definekey_reserved ("latex_cmd (\"ref\", 1)", "lr", $1); definekey_reserved ("latex_cmd (\"ref\", 1)", "^L^R", $1); definekey_reserved ("latex_cmd (\"cite\", 1)", "lc", $1); definekey_reserved ("latex_cmd (\"cite\", 1)", "^L^C", $1); definekey_reserved ("latex_cmd (\"nocite\", 1)", "ln", $1); definekey_reserved ("latex_cmd (\"nocite\", 1)", "^L^N", $1); definekey_reserved ("latex_cmd (\"pageref\", 1)", "lp", $1); definekey_reserved ("latex_cmd (\"pageref\", 1)", "^L^P", $1); definekey_reserved ("latex_url", "lu", $1); definekey_reserved ("latex_url", "^L^U", $1); definekey_reserved ("latex_index_word", "ii", $1); % math common stuff definekey_reserved ("latex_insert_tags (\"\\\\frac{\", \"}{}\", 1, 1)", "Mf", $1); definekey_reserved ("latex_insert_tags (\"\\\\int_{\", \"}^{}\", 1, 1)", "Mi", $1); definekey_reserved ("latex_insert_tags (\"\\\\lim_{\", \"}\", 1, 1)", "Ml", $1); definekey_reserved ("latex_insert_tags (\"\\\\oint_{\", \"}^{}\", 1, 1)", "Mo", $1); definekey_reserved ("latex_insert_tags (\"\\\\prod_{\", \"}^{}\", 1, 1)", "Mp", $1); definekey_reserved ("latex_insert_tags (\"\\\\sum_{\", \"}^{}\", 1, 1)", "Ms", $1); definekey_reserved ("latex_insert_tags (\"\\\\sqrt[]{\", \"}\", 1, 1)", "Mq", $1); % math arrows - ^C + arrow definekey_reserved ("latex_insert (\"uparrow\")", Key_Up, $1); definekey_reserved ("latex_insert (\"downarrow\")", Key_Down, $1); definekey_reserved ("latex_insert (\"leftarrow\")", Key_Left, $1); definekey_reserved ("latex_insert (\"rightarrow\")", Key_Right, $1); % breaks - ^CK definekey_reserved ("latex_linebreak", "k*", $1); definekey_reserved ("latex_linebreak", "^K^*", $1); definekey_reserved ("insert (\"\\\\newline\\n\")", "kl", $1); definekey_reserved ("insert (\"\\\\newline\\n\")", "^K^L", $1); definekey_reserved ("insert (\"\\\\linebreak[1]\\n\")", "kb", $1); definekey_reserved ("insert (\"\\\\linebreak[1]\\n\")", "^K^B", $1); definekey_reserved ("insert (\"\\\\newpage\\n\")", "kp", $1); definekey_reserved ("insert (\"\\\\newpage\\n\")", "^K^P", $1); definekey_reserved ("insert (\"\\\\clearpage\\n\")", "kc", $1); definekey_reserved ("insert (\"\\\\clearpage\\n\")", "^K^C", $1); definekey_reserved ("insert (\"\\\\cleardoublepage\\n\")", "kd", $1); definekey_reserved ("insert (\"\\\\cleardoublepage\\n\")", "^K^D", $1); definekey_reserved ("insert (\"\\\\pagebreak\\n\")", "kr", $1); definekey_reserved ("insert (\"\\\\pagebreak\\n\")", "^K^R", $1); definekey_reserved ("insert (\"\\\\nolinebreak[1]\\n\")", "kn", $1); definekey_reserved ("insert (\"\\\\nolinebreak[1]\\n\")", "^K^N", $1); definekey_reserved ("insert (\"\\\\nopagebreak\\n\")", "ko", $1); definekey_reserved ("insert (\"\\\\nopagebreak\\n\")", "^K^O", $1); definekey_reserved ("insert (\"\\\\enlargethispage\\n\")", "ke", $1); definekey_reserved ("insert (\"\\\\enlargethispage\\n\")", "^K^E", $1); % misc definekey_reserved ("latex_insert_tags (\"{\", \"}\", 1, 1)", "{", $1); definekey_reserved ("latex_insert_math", "m", $1); % from tex.sl definekey_reserved ("latex_insert_tags (\"``\", \"''\", 1, 1)", "\"", $1); %definekey_reserved ("latex_insert_tags (\"`\", \"'\", 1, 1)", "'", $1); definekey ("tex_insert_quote", "\"", $1); definekey ("tex_insert_quote", "'", $1); definekey ("tex_blink_dollar", "$", $1); definekey ("tex_ldots", ".", $1); definekey ("latex_arrow", ">", $1); definekey ("latex_arrow", "-", $1); definekey ("latex_arrow", "=", $1); definekey ("tex_complete_symbol", "^[^I", $1); % from the old latex.sl definekey ("tex_complete_symbol", "^[v", $1); definekey ("tex_complete_symbol", "^[V", $1); definekey_reserved ("latex_open_env", "[", $1); definekey_reserved ("latex_close_env", "]", $1); definekey_reserved ("call (\"newline_and_indent\"); latex_env_item", "^M", $1); % special characters undefinekey ("^I", $1); definekey ("latex_indent_line", "^I", $1); definekey_reserved (" \\$", "$", $1); definekey_reserved (" \\&", "&", $1); definekey_reserved (" \\%", "%", $1); definekey_reserved (" \\_", "_", $1); definekey_reserved (" \\#", "#", $1); definekey_reserved (" \\{", "(", $1); definekey_reserved (" \\}", ")", $1); definekey_reserved (" \\textless{}", "<", $1); definekey_reserved (" \\textgreater{}", ">", $1); definekey_reserved (" \\textbackslash{}", "\\", $1); definekey_reserved (" \\textbar{}", "|", $1); definekey_reserved (" \\textasciicircum{}", "^", $1); definekey_reserved (" \\textasciitilde{}", "~", $1); % final stuff definekey_reserved ("latex_customise", "C", $1); definekey_reserved ("latex_customise", "^C", $1); definekey_reserved ("latex_master_file", "a", $1); definekey_reserved ("latex_master_file", "^A", $1); definekey_reserved ("latex_select_output", "o", $1); definekey_reserved ("latex_select_output", "^O", $1); definekey_reserved ("latex_compose", "c", $1); definekey_reserved ("latex_compose", "^C", $1); definekey_reserved ("latex_view", "v", $1); definekey_reserved ("latex_view", "^V", $1); definekey_reserved ("latex_psprint", "r", $1); definekey_reserved ("latex_psprint", "^R", $1); definekey_reserved ("latex_bibtex", "I", $1); definekey_reserved ("latex_bibtex", "^I", $1); definekey_reserved ("latex_makeindex", "x", $1); definekey_reserved ("latex_makeindex", "^X", $1); definekey_reserved ("latex_browse_tree", "d", $1); definekey_reserved ("latex_browse_tree", "^D", $1); definekey_reserved ("latex_clearup", "R", $1); % help definekey_reserved ("latex_info_help", "h", $1); definekey_reserved ("latex_info_help", "^H", $1); % compiling + errors local_unsetkey (Key_F9); local_setkey ("latex_compose", Key_F9); local_unsetkey (Key_F8); local_setkey ("latex_view", Key_F8); local_unsetkey (_Reserved_Key_Prefix + "'"); definekey_reserved ("find_next_error", "'", $1); % move by paragraphs definekey_reserved ("latex_goto_next_paragraph", Key_Right, $1); definekey_reserved ("latex_goto_prev_paragraph", Key_Left, $1); } % ----- $1 = "LaTeX-Mode"; create_syntax_table ($1); define_syntax ("%", "", '%', $1); % Comment Syntax define_syntax ('\\', '\\', $1); % Quote character define_syntax ('$', '"', $1); % string define_syntax ("~^_&#", '+', $1); % operators define_syntax ("|&{}[]", ',', $1); % delimiters define_syntax ("a-zA-Z@", 'w', $1); set_syntax_flags ($1, 8); % Currently, DFA syntax highlighting doesn't span multiple lines. #ifdef HAS_DFA_SYNTAX %%% DFA_CACHE_BEGIN %%% static define setup_dfa_callback (name) { dfa_enable_highlight_cache ("latex.dfa", name); % comments: dfa_define_highlight_rule ("%.*$", "comment", name); % known keywords in curly braces dfa_define_highlight_rule ("{article}", "Qstring", name); dfa_define_highlight_rule ("{book}", "Qstring", name); dfa_define_highlight_rule ("{letter}", "Qstring", name); dfa_define_highlight_rule ("{report}", "Qstring", name); dfa_define_highlight_rule ("{slides}", "Qstring", name); dfa_define_highlight_rule ("{document}", "Qstring", name); % environments dfa_define_highlight_rule ("{abstract}", "Qstring", name); dfa_define_highlight_rule ("{array}", "Qstring", name); dfa_define_highlight_rule ("{center}", "Qstring", name); dfa_define_highlight_rule ("{description}", "Qstring", name); dfa_define_highlight_rule ("{displaymath}", "Qstring", name); dfa_define_highlight_rule ("{enumerate}", "Qstring", name); dfa_define_highlight_rule ("{eqnarray}", "Qstring", name); dfa_define_highlight_rule ("{equation}", "Qstring", name); dfa_define_highlight_rule ("{figure}", "Qstring", name); dfa_define_highlight_rule ("{flushleft}", "Qstring", name); dfa_define_highlight_rule ("{flushright}", "Qstring", name); dfa_define_highlight_rule ("{itemize}", "Qstring", name); dfa_define_highlight_rule ("{list}", "Qstring", name); dfa_define_highlight_rule ("{minipage}", "Qstring", name); dfa_define_highlight_rule ("{picture}", "Qstring", name); dfa_define_highlight_rule ("{quotation}", "Qstring", name); dfa_define_highlight_rule ("{quote}", "Qstring", name); dfa_define_highlight_rule ("{tabbing}", "Qstring", name); dfa_define_highlight_rule ("{table}", "Qstring", name); dfa_define_highlight_rule ("{tabular}", "Qstring", name); dfa_define_highlight_rule ("{thebibliography}", "Qstring", name); dfa_define_highlight_rule ("{theorem}", "Qstring", name); dfa_define_highlight_rule ("{titlepage}", "Qstring", name); dfa_define_highlight_rule ("{verbatim}", "Qstring", name); dfa_define_highlight_rule ("{verse}", "Qstring", name); % font family dfa_define_highlight_rule ("{rmfamily}", "Qkeyword2", name); dfa_define_highlight_rule ("{itshape}", "Qkeyword2", name); dfa_define_highlight_rule ("{mdseries}", "Qkeyword2", name); dfa_define_highlight_rule ("{bfseries}", "Qkeyword2", name); dfa_define_highlight_rule ("{upshape}", "Qkeyword2", name); dfa_define_highlight_rule ("{slshape}", "Qkeyword2", name); dfa_define_highlight_rule ("{sffamily}", "Qkeyword2", name); dfa_define_highlight_rule ("{scshape}", "Qkeyword2", name); dfa_define_highlight_rule ("{ttfamily}", "Qkeyword2", name); dfa_define_highlight_rule ("{normalfont}", "Qkeyword2", name); % everithing else between curly braces % !!! doesn't span multiple lines !!! dfa_define_highlight_rule ("{.*}", "Qkeyword1", name); dfa_define_highlight_rule("^([^{])*}", "Qkeyword1", name); dfa_define_highlight_rule("{.*", "keyword1", name); % short symbols that delimit math: $ \[ \] \( \) dfa_define_highlight_rule ("\\$|(\\\\[\\[\\]\\(\\)])", "string", name); % Fundamental delimiters in the TeX language: {}[] dfa_define_highlight_rule ("[{}\\[\\]]", "delimiter", name); % \leftX \rightY constructions where X and Y are % one of \| \{ \} [ ] ( ) / | . dfa_define_highlight_rule ("\\\\(left|right)(\\\\\\||\\\\{|\\\\}|" + "[\\[\\]\\(\\)/\\|\\.])", "delimiter", name); % type 2 keywords: font definitions dfa_define_highlight_rule ("\\\\bfseries", "keyword2", name); dfa_define_highlight_rule ("\\\\emph", "keyword2", name); dfa_define_highlight_rule ("\\\\itshape", "keyword2", name); dfa_define_highlight_rule ("\\\\mathbf", "keyword2", name); dfa_define_highlight_rule ("\\\\mathcal", "keyword2", name); dfa_define_highlight_rule ("\\\\mathit", "keyword2", name); dfa_define_highlight_rule ("\\\\mathnormal", "keyword2", name); dfa_define_highlight_rule ("\\\\mathrm", "keyword2", name); dfa_define_highlight_rule ("\\\\mathsf", "keyword2", name); dfa_define_highlight_rule ("\\\\mathtt", "keyword2", name); dfa_define_highlight_rule ("\\\\mdseries", "keyword2", name); dfa_define_highlight_rule ("\\\\normalfont", "keyword2", name); dfa_define_highlight_rule ("\\\\rmfamily", "keyword2", name); dfa_define_highlight_rule ("\\\\scshape", "keyword2", name); dfa_define_highlight_rule ("\\\\sffamily", "keyword2", name); dfa_define_highlight_rule ("\\\\slshape", "keyword2", name); dfa_define_highlight_rule ("\\\\textbf", "keyword2", name); dfa_define_highlight_rule ("\\\\textit", "keyword2", name); dfa_define_highlight_rule ("\\\\textmd", "keyword2", name); dfa_define_highlight_rule ("\\\\textnormal", "keyword2", name); dfa_define_highlight_rule ("\\\\textrm", "keyword2", name); dfa_define_highlight_rule ("\\\\textsc", "keyword2", name); dfa_define_highlight_rule ("\\\\textsf", "keyword2", name); dfa_define_highlight_rule ("\\\\textsl", "keyword2", name); dfa_define_highlight_rule ("\\\\texttt", "keyword2", name); dfa_define_highlight_rule ("\\\\textup", "keyword2", name); dfa_define_highlight_rule ("\\\\ttfamily", "keyword2", name); dfa_define_highlight_rule ("\\\\upshape", "keyword2", name); % size dfa_define_highlight_rule ("\\\\tiny", "keyword2", name); dfa_define_highlight_rule ("\\\\scriptsize", "keyword2", name); dfa_define_highlight_rule ("\\\\footnotesize", "keyword2", name); dfa_define_highlight_rule ("\\\\small", "keyword2", name); dfa_define_highlight_rule ("\\\\normalsize", "keyword2", name); dfa_define_highlight_rule ("\\\\large", "keyword2", name); dfa_define_highlight_rule ("\\\\Large", "keyword2", name); dfa_define_highlight_rule ("\\\\LARGE", "keyword2", name); dfa_define_highlight_rule ("\\\\huge", "keyword2", name); dfa_define_highlight_rule ("\\\\Huge", "keyword2", name); % type 1 keywords: a backslash followed by % one of -,:;!%$#&_ |\/{}~^´'``.=> : dfa_define_highlight_rule ("\\\\[\\-,:;!%\\$#&_ \\|\\\\/{}~\\^'`\\.=>]", "keyword1", name); % type 0 keywords: a backslash followed by alpha characters dfa_define_highlight_rule ("\\\\[A-Za-z@]+", "keyword", name); % a backslash followed by a single char not covered by one of the % previous rules is probably an error dfa_define_highlight_rule ("\\\\.", "error", name); % The symbols ~ ^ _ dfa_define_highlight_rule ("[~\\^_]", "operator", name); % numbers dfa_define_highlight_rule ("[0-9]", "number", name); dfa_define_highlight_rule ("\\.?[0-9]", "number", name); % macro parameters (#1 #2 etc) dfa_define_highlight_rule ("#[1-9]", "operator", name); % quoted strings dfa_define_highlight_rule ("``.*''", "Qstring", name); dfa_define_highlight_rule("^([^``])*''", "Qstring", name); dfa_define_highlight_rule("``.*", "string", name); % only one case with single quotes dfa_define_highlight_rule ("`.*'", "Qstring", name); % all the rest dfa_define_highlight_rule (".", "normal", name); dfa_build_highlight_table (name); } dfa_set_init_callback (&setup_dfa_callback, "LaTeX-Mode"); %%% DFA_CACHE_END %%% #endif % ----- %!%+ %\function{latex_mode} %\synopsis{latex_mode} %\usage{Void latex_mode ();} %\description % This mode is designed to facilitate the task of editing LaTeX files. % It calls the function \var{latex_mode_hook} if it is defined. In addition, % if the abbreviation table \var{"TeX"} is defined, that table is used. % % There are way too many key-bindings for this mode. % Please have a look at the menus! %!%- public define latex_mode () { latex_keymap (); set_mode ("LaTeX", 0x1 | 0x20); set_buffer_hook ("par_sep", "tex_paragraph_separator"); set_buffer_hook ("wrap_hook", "tex_wrap_hook"); % latex math mode will map this to something else. local_unsetkey ("`"); local_setkey ("quoted_insert", "`"); mode_set_mode_info ("LaTeX", "init_mode_menu", &init_menu); use_syntax_table ("LaTeX-Mode"); mode_set_mode_info ("LaTeX", "fold_info", "%{{{\r%}}}\r\r"); run_mode_hooks ("latex_mode_hook"); if (abbrev_table_p ("LaTeX")) use_abbrev_table ("LaTeX"); } % ----- provide ("latex"); % --- End of file latex.sl