在LaTeX文檔中,我使用\num
在生成* .pdf時自動爲段落編號。我正在嘗試編寫一個函數,它將使用疊加層在Emacs中顯示數字。如果我使用一個符號我toggle-num-block
功能部分的工作原理如倒三角形(例如,"\u25be"
),但確實不工作時,我使用一個變量如n
(這是一個數字,每個\num
被發現的時間增量) 。任何關於如何做到這一點的指針將不勝感激。如何疊加文本
要測試我的功能,我正在使用\num
右側的空格來放置疊加層。如果我使用(overlay-put (make-overlay beg end) 'display "\u25be"))
而不是(overlay-put (make-overlay beg end) 'display n))
,則可以看到倒置的三角形。相反,倒三角形的,但是,我更願意有一個數字是逐步增加 - 1,2,3,等
我的文件看起來是這樣的:
\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 . . . .
這裏是我的草稿:
(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)))))))))
基於@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))
(re-search-forward "\\\\begin\{document\}" nil t)
(while (re-search-forward "\\\\num" nil t)
(setq n (1+ n))
(let* ((flag (not (get-char-property (match-beginning 0) 'invisible)))
(beg (match-beginning 0))
(end (match-end 0)))
(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)))))))))
符號的函數定義是void:outline-flag-region。你能給我們一個完整的MWE嗎? – Tyler
@Tyler - '(需要'提綱]'。對不起,我沒有想到 - 這是我每次Emacs啓動時加載的庫之一。我會更新這個問題。 – lawlist