我在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)))) )))))
答案 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)))))))))