home *** CD-ROM | disk | FTP | other *** search
Text File | 1996-08-15 | 91.9 KB | 3,192 lines | [TEXT/ALFA] |
- #############################################################################
- #############################################################################
- #
- # latexMacros.tcl (called from latex.tcl)
- #
- #############################################################################
- #
- # Author: Tom Scavo <trscavo@syr.edu>
- #
- #############################################################################
- #############################################################################
-
- #############################################################################
- #
- # Basic Commands
- #
- #############################################################################
-
- #--------------------------------------------------------------------------
- # Goto:
- #--------------------------------------------------------------------------
-
- # Switch to (but don't execute) any of the following applications.
- proc latex {} {
- global texSig texAppSig
- set supportedApps [array names texAppSig]
- foreach app $supportedApps { lappend sigs $texAppSig($app) }
- set longPrompt "Please locate your TeX app."
- if { [catch {launchBackApplSigs $sigs texSig $longPrompt} appname] } {
- error "bug in 'launchBackApplSigs'"
- }
- set quotedSig "'[string trim $texSig {'}]'"
- switchTo $quotedSig
- }
- proc bibtex {} {
- global bibtexSig bibtexAppSig
- set supportedApps [array names bibtexAppSig]
- foreach app $supportedApps { lappend sigs $bibtexAppSig($app) }
- set longPrompt "Please locate your BibTeX app."
- if { [catch {launchBackApplSigs $sigs bibtexSig $longPrompt} appname] } {
- error "bug in 'launchBackApplSigs'"
- }
- set quotedSig "'[string trim $bibtexSig {'}]'"
- switchTo $quotedSig
- }
- proc makeindex {} {
- global makeindexSig makeindexAppSig
- set supportedApps [array names makeindexAppSig]
- foreach app $supportedApps { lappend sigs $makeindexAppSig($app) }
- set longPrompt "Please locate your MakeIndex app."
- if { [catch {launchBackApplSigs $sigs makeindexSig $longPrompt} appname] } {
- error "bug in 'launchBackApplSigs'"
- }
- set quotedSig "'[string trim $makeindexSig {'}]'"
- switchTo $quotedSig
- }
-
- # Find the next or previous environment. Search forward (or backward,
- # depending on $forward) for either ¥begin or ¥end. If ¥begin is found,
- # search forward for corresponding ¥end; otherwise, search backward for
- # corresponding ¥begin. Select the found environment, or display an
- # error message if no environment is found.
- proc findEnvironment {forward} {
- set searchString1 {^[ ¥t]*¥¥begin¥{[^¥{¥}]*¥}|¥¥end¥{[^¥{¥}]*¥}[ ¥t]*¥r?}
- set searchPos [getPos]
- if { [isSelection] } then {
- if { $forward } then {
- set searchPos [selEnd]
- } else {
- set searchPos [expr $searchPos - 1]
- }
- } else {
- if { $forward } then {
- set searchPos [expr $searchPos + 1]
- } else {
- set searchPos [expr $searchPos - 1]
- }
- }
- set searchResult [search -s -f $forward -r 1 -n $searchString1 $searchPos]
- if {[string length $searchResult]} then {
- set begPos [lindex $searchResult 0]
- set endPos [lindex $searchResult 1]
- set searchText [getText $begPos $endPos]
- regexp {¥{(.*)¥}} $searchText dummy envName
- if {[string match {*begin*} $searchText]} {
- set begEnv $begPos
- append searchString2 {¥¥end¥{} $envName {¥}[ ¥t]*¥r?}
- set searchPos $endPos
- set searchResult [search -s -f 1 -r 1 -n $searchString2 $searchPos]
- if {[string length $searchResult]} {
- set endPos [lindex $searchResult 1]
- return [list $begPos $endPos]
- } else {
- return "matching ¥¥end not found"
- }
- } else {
- set endEnv $endPos
- append searchString2 {^[ ¥t]*¥¥begin¥{} $envName {¥}}
- set searchPos $begPos
- set searchResult [search -s -f 0 -r 1 -n $searchString2 $searchPos]
- if {[string length $searchResult]} {
- set begPos [lindex $searchResult 0]
- return [list $begPos $endPos]
- } else {
- return "matching ¥¥begin not found"
- }
- }
- } else {
- if { $forward } then {
- return "next environment not found"
- } else {
- return "previous environment not found"
- }
- }
- }
-
- proc prevEnvironment {} {
- global searchNoisily
- set findResult [findEnvironment 0]
- if {[llength $findResult] == 2} then {
- goto [lindex $findResult 0]
- } else {
- if {$searchNoisily} {beep}
- message $findResult
- }
- }
- proc nextEnvironment {} {
- global searchNoisily
- set findResult [findEnvironment 1]
- if {[llength $findResult] == 2} then {
- goto [lindex $findResult 0]
- } else {
- if {$searchNoisily} {beep}
- message $findResult
- }
- }
- proc prevEnvironmentSelect {} {
- global searchNoisily
- set forward 0
- set findResult [findEnvironment $forward]
- if {[llength $findResult] == 2} then {
- set endPos [lindex $findResult 1]
- # if { [regexp {¥r} [lookAt [expr $endPos + 1]]] } then {
- # set endPos [expr $endPos + 1]
- # }
- select [lindex $findResult 0] $endPos
- } else {
- if { $searchNoisily } {beep}
- message $findResult
- }
- }
- proc nextEnvironmentSelect {} {
- global searchNoisily
- set forward 1
- set findResult [findEnvironment $forward]
- if {[llength $findResult] == 2} then {
- set endPos [lindex $findResult 1]
- # if { [regexp {¥r} [lookAt [expr $endPos + 1]]] } then {
- # set endPos [expr $endPos + 1]
- # }
- select [lindex $findResult 0] $endPos
- } else {
- if { $searchNoisily } {beep}
- message $findResult
- }
- }
-
- # Find a LaTeX command in either direction. It's up to the calling
- # procedure to pass the correct starting position of the search.
- proc findCommand {pos direction} {
- # Handle "¥ " and "¥[" separately:
- set searchString {(¥¥([^a-zA-Z¥t¥r* []|[a-zA-Z]+)¥*?)|([^¥¥]¥¥¥ )|([^¥¥]¥¥¥[)}
- set searchResult [search -s -f $direction -r 1 -n $searchString $pos]
- if { [string length $searchResult] } {
- set begPos [lindex $searchResult 0]
- set endPos [lindex $searchResult 1]
- set lastChar [lookAt [expr $endPos - 1]]
- if {$lastChar == "¥ " || $lastChar == "¥["} then {
- return [list [expr $begPos + 1] $endPos]
- } else {}
- }
- return $searchResult
- # Handles everything but "¥ " and "¥[":
- # set searchString {¥¥([^a-zA-Z¥t¥r* []|[a-zA-Z]+)¥*?}
- # return [search -s -f $direction -r 1 -n $searchString $pos]
- }
- # Find and goto the beginning of the previous LaTeX command.
- proc prevCommand {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findCommand [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- goto [lindex $searchResult 0]
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "previous command not found"
- }
- # Find and goto the beginning of the next LaTeX command.
- proc nextCommand {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- set searchResult [findCommand [expr $pos + 1] 1]
- if { [string length $searchResult] } {
- goto [lindex $searchResult 0]
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "next command not found"
- }
- # Select the previous LaTeX command, but do not attempt to select
- # any associated argument.
- proc prevCommandSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findCommand [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "previous command not found"
- }
- # Select the next LaTeX command, but do not attempt to select
- # any associated argument.
- proc nextCommandSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findCommand $pos 1]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "next command not found"
- }
-
- # Find a LaTeX command with arguments in either direction. It's up
- # to the calling procedure to pass the starting position of the search.
- # (Handles everything but "¥ " and commands whose arguments contain
- # embedded braces.)
- proc findCommandWithArgs {pos direction} {
- set searchString {¥¥([^a-zA-Z¥t¥r]|[a-zA-Z]+¥*?)(¥[.*¥])*({[^{}]*})*}
- return [search -s -f $direction -r 1 -n $searchString $pos]
- }
- # Select the previous LaTeX command and any associated arguments.
- proc prevCommandSelectWithArgs {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findCommandWithArgs [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "previous command not found"
- }
- # Select the next LaTeX command and any associated arguments.
- proc nextCommandSelectWithArgs {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findCommandWithArgs $pos 1]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message "next command not found"
- }
-
- # Find a LaTeX sectioning command in either direction. It's up to
- # the calling procedure to pass the starting position of the search.
- proc findSection {pos direction} {
- global funcExprAlt
- return [search -s -f $direction -r 1 -n $funcExprAlt $pos]
- }
- # Select the previous LaTeX sectioning command.
- proc prevSection {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findSection [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {previous section not found}
- }
- # Select the next LaTeX sectioning command.
- proc nextSection {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findSection $pos 1]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {next section not found}
- }
- proc prevSectionSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findSection [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- set begPos [lindex $searchResult 0]
- set searchPos [expr [lindex $searchResult 1] + 1]
- set searchResult [findSection $searchPos 1]
- if { [string length $searchResult] } {
- set endPos [lindex $searchResult 0]
- } else {
- set searchResult [search -s -f 1 -r 0 -n "¥¥end{document}" $searchPos]
- set endPos [lindex $searchResult 0]
- }
- select $begPos $endPos
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {previous section not found}
- }
- # Select the next LaTeX sectioning command.
- proc nextSectionSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findSection $pos 1]
- if { [string length $searchResult] } {
- set begPos [lindex $searchResult 0]
- set searchPos [expr [lindex $searchResult 1] + 1]
- set searchResult [findSection $searchPos 1]
- if { [string length $searchResult] } {
- set endPos [lindex $searchResult 0]
- } else {
- set searchResult [search -s -f 1 -r 0 -n "¥¥end{document}" $searchPos]
- set endPos [lindex $searchResult 0]
- }
- select $begPos $endPos
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {next section not found}
- }
-
- # Find a LaTeX subsectioning command in either direction. It's up to
- # the calling procedure to pass the starting position of the search.
- proc findSubsection {pos direction} {
- global funcExpr
- return [search -s -f $direction -r 1 -n $funcExpr $pos]
- }
- proc prevSubsection {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findSubsection [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {previous (sub)*section not found}
- }
- # Select the next LaTeX sectioning command.
- proc nextSubsection {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findSubsection $pos 1]
- if { [string length $searchResult] } {
- eval select $searchResult
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {next (sub)*section not found}
- }
- proc prevSubsectionSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos > 0} then {
- set searchResult [findSubsection [expr $pos - 1] 0]
- if { [string length $searchResult] } {
- set begPos [lindex $searchResult 0]
- set endPos [lindex $searchResult 1]
- set searchPos [expr $endPos + 1]
- set commandName [extractCommandName [getText $begPos $endPos]]
- if {[string match {section*} $commandName]} then {
- set searchResult [findSection $searchPos 1]
- } else {
- set searchResult [findSubsection $searchPos 1]
- }
- if { [string length $searchResult] } {
- set endPos [lindex $searchResult 0]
- } else {
- set searchResult [search -s -f 1 -r 0 -n "¥¥end{document}" $searchPos]
- set endPos [lindex $searchResult 0]
- }
- select $begPos $endPos
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {previous (sub)*section not found}
- }
- # Select the next LaTeX sectioning command.
- proc nextSubsectionSelect {} {
- global searchNoisily
- set pos [getPos]
- if {$pos < [maxPos]} then {
- if { [isSelection] } then {
- set pos [expr $pos + 1]
- }
- set searchResult [findSubsection $pos 1]
- if { [string length $searchResult] } {
- set begPos [lindex $searchResult 0]
- set endPos [lindex $searchResult 1]
- set searchPos [expr $endPos + 1]
- set commandName [extractCommandName [getText $begPos $endPos]]
- if {[string match {section*} $commandName]} then {
- set searchResult [findSection $searchPos 1]
- } else {
- set searchResult [findSubsection $searchPos 1]
- }
- if { [string length $searchResult] } {
- set endPos [lindex $searchResult 0]
- } else {
- set searchResult [search -s -f 1 -r 0 -n "¥¥end{document}" $searchPos]
- set endPos [lindex $searchResult 0]
- }
- select $begPos $endPos
- return
- } else {}
- }
- if { $searchNoisily } {beep}
- message {next (sub)*section not found}
- }
-
- proc gotoTabStop {dirIndicator} {
- set pos [getPos]
- if {$dirIndicator} then {
- if {$pos == [maxPos]} { return 0 }
- } else {
- if {$pos == 0} { return 0 }
- # Fixes a bug in 'search':
- set pos [expr $pos - 1]
- }
- set searchResult [search -s -n -f $dirIndicator -m 0 -i 1 -r 0 {・} $pos]
- if {[string length $searchResult]} then {
- goto [lindex $searchResult 0]
- return 1
- } else {
- return 0
- }
- }
- proc nextTabStop {} {
- global searchNoisily
- set forward 1
- if { [gotoTabStop $forward] } then {
- deleteChar
- } else {
- if { $searchNoisily } {beep}
- message "tab stop not found"
- }
- }
- proc prevTabStop {} {
- global searchNoisily
- set forward 0
- if { [gotoTabStop $forward] } then {
- deleteChar
- } else {
- if { $searchNoisily } {beep}
- message "tab stop not found"
- }
- }
- # Goto the nth tab stop. A nonzero argument is non-interactive
- # (for use in Tcl procs) and not validated.
- proc nthTabStop {{numTabStops 0}} {
- global searchNoisily promptNoisily useStatusBar
- if { $numTabStops == 0 } then {
- if { $promptNoisily && $useStatusBar } { beep }
- catch {sPrompt "How many tab stops?" "3"} numTabStops
- if { $numTabStops == "cancel" || $numTabStops == 0 } then {
- return
- } elseif { ![isInteger $numTabStops] } then {
- beep
- message "invalid input: integer required"
- return
- }
- }
- set currentPos [getPos]
- if { $numTabStops > 0 } { set forward 1 } { set forward 0 }
- set maxits [expr abs($numTabStops)]
- if { ![gotoTabStop $forward] } then {
- if { $searchNoisily } {beep}
- message "tab stop not found"
- goto $currentPos
- return
- }
- for { set i 1 } { $i < $maxits } { incr i } {
- if { $forward } { forwardChar } { backwardChar }
- if { ![gotoTabStop $forward] } then {
- if { $searchNoisily } { beep }
- message "tab stop not found"
- goto $currentPos
- return
- }
- }
- deleteChar
- }
-
- #--------------------------------------------------------------------------
- # Utilities:
- #--------------------------------------------------------------------------
-
- # A keyboard-bound method of accessing menu commands. Takes a list of
- # menu items (i.e., the tail of a 'menu' command), the menu name (the
- # argument of the '-n' switch) , and the name of a menu filter (the
- # argument of the '-p' switch) as input, and displays these items in a
- # list box. If the chosen item is a menu command (as opposed to a
- # submenu), it is passed to the menu filter; otherwise, 'chooseCommand'
- # recursively calls itself until a menu command is chosen or the cancel
- # button is pressed.
- #
- proc chooseCommand {menuItems {menuName ""} {menuFilterProc ""} {level 1}} {
- watchCursor
- if { $menuItems == "" } { return }
- # Preprocess the list of menu items:
- foreach item $menuItems {
- regsub -all {[<!/].} $item {} item
- regsub -all {ノ} $item {} item
- lappend menOut $item
- if { [string match "menu*" $item] } {
- if { [set ind [lsearch $item {-n}]] >= 0 } {
- lappend top "[lindex $item [incr ind]]:"
- }
- } elseif { ![string match "(*" $item] } {
- lappend top $item
- }
- }
- # Present the menu items to the user:
- set res [listpick -p "Choose menu command (level $level):" $top]
- # Either execute a command or recurse on a submenu:
- if { [lsearch $menOut $res] >= 0 } {
- # Execute the command via the menu filter, if necessary:
- if { $menuFilterProc == "" } {
- $res
- } else {
- $menuFilterProc $menuName $res
- }
- } else {
- set res [string trimright $res {:}]
- foreach item $menOut {
- if { [lsearch $item $res] >= 0 } {
- set menuItems [lindex $item end]
- # Determine the name of this submenu:
- if { [set ind [lsearch $item {-n}]] >= 0 } {
- set menuName [lindex $item [incr ind]]
- } else {
- set menuName ""
- }
- # Determine the name of the menu filter for this submenu:
- if { [set ind [lsearch $item {-p}]] >= 0 } {
- set menuFilterProc [lindex $item [incr ind]]
- } else {
- set menuFilterProc ""
- }
- return [chooseCommand $menuItems $menuName $menuFilterProc [incr level]]
- }
- }
- }
- }
-
- proc insertLiteralTab {} {
- if {[isSelection]} then {
- deleteSelection
- }
- insertText "¥t"
- }
-
- proc insertTabStop {} {
- if {[isSelection]} then {
- deleteSelection
- }
- insertText "・"
- }
-
- # Removes all tab stops from the current selection (if there is one)
- # or the current document, maintaining the cursor position in the
- # latter case.
- proc deleteTabStops {} {
- global searchNoisily
- watchCursor
- set subs1 0; set subs2 0; set subs3 0
- set pos [getPos]
- if {[set start $pos] == [set end [selEnd]]} {
- set messageString "document"
- set start 0
- set end [maxPos]
- set text1 [getText $start $pos]
- set subs1 [regsub -all {・} $text1 {} text1]
- set text2 [getText $pos $end]
- set subs2 [regsub -all {・} $text2 {} text2]
- append text $text1 $text2
- } else {
- set messageString "selection"
- set text [getText $start $end]
- set subs3 [regsub -all {・} $text {} text]
- }
- if {$subs1 || $subs2 || $subs3} then {
- replaceText $start $end $text
- if {$messageString == "document"} then {
- goto [expr $pos - $subs1]
- } else {
- set end [getPos]
- select $start $end
- }
- set subs [expr $subs1 + $subs2 + $subs3]
- message "$subs tab stops removed from $messageString"
- } else {
- if {$searchNoisily} {beep}
- message "no tab stops found in $messageString"
- }
- }
-
- # Delete all unnecessary comments from the current document:
- proc deleteComments {} {
- switch [askyesno "Warning! This operation can not be undone. ¥
- Continue anyway?"] {
- "yes" {}
- "no" { return }
- }
- replaceString {}
- eval select [search -f 1 -r 1 -i 1 -m 0 -- {^[ ¥t]*%.*¥r} 0]
- replaceAll
-
- replaceString {}
- eval select [search -f 1 -r 1 -i 1 -m 0 -- {[ ¥t]+%.*} 0]
- replaceAll
-
- replaceString {¥1%}
- eval select [search -f 1 -r 1 -i 1 -m 0 -- {([^¥¥](¥¥¥¥)*)%.*} 0]
- replaceAll
- }
-
- # Converts all straight quotes to their TeX equivalents.
- proc convertQuotes {} {
- global searchNoisily
- message "workingノ"
- watchCursor
- set messageString "selection"
- if {[set start [getPos]] == [set end [selEnd]]} {
- set messageString "document"
- set start 0
- set end [maxPos]
- }
- set text [getText $start $end]
- # Convert all left double quotes:
- set convert1 [regsub -all "¥(¥^¥|¥[¥ ¥r¥t¥(¥[¥{¥]¥)¥"" $text {¥1``} text]
- # Convert all right double quotes:
- set convert2 [regsub -all "¥(¥[¥^¥¥¥¥¥]¥)¥"" $text {¥1''} text]
- # Convert all left single quotes:
- set convert3 [regsub -all "¥(¥^¥|¥[¥ ¥r¥t¥(¥[¥{¥]¥)¥'" $text {¥1`} text]
- if {$convert1 || $convert2 || $convert3} then {
- replaceText $start $end $text
- message "all quotes in $messageString converted"
- } else {
- if {$searchNoisily} {beep}
- message "no quotes found in $messageString"
- }
- }
-
- # Returns true if the argument contains non-literal double dollar
- # signs, and false otherwise.
- proc containsDoubleDollarSigns {text} {
- return [regexp {(^|[^¥¥])¥$¥$} $text]
- }
-
- # Converts all $$...$$ pairs to ¥[...¥] and returns the number of such
- # pairs converted. If the dollar signs are unbalanced, does nothing
- # and returns -1.
- proc convertDoubleDollarSigns {} {
- watchCursor
- set messageString "selection"
- if {[set start [getPos]] == [set end [selEnd]]} {
- set messageString "document"
- set start 0
- set end [maxPos]
- }
- set text [getText $start $end]
- set subs [regsub -all {(^|[^¥¥])¥$¥$([^$]*)¥$¥$} $text {¥1¥¥[¥2¥¥]} text]
- if {[containsDoubleDollarSigns $text]} then {return -1}
- if {$subs} then {
- replaceText $start $end $text
- }
- return [expr $subs]
- }
-
- # Returns true if the argument contains a non-literal dollar sign,
- # and false otherwise.
- proc containsSingleDollarSign {text} {
- return [regexp {(^|[^¥¥])¥$} $text]
- }
-
- # Converts all $...$ pairs to ¥(...¥), maintains the cursor position,
- # and returns the number of such pairs converted. If the dollar signs
- # are unbalanced, does nothing and returns -1.
- proc convertSingleDollarSigns {} {
- watchCursor
- set subs1 0; set subs2 0; set subs3 0
- set pos [getPos]; set pos2 $pos
- if {[set start $pos] == [set end [selEnd]]} {
- set isSelection 0
- set start 0
- set end [maxPos]
- set text1 [getText $start $pos]
- set subs1 [regsub -all {(^|[^¥¥])¥$([^$]*)¥$} $text1 {¥1¥¥(¥2¥¥)} text1]
- # Is there a dollar sign left over? If so, search backward for this
- # dollar sign and prepare to do a substitution on the text to the right
- # of this dollar sign.
- if {[containsSingleDollarSign $text1]} then {
- set searchString {[^¥¥]¥$}
- set searchResult [search -s -n -f 0 -m 0 -i 1 -r 1 $searchString [expr $pos-1]]
- set pos2 [lindex $searchResult 0]
- set text1 [string range $text1 0 [expr $pos2 + (2 * $subs1)]]
- set pos [expr $pos + 2]
- }
- set text2 [getText $pos2 $end]
- set subs2 [regsub -all {(^|[^¥¥])¥$([^$]*)¥$} $text2 {¥1¥¥(¥2¥¥)} text2]
- # Is there a dollar sign left over? If so, it's unbalanced.
- if {[containsSingleDollarSign $text2]} then {return -1}
- append text $text1 $text2
- } else {
- set isSelection 1
- set text [getText $start $end]
- set subs3 [regsub -all {(^|[^¥¥])¥$([^$]*)¥$} $text {¥1¥¥(¥2¥¥)} text]
- # Is there a dollar sign left over? If so, it's unbalanced.
- if {[containsSingleDollarSign $text]} then {return -1}
- }
- if {$subs1 || $subs2 || $subs3} then {
- replaceText $start $end $text
- # If there is a selection, just put it back. Otherwise, adjust the
- # cursor position based on the number of substitutions.
- if {$isSelection} then {
- set end [getPos]
- select $start $end
- } else {
- goto [expr $pos + (2 * $subs1)]
- }
- }
- return [expr $subs1 + $subs2 + $subs3]
- }
-
- proc convertDollarSigns {} {
- global searchNoisily
- if {[isSelection]} then {
- set messageString "selection"
- } else {
- set messageString "document"
- }
- set subs2 [convertDoubleDollarSigns]
- if {$subs2 == -1} then {
- beep
- alertnote "unmatched double dollar signs in $messageString"
- } else {
- set subs1 [convertSingleDollarSigns]
- if {$subs1 == -1} then {
- beep
- alertnote "unmatched single dollar sign in $messageString"
- } elseif {$subs1 == 0 && $subs2 == 0} then {
- if {$searchNoisily} {beep}
- message "no dollar signs found in $messageString"
- } else {
- message "$subs1 pairs of ¥$ノ¥$ and $subs2 pairs of ¥$¥$ノ¥$¥$ removed from $messageString"
- }
- }
- }
-
-
- #############################################################################
- #
- # Paragraph Mode Macros
- #
- #############################################################################
-
- #--------------------------------------------------------------------------
- # Documents:
- #--------------------------------------------------------------------------
-
- proc newLaTeXDocument {} {
- catch {prompt "Choose a documentclass:" "article" "" "article" ¥
- "report" "book" "letter" "slides"} documentType
- if {$documentType != "cancel"} then {
- new
- newMode TeX
- if { [catch {${documentType}Documentclass}] } then {
- wrapDocument "$documentType"
- }
- while { [options] } {}
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
-
- proc letterDocumentclass {} {
- set preamble "¥r¥¥address¥{%¥r"
- append preamble " ・ ¥¥¥¥ % insert your name here¥r"
- append preamble " ・ ¥¥¥¥ % insert your address here¥r"
- append preamble " ・ ¥¥¥¥ % insert more address here¥r"
- append preamble " ・ % insert city-state-zip here¥r"
- append preamble "¥}¥r¥r"
- append preamble "¥¥date¥{・¥} % optional¥r"
- append preamble "¥¥signature¥{・¥}¥r¥r"
- set body "¥r¥¥begin¥{letter¥}¥{%¥r"
- append body " ・ ¥¥¥¥ % insert addressee's name here¥r"
- append body " ・ ¥¥¥¥ % insert addressee's address here¥r"
- append body " ・ ¥¥¥¥ % insert more address here¥r"
- append body " ・ % insert addressee's city-state-zip here¥r"
- append body "¥}¥r¥r"
- append body "¥¥opening¥{Dear ・,¥}¥r¥r"
- if {[isEmptyFile]} then {
- append body "% BODY OF LETTER¥r"
- append body "・¥r¥r"
- } else {
- if {[isDocumentSelected]} then {
- set text [getSelect]
- # deleteText 0 [maxPos]
- append body "$text¥r"
- } else {
- alertnote "nonempty file: delete text or ¥'Select All¥'¥
- from the Edit menu"
- return
- }
- }
- append body "¥¥closing¥{Sincerely,¥}¥r¥r"
- append body "¥¥encl¥{・¥}¥r"
- append body "¥¥cc¥{・¥}¥r¥r"
- append body "¥¥end¥{letter¥}¥r¥r"
- insertDocument "letter" $preamble $body
- nextTabStop
- message "enter option (or leave blank)"
- }
- proc articleDocumentclass {} {
- if { [wrapDocument "article"] } {
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
- proc reportDocumentclass {} {
- if { [wrapDocument "report"] } {
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
- proc bookDocumentclass {} {
- if { [wrapDocument "book"] } {
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
- proc slidesDocumentclass {} {
- if { [wrapDocument "slides"] } {
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
- proc otherDocumentclass {} {
- catch {prompt "What documentclass?" "article"} documentType
- if {$documentType != "cancel"} then {
- if { [wrapDocument "$documentType"] } {
- nextTabStop
- message "enter option (or leave blank)"
- }
- }
- }
-
- # If an option is inserted, return true; otherwise, return false.
- proc options {} {
- set option [getOption]
- if {$option != ""} then {
- insertOption $option
- return 1
- }
- return 0
- }
- proc getOption {} {
- catch {prompt "Choose an option:" "11pt" "" "10pt" "11pt" "12pt" "(-" ¥
- "letterpaper" "legalpaper" "executivepaper" "a4paper" "a5paper" ¥
- "b5paper" "(-" "landscape" "(-" "final" "draft" "(-" ¥
- "oneside" "twoside" "(-" "openright" "openany" "(-" ¥
- "onecolumn" "twocolumn" "(-" "notitlepage" "titlepage" ¥
- "openbib" "(-" "leqno" "(-" "fleqn"} optionName
- if {$optionName != "cancel"} then {
- return $optionName
- } else {
- return ""
- }
- }
- proc insertOption {option} {
- global TeXmodeVars
- set searchString {¥¥documentclass}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if { $TeXmodeVars(searchNoisily) } {beep}
- message "can¥'t find ¥¥documentclass"
- } else {
- set nextCharPos [lindex $searchResult 1]
- goto $nextCharPos
- set nextChar [lookAt $nextCharPos]
- if {$nextChar == "¥["} then {
- forwardChar
- insertText $option
- if {[lookAt [getPos]] != "¥]"} then {
- insertText ","
- }
- } elseif {$nextChar == "¥{"} then {
- insertText "¥[$option¥]"
- } else {
- alertnote "unrecognizable ¥¥documentclass statement"
- }
- }
- }
-
- proc insertPackage {package} {
- global TeXmodeVars
- # Check to see if $package is already loaded:
- if { $package != "" } then {
- # append searchString {¥¥usepackage¥{.*} $package {.*¥}}
- append searchString {^[^%]*¥¥usepackage¥{.*} $package {.*¥}}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] != 0} then {
- if { $TeXmodeVars(searchNoisily) } {beep}
- message "$package package already loaded"
- return
- }
- }
- # Newlines are allowed in the arguments of ¥documentclass:
- set searchString {¥¥documentclass(¥[[^][]*¥])?{[^{}]*}}
- # Search for ¥documentclass command:
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if { $TeXmodeVars(searchNoisily) } {beep}
- message "can't find ¥¥documentclass"
- } else {
- pushMark
- goto [lindex $searchResult 1]
- set txt "¥r¥¥usepackage¥{$package¥}"
- insertText $txt
- backwardChar
- message "Press <Ctl .> to return to previous position"
- }
- }
-
- proc filecontents {} {
- global searchNoisily
- set searchString {¥¥documentclass}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can¥'t find ¥¥documentclass"
- return
- } else {
- set prompt "File to be included:"
- if {[catch {getfile $prompt} path]} then {
- return
- } else {
- replaceText 0 0 [buildFilecontents $path]
- goto 0
- message "file included"
- }
- }
- }
- proc filecontentsAll {} {
- global searchNoisily
- watchCursor
- message "locating all input filesノ"
- set currentWin [lindex [winNames -f] 0]
- # Is the current window part of TeX fileset?
- set fset [isWindowInFileset $currentWin "tex"]
- if { $fset == "" } {
- set searchString {¥¥documentclass}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can¥'t find ¥¥documentclass"
- return
- } else {
- set text [getText 0 [maxPos]]
- }
- } else {
- # Will not handle a base file that is open and dirty:
- set text [buildFilecontents [texFilesetBaseName $fset]]
- }
- set currentDir [file dirname $currentWin]
- set newText [texResolveAll $text $currentDir]
- if { [string length $text] == [string length $newText] } then {
- beep
- message "no files to include"
- } else {
- replaceText 0 [maxPos] $newText
- goto 0
- message "all files included"
- }
- }
- # Takes a LaTeX document string and a path as input, and returns
- # a modified document string with all filecontents environments
- # prepended.
- proc texResolveAll {latexDoc currentDir} {
- global TeXmodeVars
- set pairs [list ¥
- {{¥¥documentclass} {.cls}} {{¥¥LoadClass} {.cls}} ¥
- {{¥¥include} {.tex}} ¥
- {{¥¥usepackage} {.sty}} {{¥¥RequirePackage} {.sty}} ¥
- {{¥¥input} {}} ¥
- {{¥¥bibliography} {.bib}} {{¥¥bibliographystyle} {.bst}} ¥
- ]
- foreach macro $TeXmodeVars(boxMacroNames) {
- regsub {¥*} $macro {¥¥*} macro
- lappend pairs [list ¥¥¥¥$macro {}]
- }
- foreach pair $pairs {
- set cmd [car $pair]
- set ext [cadr $pair]
- set searchString $cmd
- append searchString {(¥[[^][]*¥])?{([^{}]*)}}
- set searchText $latexDoc
- while { [regexp -indices $searchString $searchText mtch dummy theArgs] } {
- set begPos [lindex $theArgs 0]
- set endPos [lindex $theArgs 1]
- set args [string range $searchText $begPos $endPos]
- foreach arg [split $args ,] {
- if { $cmd == {¥¥input} && ![string length [file extension $arg]] } {
- set ext {.tex}
- }
- set files [glob -nocomplain $currentDir:$arg*]
- set filename "$currentDir:$arg$ext"
- if { [lsearch -exact $files $filename] > -1 } {
- set tempDoc $latexDoc
- set latexDoc [buildFilecontents $filename]
- append latexDoc $tempDoc
- }
- }
- set searchText [string range $searchText [expr $endPos + 2] end]
- }
- }
- return $latexDoc
- }
- # Takes a filename as input and returns a filecontents environment
- # based on the contents of that file. If a second argument is given,
- # use that as the argument of the filecontents environment instead
- # of the original filename.
- proc buildFilecontents {filename {newFilename {}}} {
- set text [readFile $filename]
- # Fix end-of-line characters:
- regsub -all "¥xa" $text "¥xd" text
- set envName "filecontents"
- if { $newFilename == {} } {
- set envArg "{[file tail $filename]}"
- } else {
- set envArg "{$newFilename}"
- }
- return [buildEnvironment $envName $envArg "$text¥r" "¥r¥r"]
- }
-
- #--------------------------------------------------------------------------
- # Page Layout:
- #--------------------------------------------------------------------------
-
- proc maketitle {} {
- global searchNoisily
- set searchString {¥¥document(class|style)(¥[.*¥])?¥{.*¥}}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString 0]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can¥'t find ¥¥documentclass or ¥¥documentstyle"
- } else {
- set searchPos [lindex $searchResult 1]
- set searchString {¥¥begin¥{document¥}}
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 $searchString $searchPos]
- if {[llength $searchResult] == 0} then {
- if {$searchNoisily} {beep}
- message "can¥'t find ¥¥begin¥{document¥}"
- } else {
- goto [lindex $searchResult 1]
- set currentPos [getPos]
- set txt "¥r¥r% Definition of title page:"
- append txt "¥r¥¥title¥{"
- append txt "¥r¥t・¥r¥}"
- append txt "¥r¥¥author¥{"
- append txt "¥r¥t・¥t% insert author(s) here"
- append txt "¥r¥}"
- append txt "¥r¥¥date¥{・¥}¥t% optional"
- append txt "¥r¥r¥¥maketitle"
- insertText $txt
- goto $currentPos
- nextTabStop
- message "insert title"
- }
- }
- }
- proc abstract {} { doWrapEnvironment "abstract" }
- proc titlepage {} { doWrapEnvironment "titlepage" }
- proc getPagestyle {} {
- catch {prompt "Choose a pagestyle:" "plain" "" "plain" "empty" ¥
- "headings" "myheadings"} pagestyleName
- if {$pagestyleName != "cancel"} then {
- return $pagestyleName
- } else {
- return ""
- }
- }
- proc pagestyle {} {
- set pagestyleName [getPagestyle]
- if {$pagestyleName != ""} then {
- openingCarriageReturn
- insertObject "¥¥pagestyle¥{$pagestyleName¥}"
- closingCarriageReturn
- }
- }
- proc thispagestyle {} {
- set pagestyleName [getPagestyle]
- if {$pagestyleName != ""} then {
- openingCarriageReturn
- insertObject "¥¥thispagestyle¥{$pagestyleName¥}"
- closingCarriageReturn
- }
- }
- proc getPagenumberingStyle {} {
- catch {prompt "Choose a pagenumbering style:" "arabic" "" "arabic" ¥
- "roman" "Roman" "alph" "Alph"} pagenumberingStyle
- if {$pagenumberingStyle != "cancel"} then {
- return $pagenumberingStyle
- } else {
- return ""
- }
- }
- proc pagenumbering {} {
- set pagenumberingStyle [getPagenumberingStyle]
- if {$pagenumberingStyle != ""} then {
- openingCarriageReturn
- insertObject "¥¥pagenumbering¥{$pagenumberingStyle¥}"
- closingCarriageReturn
- }
- }
- proc twocolumn {} {
- openingCarriageReturn
- insertObject "¥¥twocolumn"
- closingCarriageReturn
- }
- proc onecolumn {} {
- openingCarriageReturn
- insertObject "¥¥onecolumn"
- closingCarriageReturn
- }
-
- #--------------------------------------------------------------------------
- # Sectioning:
- #--------------------------------------------------------------------------
-
- proc part {} {
- if {[wrapObject "¥¥part{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the part name and don't forget the label"
- }
- }
- proc chapter {} {
- if {[wrapObject "¥¥chapter{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the chapter name and don't forget the label"
- }
- }
- proc section {} {
- if {[wrapObject "¥¥section{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the section name and don't forget the label"
- }
- }
- proc subsection {} {
- if {[wrapObject "¥¥subsection{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the subsection name and don't forget the label"
- }
- }
- proc subsubsection {} {
- if {[wrapObject "¥¥subsubsection{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the subsubsection name and don't forget the label"
- }
- }
- proc paragraph {} {
- if {[wrapObject "¥¥paragraph{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the paragraph name and don't forget the label"
- }
- }
- proc subparagraph {} {
- if {[wrapObject "¥¥subparagraph{" "}・"]} then {
- message "don't forget the label"
- } else {
- message "type the subparagraph name and don't forget the label"
- }
- }
- proc appendix {} {insertObject "¥¥appendix"}
-
- #--------------------------------------------------------------------------
- # Text Style:
- #--------------------------------------------------------------------------
-
- proc emph {} {
- if {[wrapObject "¥¥emph{" "}・"]} then {
- message "selected text has been emphasized"
- } else {
- message "enter text to be emphasized"
- }
- }
- proc textup {} {
- if {[wrapObject "¥¥textup{" "}・"]} then {
- message "selected text has upright shape"
- } else {
- message "enter text to have upright shape"
- }
- }
- proc textit {} {
- if {[wrapObject "¥¥textit{" "}・"]} then {
- message "selected text has italic shape"
- } else {
- message "enter text to have italic shape"
- }
- }
- proc textsl {} {
- if {[wrapObject "¥¥textsl{" "}・"]} then {
- message "selected text has slanted shape"
- } else {
- message "enter text to have slanted shape"
- }
- }
- proc textsc {} {
- if {[wrapObject "¥¥textsc{" "}・"]} then {
- message "selected text has small caps shape"
- } else {
- message "enter text to have small caps shape"
- }
- }
- proc textmd {} {
- if {[wrapObject "¥¥textmd{" "}・"]} then {
- message "selected text has been set in medium series"
- } else {
- message "enter text to be set in medium series"
- }
- }
- proc textbf {} {
- if {[wrapObject "¥¥textbf{" "}・"]} then {
- message "selected text has been set in bold series"
- } else {
- message "enter text to be set in bold series"
- }
- }
- proc textrm {} {
- if {[wrapObject "¥¥textrm{" "}・"]} then {
- message "selected text has been set with roman family"
- } else {
- message "enter text to be set using roman family"
- }
- }
- proc textsf {} {
- if {[wrapObject "¥¥textsf{" "}・"]} then {
- message "selected text has been set with sans serif family"
- } else {
- message "enter text to be set using sans serif family"
- }
- }
- proc texttt {} {
- if {[wrapObject "¥¥texttt{" "}・"]} then {
- message "selected text has been set with typewriter family"
- } else {
- message "enter text to be set using typewriter family"
- }
- }
- proc textnormal {} {
- if {[wrapObject "¥¥textnormal{" "}・"]} then {
- message "selected text has been set with normal style"
- } else {
- message "enter text to be set using normal style"
- }
- }
-
- proc em {} {
- if {[wrapObject "{¥¥em " "}・"]} then {
- message "emphasized text set"
- } else {
- message "enter text to be emphasized"
- }
- }
- proc upshape {} {
- if {[wrapObject "{¥¥upshape " "}・"]} then {
- message "text set in upright shape"
- } else {
- message "enter text to be set in upright shape"
- }
- }
- proc itshape {} {
- if {[wrapObject "{¥¥itshape " "}・"]} then {
- message "text set in italics shape"
- } else {
- message "enter text to be set in italics shape"
- }
- }
- proc slshape {} {
- if {[wrapObject "{¥¥slshape " "}・"]} then {
- message "text set in slanted shape"
- } else {
- message "enter text to be set in slanted shape"
- }
- }
- proc scshape {} {
- if {[wrapObject "{¥¥scshape " "}・"]} then {
- message "text set in small caps shape"
- } else {
- message "enter text to be set in small caps shape"
- }
- }
- proc mdseries {} {
- if {[wrapObject "{¥¥mdseries " "}・"]} then {
- message "text set in medium series"
- } else {
- message "enter text to be set in medium series"
- }
- }
- proc bfseries {} {
- if {[wrapObject "{¥¥bfseries " "}・"]} then {
- message "text set in bold series"
- } else {
- message "enter text to be set in bold series"
- }
- }
- proc rmfamily {} {
- if {[wrapObject "{¥¥rmfamily " "}・"]} then {
- message "text set in roman family"
- } else {
- message "enter text to be set in roman family"
- }
- }
- proc sffamily {} {
- if {[wrapObject "{¥¥sffamily " "}・"]} then {
- message "text set in sans serif family"
- } else {
- message "enter text to be set in sans serif family"
- }
- }
- proc ttfamily {} {
- if {[wrapObject "{¥¥ttfamily " "}・"]} then {
- message "text set in typewriter family"
- } else {
- message "enter text to be set in typewriter family"
- }
- }
- proc normalfont {} {
- if {[wrapObject "{¥¥normalfont " "}・"]} then {
- message "text set in normal style"
- } else {
- message "enter text to be set in normal style"
- }
- }
-
- #--------------------------------------------------------------------------
- # Text Size:
- #--------------------------------------------------------------------------
-
- proc tiny {} {
- if {[wrapObject "{¥¥tiny " "}・"]} then {
- message "tiny text set"
- } else {
- message "enter tiny text"
- }
- }
- proc scriptsize {} {
- if {[wrapObject "{¥¥scriptsize " "}・"]} then {
- message "scriptsize text set"
- } else {
- message "enter scriptsize text"
- }
- }
- proc footnotesize {} {
- if {[wrapObject "{¥¥footnotesize " "}・"]} then {
- message "footnotesize text set"
- } else {
- message "enter footnotesize text"
- }
- }
- proc small {} {
- if {[wrapObject "{¥¥small " "}・"]} then {
- message "small text set"
- } else {
- message "enter small text"
- }
- }
- proc normalsize {} {
- if {[wrapObject "{¥¥normalsize " "}・"]} then {
- message "normalsize text set"
- } else {
- message "enter normalsize text"
- }
- }
- proc large {} {
- if {[wrapObject "{¥¥large " "}・"]} then {
- message "large text set"
- } else {
- message "enter large text"
- }
- }
- proc Large {} {
- if {[wrapObject "{¥¥Large " "}・"]} then {
- message "Large text set"
- } else {
- message "enter Large text"
- }
- }
- proc LARGE {} {
- if {[wrapObject "{¥¥LARGE " "}・"]} then {
- message "LARGE text set"
- } else {
- message "enter LARGE text"
- }
- }
- proc huge {} {
- if {[wrapObject "{¥¥huge " "}・"]} then {
- message "huge text set"
- } else {
- message "enter huge text"
- }
- }
- proc Huge {} {
- if {[wrapObject "{¥¥Huge " "}・"]} then {
- message "Huge text set"
- } else {
- message "enter Huge text"
- }
- }
-
- #--------------------------------------------------------------------------
- # International:
- #--------------------------------------------------------------------------
-
- proc {} {} {
- if {[wrapObject "¥¥`{" "}・"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {抑 {} {
- if {[wrapObject "¥¥'{" "}・"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {凩 {} {
- if {[wrapObject "¥¥^{" "}・"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {嘲 {} {
- if {[wrapObject "¥¥¥"{" "}・"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {孺 {} {
- if {[wrapObject "¥¥~{" "}・"]} then {
- message "accent set"
- } else {
- message "enter single character"
- }
- }
- proc {閤 {} {insertObject "¥¥c¥{c¥}"}
- proc {} {} {insertObject "¥¥c¥{C¥}"}
- proc {マ} {} {insertObject "¥¥oe"}
- proc {ホ} {} {insertObject "¥¥OE"}
- proc {セ} {} {insertObject "¥¥ae"}
- proc {ョ} {} {insertObject "¥¥AE"}
- proc {迎 {} {insertObject "¥¥aa"}
- proc {± {} {insertObject "¥¥AA"}
- proc {ソ} {} {insertObject "¥¥o"}
- proc {ッ} {} {insertObject "¥¥O"}
- proc {ァ} {} {insertObject "¥¥ss"}
- proc {タ} {} {insertObject "?`"}
- proc {チ} {} {insertObject "!`"}
-
- #--------------------------------------------------------------------------
- # Environments:
- #--------------------------------------------------------------------------
-
- proc enumerate {} {
- global promptNoisily useStatusBar
- set envName "enumerate"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberItems]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- if {$numberItems} then {
- set body "¥t¥¥item ・"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "¥r¥r¥t¥¥item ・"
- }
- append body "¥r"
- } else {
- set body "¥t・¥r"
- }
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- proc itemize {} {
- global promptNoisily useStatusBar
- set envName "itemize"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberItems]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- if {$numberItems} then {
- set body "¥t¥¥item ・"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "¥r¥r¥t¥¥item ・"
- }
- append body "¥r"
- } else {
- set body "¥t・¥r"
- }
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- proc description {} {
- global promptNoisily useStatusBar
- set envName "description"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberItems]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- if {$numberItems} then {
- set body "¥t¥¥item¥[・¥] ・"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "¥r¥r¥t¥¥item¥[・¥] ・"
- }
- append body "¥r"
- } else {
- set body "¥t・¥r"
- }
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item label"
- }
- }
- proc thebibliography {} {
- global promptNoisily useStatusBar
- set envName "thebibliography"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many items?" 3} numberItems
- if {$numberItems == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberItems]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- set arg "{9}"
- if {$numberItems} then {
- if {$numberItems > 9} then {set arg "{99}"}
- set body "¥t¥¥bibitem{・} ・"
- for {set i 1} {$i < $numberItems} {incr i} {
- append body "¥r¥r¥t¥¥bibitem{・} ・"
- }
- append body "¥r"
- } else {
- set body "¥t・¥r"
- }
- if {[insertEnvironment $envName $arg $body]} then {
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 {(9)+} [getPos]]
- eval select $searchResult
- message "Change the length of the key field?"
- }
- }
- proc slide {} { doWrapEnvironment "slide" }
- proc overlay {} { doWrapEnvironment "overlay" }
- proc note {} { doWrapEnvironment "note" }
- # proc figure {} {
- # global TeXmodeVars
- # set envName "figure"
- # set envArg "tbp"
- # set arg "¥[$envArg¥]"
- # set theIndentation [getIndentation [getPos]]
- # append arg "¥r$theIndentation¥t¥¥centering"
- # set body ""
- # if { $TeXmodeVars(useBoxMacro) } then {
- # set defaultMacro [car $TeXmodeVars(boxMacroNames)]
- # if { $defaultMacro == "" } {
- # append body "¥t・¥r"
- # } else {
- # set restOfMacros [cdr $TeXmodeVars(boxMacroNames)]
- # if { ![llength $restOfMacros] } {
- # append body "¥t¥¥$defaultMacro{・}¥r"
- # } else {
- # set cmd [list prompt "Choose a boxMacro:"]
- # lappend cmd $defaultMacro ""
- # foreach boxMacroName $TeXmodeVars(boxMacroNames) {
- # lappend cmd $boxMacroName
- # }
- # catch $cmd macro
- # if {$macro != "cancel"} then {
- # append body "¥t¥¥$macro{・}¥r"
- # } else {
- # message "operation canceled"
- # return
- # }
- # }
- # }
- # }
- # append body "¥t¥¥caption{・}¥r"
- # append body "¥t¥¥label{・}¥r"
- # if { $TeXmodeVars(useBoxMacro) } then {
- # if {![insertEnvironment $envName $arg $body]} then {return}
- # } else {
- # wrapEnvironment $envName $arg $body
- # }
- # set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 "$envArg" [getPos]]
- # eval select $searchResult
- # message "Modify this argument? (t=top; b=bottom; p=page; h=here; !=try harder)"
- # }
- proc figure {} {
- global TeXmodeVars
- set envName "figure"
- set envArg "tbp"
- set arg "¥[$envArg¥]"
- set theIndentation [getIndentation [getPos]]
- append arg "¥r$theIndentation¥t¥¥centering"
- set body ""
- set macro [car $TeXmodeVars(boxMacroNames)]
- if { $macro != "" } {
- set restOfMacros [cdr $TeXmodeVars(boxMacroNames)]
- if { ![llength $restOfMacros] } {
- append body "¥t¥¥$macro{・}¥r"
- } else {
- set cmd [list prompt "Choose a box macro:"]
- lappend cmd $macro ""
- foreach boxMacroName $TeXmodeVars(boxMacroNames) {
- lappend cmd $boxMacroName
- }
- catch $cmd macro
- if {$macro == "cancel"} then {
- message "operation canceled"
- return
- } elseif {$macro == ""} then {
- # do nothing
- } else {
- append body "¥t¥¥$macro{・}¥r"
- }
- }
- }
- append body "¥t¥¥caption{・}¥r"
- append body "¥t¥¥label{・}¥r"
- if { $macro == "" } then {
- wrapEnvironment $envName $arg $body
- } else {
- if {![insertEnvironment $envName $arg $body]} then {return}
- }
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 "$envArg" [getPos]]
- eval select $searchResult
- message "Modify this argument? (t=top; b=bottom; p=page; h=here; !=try harder)"
- }
- proc table {} {
- set envName "table"
- set envArg "tbp"
- set arg "¥[$envArg¥]"
- set theIndentation [getIndentation [getPos]]
- append arg "¥r$theIndentation¥t¥¥centering"
- # The following statement puts the caption at the top:
- append arg "¥r$theIndentation¥t¥¥caption{・}"
- # The following statement puts the caption at the bottom:
- # set body "¥t¥¥caption{・}¥r"
- append body "¥t¥¥label{・}¥r"
- wrapEnvironment $envName $arg $body
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 "$envArg" [getPos]]
- eval select $searchResult
- message "Modify this argument? (t=top; b=bottom; p=page; h=here; !=try harder)"
- }
- proc buildRow {jmax} {
- set txt "・"
- for {set j 1} {$j < $jmax} {incr j} {
- append txt " & ・"
- }
- return $txt
- }
- proc tabular {} {
- global promptNoisily useStatusBar
- set envName "tabular"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberRows]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many columns?" 3} numberCols
- if {$numberCols == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberCols]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- set arg "{|"
- for {set j 1} {$j <= $numberCols} {incr j} {
- append arg "c|"
- }
- append arg "}"
- set body "¥t¥¥hline¥r"
- for {set i 1} {$i <= $numberRows} {incr i} {
- append body "¥t[buildRow $numberCols]"
- append body " ¥¥¥¥¥r¥t¥¥hline¥r"
- }
- if {[insertEnvironment $envName $arg $body]} then {
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 {(c|¥|)+} [getPos]]
- select [lindex $searchResult 0] [lindex $searchResult 1]
- message "Modify this argument?"
- }
- }
- proc verbatim {} { doWrapEnvironment "verbatim" }
- proc quote {} { doWrapEnvironment "quote" }
- proc quotation {} { doWrapEnvironment "quotation" }
- proc verse {} { doWrapEnvironment "verse" }
- proc flushleft {} { doWrapEnvironment "flushleft" }
- proc center {} { doWrapEnvironment "center" }
- proc flushright {} { doWrapEnvironment "flushright" }
- proc general {} {
- catch {prompt "What environment?" ""} environmentName
- if {$environmentName != "cancel"} {
- doWrapEnvironment "$environmentName"
- }
- }
-
- #--------------------------------------------------------------------------
- # Boxes:
- #--------------------------------------------------------------------------
-
- proc mbox {} {
- if {[wrapObject "¥¥mbox{" "}・"]} then {
- message "mbox set"
- } else {
- message "enter text"
- }
- }
- proc makebox {} {
- if {[wrapObject "¥¥makebox¥[・¥]¥[・¥]{" "}・"]} then {
- message "makebox set; enter the width and position"
- } else {
- message "enter the width and position of the makebox, then the text"
- }
- }
- proc fbox {} {
- if {[wrapObject "¥¥fbox{" "}・"]} then {
- message "fbox set"
- } else {
- message "enter text"
- }
- }
- proc framebox {} {
- if {[wrapObject "¥¥framebox¥[・¥]¥[・¥]{" "}・"]} then {
- message "framebox set; enter the width and position"
- } else {
- message "enter the width and position of the framebox, then the text"
- }
- }
- proc newsavebox {} {
- if {[wrapObject "¥¥newsavebox{" "}・"]} then {
- message "newsavebox defined"
- } else {
- message "enter the command name of the sbox or savebox"
- }
- }
- proc sbox {} {
- if {[wrapObject "¥¥sbox{・}{" "}・"]} then {
- message "sbox set; enter the command name"
- } else {
- message "enter the command name of the sbox, then the text"
- }
- }
- proc savebox {} {
- if {[wrapObject "¥¥savebox{・}¥[・¥]¥[・¥]{" "}・"]} then {
- message "savebox set; enter the command name"
- } else {
- message "enter the command name of the savebox"
- }
- }
- proc usebox {} {
- if {[wrapObject "¥¥usebox{" "}・"]} then {
- message "usebox declared"
- } else {
- message "enter the command name of the sbox or savebox"
- }
- }
- proc raisebox {} {
- if {[wrapObject "¥¥raisebox{・}¥[・¥]¥[・¥]{" "}・"]} then {
- message "raisebox set; enter the displacement"
- } else {
- message "enter the displacement of the raisebox"
- }
- }
- proc parbox {} {
- if {[wrapObject "¥¥parbox¥[・¥]¥{・¥}{" "}・"]} then {
- message "parbox set; enter the position and width"
- } else {
- message "enter the position ¥[b|c|t¥] and width of the parbox, then the text"
- }
- }
- proc minipage {} {
- set arg "¥[・¥]{・}"
- wrapEnvironment "minipage" $arg ""
- nextTabStop
- message "enter the position ¥[b|c|t¥] of the minipage, then the width"
- }
- proc rule {} {
- insertObject "¥¥rule¥[・¥]¥{・¥}{・}・"
- nthTabStop -4
- message "enter the displacement of the rule, then width and height"
- }
-
- #--------------------------------------------------------------------------
- # Misc:
- #--------------------------------------------------------------------------
-
- proc verb {} {
- if {[wrapObject "¥¥verb|" "|・"]} then {
- message "verbatim text set"
- } else {
- message "enter verbatim text"
- }
- }
- proc footnote {} {
- if {[wrapObject "¥¥footnote{" "}・"]} then {
- message "footnote set"
- } else {
- message "enter footnote"
- }
- }
- proc marginalNote {} {
- if {[wrapObject "¥¥marginpar{" "}・"]} then {
- message "marginal note set"
- } else {
- message "enter marginal note"
- }
- }
-
- proc label {} {
- if {[wrapObject "¥¥label{" "}・"]} then {
- message "label defined"
- } else {
- message "enter label"
- }
- }
- proc ref {} {
- TeXRefCompletion "ref"
- }
- proc pageref {} {
- TeXRefCompletion "pageref"
- }
- proc cite {} {
- if {[wrapObject "¥¥cite{" "}・"]} then {
- message "citation made"
- } else {
- message "enter citation key"
- }
- }
- proc nocite {} {
- if {[wrapObject "¥¥nocite{" "}・"]} then {
- message "citation added to the list"
- } else {
- message "enter citation key"
- }
- }
-
- # Insert an ¥item or a ¥bibitem, depending on the context.
- proc insertItem {} {
- set command [eval getText [searchEnvironment]]
- set environment [extractCommandArg $command]
- switch $environment {
- "itemize" {
- set text "¥¥item ・"
- }
- "enumerate" {
- set text "¥¥item ・"
- }
- "description" {
- set text "¥¥item¥[・¥] ・"
- }
- "thebibliography" {
- set text "¥¥bibitem{・} ・"
- }
- default {
- beep
- message "insertItem: cursor in $environment environment"
- return
- }
- }
- set pos [getPos]
- # Indentation should mirror that of an existing ¥item
- # (if it exists)
- insertText [openingCarriageReturn]$text
- goto $pos
- nextTabStop
- }
-
- proc quotes {} {
- if {[wrapObject "`" "'・"]} then {
- message "text quoted"
- } else {
- message "enter text"
- }
- }
- proc dblQuotes {} {
- if {[wrapObject "``" "''・"]} then {
- message "text double quoted"
- } else {
- message "enter text"
- }
- }
-
- proc ldots {} {insertObject "¥¥ldots"}
- proc {en-dash} {} {insertObject "--"}
- proc {em-dash} {} {insertObject "---"}
- proc texLogo {} {insertObject "¥¥TeX"}
- proc latexLogo {} {insertObject "¥¥LaTeX"}
- proc latex2eLogo {} {insertObject "¥¥LaTeXe"}
- proc today {} {insertObject "¥¥today"}
-
- proc dag {} {insertObject "¥¥dag"}
- proc ddag {} {insertObject "¥¥ddag"}
- proc sectionMark {} {insertObject "¥¥S"}
- proc paragraphMark {} {insertObject "¥¥P"}
- proc copyright {} {insertObject "¥¥copyright"}
- proc pounds {} {insertObject "¥¥pounds"}
-
-
- #############################################################################
- #
- # Math Mode Macros
- #
- #############################################################################
-
- #--------------------------------------------------------------------------
- # Math Modes:
- #--------------------------------------------------------------------------
-
- proc texMath {} {
- checkMathMode "texMath" 0
- if {[wrapObject "$" "$・"]} then {
- message "formula set"
- } else {
- message "enter formula"
- }
- }
- proc texDisplaymath {} {
- checkMathMode "texDisplaymath" 0
- if {[wrapObject "$$" "$$・"]} then {
- message "displayed formula set"
- } else {
- message "enter displayed formula"
- }
- }
- proc latexMath {} {
- checkMathMode "latexMath" 0
- if {[wrapObject "¥¥( " " ¥¥)・"]} then {
- message "formula set"
- } else {
- message "enter formula"
- }
- }
- proc latexDisplaymath {} {
- checkMathMode "latexDisplaymath" 0
- if {[wrapObject "¥¥¥[ " " ¥¥¥]・"]} then {
- message "displayed formula set"
- } else {
- message "enter displayed formula"
- }
- }
-
- #--------------------------------------------------------------------------
- # Math Style:
- #--------------------------------------------------------------------------
-
- proc mathit {} {
- checkMathMode "mathit" 1
- if {[wrapObject "¥¥mathit{" "}・"]} then {
- message "selected text is math italic"
- } else {
- message "enter text to be math italic"
- }
- }
- proc mathrm {} {
- checkMathMode "mathrm" 1
- if {[wrapObject "¥¥mathrm{" "}・"]} then {
- message "selected text is math roman"
- } else {
- message "enter text to be math roman"
- }
- }
- proc mathbf {} {
- checkMathMode "mathbf" 1
- if {[wrapObject "¥¥mathbf{" "}・"]} then {
- message "selected text is math bold"
- } else {
- message "enter text to be math bold"
- }
- }
- proc mathsf {} {
- checkMathMode "mathsf" 1
- if {[wrapObject "¥¥mathsf{" "}・"]} then {
- message "selected text is math sans serif"
- } else {
- message "enter text to be math sans serif"
- }
- }
- proc mathtt {} {
- checkMathMode "mathtt" 1
- if {[wrapObject "¥¥mathtt{" "}・"]} then {
- message "selected text is math typewriter"
- } else {
- message "enter text to be math typewriter"
- }
- }
- proc mathcal {} {
- checkMathMode "mathcal" 1
- # Allow upper-case arguments only:
- if {[isSelection] && ![isUppercase]} then {
- alertnote "argument to ¥¥mathcal must be uppercase"
- return
- }
- if {[wrapObject "¥¥mathcal{" "}・"]} then {
- message "selected text is calligraphic"
- } else {
- message "enter text to be calligraphic (UPPERCASE letters only)"
- }
- }
- proc displaystyle {} {
- checkMathMode "displaystyle" 1
- if {[wrapObject "{¥¥displaystyle " "}・"]} then {
- message "displaystyle set"
- } else {
- message "enter displaystyle text"
- }
- }
- proc textstyle {} {
- checkMathMode "textstyle" 1
- if {[wrapObject "{¥¥textstyle " "}・"]} then {
- message "textstyle set"
- } else {
- message "enter textstyle text"
- }
- }
- proc scriptstyle {} {
- checkMathMode "scriptstyle" 1
- if {[wrapObject "{¥¥scriptstyle " "}・"]} then {
- message "scriptstyle set"
- } else {
- message "enter scriptstyle text"
- }
- }
- proc scriptscriptstyle {} {
- checkMathMode "scriptscriptstyle" 1
- if {[wrapObject "{¥¥scriptscriptstyle " "}・"]} then {
- message "scriptscriptstyle set"
- } else {
- message "enter scriptscriptstyle text"
- }
- }
-
- #--------------------------------------------------------------------------
- # Math Environments:
- #--------------------------------------------------------------------------
-
- proc math {} { checkMathMode "math" 0; doWrapEnvironment "math" }
- proc displaymath {} {
- checkMathMode "displaymath" 0
- global TeXmodeVars
- if { $TeXmodeVars(useBrackets) } {
- doWrapStructure {¥[} {} {¥]}
- } else {
- doWrapEnvironment "displaymath"
- }
- }
- proc equation {} {
- checkMathMode "equation" 0
- set envName "equation"
- set body "¥t¥¥label{・}¥r"
- if {[wrapEnvironment $envName "" $body]} then {
- set msgText "equation wrapped"
- } else {
- set msgText "enter equation"
- }
- nextTabStop
- message $msgText
- }
- proc eqnarrayStar {} {
- global promptNoisily useStatusBar
- checkMathMode "eqnarrayStar" 0
- set envName "eqnarray*"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberRows]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- set row "¥t[buildRow 3]"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " ¥¥¥¥¥r"
- }
- append body $row
- append body "¥r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- proc eqnarray {} {
- global promptNoisily useStatusBar
- checkMathMode "eqnarray" 0
- set envName "eqnarray"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberRows]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- set row "¥t[buildRow 3]¥r¥t¥¥label{・}"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " ¥¥¥¥¥r"
- }
- append body $row
- append body "¥r"
- if {[insertEnvironment $envName "" $body]} then {
- nextTabStop
- message "type first item"
- }
- }
- proc myArray {} {
- global promptNoisily useStatusBar
- checkMathMode "myArray" 1
- set envName "array"
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many rows?" 3} numberRows
- if {$numberRows == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberRows]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- if {$promptNoisily && $useStatusBar} {beep}
- catch {sPrompt "$envName: how many columns?" 3} numberCols
- if {$numberCols == "cancel"} then {
- return
- } elseif {![isPositiveInteger $numberCols]} then {
- beep
- message "invalid input: unsigned, postive integer required"
- return
- }
- set arg "{"
- for {set j 1} {$j <= $numberCols} {incr j} {
- append arg "c"
- }
- append arg "}"
- set row "¥t[buildRow $numberCols]"
- for {set i 1} {$i < $numberRows} {incr i} {
- append body $row
- append body " ¥¥¥¥¥r"
- }
- append body $row
- append body "¥r"
- if {[insertEnvironment $envName $arg $body]} then {
- set searchResult [search -s -n -f 1 -m 0 -i 1 -r 1 {c+} [getPos]]
- select [lindex $searchResult 0] [lindex $searchResult 1]
- message "Modify this argument?"
- }
- }
-
- #--------------------------------------------------------------------------
- # Formulas:
- #--------------------------------------------------------------------------
-
- proc subscript {} {
- checkMathMode "subscript" 1
- if {[wrapObject "_{" "}・"]} then {
- message "subscript set"
- } else {
- message "enter subscript"
- }
- }
- proc superscript {} {
- checkMathMode "superscript" 1
- if {[wrapObject "^{" "}・"]} then {
- message "superscript set"
- } else {
- message "enter superscript"
- }
- }
- proc fraction {} {
- checkMathMode "fraction" 1
- set currentPos [getPos]
- if {[isSelection]} then {
- set selection [getSelect]
- set args [split $selection /]
- set len [llength $args]
- deleteText $currentPos [selEnd]
- if {$len == 1} then {
- insertObject "¥¥frac{$selection}{・}・"
- goto $currentPos
- nextTabStop
- message "enter denominator"
- } else {
- set firstArg [lindex $args 0]
- set restArgs [lrange $args 1 [expr $len-1]]
- insertObject "¥¥frac{$firstArg}{[join $restArgs /]}"
- if {$len > 2} {message "beware of multiple /"}
- }
- } else {
- insertObject "¥¥frac{・}{・}・"
- goto $currentPos
- nextTabStop
- message "enter numerator"
- }
- }
- proc squareRoot {} {
- checkMathMode "squareRoot" 1
- if {[wrapObject "¥¥sqrt{" "}・"]} then {
- message "square root set"
- } else {
- message "enter formula"
- }
- }
- proc nthRoot {} {
- checkMathMode "nthRoot" 1
- if {[wrapObject "¥¥sqrt¥[・¥]{" "}・"]} then {
- message "enter root"
- } else {
- message "enter root, then formula"
- }
- }
- proc oneParameter {} {
- checkMathMode "oneParameter" 1
- if {[wrapObject "¥¥・{" "}・"]} then {
- message "enter command name"
- } else {
- message "enter command name, press <Tab>, enter argument"
- }
- }
- proc twoParameters {} {
- checkMathMode "twoParameters" 1
- if {[wrapObject "¥¥・{" "}{・}・"]} then {
- message "enter command name"
- } else {
- message "enter command name, press <Tab>, enter argument, etc."
- }
- }
-
- #--------------------------------------------------------------------------
- # Greek:
- #--------------------------------------------------------------------------
-
- proc alpha {} {checkMathMode "alpha" 1; insertObject "¥¥alpha"}
- proc beta {} {checkMathMode "beta" 1; insertObject "¥¥beta"}
- proc gamma {} {checkMathMode "gamma" 1; insertObject "¥¥gamma"}
- proc delta {} {checkMathMode "delta" 1; insertObject "¥¥delta"}
- proc epsilon {} {checkMathMode "epsilon" 1; insertObject "¥¥epsilon"}
- proc zeta {} {checkMathMode "zeta" 1; insertObject "¥¥zeta"}
- proc eta {} {checkMathMode "eta" 1; insertObject "¥¥eta"}
- proc theta {} {checkMathMode "theta" 1; insertObject "¥¥theta"}
- proc iota {} {checkMathMode "iota" 1; insertObject "¥¥iota"}
- proc kappa {} {checkMathMode "kappa" 1; insertObject "¥¥kappa"}
- proc lambda {} {checkMathMode "lambda" 1; insertObject "¥¥lambda"}
- proc mu {} {checkMathMode "mu" 1; insertObject "¥¥mu"}
- proc nu {} {checkMathMode "nu" 1; insertObject "¥¥nu"}
- proc xi {} {checkMathMode "xi" 1; insertObject "¥¥xi"}
- proc omicron {} {checkMathMode "omicron" 1; insertObject "o"}
- proc pi {} {checkMathMode "pi" 1; insertObject "¥¥pi"}
- proc rho {} {checkMathMode "rho" 1; insertObject "¥¥rho"}
- proc sigma {} {checkMathMode "sigma" 1; insertObject "¥¥sigma"}
- proc tau {} {checkMathMode "tau" 1; insertObject "¥¥tau"}
- proc upsilon {} {checkMathMode "upsilon" 1; insertObject "¥¥upsilon"}
- proc phi {} {checkMathMode "phi" 1; insertObject "¥¥phi"}
- proc chi {} {checkMathMode "chi" 1; insertObject "¥¥chi"}
- proc psi {} {checkMathMode "psi" 1; insertObject "¥¥psi"}
- proc omega {} {checkMathMode "omega" 1; insertObject "¥¥omega"}
-
- proc Gamma {} {checkMathMode "Gamma" 1; insertObject "¥¥Gamma"}
- proc Delta {} {checkMathMode "Delta" 1; insertObject "¥¥Delta"}
- proc Theta {} {checkMathMode "Theta" 1; insertObject "¥¥Theta"}
- proc Lambda {} {checkMathMode "Lambda" 1; insertObject "¥¥Lambda"}
- proc Xi {} {checkMathMode "Xi" 1; insertObject "¥¥Xi"}
- proc Pi {} {checkMathMode "Pi" 1; insertObject "¥¥Pi"}
- proc Sigma {} {checkMathMode "Sigma" 1; insertObject "¥¥Sigma"}
- proc Upsilon {} {checkMathMode "Upsilon" 1; insertObject "¥¥Upsilon"}
- proc Phi {} {checkMathMode "Phi" 1; insertObject "¥¥Phi"}
- proc Psi {} {checkMathMode "Psi" 1; insertObject "¥¥Psi"}
- proc Omega {} {checkMathMode "Omega" 1; insertObject "¥¥Omega"}
-
- proc varepsilon {} {checkMathMode "varepsilon" 1; insertObject "¥¥varepsilon"}
- proc vartheta {} {checkMathMode "vartheta" 1; insertObject "¥¥vartheta"}
- proc varpi {} {checkMathMode "varpi" 1; insertObject "¥¥varpi"}
- proc varrho {} {checkMathMode "varrho" 1; insertObject "¥¥varrho"}
- proc varsigma {} {checkMathMode "varsigma" 1; insertObject "¥¥varsigma"}
- proc varphi {} {checkMathMode "varphi" 1; insertObject "¥¥varphi"}
-
- #--------------------------------------------------------------------------
- # Binary Ops:
- #--------------------------------------------------------------------------
-
- proc pm {} {checkMathMode "pm" 1; insertObject "¥¥pm"}
- proc mp {} {checkMathMode "mp" 1; insertObject "¥¥mp"}
- proc times {} {checkMathMode "times" 1; insertObject "¥¥times"}
- proc div {} {checkMathMode "div" 1; insertObject "¥¥div"}
- proc ast {} {checkMathMode "ast" 1; insertObject "¥¥ast"}
- proc star {} {checkMathMode "star" 1; insertObject "¥¥star"}
- proc circ {} {checkMathMode "circ" 1; insertObject "¥¥circ"}
- proc bullet {} {checkMathMode "bullet" 1; insertObject "¥¥bullet"}
- proc cdot {} {checkMathMode "cdot" 1; insertObject "¥¥cdot"}
- proc cap {} {checkMathMode "cap" 1; insertObject "¥¥cap"}
- proc cup {} {checkMathMode "cup" 1; insertObject "¥¥cup"}
- proc uplus {} {checkMathMode "uplus" 1; insertObject "¥¥uplus"}
- proc sqcap {} {checkMathMode "sqcap" 1; insertObject "¥¥sqcap"}
- proc sqcup {} {checkMathMode "sqcup" 1; insertObject "¥¥sqcup"}
- proc vee {} {checkMathMode "vee" 1; insertObject "¥¥vee"}
- proc wedge {} {checkMathMode "wedge" 1; insertObject "¥¥wedge"}
- proc setminus {} {checkMathMode "setminus" 1; insertObject "¥¥setminus"}
- proc wr {} {checkMathMode "wr" 1; insertObject "¥¥wr"}
- proc diamond {} {checkMathMode "diamond" 1; insertObject "¥¥diamond"}
- proc bigtriangleup {} {
- checkMathMode "bigtriangleup" 1; insertObject "¥¥bigtriangleup"
- }
- proc bigtriangledown {} {
- checkMathMode "bigtriangledown" 1; insertObject "¥¥bigtriangledown"
- }
- proc triangleleft {} {
- checkMathMode "triangleleft" 1; insertObject "¥¥triangleleft"
- }
- proc triangleright {} {
- checkMathMode "triangleright" 1; insertObject "¥¥triangleright"
- }
- proc lhd {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "lhd" 1; insertObject "¥¥lhd"
- }
- }
- proc rhd {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "rhd" 1; insertObject "¥¥rhd"
- }
- }
- proc unlhd {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "unlhd" 1; insertObject "¥¥unlhd"
- }
- }
- proc unrhd {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "unrhd" 1; insertObject "¥¥unrhd"
- }
- }
- proc oplus {} {checkMathMode "oplus" 1; insertObject "¥¥oplus"}
- proc ominus {} {checkMathMode "ominus" 1; insertObject "¥¥ominus"}
- proc otimes {} {checkMathMode "otimes" 1; insertObject "¥¥otimes"}
- proc oslash {} {checkMathMode "oslash" 1; insertObject "¥¥oslash"}
- proc odot {} {checkMathMode "odot" 1; insertObject "¥¥odot"}
- proc bigcirc {} {checkMathMode "bigcirc" 1; insertObject "¥¥bigcirc"}
- proc dagger {} {checkMathMode "dagger" 1; insertObject "¥¥dagger"}
- proc ddagger {} {checkMathMode "ddagger" 1; insertObject "¥¥ddagger"}
- proc amalg {} {checkMathMode "amalg" 1; insertObject "¥¥amalg"}
-
- #--------------------------------------------------------------------------
- # Relations:
- #--------------------------------------------------------------------------
-
- proc leq {} {checkMathMode "leq" 1; insertObject "¥¥leq"}
- proc prec {} {checkMathMode "prec" 1; insertObject "¥¥prec"}
- proc preceq {} {checkMathMode "preceq" 1; insertObject "¥¥preceq"}
- proc myLl {} {checkMathMode "myLl" 1; insertObject "¥¥ll"}
- proc subset {} {checkMathMode "subset" 1; insertObject "¥¥subset"}
- proc subseteq {} {checkMathMode "subseteq" 1; insertObject "¥¥subseteq"}
- proc sqsubset {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "sqsubset" 1; insertObject "¥¥sqsubset"
- }
- }
- proc sqsubseteq {} {checkMathMode "sqsubseteq" 1; insertObject "¥¥sqsubseteq"}
- proc in {} {checkMathMode "in" 1; insertObject "¥¥in"}
- proc vdash {} {checkMathMode "vdash" 1; insertObject "¥¥vdash"}
-
- proc geq {} {checkMathMode "geq" 1; insertObject "¥¥geq"}
- proc succ {} {checkMathMode "succ" 1; insertObject "¥¥succ"}
- proc succeq {} {checkMathMode "succeq" 1; insertObject "¥¥succeq"}
- proc gg {} {checkMathMode "gg" 1; insertObject "¥¥gg"}
- proc supset {} {checkMathMode "supset" 1; insertObject "¥¥supset"}
- proc supseteq {} {checkMathMode "supseteq" 1; insertObject "¥¥supseteq"}
- proc sqsupset {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "sqsupset" 1; insertObject "¥¥sqsupset"
- }
- }
- proc sqsupseteq {} {checkMathMode "sqsupseteq" 1; insertObject "¥¥sqsupseteq"}
- proc ni {} {checkMathMode "ni" 1; insertObject "¥¥ni"}
- proc dashv {} {checkMathMode "dashv" 1; insertObject "¥¥dashv"}
-
- proc equiv {} {checkMathMode "equiv" 1; insertObject "¥¥equiv"}
- proc sim {} {checkMathMode "sim" 1; insertObject "¥¥sim"}
- proc simeq {} {checkMathMode "simeq" 1; insertObject "¥¥simeq"}
- proc asymp {} {checkMathMode "asymp" 1; insertObject "¥¥asymp"}
- proc approx {} {checkMathMode "approx" 1; insertObject "¥¥approx"}
- proc cong {} {checkMathMode "cong" 1; insertObject "¥¥cong"}
- proc neq {} {checkMathMode "neq" 1; insertObject "¥¥neq"}
- proc doteq {} {checkMathMode "doteq" 1; insertObject "¥¥doteq"}
- proc propto {} {checkMathMode "propto" 1; insertObject "¥¥propto"}
-
- proc models {} {checkMathMode "models" 1; insertObject "¥¥models"}
- proc perp {} {checkMathMode "perp" 1; insertObject "¥¥perp"}
- proc mid {} {checkMathMode "mid" 1; insertObject "¥¥mid"}
- proc parallel {} {checkMathMode "parallel" 1; insertObject "¥¥parallel"}
- proc bowtie {} {checkMathMode "bowtie" 1; insertObject "¥¥bowtie"}
- proc myJoin {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "myJoin" 1; insertObject "¥¥join"
- }
- }
- proc smile {} {checkMathMode "smile" 1; insertObject "¥¥smile"}
- proc frown {} {checkMathMode "frown" 1; insertObject "¥¥frown"}
-
- #--------------------------------------------------------------------------
- # Arrows:
- #--------------------------------------------------------------------------
-
- proc leftarrow {} {checkMathMode "leftarrow" 1; insertObject "¥¥leftarrow"}
- proc Leftarrow {} {checkMathMode "Leftarrow" 1; insertObject "¥¥Leftarrow"}
- proc rightarrow {} {checkMathMode "rightarrow" 1; insertObject "¥¥rightarrow"}
- proc Rightarrow {} {checkMathMode "Rightarrow" 1; insertObject "¥¥Rightarrow"}
- proc leftrightarrow {} {
- checkMathMode "leftrightarrow" 1; insertObject "¥¥leftrightarrow"
- }
- proc Leftrightarrow {} {
- checkMathMode "Leftrightarrow" 1; insertObject "¥¥Leftrightarrow"
- }
- proc mapsto {} {checkMathMode "mapsto" 1; insertObject "¥¥mapsto"}
- proc hookleftarrow {} {
- checkMathMode "hookleftarrow" 1; insertObject "¥¥hookleftarrow"
- }
- proc leftharpoonup {} {
- checkMathMode "leftharpoonup" 1; insertObject "¥¥leftharpoonup"
- }
- proc leftharpoondown {} {
- checkMathMode "leftharpoondown" 1; insertObject "¥¥leftharpoondown"
- }
- proc rightleftharpoons {} {
- checkMathMode "rightleftharpoons" 1; insertObject "¥¥rightleftharpoons"
- }
-
- proc longleftarrow {} {
- checkMathMode "longleftarrow" 1; insertObject "¥¥longleftarrow"
- }
- proc Longleftarrow {} {
- checkMathMode "Longleftarrow" 1; insertObject "¥¥Longleftarrow"
- }
- proc longrightarrow {} {
- checkMathMode "longrightarrow" 1; insertObject "¥¥longrightarrow"
- }
- proc Longrightarrow {} {
- checkMathMode "Longrightarrow" 1; insertObject "¥¥Longrightarrow"
- }
- proc longleftrightarrow {} {
- checkMathMode "longleftrightarrow" 1; insertObject "¥¥longleftrightarrow"
- }
- proc Longleftrightarrow {} {
- checkMathMode "Longleftrightarrow" 1; insertObject "¥¥Longleftrightarrow"
- }
- proc longmapsto {} {checkMathMode "longmapsto" 1; insertObject "¥¥longmapsto"}
- proc hookrightarrow {} {
- checkMathMode "hookrightarrow" 1; insertObject "¥¥hookrightarrow"
- }
- proc rightharpoonup {} {
- checkMathMode "rightharpoonup" 1; insertObject "¥¥rightharpoonup"
- }
- proc rightharpoondown {} {
- checkMathMode "rightharpoondown" 1; insertObject "¥¥rightharpoondown"
- }
- proc leadsto {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "leadsto" 1; insertObject "¥¥leadsto"
- }
- }
- proc uparrow {} {checkMathMode "uparrow" 1; insertObject "¥¥uparrow"}
- proc Uparrow {} {checkMathMode "Uparrow" 1; insertObject "¥¥Uparrow"}
- proc downarrow {} {checkMathMode "downarrow" 1; insertObject "¥¥downarrow"}
- proc Downarrow {} {checkMathMode "Downarrow" 1; insertObject "¥¥Downarrow"}
- proc updownarrow {} {checkMathMode "updownarrow" 1; insertObject "¥¥updownarrow"}
- proc Updownarrow {} {checkMathMode "Updownarrow" 1; insertObject "¥¥Updownarrow"}
- proc nearrow {} {checkMathMode "nearrow" 1; insertObject "¥¥nearrow"}
- proc searrow {} {checkMathMode "searrow" 1; insertObject "¥¥searrow"}
- proc swarrow {} {checkMathMode "swarrow" 1; insertObject "¥¥swarrow"}
- proc nwarrow {} {checkMathMode "nwarrow" 1; insertObject "¥¥nwarrow"}
-
- #--------------------------------------------------------------------------
- # Dots:
- #--------------------------------------------------------------------------
-
- proc cdots {} {checkMathMode "cdots" 1; insertObject "¥¥cdots"}
- proc vdots {} {checkMathMode "vdots" 1; insertObject "¥¥vdots"}
- proc ddots {} {checkMathMode "ddots" 1; insertObject "¥¥ddots"}
-
- #--------------------------------------------------------------------------
- # Symbols:
- #--------------------------------------------------------------------------
-
- proc aleph {} {checkMathMode "aleph" 1; insertObject "¥¥aleph"}
- proc hbar {} {checkMathMode "hbar" 1; insertObject "¥¥hbar"}
- proc imath {} {checkMathMode "imath" 1; insertObject "¥¥imath"}
- proc jmath {} {checkMathMode "jmath" 1; insertObject "¥¥jmath"}
- proc ell {} {checkMathMode "ell" 1; insertObject "¥¥ell"}
- proc wp {} {checkMathMode "wp" 1; insertObject "¥¥wp"}
- proc Re {} {checkMathMode "Re" 1; insertObject "¥¥Re"}
- proc Im {} {checkMathMode "Im" 1; insertObject "¥¥Im"}
- proc mho {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "mho" 1; insertObject "¥¥mho"
- }
- }
- proc prime {} {checkMathMode "prime" 1; insertObject "¥¥prime"}
- proc emptyset {} {checkMathMode "emptyset" 1; insertObject "¥¥emptyset"}
- proc nabla {} {checkMathMode "nabla" 1; insertObject "¥¥nabla"}
- proc surd {} {checkMathMode "surd" 1; insertObject "¥¥surd"}
- proc top {} {checkMathMode "top" 1; insertObject "¥¥top"}
- proc bot {} {checkMathMode "bot" 1; insertObject "¥¥bot"}
- # proc | {} {checkMathMode "|" 1; insertObject "¥¥|"}
- proc angle {} {checkMathMode "angle" 1; insertObject "¥¥angle"}
- proc forall {} {checkMathMode "forall" 1; insertObject "¥¥forall"}
- proc exists {} {checkMathMode "exists" 1; insertObject "¥¥exists"}
- proc neg {} {checkMathMode "neg" 1; insertObject "¥¥neg"}
- proc flat {} {checkMathMode "flat" 1; insertObject "¥¥flat"}
- proc natural {} {checkMathMode "natural" 1; insertObject "¥¥natural"}
- proc sharp {} {checkMathMode "sharp" 1; insertObject "¥¥sharp"}
- proc backslash {} {checkMathMode "backslash" 1; insertObject "¥¥backslash"}
- proc partial {} {checkMathMode "partial" 1; insertObject "¥¥partial"}
- proc infty {} {checkMathMode "infty" 1; insertObject "¥¥infty"}
- proc Box {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "Box" 1; insertObject "¥¥Box"
- }
- }
- proc Diamond {} {
- if {[isSymbolPackageLoaded]} then {
- checkMathMode "Diamond" 1; insertObject "¥¥Diamond"
- }
- }
- proc triangle {} {checkMathMode "triangle" 1; insertObject "¥¥triangle"}
- proc clubsuit {} {checkMathMode "clubsuit" 1; insertObject "¥¥clubsuit"}
- proc diamondsuit {} {checkMathMode "diamondsuit" 1; insertObject "¥¥diamondsuit"}
- proc heartsuit {} {checkMathMode "heartsuit" 1; insertObject "¥¥heartsuit"}
- proc spadesuit {} {checkMathMode "spadesuit" 1; insertObject "¥¥spadesuit"}
-
- #--------------------------------------------------------------------------
- # Functions:
- #--------------------------------------------------------------------------
-
- proc arccos {} {checkMathMode "arccos" 1; insertObject "¥¥arccos"}
- proc arcsin {} {checkMathMode "arcsin" 1; insertObject "¥¥arcsin"}
- proc arctan {} {checkMathMode "arctan" 1; insertObject "¥¥arctan"}
- proc arg {} {checkMathMode "arg" 1; insertObject "¥¥arg"}
- proc cos {} {checkMathMode "cos" 1; insertObject "¥¥cos"}
- proc cosh {} {checkMathMode "cosh" 1; insertObject "¥¥cosh"}
- proc cot {} {checkMathMode "cot" 1; insertObject "¥¥cot"}
- proc coth {} {checkMathMode "coth" 1; insertObject "¥¥coth"}
- proc csc {} {checkMathMode "csc" 1; insertObject "¥¥csc"}
- proc deg {} {checkMathMode "deg" 1; insertObject "¥¥deg"}
- proc det {} {checkMathMode "det" 1; insertObject "¥¥det"}
- proc dim {} {checkMathMode "dim" 1; insertObject "¥¥dim"}
- proc exp {} {checkMathMode "exp" 1; insertObject "¥¥exp"}
- proc gcd {} {checkMathMode "gcd" 1; insertObject "¥¥gcd"}
- proc hom {} {checkMathMode "hom" 1; insertObject "¥¥hom"}
- # proc inf {} {checkMathMode "inf" 1; insertObject "¥¥inf"}
- proc inf {} {
- checkMathMode "inf" 1
- if {[wrapObject "¥¥inf_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- proc ker {} {checkMathMode "ker" 1; insertObject "¥¥ker"}
- proc lg {} {checkMathMode "lg" 1; insertObject "¥¥lg"}
- # proc lim {} {checkMathMode "lim" 1; insertObject "¥¥lim"}
- proc lim {} {
- checkMathMode "lim" 1
- if {[wrapObject "¥¥lim_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- # proc liminf {} {checkMathMode "liminf" 1; insertObject "¥¥liminf"}
- proc liminf {} {
- checkMathMode "liminf" 1
- if {[wrapObject "¥¥liminf_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- # proc limsup {} {checkMathMode "limsup" 1; insertObject "¥¥limsup"}
- proc limsup {} {
- checkMathMode "limsup" 1
- if {[wrapObject "¥¥limsup_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- proc ln {} {checkMathMode "ln" 1; insertObject "¥¥ln"}
- proc log {} {checkMathMode "log" 1; insertObject "¥¥log"}
- # proc max {} {checkMathMode "max" 1; insertObject "¥¥max"}
- proc max {} {
- checkMathMode "max" 1
- if {[wrapObject "¥¥max_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- # proc min {} {checkMathMode "min" 1; insertObject "¥¥min"}
- proc min {} {
- checkMathMode "min" 1
- if {[wrapObject "¥¥min_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- proc Pr {} {checkMathMode "Pr" 1; insertObject "¥¥Pr"}
- proc sec {} {checkMathMode "sec" 1; insertObject "¥¥sec"}
- proc sin {} {checkMathMode "sin" 1; insertObject "¥¥sin"}
- proc sinh {} {checkMathMode "sinh" 1; insertObject "¥¥sinh"}
- # proc sup {} {checkMathMode "sup" 1; insertObject "¥¥sup"}
- proc sup {} {
- checkMathMode "sup" 1
- if {[wrapObject "¥¥sup_{" "}・"]} then {
- message "limit set"
- } else {
- message "enter limit"
- }
- }
- proc tan {} {checkMathMode "tan" 1; insertObject "¥¥tan"}
- proc tanh {} {checkMathMode "tanh" 1; insertObject "¥¥tanh"}
-
- proc bmod {} {checkMathMode "bmod" 1; insertObject "¥¥bmod"}
- proc pmod {} {
- checkMathMode "pmod" 1
- if {[wrapObject "¥¥pmod{" "}・"]} then {
- message "parenthesized mod set"
- } else {
- message "enter formula"
- }
- }
-
- #--------------------------------------------------------------------------
- # Large Ops:
- #--------------------------------------------------------------------------
-
- proc insertLargeOp {commandName} {
- checkMathMode "$commandName" 1
- set currentPos [getPos]
- insertObject "¥¥$commandName¥_{・}^{・}・"
- goto $currentPos
- nextTabStop
- }
- proc sum {} {insertLargeOp "sum"}
- proc prod {} {insertLargeOp "prod"}
- proc coprod {} {insertLargeOp "coprod"}
- proc int {} {insertLargeOp "int"}
- proc oint {} {insertLargeOp "oint"}
- proc bigcap {} {insertLargeOp "bigcap"}
- proc bigcup {} {insertLargeOp "bigcup"}
- proc bigsqcup {} {insertLargeOp "bigsqcup"}
- proc bigvee {} {insertLargeOp "bigvee"}
- proc bigwedge {} {insertLargeOp "bigwedge"}
- proc bigodot {} {insertLargeOp "bigodot"}
- proc bigotimes {} {insertLargeOp "bigotimes"}
- proc bigoplus {} {insertLargeOp "bigoplus"}
- proc biguplus {} {insertLargeOp "biguplus"}
-
- #--------------------------------------------------------------------------
- # Delimiters:
- #--------------------------------------------------------------------------
-
- proc delimitObject {leftDelim rightDelim} {
- if {[wrapObject $leftDelim $rightDelim]} then {
- message "formula delimited"
- } else {
- message "enter formula"
- }
- }
- proc parentheses {} { checkMathMode "parentheses" 1; delimitObject "(" ")・" }
- proc brackets {} { checkMathMode "brackets" 1; delimitObject "¥[" "¥]・" }
- proc braces {} { checkMathMode "braces" 1; delimitObject "¥¥¥{" "¥¥¥}・" }
- proc absoluteValue {} { checkMathMode "absoluteValue" 1; delimitObject "|" "|・" }
- proc getDelims {} {
- catch {prompt "Choose delimiters:" "parentheses" "" "parentheses" ¥
- "brackets" "braces" "angle brackets" "vertical bars" ¥
- "double bars" "ceiling" "floor"} delimType
- if {$delimType != "cancel"} then {
- switch $delimType {
- "parentheses" {
- set leftDelim "("
- set rightDelim ")"
- }
- "brackets" {
- set leftDelim "¥["
- set rightDelim "¥]"
- }
- "braces" {
- set leftDelim "¥¥¥{"
- set rightDelim "¥¥¥}"
- }
- "vertical bars" {
- set leftDelim "|"
- set rightDelim "|"
- }
- "double bars" {
- set leftDelim "¥¥|"
- set rightDelim "¥¥|"
- }
- "angle brackets" {
- set leftDelim "¥¥langle"
- set rightDelim "¥¥rangle"
- }
- "ceiling" {
- set leftDelim "¥¥lceil"
- set rightDelim "¥¥rceil"
- }
- "floor" {
- set leftDelim "¥¥lfloor"
- set rightDelim "¥¥rfloor"
- }
- default {
- alertnote "¥"$delimType¥" not recognized"
- return ""
- }
- }
- return [list $leftDelim $rightDelim]
- } else {return ""}
- }
- proc otherDelims {} {
- checkMathMode "otherDelims" 1
- set delims [getDelims]
- if {$delims != ""} then {
- set leftDelim [lindex $delims 0]
- set rightDelim [lindex $delims 1]
- delimitObject "$leftDelim" "$rightDelim・"
- }
- }
- proc {half-openInterval} {} {
- checkMathMode "half-openInterval" 1; delimitObject "(" "¥]・"
- }
- proc {half-closedInterval} {} {
- checkMathMode "half-closedInterval" 1; delimitObject "¥[" ")・"
- }
-
- proc insertBigDelims {leftDelim rightDelim isMultiline} {
- checkMathMode "insertBigDelims" 1
- if {$isMultiline} then {
- doWrapStructure $leftDelim "" $rightDelim
- } else {
- if { [wrapObject $leftDelim $rightDelim] } then {
- message "formula delimited"
- } else {
- message "enter formula"
- }
- }
- }
- proc bigParens {} {
- checkMathMode "bigParens" 1; insertBigDelims "¥¥left(" "¥¥right)・" 0
- }
- proc multiBigParens {} {
- checkMathMode "multiBigParens" 1; insertBigDelims "¥¥left(" "¥¥right)・" 1
- }
- proc bigBrackets {} {
- checkMathMode "bigBrackets" 1; insertBigDelims "¥¥left¥[" "¥¥right¥]・" 0
- }
- proc multiBigBrackets {} {
- checkMathMode "multiBigBrackets" 1; insertBigDelims "¥¥left¥[" "¥¥right¥]・" 1
- }
- proc bigBraces {} {
- checkMathMode "bigBraces" 1; insertBigDelims "¥¥left¥¥¥{" "¥¥right¥¥¥}・" 0
- }
- proc multiBigBraces {} {
- checkMathMode "multiBigBraces" 1; insertBigDelims "¥¥left¥¥¥{" "¥¥right¥¥¥}・" 1
- }
- proc bigAbsValue {} {
- checkMathMode "bigAbsValue" 1; insertBigDelims "¥¥left|" "¥¥right|・" 0
- }
- proc multiBigAbsValue {} {
- checkMathMode "multiBigAbsValue" 1; insertBigDelims "¥¥left|" "¥¥right|・" 1
- }
- proc doOtherBigDelims {name isMultiline} {
- checkMathMode $name 1
- set delims [getDelims]
- if {$delims != ""} then {
- append leftDelim "¥¥left" [lindex $delims 0]
- append rightDelim "¥¥right" [lindex $delims 1]
- insertBigDelims "$leftDelim" "$rightDelim・" $isMultiline
- }
- }
- proc otherBigDelims {} {
- doOtherBigDelims "otherBigDelims" 0
- }
- proc otherMultiBigDelims {} {
- doOtherBigDelims "otherMultiBigDelims" 1
- }
- proc bigLeftBrace {} {
- checkMathMode "bigLeftBrace" 1
- insertBigDelims "¥¥left¥¥¥{" "¥¥right.・" 0
- }
- proc multiBigLeftBrace {} {
- checkMathMode "multiBigLeftBrace" 1
- insertBigDelims "¥¥left¥¥¥{" "¥¥right.・" 1
- }
- proc doOtherMixedBigDelims {name isMultiline} {
- checkMathMode $name 1
- catch {prompt "Choose LEFT delimiter:" "parenthesis" "" "parenthesis" ¥
- "bracket" "brace" "vertical bar" "double bar" ¥
- "angle bracket" "ceiling" "floor" "slash" "backslash" ¥
- "none"} delimType
- if {$delimType != "cancel"} then {
- switch $delimType {
- "parenthesis" {set leftDelim "("}
- "bracket" {set leftDelim "¥["}
- "brace" {set leftDelim "¥¥¥{"}
- "vertical bar" {set leftDelim "|"}
- "double bar" {set leftDelim "¥¥|"}
- "angle bracket" {set leftDelim "¥¥langle"}
- "ceiling" {set leftDelim "¥¥lceil"}
- "floor" {set leftDelim "¥¥lfloor"}
- "slash" {set leftDelim "/"}
- "backslash" {set leftDelim "¥¥backslash"}
- "none" {set leftDelim "."}
- default {
- alertnote "¥"$delimType¥" not recognized"
- return
- }
- }
- catch {prompt "Choose RIGHT delimiter:" "parenthesis" "" "parenthesis" ¥
- "bracket" "brace" "vertical bar" "double bar" ¥
- "angle bracket" "ceiling" "floor" "slash" "backslash" ¥
- "none"} delimType
- if {$delimType != "cancel"} then {
- switch $delimType {
- "parenthesis" {set rightDelim ")"}
- "bracket" {set rightDelim "¥]"}
- "brace" {set rightDelim "¥¥¥}"}
- "vertical bar" {set rightDelim "|"}
- "double bar" {set rightDelim "¥¥|"}
- "angle bracket" {set rightDelim "¥¥rangle"}
- "ceiling" {set rightDelim "¥¥rceil"}
- "floor" {set rightDelim "¥¥rfloor"}
- "slash" {set rightDelim "/"}
- "backslash" {set rightDelim "¥¥backslash"}
- "none" {set rightDelim "."}
- default {
- alertnote "¥"$delimType¥" not recognized"
- return
- }
- }
- insertBigDelims "¥¥left$leftDelim" "¥¥right$rightDelim・" $isMultiline
- }
- }
- }
- proc otherMixedBigDelims {} {
- doOtherMixedBigDelims "otherMixedBigDelims" 0
- }
- proc otherMultiMixedBigDelims {} {
- doOtherMixedBigDelims "otherMultiMixedBigDelims" 1
- }
-
- #--------------------------------------------------------------------------
- # Accents:
- #--------------------------------------------------------------------------
-
- proc acute {} {
- checkMathMode "acute" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥acute{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc bar {} {
- checkMathMode "bar" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥bar{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc breve {} {
- checkMathMode "breve" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥breve{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc check {} {
- checkMathMode "check" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥check{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc dot {} {
- checkMathMode "dot" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥dot{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc ddot {} {
- checkMathMode "ddot" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥ddot{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc grave {} {
- checkMathMode "grave" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥grave{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc hat {} {
- checkMathMode "hat" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥hat{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc tilde {} {
- checkMathMode "tilde" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥tilde{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
- proc vec {} {
- checkMathMode "vec" 1
- if {[isSelection] > 1} then {
- alertnote "Warning: only a single character may be accented!"
- }
- if {[wrapObject "¥¥vec{" "}・"]} then {
- message "accent set"
- } else {
- message "enter one character"
- }
- }
-
- proc widehat {} {
- checkMathMode "widehat" 1
- if {[isSelection] > 3} then {
- alertnote "Warning: only a few characters may be accented!"
- }
- if {[wrapObject "¥¥widehat{" "}・"]} then {
- message "accent set"
- } else {
- message "enter a few characters"
- }
- }
- proc widetilde {} {
- checkMathMode "widetilde" 1
- if {[isSelection] > 3} then {
- alertnote "Warning: only a few characters may be accented!"
- }
- if {[wrapObject "¥¥widetilde{" "}・"]} then {
- message "accent set"
- } else {
- message "enter a few characters"
- }
- }
-
- proc imath {} {checkMathMode "imath" 1; insertObject "¥¥imath"}
- proc jmath {} {checkMathMode "jmath" 1; insertObject "¥¥jmath"}
-
- #--------------------------------------------------------------------------
- # Grouping:
- #--------------------------------------------------------------------------
-
- proc underline {} {
- checkMathMode "underline" 1
- if {[wrapObject "¥¥underline{" "}・"]} then {
- message "selection underlined"
- } else {
- message "enter text"
- }
- }
- proc overline {} {
- checkMathMode "overline" 1
- if {[wrapObject "¥¥overline{" "}・"]} then {
- message "selection overlined"
- } else {
- message "enter text"
- }
- }
- proc underbrace {} {
- checkMathMode "underbrace" 1
- if {[wrapObject "¥¥underbrace{" "}・"]} then {
- message "selection underbraced"
- } else {
- message "enter text"
- }
- }
- proc overbrace {} {
- checkMathMode "overbrace" 1
- if {[wrapObject "¥¥overbrace{" "}・"]} then {
- message "selection overbraced"
- } else {
- message "enter text"
- }
- }
- proc overrightarrow {} {
- checkMathMode "overrightarrow" 1
- if {[wrapObject "¥¥overrightarrow{" "}・"]} then {
- message "selection overrightarrowed"
- } else {
- message "enter text"
- }
- }
- proc overleftarrow {} {
- checkMathMode "overleftarrow" 1
- if {[wrapObject "¥¥overleftarrow{" "}・"]} then {
- message "selection overleftarrowed"
- } else {
- message "enter text"
- }
- }
- proc stackrel {} {
- checkMathMode "stackrel" 1
- set currentPos [getPos]
- if {[insertObject "¥¥stackrel{・}{・}・"]} then {
- goto $currentPos
- nextTabStop
- message "1st arg scriptstyle"
- }
- }
-
- #--------------------------------------------------------------------------
- # Spacing:
- #--------------------------------------------------------------------------
-
- proc negThin {} {checkMathMode "negThin" 1; insertObject "¥¥!"}
- proc thin {} {checkMathMode "thin" 1; insertObject "¥¥,"}
- proc medium {} {checkMathMode "medium" 1; insertObject "¥¥:"}
- proc thick {} {checkMathMode "thick" 1; insertObject "¥¥;"}
- proc quad {} {checkMathMode "quad" 1; insertObject "¥¥quad"}
- proc qquad {} {checkMathMode "qquad" 1; insertObject "¥¥qquad"}
- proc hspace {} {
- checkMathMode "hspace" 1
- if {[wrapObject "¥¥hspace{" "}・"]} then {
- message "spacing set"
- } else {
- message "enter the desired horizontal spacing"
- }
- }
- proc vspace {} {
- checkMathMode "vspace" 1
- if {[wrapObject "¥¥vspace{" "}・"]} then {
- message "spacing set"
- } else {
- message "enter the desired horizontal spacing"
- }
- }
- proc hfill {} {checkMathMode "hfill" 1; insertObject "¥¥hfill"}
- proc vfill {} {checkMathMode "vfill" 1; insertObject "¥¥vfill"}
- proc smallskip {} {checkMathMode "smallskip" 1; insertObject "¥¥smallskip"}
- proc medskip {} {checkMathMode "medskip" 1; insertObject "¥¥medskip"}
- proc bigskip {} {checkMathMode "bigskip" 1; insertObject "¥¥bigskip"}
-
-