yatex
annotate yatexenv.el @ 613:38b311149463
Key definition fixed
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 06 May 2024 17:11:31 +0900 |
parents | c0827f80b18e |
children |
rev | line source |
---|---|
yuuji@287 | 1 ;;; yatexenv.el --- YaTeX environment-specific functions |
yuuji@572 | 2 ;;; (c) 1994-2019 by HIROSE Yuuji.[yuuji@yatex.org] |
yuuji@572 | 3 ;;; Last modified Sat May 25 14:46:33 2019 on firestorm |
yuuji@366 | 4 ;;; $Id$ |
yuuji@23 | 5 |
yuuji@287 | 6 ;;; Code: |
yuuji@23 | 7 ;;; |
yuuji@23 | 8 ;; Functions for tabular environment |
yuuji@23 | 9 ;;; |
yuuji@23 | 10 |
yuuji@23 | 11 ;; Showing the matching column of tabular environment. |
yuuji@80 | 12 (defun YaTeX-array-what-column-internal () |
yuuji@80 | 13 "Return the cons of matching column and its title of array environment. |
yuuji@23 | 14 When calling from a program, make sure to be in array/tabular environment." |
yuuji@359 | 15 (let ((p (point)) bot beg eot bor eoll (nlptn "\\\\\\\\") (andptn "[^\\]&") |
yuuji@49 | 16 (n 0) j |
yuuji@23 | 17 (firsterr "This line might be the first row.")) |
yuuji@23 | 18 (save-excursion |
yuuji@23 | 19 (YaTeX-beginning-of-environment) |
yuuji@359 | 20 (setq eoll (save-excursion ;end of logical line |
yuuji@359 | 21 (YaTeX-goto-corresponding-environment) (point))) |
yuuji@23 | 22 (search-forward "{" p) (up-list 1) |
yuuji@23 | 23 (search-forward "{" p) (up-list 1) |
yuuji@23 | 24 ;;(re-search-forward andptn p) |
yuuji@359 | 25 (setq bot (point)) ;beginning of tabular |
yuuji@359 | 26 (while (progn (search-forward "&" eoll) |
yuuji@23 | 27 (equal (char-after (1- (match-beginning 0))) ?\\ ))) |
yuuji@23 | 28 (setq beg (1- (point))) ;beg is the point of the first & |
yuuji@359 | 29 (or (re-search-forward nlptn eoll t) |
yuuji@23 | 30 (error firsterr)) |
yuuji@23 | 31 (setq eot (point)) ;eot is the point of the first \\ |
yuuji@23 | 32 (goto-char p) |
yuuji@359 | 33 (setq bor (if (re-search-backward nlptn bot 1) |
yuuji@359 | 34 (point) ;bor is the beginning of this row. |
yuuji@359 | 35 bot)) |
yuuji@23 | 36 (while (< (1- (point)) p) |
yuuji@23 | 37 (if (equal (following-char) ?&) |
yuuji@23 | 38 (forward-char 1) |
yuuji@23 | 39 (re-search-forward andptn nil 1)) |
yuuji@23 | 40 (setq n (1+ n))) ;Check current column number |
yuuji@23 | 41 (goto-char p) |
yuuji@23 | 42 (cond ;Start searching \multicolumn{N} |
yuuji@23 | 43 ((> n 1) |
yuuji@23 | 44 (re-search-backward andptn) ;Sure to find! |
yuuji@23 | 45 (while (re-search-backward "\\\\multicolumn{\\([0-9]+\\)}" bor t) |
yuuji@452 | 46 (setq n (+ n (YaTeX-str2int |
yuuji@23 | 47 (buffer-substring (match-beginning 1) |
yuuji@23 | 48 (match-end 1))) |
yuuji@23 | 49 -1))))) |
yuuji@23 | 50 (message "%s" n) |
yuuji@23 | 51 (goto-char (1- beg)) |
yuuji@59 | 52 (beginning-of-line) |
yuuji@49 | 53 (setq j n) |
yuuji@49 | 54 (while (> j 1) |
yuuji@49 | 55 (or (re-search-forward andptn p nil) |
yuuji@49 | 56 (error "This column exceeds the limit.")) |
yuuji@49 | 57 (setq j (1- j))) |
yuuji@49 | 58 (skip-chars-forward "\\s ") |
yuuji@80 | 59 (list n |
yuuji@359 | 60 (YaTeX-buffer-substring |
yuuji@359 | 61 (progn (skip-chars-forward "\n \t") (point)) |
yuuji@80 | 62 (progn |
yuuji@80 | 63 (re-search-forward (concat andptn "\\|" nlptn) eot) |
yuuji@80 | 64 (goto-char (match-beginning 0)) |
yuuji@80 | 65 (if (looking-at andptn) |
yuuji@80 | 66 (forward-char 1)) |
yuuji@80 | 67 (skip-chars-backward "\\s ") |
yuuji@80 | 68 (point))))))) |
yuuji@80 | 69 |
yuuji@80 | 70 (defun YaTeX-array-what-column () |
yuuji@80 | 71 "Show matching column title of array environment. |
yuuji@80 | 72 When calling from a program, make sure to be in array/tabular environment." |
yuuji@80 | 73 (apply 'message |
yuuji@80 | 74 "This is the column(#%d) of: %s" |
yuuji@80 | 75 (YaTeX-array-what-column-internal))) |
yuuji@23 | 76 |
yuuji@23 | 77 ;;;###autoload |
yuuji@23 | 78 (defun YaTeX-what-column () |
yuuji@23 | 79 "Show which kind of column the current position is belonging to." |
yuuji@23 | 80 (interactive) |
yuuji@23 | 81 (cond |
yuuji@23 | 82 ((YaTeX-quick-in-environment-p '("tabular" "tabular*" "array" "array*")) |
yuuji@23 | 83 (YaTeX-array-what-column)) |
yuuji@80 | 84 (t (message "Not in array/tabular environment.")))) |
yuuji@23 | 85 |
yuuji@80 | 86 (defun YaTeX-tabular-parse-format-count-cols (beg end) |
yuuji@80 | 87 (goto-char beg) |
yuuji@80 | 88 (let (elt (cols 0)) |
yuuji@80 | 89 (while (< (point) end) |
yuuji@31 | 90 (setq elt (following-char)) |
yuuji@31 | 91 (cond |
yuuji@572 | 92 ((string-match (char-to-string elt) "clrX") ;normal indicators. |
yuuji@31 | 93 (setq cols (1+ cols)) |
yuuji@31 | 94 (forward-char 1)) |
yuuji@31 | 95 ((equal elt ?|) ;vertical |
yuuji@31 | 96 (forward-char 1)) |
yuuji@31 | 97 ((string-match (char-to-string elt) "p@") ;p or @ expression |
yuuji@31 | 98 (setq cols (+ (if (eq elt ?p) 1 0) cols)) |
yuuji@80 | 99 ;;(skip-chars-forward "^{" p) |
yuuji@80 | 100 (skip-chars-forward "^{" end) |
yuuji@56 | 101 (forward-list 1)) |
yuuji@80 | 102 ((equal elt ?*) ;*{N}{EXP} -> Repeat EXP N times |
yuuji@80 | 103 (skip-chars-forward "^{" end) |
yuuji@452 | 104 (setq cols (* (YaTeX-str2int |
yuuji@80 | 105 (buffer-substring |
yuuji@80 | 106 (1+ (point)) |
yuuji@80 | 107 (progn (forward-list 1) (1- (point))))) |
yuuji@80 | 108 (YaTeX-tabular-parse-format-count-cols |
yuuji@80 | 109 (progn (skip-chars-forward "^{" end) (1+ (point))) |
yuuji@80 | 110 (progn (forward-list 1) (1- (point))))))) |
yuuji@56 | 111 (t (forward-char 1)) ;unknown char |
yuuji@56 | 112 )) |
yuuji@80 | 113 cols)) |
yuuji@80 | 114 |
yuuji@80 | 115 (defun YaTeX-tabular-parse-format (&optional type) |
yuuji@80 | 116 "Parse `tabular' format. |
yuuji@80 | 117 Return the list of (No.ofCols PointEndofFormat)" |
yuuji@80 | 118 (let ((p (point)) boform eoform (cols 0)) |
yuuji@80 | 119 (save-excursion |
yuuji@80 | 120 (if (null (YaTeX-beginning-of-environment t)) |
yuuji@80 | 121 (error "Beginning of tabular not found.")) |
yuuji@80 | 122 (skip-chars-forward "^{") |
yuuji@80 | 123 (forward-list 1) |
yuuji@80 | 124 (cond |
yuuji@80 | 125 ((eq type 'tabular*) |
yuuji@80 | 126 (skip-chars-forward "^{") |
yuuji@80 | 127 (forward-list 1))) |
yuuji@80 | 128 (skip-chars-forward "^{" p) |
yuuji@80 | 129 (if (/= (following-char) ?\{) (error "Tabular format not found.")) |
yuuji@80 | 130 (setq boform (1+ (point)) |
yuuji@80 | 131 eoform (progn (forward-list 1) (1- (point)))) |
yuuji@80 | 132 (if (> eoform p) (error "Non-terminated tabular format.")) |
yuuji@80 | 133 (goto-char boform) |
yuuji@80 | 134 (setq cols |
yuuji@80 | 135 (cond |
yuuji@80 | 136 ((eq type 'alignat) |
yuuji@80 | 137 (max |
yuuji@80 | 138 1 |
yuuji@452 | 139 (* 2 (YaTeX-str2int |
yuuji@250 | 140 (buffer-substring |
yuuji@250 | 141 (point) |
yuuji@250 | 142 (progn (up-list -1) (forward-list 1) (1- (point)))))))) |
yuuji@80 | 143 (t |
yuuji@80 | 144 (YaTeX-tabular-parse-format-count-cols (point) eoform)))) |
yuuji@80 | 145 (list cols (1+ eoform))))) |
yuuji@80 | 146 |
yuuji@31 | 147 ;; Insert & |
yuuji@80 | 148 (defun YaTeX-intelligent-newline-tabular (&optional type) |
yuuji@31 | 149 "Parse current tabular format and insert that many `&'s." |
yuuji@80 | 150 (let*((p (point)) (format (YaTeX-tabular-parse-format type)) |
yuuji@31 | 151 (cols (car format)) (beg (car (cdr format))) |
yuuji@31 | 152 space hline) |
yuuji@58 | 153 (cond |
yuuji@58 | 154 ((search-backward "&" beg t) |
yuuji@58 | 155 (goto-char p) |
yuuji@58 | 156 (setq hline (search-backward "\\hline" beg t)) |
yuuji@58 | 157 (setq space (if (search-backward "\t&" beg t) "\t" " ")) |
yuuji@58 | 158 (goto-char p)) |
yuuji@58 | 159 (t ;;(insert "\\hline\n") |
yuuji@58 | 160 (setq space " "))) |
yuuji@31 | 161 (goto-char p) |
yuuji@31 | 162 (while (> (1- cols) 0) |
yuuji@31 | 163 (insert "&" space) |
yuuji@31 | 164 (setq cols (1- cols))) |
yuuji@31 | 165 (insert "\\\\") |
yuuji@31 | 166 (if hline (insert " \\hline")) |
yuuji@58 | 167 (goto-char p) |
yuuji@80 | 168 (YaTeX-indent-line))) |
yuuji@31 | 169 |
yuuji@31 | 170 (defun YaTeX-intelligent-newline-tabular* () |
yuuji@31 | 171 "Parse current tabular* format and insert that many `&'s." |
yuuji@80 | 172 (YaTeX-intelligent-newline-tabular 'tabular*)) |
yuuji@31 | 173 |
yuuji@31 | 174 (fset 'YaTeX-intelligent-newline-array 'YaTeX-intelligent-newline-tabular) |
yuuji@80 | 175 (fset 'YaTeX-intelligent-newline-supertabular 'YaTeX-intelligent-newline-tabular) |
yuuji@306 | 176 (fset 'YaTeX-intelligent-newline-longtable 'YaTeX-intelligent-newline-tabular) |
yuuji@572 | 177 (fset 'YaTeX-intelligent-newline-tabularx 'YaTeX-intelligent-newline-tabular*) |
yuuji@80 | 178 |
yuuji@80 | 179 (defun YaTeX-intelligent-newline-align () |
yuuji@80 | 180 "Intelligent newline function for align. |
yuuji@80 | 181 Count the number of & in the first align line and insert that many &s." |
yuuji@250 | 182 (let*((p (point)) (amps 0)) |
yuuji@250 | 183 (if (string-match "alignat" env) |
yuuji@250 | 184 (setq amps (1- (car (YaTeX-tabular-parse-format 'alignat)))) |
yuuji@250 | 185 (save-excursion |
yuuji@250 | 186 (YaTeX-beginning-of-environment) |
yuuji@250 | 187 (catch 'done |
yuuji@250 | 188 (while (YaTeX-re-search-active-forward |
yuuji@250 | 189 "\\(&\\)\\|\\(\\\\\\\\\\)" YaTeX-comment-prefix p t) |
yuuji@250 | 190 (if (match-beginning 1) (setq amps (1+ amps)) (throw 'done t)))))) |
yuuji@80 | 191 (save-excursion |
yuuji@250 | 192 (forward-line -1) |
yuuji@250 | 193 (skip-chars-forward " \t") |
yuuji@250 | 194 (or (prog1 (looking-at "\\\\begin{") (end-of-line)) |
yuuji@250 | 195 (save-excursion |
yuuji@250 | 196 (skip-chars-backward " \t") |
yuuji@250 | 197 (and (= (preceding-char) ?\\) (= (char-after (- (point) 2)) ?\\))) |
yuuji@250 | 198 (insert "\\\\"))) |
yuuji@80 | 199 (save-excursion |
yuuji@250 | 200 (while (>= (setq amps (1- amps)) 0) |
yuuji@236 | 201 (insert "& "))) |
yuuji@80 | 202 (YaTeX-indent-line))) |
yuuji@80 | 203 |
yuuji@80 | 204 (mapcar |
yuuji@353 | 205 (function |
yuuji@353 | 206 (lambda (s) |
yuuji@80 | 207 (fset (intern (concat "YaTeX-intelligent-newline-" |
yuuji@80 | 208 (symbol-name s))) |
yuuji@353 | 209 'YaTeX-intelligent-newline-align))) |
yuuji@80 | 210 '(align* flalign flalign* matrix pmatrix bmatrix Bmatrix vmatrix Vmatrix |
yuuji@250 | 211 cases eqnarray eqnarray* alignat alignat*)) |
yuuji@31 | 212 |
yuuji@23 | 213 ;;; |
yuuji@23 | 214 ;; Functions for tabbing environment |
yuuji@23 | 215 ;;; |
yuuji@23 | 216 (defun YaTeX-intelligent-newline-tabbing () |
yuuji@23 | 217 "Check the number of \\= in the first line and insert that many \\>." |
yuuji@23 | 218 (let ((p (point)) begenv tabcount) |
yuuji@23 | 219 (save-excursion |
yuuji@23 | 220 (YaTeX-beginning-of-environment) |
yuuji@23 | 221 (setq begenv (point-end-of-line)) |
yuuji@23 | 222 (if (YaTeX-search-active-forward "\\\\" YaTeX-comment-prefix p t) |
yuuji@23 | 223 (progn |
yuuji@23 | 224 (setq tabcount 0) |
yuuji@23 | 225 (while (> (point) begenv) |
yuuji@23 | 226 (if (search-backward "\\=" begenv 1) |
yuuji@23 | 227 (setq tabcount (1+ tabcount))))))) |
yuuji@23 | 228 (YaTeX-indent-line) |
yuuji@23 | 229 (if tabcount |
yuuji@23 | 230 (progn |
yuuji@23 | 231 (save-excursion |
yuuji@23 | 232 (while (> tabcount 0) |
yuuji@23 | 233 (insert "\\>\t") |
yuuji@23 | 234 (setq tabcount (1- tabcount)))) |
yuuji@23 | 235 (forward-char 2)) |
yuuji@58 | 236 (insert "\\= \\\\") |
yuuji@233 | 237 (forward-char -5)))) |
yuuji@23 | 238 |
yuuji@23 | 239 ;;; |
yuuji@23 | 240 ;; Functions for itemize/enumerate/list environments |
yuuji@23 | 241 ;;; |
yuuji@23 | 242 |
yuuji@23 | 243 (defun YaTeX-intelligent-newline-itemize () |
yuuji@23 | 244 "Insert '\\item '." |
yuuji@58 | 245 (insert "\\item ") |
yuuji@233 | 246 (YaTeX-indent-line)) |
yuuji@233 | 247 |
yuuji@23 | 248 (fset 'YaTeX-intelligent-newline-enumerate 'YaTeX-intelligent-newline-itemize) |
yuuji@23 | 249 (fset 'YaTeX-intelligent-newline-list 'YaTeX-intelligent-newline-itemize) |
yuuji@23 | 250 |
yuuji@23 | 251 (defun YaTeX-intelligent-newline-description () |
yuuji@23 | 252 (insert "\\item[] ") |
yuuji@23 | 253 (forward-char -2) |
yuuji@233 | 254 (YaTeX-indent-line)) |
yuuji@23 | 255 |
yuuji@64 | 256 (defun YaTeX-intelligent-newline-thebibliography () |
yuuji@64 | 257 "Insert '\\bibitem '." |
yuuji@64 | 258 (YaTeX-indent-line) |
yuuji@64 | 259 (YaTeX-make-section nil nil nil "bibitem") |
yuuji@233 | 260 (YaTeX-indent-line)) |
yuuji@233 | 261 |
yuuji@23 | 262 ;;; |
yuuji@234 | 263 ;; For document environment |
yuuji@234 | 264 ;;; |
yuuji@234 | 265 (defun YaTeX-intelligent-newline-document () |
yuuji@239 | 266 "New paragraph by null line or `\\par'." |
yuuji@257 | 267 (if (< (count-lines |
yuuji@257 | 268 (or (get 'YaTeX-inner-environment 'point) |
yuuji@257 | 269 (max 1 (- (point) 17))) ;"\begin{document}\n" == 17 |
yuuji@257 | 270 (point)) |
yuuji@257 | 271 2) |
yuuji@257 | 272 nil |
yuuji@257 | 273 (if (save-excursion (re-search-backward "\\\\par\\>" nil t)) |
yuuji@257 | 274 (progn |
yuuji@257 | 275 (YaTeX-indent-line) |
yuuji@257 | 276 (insert "\\par"))) |
yuuji@257 | 277 (newline)) |
yuuji@239 | 278 (YaTeX-indent-line)) |
yuuji@234 | 279 |
yuuji@234 | 280 ;;; |
yuuji@23 | 281 ;; Intelligent newline |
yuuji@23 | 282 ;;; |
yuuji@23 | 283 ;;;###autoload |
yuuji@23 | 284 (defun YaTeX-intelligent-newline (arg) |
yuuji@23 | 285 "Insert newline and environment-specific entry. |
yuuji@23 | 286 `\\item' for some itemizing environment, |
yuuji@23 | 287 `\\> \\> \\' for tabbing environemnt, |
yuuji@23 | 288 `& & \\ \hline' for tabular environment." |
yuuji@23 | 289 (interactive "P") |
yuuji@61 | 290 (let*(env func) |
yuuji@61 | 291 (end-of-line) |
yuuji@61 | 292 (setq env (YaTeX-inner-environment)) |
yuuji@23 | 293 (if arg (setq env (YaTeX-read-environment "For what environment? "))) |
yuuji@23 | 294 (setq func (intern-soft (concat "YaTeX-intelligent-newline-" env))) |
yuuji@23 | 295 (end-of-line) |
yuuji@23 | 296 (newline) |
yuuji@58 | 297 (undo-boundary) |
yuuji@23 | 298 (if (and env func (fboundp func)) |
yuuji@80 | 299 (funcall func)))) |
yuuji@53 | 300 |
yuuji@53 | 301 ;;; |
yuuji@53 | 302 ;; Environment-specific line indenting functions |
yuuji@53 | 303 ;;; |
yuuji@53 | 304 ;;;###autoload |
yuuji@53 | 305 (defun YaTeX-indent-line-equation () |
yuuji@53 | 306 "Indent a line in equation family." |
yuuji@53 | 307 (let ((p (point)) (l-r 0) right-p peol depth (mp YaTeX-environment-indent)) |
yuuji@53 | 308 (if (save-excursion |
yuuji@53 | 309 (beginning-of-line) |
yuuji@53 | 310 (skip-chars-forward " \t") |
yuuji@53 | 311 (looking-at "\\\\right\\b")) |
yuuji@53 | 312 (progn (YaTeX-reindent |
yuuji@53 | 313 (save-excursion (YaTeX-goto-corresponding-leftright) |
yuuji@73 | 314 (- (current-column) 0)))) |
yuuji@53 | 315 (save-excursion |
yuuji@53 | 316 (forward-line -1) |
yuuji@53 | 317 (while (and (not (bobp)) (YaTeX-on-comment-p)) |
yuuji@53 | 318 (forward-line -1)) |
yuuji@53 | 319 ;;(beginning-of-line) ;must be unnecessary |
yuuji@53 | 320 (skip-chars-forward " \t") |
yuuji@53 | 321 (if (eolp) (error "Math-environment can't have a null line!!")) |
yuuji@53 | 322 (setq depth (current-column) |
yuuji@53 | 323 peol (point-end-of-line)) |
yuuji@53 | 324 (while (re-search-forward |
yuuji@53 | 325 "\\\\\\(\\(left\\)\\|\\(right\\)\\)\\b" peol t) |
yuuji@53 | 326 (setq l-r (+ l-r (if (match-beginning 2) 1 -1)))) |
yuuji@53 | 327 (cond |
yuuji@53 | 328 ((progn (beginning-of-line) |
yuuji@53 | 329 (re-search-forward "\\\\\\\\\\s *$" (point-end-of-line) t)) |
yuuji@53 | 330 ;;If previous line has `\\', this indentation is always normal. |
yuuji@53 | 331 (setq depth (+ (YaTeX-current-indentation) mp))) |
yuuji@53 | 332 ((> l-r 0) |
yuuji@53 | 333 (beginning-of-line) |
yuuji@68 | 334 (search-forward "\\left" peol nil l-r) |
yuuji@53 | 335 (goto-char (1+ (match-beginning 0))) |
yuuji@53 | 336 (setq depth (current-column))) |
yuuji@53 | 337 ((< l-r 0) |
yuuji@53 | 338 (goto-char (match-beginning 0)) ;should be \right |
yuuji@53 | 339 (YaTeX-goto-corresponding-leftright) |
yuuji@53 | 340 (beginning-of-line) |
yuuji@53 | 341 (skip-chars-forward " \t") |
yuuji@68 | 342 ;(setq depth (+ (current-column) mp)) ;+mp is good? |
yuuji@68 | 343 (setq depth (current-column))) |
yuuji@53 | 344 (t ;if \left - \right = 0 |
yuuji@53 | 345 (cond |
yuuji@53 | 346 ((re-search-forward "\\\\\\\\\\s *$" peol t) |
yuuji@53 | 347 (setq depth (+ (YaTeX-current-indentation) mp))) |
yuuji@53 | 348 ((re-search-forward "\\\\end{" peol t) |
yuuji@53 | 349 nil) ;same indentation as previous line's |
yuuji@53 | 350 ((re-search-forward "\\\\begin{" peol t) |
yuuji@53 | 351 (setq depth (+ depth mp))) |
yuuji@53 | 352 (t |
yuuji@53 | 353 (or (bobp) (forward-line -1)) |
yuuji@53 | 354 (cond |
yuuji@53 | 355 ((re-search-forward |
yuuji@53 | 356 "\\\\\\\\\\s *$\\|\\\\begin{" (point-end-of-line) t) |
yuuji@53 | 357 (setq depth (+ depth mp))) |
yuuji@53 | 358 ))))) |
yuuji@53 | 359 (goto-char p)) |
yuuji@53 | 360 (YaTeX-reindent depth)))) |
yuuji@53 | 361 |
yuuji@53 | 362 ;;;###autoload |
yuuji@53 | 363 (defun YaTeX-goto-corresponding-leftright () |
yuuji@77 | 364 "Go to corresponding \left or \right." |
yuuji@53 | 365 (let ((YaTeX-struct-begin "\\left%1") |
yuuji@53 | 366 (YaTeX-struct-end "\\right%1") |
yuuji@77 | 367 (YaTeX-struct-name-regexp "[][(){}\\.|]") |
yuuji@77 | 368 (in-leftright-p t)) |
yuuji@53 | 369 (YaTeX-goto-corresponding-environment t))) |
yuuji@53 | 370 |
yuuji@53 | 371 ;;; |
yuuji@53 | 372 ;; Functions for formatting region being enclosed with environment |
yuuji@53 | 373 ;;; |
yuuji@53 | 374 ; These functions must take two argument; region-beginning, region-end. |
yuuji@53 | 375 |
yuuji@53 | 376 (defun YaTeX-enclose-equation (beg end) |
yuuji@53 | 377 (goto-char beg) |
yuuji@53 | 378 (save-restriction |
yuuji@53 | 379 (let (m0 bsl) |
yuuji@53 | 380 (narrow-to-region beg end) |
yuuji@53 | 381 (while (YaTeX-re-search-active-forward |
yuuji@53 | 382 "\\(\\$\\)" YaTeX-comment-prefix nil t) |
yuuji@53 | 383 (goto-char (setq m0 (match-beginning 0))) |
yuuji@53 | 384 (setq bsl 0) |
yuuji@53 | 385 (if (and (not (bobp)) (= (char-after (1- (point))) ?\\ )) |
yuuji@53 | 386 (while (progn (forward-char -1) (= (char-after (point)) ?\\ )) |
yuuji@53 | 387 (setq bsl (1+ bsl)))) |
yuuji@53 | 388 (goto-char m0) |
yuuji@53 | 389 (if (= 0 (% bsl 2)) |
yuuji@53 | 390 (delete-char 1) |
yuuji@53 | 391 (forward-char 1)))))) |
yuuji@53 | 392 |
yuuji@53 | 393 (fset 'YaTeX-enclose-eqnarray 'YaTeX-enclose-equation) |
yuuji@53 | 394 (fset 'YaTeX-enclose-eqnarray* 'YaTeX-enclose-equation) |
yuuji@457 | 395 (mapcar (function ;; Add all AMS LaTeX envs |
yuuji@457 | 396 (lambda (sym) |
yuuji@457 | 397 (fset (intern (concat "YaTeX-enclose-" (car sym))) |
yuuji@457 | 398 'YaTeX-enclose-equation))) |
yuuji@457 | 399 YaTeX-ams-math-begin-alist) |
yuuji@53 | 400 |
yuuji@53 | 401 (defun YaTeX-enclose-verbatim (beg end)) ;do nothing when enclose verbatim |
yuuji@53 | 402 (fset 'YaTeX-enclose-verbatim* 'YaTeX-enclose-verbatim) |
yuuji@53 | 403 |
yuuji@53 | 404 (provide 'yatexenv) |