如何叠加文字

时间:2014-03-12 19:28:56

标签: emacs elisp

我在LaTeX文档中使用\num在生成* .pdf时自动编号段落。我正在尝试编写一个函数,它将使用叠加显示Emacs中的数字。如果我使用诸如倒三角形之类的符号(例如toggle-num-block),我的"\u25be"函数部分有效,但当我使用诸如{之类的变量时,工作{1}}(这是一个每次n都会增加的数字)。关于如何实现这一目标的任何指示都将非常感激。

为了测试我的功能,我正在使用\num右侧的空格来放置叠加层。如果我使用\num代替(overlay-put (make-overlay beg end) 'display "\u25be")),则可以看到颠倒的三角形。然而,不是颠倒的三角形,我宁愿让数字逐渐增加 - 1,2,3等等。

我的文档如下:

(overlay-put (make-overlay beg end) 'display n))

我希望函数\num Every good boy deserves fudge. \num I'm not a fig . . . . 能够从上面的示例中来回切换到以下示例:

toggle-num-block

这是我的草稿:

  
1.      Every good boy deserves fudge.

2.      I'm not a fig . . . .

根据以下@Tyler的有用答案(非常感谢),以下是现在按预期工作的修订函数:

  
(require 'outline)

(defun toggle-num-block ()
"When FLAG is non-nil, hide the region.  Otherwise make it visible."
(interactive)
  (let ((n 0))
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward "\\\\num" nil t)
        (setq n (1+ n))
        (let* (
            (flag (not (get-char-property (match-end 0) 'invisible)))
            (beg (match-end 0))
            (end (+ (match-end 0) 1)))
          (outline-flag-region beg end flag)
          (cond
            (flag
              (overlay-put (make-overlay beg end) 'display n)) ;; "\u25be"
            (t
              (mapc 'delete-overlay (overlays-in beg end)))) )))))

1 个答案:

答案 0 :(得分:2)

您有两个问题 - 您将beg设置为match-end而不是match-beginning。您需要将n转换为字符串:

(require 'outline)
(defun toggle-num-block ()
"When FLAG is non-nil, hide the region.  Otherwise make it visible."
(interactive)
  (let ((n 0))
    (save-excursion
      (goto-char (point-min))
      (while (re-search-forward "\\\\num" nil t)
        (setq n (1+ n))
        (let* ((flag (not (get-char-property (match-end 0) 'invisible)))
               (beg (match-beginning 0))
               (end (+ (match-end 0) 1)))
          (outline-flag-region beg end flag)
          (cond
            (flag
              (overlay-put (make-overlay beg end) 
                           'display (concat (number-to-string n) ". "))) 
            (t
             (mapc 'delete-overlay (overlays-in beg end)))))))))