From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- support/mewltx/latex.cmd | 1329 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1329 insertions(+) create mode 100644 support/mewltx/latex.cmd (limited to 'support/mewltx/latex.cmd') diff --git a/support/mewltx/latex.cmd b/support/mewltx/latex.cmd new file mode 100644 index 0000000000..ca52751610 --- /dev/null +++ b/support/mewltx/latex.cmd @@ -0,0 +1,1329 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; LATEX.CMD +; +; microEMACS for Windows macros to give LaTeX functionality +; +; MODIFICATION HISTORY: +; Feb 10 94 Took out readhook line. +; Feb 04 94 Modified for MEW 3.12 +; Note that there are still some funny bugs, particularly with +; reference to file locking. If you get funny errors about +; files being in use, try deleting the "._xlk" sub-directories. +; Jan 25 93 Use dviwin as viewer +; +; MEWLaTeX Version 1.0 +; +; Original release Jan 11 1993. +; +; Michael F. Reid +; Department of Physics and Astronomy, University of Canterbury +; Christchurch, New Zealand. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; There are three sections: +; GENERAL +; SPELL-CHECKING +; LATEX +; +; Key bindings and menu bindings are at the end of each section +; +; We begin with variables that must be setup locally by the user. +; As a debug tool we have variable %l-menus-loaded to prevent menus +; from being loaded twice if we edit the file and re-run it. +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; VARIABLES +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; GENERAL + +set %x-rename "xrename.bat" ; delete and rename, used for backup-save +; if xrename.bat is not in your path, you won't get a backup! + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; SPELL CHECKING + +set %spell-exec "spell.pif" +; using spell.pif allows better control over the spell-checker +; amSpell likes to run full-screen, for example + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LaTeX + +set %l-file-path "e:\bin\mewin\latex\" + ; finish with "\" + ; place to look for help and templates +set %l-latex "latex.pif" +set %l-tex "tex.pif" +set %l-view "e:\tex\dviwin\dviwin" +set %l-print "texprint.pif" +set %l-dvi2ps "dvi2ps.pif" +set %l-psview "gs.pif" +set %l-makeindex "makeindx.pif" +set %l-bibtex "bibtex.pif" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; GENERAL COMMANDS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +set $discmd FALSE + +print "[Loading general macros...]" + +store-procedure toggle-overwrite ; make Insert key behave "normally" + set $cmode &bxor $cmode 32 +!endm + +store-procedure del-blanks ; use ^Delete to delete to next non-blank + !while TRUE + !if ¬ &seq &chr $curchar " " + !return + !endif + delete-next-character + !endwhile +!endm + +store-procedure insert-date + insert-string $time +!endm + +store-procedure save-all-buffers +; This macro saves all the modified buffers to their respective +; files +; Modified by MFR - you could replace the version in emacs.rc + set %tmp $cbufname + !while TRUE + !if &equ $cbflags 2 ;MFR don't try to save unchanged files + !force save-file + !endif + !force next-buffer + !if &seq %tmp $cbufname + !return + !endif + !endwhile +!endm + +store-procedure readhook-proc ; TeX and bib get C and Wrap modes +; modified by MFR - you could replace the version in emacs.rc + run extension + !if &sin "|c|h|cpp|hpp|dlg|def|rc|cmd|" &cat &cat "|" %ext "|" + add-mode cmode + !else + !if &sin "||me|1st|doc|txt|" &cat &cat "|" %ext "|" + add-mode wrap + !else + !if &sin "||tex|bib|" &cat &cat "|" %ext "|" + add-mode cmode + add-mode wrap + !endif + !endif + !endif +!endm +; set $readhook readhook-proc ; commented out 10 Feb 94 + +store-procedure file-split +; split $cfname into %f-dir %f-name %f-ext +; uses %f-tmp1, %f-tmp2, %f-tmp3 + set %f-dir &low $cfname + set %f-name "" + set %f-ext "" + set %f-tmp1 &length %f-dir + set %f-tmp2 &sindex %f-dir "." + !if ¬ &equ %f-tmp2 0 + set %f-ext &mid %f-dir &add %f-tmp2 1 &sub %f-tmp1 %f-tmp2 + set %f-dir &mid %f-dir 1 &sub %f-tmp2 1 + !endif + set %f-tmp1 &length %f-dir + set %f-tmp2 &sindex %f-dir "\" + !if ¬ &equ %f-tmp2 0 + set %f-tmp2 &length %f-dir + !while ¬ &sequal "\" &mid %f-dir %f-tmp2 1 + set %f-tmp3 &mid %f-dir %f-tmp2 1 + set %f-tmp2 &sub %f-tmp2 1 + !endwhile + set %f-name &mid %f-dir &add %f-tmp2 1 &sub %f-tmp1 %f-tmp2 + set %f-dir &mid %f-dir 1 %f-tmp2 + !endif + ; print &cat &cat &cat &cat %f-dir "+" %f-name "+" %f-ext +!endm + +store-procedure query-save-all +; This macro saves all the modified buffers to their respective +; files, but asks as it goes along +; uses %f-tmp1, %f-tmp2 + set %f-tmp1 $cbufname + !while TRUE + !if &equ $cbflags 2 + set %f-tmp2 @&cat &cat "Save " $cbufname " (y/n)? [y]: " + !if ¬ &sequal %f-tmp2 "n" + !force save-file + !endif + !endif + !force next-buffer + !if &seq %f-tmp1 $cbufname + !return + !endif + !endwhile +!endm + +store-procedure backup-save +; renames then saves, like gnuemcs x.y -> x.~y +; uses %f-tmp1, %f-tmp2, %f-tmp3 +; x-rename is a batch file name. Batch file contains: +; del %2 +; rename %1 %2 + !if ¬ &equ $cbflags 2 ; needs saving? + print "[File not modified]" + !else + file-split + set %f-tmp1 $cbufname ; old buffer + set %f-tmp2 $cfname ; old filename + set %f-tmp3 &cat &cat &cat %f-name ".~~" %f-ext ; backup filename + print "[Backing up...]" + ; 1 forces it to wait for completion + 1 shell-command &cat &cat &cat &cat %x-rename " " %f-tmp2 " " %f-tmp3 + save-file + !endif +!endm + +store-procedure s-insert-file +; insert file, keeping point at same place, like gnu emacs +; uses %s-tmp + set %s-tmp $yankflag + set $yankflag TRUE + !force execute-named-command insert-file + set $yankflag %s-tmp +!endm + +store-procedure force-current-directory +; make sure we are using directory of current buffer + !if ¬ &seq $cfname "" ; e.g. main has no file name + !force find-file $cfname ; force current directory + !endif +!endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; GENERAL MENU ADDITIONS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +bind-to-key set-mark ^@ ; gnu binding ; Doesn't work for 3.12 + ; This is because ^@ means ^-space --- see documentation :-( + +macro-to-key toggle-overwrite FNC ; Insert key +macro-to-key del-blanks FN^D ; ^Delete +macro-to-key save-all-buffers M-^Z ; bind to ESC Ctrl+Z +macro-to-key backup-save M-S ; +macro-to-key s-insert-file ^XI ; gnu binding +macro-to-key s-insert-file ^X^I ; old insert-file binding + +!if ¬ %l-menus-loaded + ; change from insert-file to s-insert-file + unbind-menu ">&File>&Insert..." + macro-to-menu s-insert-file ">&File>&Insert...@2" + ; add backup-save to File menu + macro-to-menu backup-save ">&File>Back&up and Save@6" + + ; add insert-date to Edit menu + macro-to-menu insert-date ">&Edit>Insert &Date@3" + + ; add clip-region to menu under Edit/Region + bind-to-menu clip-region ">&Edit>&Region>To Clip&board@0" + bind-to-menu nop "-" +!endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; SPELL-CHECKING COMMANDS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; Run spell checker on current buffer and re-read the file. +; The spell-checker is a DOS program stored in %spell-exec + +write-message "[Loading Spell macros...]" + + +store-procedure spell-buffer +; uses s-tmp1 + save-file + run force-current-directory + ; the 1 forces it to wait for completion + 1 execute-program &cat &cat %spell-exec " " $cfname + set %s-tmp1 @"[Spell] (Wait until completion) Re-Read file (y/n)? [y]: " + !if ¬ &sequal &lower %s-tmp1 "n" + read-file $cfname + !endif +!endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; SPELL-CHECKING MENU ADDITIONS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +!if ¬ %l-menus-loaded + macro-to-menu spell-buffer ">S&pell@4>&Buffer" +!endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; LaTeX COMMANDS +; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + + +print "[Loading LaTeX macros...]" + +set $fmtlead "\ %" ; to prevent formatting of TeX stuff. Note blank! +set $paralead "\% ~t" + +set %l-log-screen "LaTeX LOG" +set %l-log-buffer "_texlog" +set %l-fn "?" ; file name being processed (no extension) +set %l-prog "?" ; program being used +set %l-ext "?" ; extension for program (tex, dvi, etc.) +set %l-log "?" ; logfile extension + +store-procedure set-latex-fn +; uses %l-fn, %l-tmp1 +; set LaTeX file name +; default is current buffer - remembers from run to run. + !if &sequ %l-fn "?" + run file-split + set %l-fn %f-name + !endif + set %l-tmp1 "" + set %l-tmp1 @&cat &cat &cat %l-prog " Filename (^G aborts )[" %l-fn "]: " + !if ¬ &equ 0 &sindex %l-tmp1 "[" ; Hack for ^G + print [Abort] + set %l-fn "?" + set %l-tmp1 "" + !return + !endif + !if ¬ &equal 0 &length %l-tmp1 + set %l-fn %l-tmp1 + !endif + print &cat &cat %l-prog "file name: " %l-fn +!endm + +store-procedure l-run +; uses %l-fn +; %l-prog and %l-ext must be set before running this + run query-save-all + run set-latex-fn + run force-current-directory + !if &seq %l-fn "?" ; no file + !return + !endif + !if ¬ &exist &cat &cat %l-fn "." %l-ext + print &cat &cat &cat &cat "[No file " %l-fn "." %l-ext "]" + set %l-fn "?" + !else + ; kill old log + !if &seq $scrname %l-log-screen ; current screen is log + !force delete-buffer %l-log-buffer ; kill buffer + !force select-buffer %l-log-buffer + add-mode view + !else ; current screen is not log + !force delete-screen %l-log-screen ; kill screen and buffer + !force delete-buffer %l-log-buffer + !endif + print &cat &cat &cat &cat "[" %l-prog " " %l-fn "]" + !if &seq %l-ext "ps" ; gs requires the ".ps" + execute-program &cat &cat &cat %l-prog " " %l-fn ".ps" + !else + execute-program &cat &cat %l-prog " " %l-fn + !endif + !endif +!endm + +store-procedure run-latex + set %l-prog %l-latex + set %l-ext "tex" + set %l-log "log" + run l-run +!endm + +store-procedure run-tex + set %l-prog %l-tex + set %l-ext "tex" + set %l-log "log" + run l-run +!endm + +store-procedure run-bibtex + set %l-prog %l-bibtex + set %l-ext "aux" + set %l-log "blg" + run l-run +!endm + +store-procedure run-makeindex + set %l-prog %l-makeindex + set %l-ext "aux" + set %l-log "ilg" + run l-run +!endm + +store-procedure print-latex + set %l-prog %l-print + set %l-ext "dvi" + set %l-log "?" + run l-run +!endm + +store-procedure dvi2ps-latex + set %l-prog %l-dvi2ps + set %l-ext "dvi" + set %l-log "?" + run l-run +!endm + +store-procedure psview-latex + set %l-prog %l-psview + set %l-ext "ps" + set %l-log "?" + run l-run +!endm + +store-procedure view-latex + set %l-prog %l-view + set %l-ext "dvi" + run set-latex-fn + run force-current-directory + !if ¬ &exist &cat %l-fn ".dvi" + run file-split + print &cat &cat "[No file " %l-fn ".dvi]" + set %l-fn "?" + !else + print &cat &cat "[view " %l-fn "]" + execute-program &cat &cat &cat %l-view " " %l-fn ".dvi" + !endif +!endm + +store-procedure view-charset ; View LaTeX character set + !if ¬ &exist &cat %l-file-path "charset.dvi" + print &cat &cat "[No file " %l-file-path "charset.dvi]" + !else + print &cat &cat "[view " %l-file-path "charset.dvi]" + execute-program &cat &cat &cat %l-view " " %l-file-path "charset.dvi" + !endif +!endm + +store-procedure l-display-log + run force-current-directory + set %l-tmp1 &cat &cat %l-fn "." %l-log + set %l-tmp2 @&cat &cat " Read Log (^G aborts )[" %l-tmp1 "]: " + !if ¬ &equ 0 &sindex %l-tmp2 "[" ; Hack for ^G + print "[Abort]" + !return + !endif + !if ¬ &equ &len %l-tmp2 0 + set %l-tmp1 %l-tmp2 + !endif + !if ¬ &exist %l-tmp1 + print &cat &cat "[No file " %l-tmp1 "]" + !return + !endif + !force find-screen %l-log-screen + !force select-buffer %l-log-buffer + !force read-file %l-tmp1 + add-mode view + print "[F4 to find error]" +!endm + +store-procedure l-find-error +; Modified for 3.12 by turning $discmd on and off... 4 Feb 94 +; parse LaTeX log-file for errors +; %e-upto is line in log-file we are up to +; %e-line and %e-file are where the errors are +; uses %l-tmp1 + print "[Searching for LaTeX error]" + set $discmd FALSE + find-screen %l-log-screen + select-buffer %l-log-buffer + set $discmd TRUE ; turning it on seems essential + !if &seq $cfname "" ; read log if there is none + l-display-log + update-screen + print "[Searching for LaTeX error]" + !endif + set $discmd FALSE + !force search-forward "~nl." ; find next error + !if ¬ $status + print "[No more errors]" + !return + !endif + update-screen + set %e-upto $curline + set-mark + end-of-word + set %e-line $region + set %e-paren 1 ; number of parentheses - count down to 0 + !force search-reverse "~!" ; search back for file name + !while TRUE + !force previous-line + !if ¬ $status + print "[Cannot locate file name]" + !return + !endif + beginning-of-line + !if &seq &chr $curchar "?" ; skip error listing + !force search-reverse "~n!" + !force next-line + !else + !if &seq &chr $curchar "." ; TeX warnings + !force search-reverse "~n[]" + !else + !if ¬ &seq &mid $line 1 15 "LaTeX Warning: " + !if ¬ &seq &chr $curchar "\" + !if ¬ &and &equ &sindex $line "(" 0 &equ &sindex $line ")" 0 + ; examine the line for brackets + ; update-screen + ; set %dummy @&cat &cat &cat "examining line" $line " " %e-paren + + end-of-line + !while ¬ &equ $curcol 0 + backward-character + !if &seq &chr $curchar "(" + set %e-paren &sub %e-paren 1 + !endif + !if &seq &chr $curchar ")" + set %e-paren &add %e-paren 1 + !endif + !if &equ %e-paren 0 + !break + !endif + !endwhile + !if &equ %e-paren 0 + !break + !endif + !endif ; end of examine the line for brackets + !endif + !endif + !endif + !endif + !endwhile ; should now be at filename + !if ¬ &seq &chr $curchar "(" + print "[Cannot locate file name]" + !return + !endif + forward-character + set-mark + end-of-line + set %e-file $region + set %l-tmp1 &sindex %e-file " " ; always a blank before [n] etc. + !if ¬ &equ 0 %l-tmp1 + set %e-file &mid %e-file 1 &sub %l-tmp1 1 + !endif + goto-line %e-upto + !force next-line + beginning-of-line + set $discmd TRUE + update-screen + print &cat &cat %e-file " " %e-line + set %l-tmp1 @&cat &cat &cat "Enter for error: " %e-file " " %e-line + set $discmd FALSE + !force find-file %e-file + set %l-tmp $cbufname ; juggle the buffers - must be easier way! + !force find-screen %l-tmp + !force select-buffer %l-tmp + !force find-screen %l-log-screen + !force select-buffer %l-log-buffer + !force find-screen %l-tmp + !if ¬ $status + set $discmd TRUE + print &cat &cat "[Cannot find file " %e-file "]" + set $discmd FALSE + !endif + !force goto-line %e-line + set $discmd TRUE + print "[F4 for next error]" +!endm + + + +store-procedure clear-latex-file + set %l-fn "?" +!endm + +; superscripts/subscripts + +store-procedure superscript-b + insert-string "^{}" + backward-character +!endm + +store-procedure subscript-b + insert-string "_{}" + backward-character +!endm + +; useful pairs of delimiters + +store-procedure curly-b + insert-string "{}" + backward-character +!endm + +store-procedure round-b + insert-string "()" + backward-character +!endm + +store-procedure square-b + insert-string "[]" + backward-character +!endm + +store-procedure angle-b + insert-string "\langle\rangle" + 7 backward-character +!endm + +store-procedure vert-b + insert-string "||" + backward-character +!endm + +store-procedure d-vert-b + insert-string "\|\|" + 2 backward-character +!endm + +store-procedure quote-b + insert-string "``''" + backward-character + backward-character +!endm + +store-procedure slash-curly-b + insert-string "\{\}" + 2 backward-character +!endm + +store-procedure slash-round-b + insert-string "\(\)" + 2 backward-character +!endm + +store-procedure slash-square-b + insert-string "\[\]" + 2 backward-character +!endm + +store-procedure dollar-b + insert-string "$$" + backward-character +!endm + +store-procedure double-dollar-b + insert-string "$$$$" + 2 backward-character +!endm + +store-procedure sizable-curly-b + insert-string "\left\{\right\}" + 8 backward-character +!endm + +store-procedure sizable-square-b + insert-string "\left[\right]" + 7 backward-character +!endm + +store-procedure sizable-round-b + insert-string "\left(\right)" + 7 backward-character +!endm + +store-procedure sizable-angle-b + insert-string "\left\langle\right\rangle" + 13 backward-character +!endm + +store-procedure sizable-vert-b + insert-string "\left|\right|" + 7 backward-character +!endm + +store-procedure sizable-d-vert-b + insert-string "\left\|\right\|" + 8 backward-character +!endm + +set %p-doline FALSE ; default is to do a "word" +set %p-gotop TRUE ; default is to go to top of file + ; other choices may be useful + +; store the general motion commands for position-cursor +; in %motion-c1 and %motion-c2 +; NOTE: Too long a string crashes the program !! +set %motion-c1 "!forward-character!backward-character!" +set %motion-c1 &cat %motion-c1 "next-line!previous-line!" +set %motion-c1 &cat %motion-c1 "beginning-of-line!end-of-line!" +set %motion-c2 "!beginning-of-file!end-of-file!" +set %motion-c2 &cat %motion-c2 "end-of-word!previous-word!" +set %motion-c2 &cat %motion-c2 "next-page!previous-page!" + +store-procedure position-cursor +; Uses %p-tmp %p-tmp-t %p-tmp-l. +; if %p-gotop make sure we are at top of file. +; Use arrow, paging keys, mouse, or search to position cursor +; OR type into %p-tmp-t +; Enter terminates it, C-G aborts. +; %p-tmp-t is not blank, return it in %p-tmp, +; else if $curcol!=0 and $curline!=1 return blank-delimited string +; (not "word") at current point. If %p-doline get whole line. + !if %p-gotop + set $curcol 0 + set $curline 1 + !endif + set %p-tmp "" + set %p-tmp-t "" + !while TRUE ; break out with newline + print &cat "[Type, or Select, then Enter (^G aborts)]: " %p-tmp-t + update-screen + set %p-tmp >cmd + !if &equ &len %p-tmp 1 ; Then it's a printable character + set %p-tmp-t &cat %p-tmp-t %p-tmp + !else + set %p-tmp &bind %p-tmp ; translate command + !if &seq %p-tmp "delete-previous-character" ; delete last character + set %p-tmp-l &len %p-tmp-t + !if &greater %p-tmp-l 0 + set %p-tmp-t &mid %p-tmp-t 1 &sub %p-tmp-l 1 + !endif + !else + ; print %p-tmp + !if &seq %p-tmp newline ; break out with newline + !break + !endif + !if &seq %p-tmp abort-command ; break out with ^G + !break + !endif + !if ¬ &seq %p-tmp ERROR ; if valid command + !while TRUE ; break out if recognized motion key + ; first look for general motion + !if ¬ &equ 0 &sindex %motion-c1 &cat &cat "!" %p-tmp "!" + !force %p-tmp + !break + !endif + !if ¬ &equ 0 &sindex %motion-c2 &cat &cat "!" %p-tmp "!" + !force %p-tmp + !break + !endif + !if &seq %p-tmp [MSleft-down] ; mouse strokes + !force run MSleft-down + !break + !endif + !if &seq %p-tmp [MSleft-up] + !force run MSleft-up + !break + !endif + !if &seq %p-tmp search-forward ; searching + execute-named-command search-forward + !endif + !if &seq %p-tmp search-reverse + execute-named-command search-reverse + !endif + !break ; break if we didnt get anything + !endwhile ; test for motion commands + !endif ; not ERROR + !endif + !endif + update-screen + !endwhile ; test for return + !if &seq %p-tmp abort-command ; return nothing if aborted + set %p-tmp "" + !else + !if &greater &len %p-tmp-t 0 + set %p-tmp %p-tmp-t + !else + !if &and &equ $curline 1 &equ $curcol 0 + set %p-tmp "" + !else + !if %p-doline ; copy line + beginning-of-line + !while &and &equ &chr $curchar " " ¬ &equ $curcol $lwidth + forward-character + !endwhile + set-mark + end-of-line + !else ; copy word + !while &and ¬ &seq &chr $curchar " " ¬ &equ $curcol 0 + backward-character + !endwhile + !if &seq &chr $curchar " " + forward-character + !endif + set-mark + !while &and ¬ &seq &chr $curchar " " ¬ &equ $curcol $lwidth + forward-character + !endwhile + !endif + set %p-tmp $region + !endif + !endif + !endif + ; print %p-tmp +!endm + +store-procedure get-help-word +; uses %h-oldfile, %h-file, %h-buffer +; display file %h-file and return a word using position-cursor +; word is returned in %p-tmp + set %h-oldfile $cfname + !if ¬ &exist &cat %l-file-path %h-file + print &cat &cat &cat "[No file " %l-file-path %h-file "]" + set %p-tmp "ERROR" + !return + !endif + find-file &cat %l-file-path %h-file + add-mode VIEW + update-screen + run position-cursor + set %h-buffer $cbufname + !force find-file %h-oldfile + !force delete-buffer %h-buffer +!endm + +store-procedure l-insert-word +; Insert command from file %h-file +; If it has a {, position after the first one. +; Used by many of below command, but some have to add things, so +; do similar things themselves. + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + set %l-tmp1 %p-tmp + ; print %l-tmp1 + !if ¬ &equ &len %l-tmp1 0 + insert-string &cat %l-tmp1 + set %l-tmp2 &sindex %l-tmp1 "{" + !if ¬ &equ %l-tmp2 0 + set %l-tmp3 &sub &len %l-tmp1 %l-tmp2 + !force %l-tmp3 backward-character + !endif + !endif +!endm + +store-procedure l-env-pair +; uses %l-tmp1, %p-tmp +; create a LaTeX environment from user input + set %h-file "environ.lh" + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + set %l-tmp1 %p-tmp + !if ¬ &equ &len %l-tmp1 0 + 2 open-line + insert-string &cat &cat "\begin{" %l-tmp1 "}" + !if &seq %l-tmp1 "array" + insert-string "{lrc}" + !endif + !if &seq %l-tmp1 "list" + insert-string "{labeling}{spacing}" + !endif + !if &seq %l-tmp1 "minipage" + insert-string "[pos]{vsize}" + !endif + !if &seq %l-tmp1 "picture" + insert-string "(x,y)(xl,yl)" + !endif + !if &seq %l-tmp1 "tabular" + insert-string "{lrc}" + !endif + !if &seq %l-tmp1 "thebibliography" + insert-string "{99}" + !endif + 2 next-line + insert-string &cat &cat "\end{" %l-tmp1 "}" + previous-line + !endif +!endm + +store-procedure l-heading +; uses %h-file, %l-tmp1, %p-tmp +; create a LaTeX heading from user input + set %h-file "headings.lh" + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + set %l-tmp1 %p-tmp + ; print %l-tmp1 + !if ¬ &equ &len %l-tmp1 0 + insert-string &cat &cat "\" %l-tmp1 "{}" + backward-character + !endif +!endm + +store-procedure l-template +; LaTeX templates +; uses %l-tmp1, %l-tmp2, %h-file, %p-tmp + set %h-file "ltemp.lh" + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + set %l-tmp1 %p-tmp + !if ¬ &equ &len %l-tmp1 0 + set %l-tmp1 &cat &cat %l-file-path %l-tmp1 ".lt" + !if ¬ &exist %l-tmp1 + print &cat &cat &cat "[No file " %l-tmp1 "]" + !else + set %l-tmp2 $yankflag + set $yankflag TRUE ; keep point at start of included file + insert-file %l-tmp1 + set $yankflag %l-tmp2 + !endif + !endif +!endm + +store-procedure b-template +; BibTeX templates +; uses %l-tmp1, %l-tmp2, %h-file, %p-tmp + set %h-file "btemp.lh" + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + set %l-tmp1 %p-tmp + !if ¬ &equ &len %l-tmp1 0 + set %l-tmp1 &cat &cat %l-file-path %l-tmp1 ".bt" + !if ¬ &exist %l-tmp1 + print &cat &cat &cat "[No file " %l-file-path %l-tmp1 "]" + !else + set %l-tmp2 $yankflag + set $yankflag TRUE ; keep point at start of included file + insert-file %l-tmp1 + set $yankflag %l-tmp2 + end-of-line + backward-character + !endif + !endif +!endm + +store-procedure l-misc +; Miscellaneous LaTeX commands + set %h-file "misc.lh" + run l-insert-word +!endm + +store-procedure l-taccents +; Text accents + set %h-file "taccents.lh" + run l-insert-word +!endm + +store-procedure l-tspecial +; special sybols + set %h-file "tspecial.lh" + run l-insert-word +!endm + +store-procedure l-tforeign +; foreign symbols + set %h-file "tforeign.lh" + run l-insert-word +!endm + +store-procedure l-maccents +; math accents + set %h-file "maccents.lh" + run l-insert-word +!endm + +store-procedure l-greek +; greek letters + set %h-file "greek.lh" + run l-insert-word +!endm + +store-procedure l-mbinops +; math binary operators + set %h-file "mbinops.lh" + run l-insert-word +!endm + +store-procedure l-mrel +; math relations + set %h-file "mrel.lh" + run l-insert-word +!endm + +store-procedure l-marrow +; math arrows + set %h-file "marrow.lh" + run l-insert-word +!endm + +store-procedure l-mmisc +; math miscellaneous + set %h-file "mmisc.lh" + run l-insert-word +!endm + +store-procedure l-mloglike +; math loglike + set %h-file "mloglike.lh" + run l-insert-word +!endm + +store-procedure l-mdelim +; math delimiters + set %h-file "mdelim.lh" + run l-insert-word +!endm + +store-procedure l-mvarsym +; math variable-sized symbols + set %h-file "mvarsym.lh" + run l-insert-word +!endm + +store-procedure l-mline +; math overline/underline + set %h-file "mline.lh" + run l-insert-word +!endm + +store-procedure latex-help + help-engine &cat %l-file-path latex.hlp +!endm + +store-procedure search-latex-help +; uses %s-tmp +; pull keyword off the current file and search help. +; only works for exact match. + !force end-of-word + set-mark + !force previous-word + set %s-tmp @&cat &cat "Search Help for [" $region "]: " + !if &equ &len %s-tmp 0 + set %s-tmp $region + !endif + help-engine &cat %l-file-path latex.hlp + help-engine &cat %l-file-path latex.hlp %s-tmp + ; note that there are two parameters to help engine in this case + print &cat &cat "[Searching help file for " %s-tmp "]" +!endm + +store-procedure interface-help + help-engine &cat %l-file-path "interfac.hlp" +!endm + +store-procedure installation-help + !force find-screen "Installation Help" + !force find-file &cat %l-file-path mewlatex.txt + add-mode view +!endm + +store-procedure tex-info +; TeX information files, e.g. FAQ +; You will want to change texinfo.lh for you local setup + set %h-file "texinfo.lh" + run get-help-word + !if &seq %p-tmp "ERROR" + !return + !endif + !if ¬ &equ &len %p-tmp 0 + !if ¬ &exist %p-tmp + print &cat &cat "[No file " %p-tmp "]" + !else + !force find-screen &cat "Information: "%p-tmp + !force find-file %p-tmp + add-mode view + !endif + !endif +!endm + +store-procedure clean-bibitem +; get rid of pairs of quotes from bibTeX item. +; only makes sense for a .bib file. +; NOTE!: assumes the format in the template files, i.e. +; one item per line, and the closing } on an separate line. + set $discmd FALSE + !force search-reverse "@" + beginning-of-line + !if ¬ &sequal "@" &mid $line 1 1 + !return + !endif + !while TRUE + !force next-line + !if ¬ $status + !break + !endif + !if &sequal "@" &mid $line 1 1 + !break + !endif + !if ¬ &equ 0 &sindex $line "~"~"" + 1 kill-to-end-of-line + !force previous-line + !endif + !endwhile + !force backward-character + !if ¬ $status + !return + !endif + !while &or &seq &chr $curchar " " &seq &chr $curchar "~n" + !force backward-character + !if ¬ $status + !return + !endif + !endwhile + !if ¬ &seq &chr $curchar "}" + !return + !endif + !force backward-character + !while &or &seq &chr $curchar " " &seq &chr $curchar "~n" + !force backward-character + !if ¬ $status + !return + !endif + !endwhile + !if &seq &chr $curchar "," + delete-next-character + !endif + ; clear-message-line + set $discmd TRUE +!endm + +store-procedure clean-bibfile +; run clean-bib-item on whole file + run query-save-all + set %l-tmp1 @"Do you really want to clean your entire bibTeX file? [n]: " + !if ¬ &sequal &lower %l-tmp1 "y" + !return + !endif + print "[Cleaning BibTeX file. This may take a while...]" + set $discmd FALSE + beginning-of-file + !while TRUE + !force search-forward "@" + !if ¬ $status + !break + !endif + run clean-bibitem + ; update-screen + !force next-line + end-of-line + !endwhile + beginning-of-file + open-line + insert-string "BibFile Cleaned: " + run insert-date + print "[Please check this has not messed up your file!]" + set $discmd TRUE +!endm + +store-procedure get-bib-key +; get bibkey from current line, assuming "@name{key," synatax + set %b-key "" + !force search-forward "{" + !if ¬ $status + !return + !endif + set-mark + !force end-of-word + set %b-key $region + ; print %b-key +!endm + +store-procedure find-min-key +; return %m-key and %m-pos + set %m-key "" + set %m-pos 0 + !force search-forward "@" + !if ¬ $status + !return + !endif + run get-bib-key + set %m-key %b-key + set %m-pos $curline + !while TRUE + !force search-forward "@" + !if ¬ $status + !break + !endif + run get-bib-key + !if &sless %b-key %m-key + set %m-key %b-key + set %m-pos $curline + !endif + !endwhile + ; print &cat &cat %m-key " " %m-pos +!endm + +store-procedure sort-bibfile +; sort a .bib file on the cite key +; uses %s-pos to remember the current position +; works through the file, doing an insertion sort on the %b-key +; + run query-save-all + set %l-tmp1 @"Do you really want to sort your entire bibTeX file? [n]: " + !if ¬ &sequal &lower %l-tmp1 "y" + !return + !endif + print "[Sorting BibTeX file. This may take a while...]" + set $discmd FALSE + beginning-of-file + !while TRUE + !force search-forward "@" + !if ¬ $status + !break + !endif + set %s-pos $curline + beginning-of-line + run find-min-key + ; update-screen + ; set %dummy @&cat &cat &cat %s-pos " " %m-pos + !if &greater %m-pos %s-pos + goto-line %m-pos + beginning-of-line + set-mark + end-of-line + !force search-forward "@" + !if ¬ $status + end-of-file + !else + beginning-of-line + !endif + kill-region + goto-line %s-pos + yank + !endif + goto-line %s-pos + end-of-line + !endwhile + beginning-of-file + open-line + insert-string "BibFile Sorted: " + run insert-date + print "[Please check this has not messed up your file!]" + set $discmd TRUE +!endm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LaTeX MENU ADDITIONS +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +; help +macro-to-key latex-help FN1 +macro-to-key search-latex-help FN2 + +; debug +macro-to-key l-display-log FN3 +macro-to-key l-find-error FN4 + +; environment pair +macro-to-key l-env-pair A-V + +; super/subscripts +macro-to-key superscript-b A-^ ; ^{} +macro-to-key subscript-b A-_ ; _{} + +; delimiter pairs -- you may want to personalize these key-bindings +macro-to-key curly-b A-{ ; {} +macro-to-key round-b A-( ; () +macro-to-key square-b A-[ ; [] +macro-to-key angle-b A-< ; \langle\rangle +macro-to-key vert-b A-| ; || +macro-to-key d-vert-b A-\ ; \|\| +macro-to-key quote-b A-" ; ``'' +macro-to-key slash-curly-b A-} ; \{\} +macro-to-key slash-round-b A-) ; \(\) +macro-to-key slash-square-b A-] ; \{\} +macro-to-key dollar-b A-$ ; $$ +macro-to-key double-dollar-b ^XA-$ ; $$$$ +macro-to-key sizable-curly-b ^XA-{ ; \left\{\right\} +macro-to-key sizable-square-b ^XA-[ ; \left[\right] +macro-to-key sizable-round-b ^XA-( ; \left(\right) +macro-to-key sizable-angle-b ^XA-< ; \left\langle\right\rangle +macro-to-key sizable-vert-b ^XA-| ; \left|\right| +macro-to-key sizable-d-vert-b ^XA-\ ; \left\|\right\| + +!if ¬ %l-menus-loaded + print "[Setting up LaTeX Menus]" + macro-to-menu l-template ">&TeX@5>LaTeX &Input>&Templates" + macro-to-menu l-heading "&Headings" + macro-to-menu l-env-pair "En&vironments" + + macro-to-menu dollar-b ">&TeX>LaTeX &Input>Math E&nvironments@3>$ $" + macro-to-menu double-dollar-b "$$ $$" + macro-to-menu slash-round-b "\( \)" + macro-to-menu slash-square-b "\[ \]" + + + macro-to-menu curly-b ">&TeX>LaTeX &Input>&Brackets@4>{ }" + macro-to-menu slash-curly-b "\{ \}" + macro-to-menu round-b "( )" + macro-to-menu square-b "[ ]" + macro-to-menu angle-b "\langle \rangle" + macro-to-menu vert-b "| |" + macro-to-menu d-vert-b "\| \|" + macro-to-menu quote-b "`` ''" + + macro-to-menu l-taccents ">&TeX>LaTeX &Input>Te&xt@5>&Accents" + macro-to-menu l-tspecial "&Special Symbols" + macro-to-menu l-tforeign "&Foreign Symbols" + + macro-to-menu superscript-b ">&TeX>LaTeX &Input>&Math@6>&Super/Subscripts>^{}" + macro-to-menu subscript-b "_{}" + + macro-to-menu sizable-curly-b ">&TeX>LaTeX &Input>&Math>Variable &Brackets@1>left\{ \right\}" + macro-to-menu sizable-round-b "left( \right)" + macro-to-menu sizable-square-b "left[ \right]" + macro-to-menu sizable-angle-b "\left\langle \right\rangle" + macro-to-menu sizable-vert-b "left| \right|" + macro-to-menu sizable-d-vert-b "left\| \right\|" + + macro-to-menu l-maccents ">&TeX>LaTeX &Input>&Math>&Accents@2" + macro-to-menu l-greek "&Greek" + macro-to-menu l-mbinops "Binary &Operators" + macro-to-menu l-mrel "&Relation Symbols" + macro-to-menu l-marrow "Arro&ws" + macro-to-menu l-mmisc "&Miscellanous" + macro-to-menu l-mloglike "&Log Like" + macro-to-menu l-mdelim "&Delimiters" + macro-to-menu l-mvarsym "&Variable Symbols" + macro-to-menu l-mline "Over/&Under Line" + + macro-to-menu l-misc ">&TeX>LaTeX &Input>Mis&cellaneous@7" + + macro-to-menu b-template ">&TeX>&BibTeX Input@1>&Templates" + macro-to-menu clean-bibitem "Clean Bib&Item" + macro-to-menu clean-bibfile "Clean Bib&File" + macro-to-menu sort-bibfile "&Sort BibFile" + + macro-to-menu run-latex ">&TeX>E&xecute@2>&LaTeX" + macro-to-menu run-tex "&TeX" + macro-to-menu view-latex "&View" + macro-to-menu dvi2ps-latex "&DVI to PostScript" + macro-to-menu psview-latex "Post&Script Preview" + macro-to-menu print-latex "&Print" + macro-to-menu run-bibtex "&BibTeX" + macro-to-menu run-makeindex "&MakeIndex" + macro-to-menu clear-latex-file "&Clear Filename" + + macro-to-menu l-display-log ">&TeX>&Debug@3>&Read Logfile" + macro-to-menu l-find-error "&Find Next Error" + + macro-to-menu latex-help ">&TeX>&Help@4>&LaTeX Commands" + macro-to-menu search-latex-help "&Search LaTeX Commands" + macro-to-menu view-charset "&Character Set" + macro-to-menu tex-info "&TeX Information" + macro-to-menu interface-help "&MicroEMACS Interface" + macro-to-menu installation-help "MicroEMACS I&nstallation" +!endif + +set %l-menus-loaded "TRUE" ; so menu commands are only done once. +print "[LaTeX Interface Loaded]" +set $discmd TRUE +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -- cgit v1.2.3