[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Convert bla to $bla$ automatically when be highlighted and typeset a
From: |
Hongyi Zhao |
Subject: |
Re: Convert bla to $bla$ automatically when be highlighted and typeset a $. |
Date: |
Sun, 21 May 2023 23:05:10 +0800 |
On Sun, May 21, 2023 at 9:33 PM Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
>
> On Sun, May 21, 2023 at 7:14 PM Mosè Giordano <mose@gnu.org> wrote:
> >
> > Hi Zhao
> >
> > On Sun, 21 May 2023 at 09:41, Hongyi Zhao <hongyi.zhao@gmail.com> wrote:
> > > I want to convert `bla` to `$bla$` automatically when be highlighted
> > > and typeset a `$'.
> >
> > I believe you want to look at `TeX-electric-math'
> > (https://www.gnu.org/software/auctex/manual/auctex/Quotes.html#index-TeX_002delectric_002dmath):
> >
> > --8<---------------cut here---------------start------------->8---
> > TeX-electric-math is a variable defined in ‘tex.el’.
> >
> > Its value is ("\\(" . "\\)")
> > Original value was nil
> > Local in buffer foo.tex; global value is nil
> >
> > If non-nil, when outside math mode ‘TeX-insert-dollar’ will
> > insert symbols for opening and closing inline equation and put
> > the point between them. If there is an active region,
> > ‘TeX-insert-dollar’ will put around it symbols for opening and
> > closing inline equation and keep the region active, with point
> > after closing symbol. If you press ‘$’ again, you can toggle
> > between inline equation, display equation, and no equation.
> >
> > If non-nil and point is inside math mode right between a couple
> > of single dollars, pressing ‘$’ will insert another pair of
> > dollar signs and leave the point between them.
> >
> > If nil, ‘TeX-insert-dollar’ will simply insert "$" at point,
> > this is the default.
> >
> > If non-nil, this variable is a cons cell whose CAR is the string
> > to insert before point, the CDR is the string to insert after
> > point. You can choose between "$...$" and "\(...\)".
> >
> > Automatically becomes buffer-local when set.
> > You can customize this variable.
> > --8<---------------cut here---------------end--------------->8---
>
> Based on the above document, I've added the following hook entry in
> AUCTeX's use-package configuration:
>
> (LaTeX-mode . (lambda () (set (make-local-variable 'TeX-electric-math)
> (cons "$" "$"))))
>
> But I still cannot observe the desired behavior, as shown in the
> attached screenshot.
I tried a lot, and only find the following code snippet does the trick:
(defun xah-insert-bracket-pair (LBracket RBracket &optional WrapMethod)
"Insert brackets around selection, word, at point, and maybe move
cursor in between.
LBracket and RBracket are strings. WrapMethod must be either `line'
or `block'. `block' means between empty lines.
• if there is a region, add brackets around region.
• If WrapMethod is `line', wrap around line.
• If WrapMethod is `block', wrap around block.
• if cursor is at beginning of line and its not empty line and contain
at least 1 space, wrap around the line.
• If cursor is at end of a word or buffer, one of the following will happen:
xyz▮ → xyz(▮)
xyz▮ → (xyz▮) if in one of the lisp modes.
• wrap brackets around word if any. e.g. xy▮z → (xyz▮). Or just (▮)
URL `http://xahlee.info/emacs/emacs/elisp_insert_brackets_by_pair.html'
Version: 2017-01-17 2021-08-12"
(if (region-active-p)
(progn
(let ( ($p1 (region-beginning)) ($p2 (region-end)))
(goto-char $p2) (insert RBracket)
(goto-char $p1) (insert LBracket)
(goto-char (+ $p2 2))))
(let ($p1 $p2)
(cond
((eq WrapMethod 'line)
(setq $p1 (line-beginning-position) $p2 (line-end-position))
(goto-char $p2)
(insert RBracket)
(goto-char $p1)
(insert LBracket)
(goto-char (+ $p2 (length LBracket))))
((eq WrapMethod 'block)
(save-excursion
(let (($bds (xah-get-bounds-of-block-or-region))) (setq $p1
(car $bds) $p2 (cdr $bds)))
(goto-char $p2)
(insert RBracket)
(goto-char $p1)
(insert LBracket)
(goto-char (+ $p2 (length LBracket)))))
( ; do line. line must contain space
(and
(eq (point) (line-beginning-position))
;; (string-match " " (buffer-substring-no-properties
(line-beginning-position) (line-end-position)))
(not (eq (line-beginning-position) (line-end-position))))
(insert LBracket )
(end-of-line)
(insert RBracket))
((and
(or ; cursor is at end of word or buffer. i.e. xyz▮
(looking-at "[^-_[:alnum:]]")
(eq (point) (point-max)))
(not (or
(string-equal major-mode "xah-elisp-mode")
(string-equal major-mode "emacs-lisp-mode")
(string-equal major-mode "lisp-mode")
(string-equal major-mode "lisp-interaction-mode")
(string-equal major-mode "common-lisp-mode")
(string-equal major-mode "clojure-mode")
(string-equal major-mode "xah-clojure-mode")
(string-equal major-mode "scheme-mode"))))
(progn
(setq $p1 (point) $p2 (point))
(insert LBracket RBracket)
(search-backward RBracket )))
(t (progn
;; wrap around “word”. basically, want all alphanumeric,
plus hyphen and underscore, but don't want space or punctuations. Also
want chinese chars
;; 我有一帘幽梦,不知与谁能共。多少秘密在其中,欲诉无人能懂。
(skip-chars-backward "-_[:alnum:]")
(setq $p1 (point))
(skip-chars-forward "-_[:alnum:]")
(setq $p2 (point))
(goto-char $p2)
(insert RBracket)
(goto-char $p1)
(insert LBracket)
(goto-char (+ $p2 (length LBracket)))))))))
(defun xah-insert-dollar () (interactive) (xah-insert-bracket-pair "$" "$") )
(global-set-key (kbd "M-4") 'xah-insert-dollar) ; $$
Best,
Zhao
- Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Mosè Giordano, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $.,
Hongyi Zhao <=
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Mosè Giordano, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Mosè Giordano, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/21
- Re: Convert bla to $bla$ automatically when be highlighted and typeset a $., Hongyi Zhao, 2023/05/22