Tự động chèn các giá trị phụ / siêu ký tự được sử dụng cuối cùng trong các công thức toán học


8

Tôi sử dụng AocateeX cho các văn bản toán học cài đặt kiểu. Thường thì tôi phải gõ các phương trình với các tổng, tích phân, v.v ... tất cả đều có cùng một mẫu con hoặc siêu ký tự. Tôi muốn tự động điền vào phụ / siêu ký tự hiện tại với giá trị mà nó có trước đó. Thí dụ:

\sum_{i=1}^{\infty} a_i = \sum…

Khi tôi nhấn _vào phương trình trên Emacs nên viết _{i=1}. Tùy chọn sẽ là tốt nếu siêu ký tự thứ hai cũng được điền vào.

Làm thế nào điều này có thể được nhận ra?

Câu trả lời:


9

Thêm vào tập tin init của bạn:

(defvar mg-TeX-insert-subscript-history nil)
(defvar mg-TeX-insert-superscript-history nil)

(defun TeX-insert-sub-or-superscript (arg)
  "Insert typed key ARG times and possibly a pair of braces.
Brace insertion is only done if point is in a math construct and
`TeX-electric-sub-and-superscript' has a non-nil value."
  (interactive "*p")
  (self-insert-command arg)
  (when (and TeX-electric-sub-and-superscript (texmathp))
    (let* ((history (cond
             ((equal last-input-event ?_)
              'mg-TeX-insert-subscript-history)
             ((equal last-input-event ?^)
              'mg-TeX-insert-superscript-history)))
       (content (read-string "Content: " (car (symbol-value history)) history)))
      (insert (concat TeX-grop content TeX-grcl))
      (if (zerop (length content))
      (backward-char)))))

Đảm bảo TeX-electric-sub-and-superscriptđược đặt thành không.


Tôi biết cuối cùng bạn sẽ đến đây :) cách tiếp cận tốt đẹp.
Sean Allred

3

Đây là phiên bản không tương tác chèn phụ / siêu tập lệnh cuối cùng xảy ra cho mã thông báo tại điểm:

(defun my/electric-sub-super-script (arg)
  "Insert typed character ARG times and possibly a sub/super-script.
Sub/super-script insertion is done only in a (La)TeX math mode region.
The inserted sub/super-script is copied from the last occurence of a
sub/superscript for the token at point."
  (interactive "p")
  (self-insert-command arg)
  (when (texmathp)
    (insert
     (save-excursion
       (let ((current-token (let ((end (point)))
                              (backward-sexp 1)
                              (buffer-substring-no-properties (point) end))))
         (if (search-backward current-token nil t)
             (progn
               (search-forward current-token)
               (let ((begin (point)))
                 (forward-sexp 1)
                 (buffer-substring-no-properties begin (point))))
           ""))))))

(define-key TeX-mode-map (kbd "_") #'my/electric-sub-super-script)
(define-key TeX-mode-map (kbd "^") #'my/electric-sub-super-script)

Lấy ví dụ trong câu hỏi, bên dưới là chuỗi các trạng thái bộ đệm thu được bằng cách bắt đầu với dòng đầu tiên và gõ _^SPCa_:

\sum_{i=1}^{\infty} a_i = \sum▮
\sum_{i=1}^{\infty} a_i = \sum_{i=1}▮
\sum_{i=1}^{\infty} a_i = \sum_{i=1}^{\infty}▮
\sum_{i=1}^{\infty} a_i = \sum_{i=1}^{\infty} a▮
\sum_{i=1}^{\infty} a_i = \sum_{i=1}^{\infty} a_i▮
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.