我可以让标点符号越过填充列吗?


12

在排版中,有一种叫做“突出”(或悬挂标点符号)的做法,它允许某些符号挂在页边距的末端:

突出

我想对我的文本文档执行相同的操作。

填满段落后,我可以更改fill-paragraph(和朋友吗?)以忽略行尾标点(.?!:;,'"-)?


我不确定您是否真的可以称呼对齐文本的突出(拖尾标点的细微变化)与硬包装文本时忽略忽略拖尾标点(默认情况下不对齐文本,使效果基本上不可见)相媲美。也许您想补充一点,这适用于的合理变体fill-paragraph
wasamasa

@wasamasa左对齐文本块仍然存在突出显示。
肖恩·阿雷德

那么,它是否适用于文本的左边缘?
wasamasa

@wasamasa除非您使用的是RTL语言和编辑器(虽然受到支持,但我认为这超出了范围),否则这没有任何意义。如果您有一个齐平的右图块,并且在左边距(即第0列)“空间不足”,则无法将标点符号准确地放在-1列中。(我想您可以将右边距移动到(1+填充列),但这会改变填充,并且您可能陷入循环中。)
肖恩·艾瑞德

1
@wasamasa在实施方面:空缺。跳到填充列。如果point在看一个标点符号然后是空白,则向前跳。否则,如果在一个单词的中间,请向后跳。换行,重复。
肖恩·艾瑞德

Answers:


2

啊哈,我有解决办法!将其放在您的.emacs/ .emacs.d/init.el文件中的某个位置:

(define-advice current-fill-column (:filter-return (rtn) protrusion)
  "Advice to allow hanging punctuation when filling text."
  ;; Get the character after the proposed cutoff point
  (let ((end-char (char-after (1+ rtn))))
    (if (and end-char
             ;; Check if character is in the “punctuation” syntax table…
             (or (eq (char-syntax end-char) ?.)
                 ;; …or is any of these characters (feel free to add more)
                 (memq end-char (string-to-list ".,!?;:-"))))
        ;; If so, return the original value, plus one.
        (1+ rtn)
      ;; Otherwise, do nothing and return the original value.
      rtn)))

我已经使用进行了测试fill-paragraph,它应该适用于所有填充函数(因为它们current-fill-column在处理每一行时都使用)。我希望你喜欢它!😇

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.