채우기 열을 지나서 구두점을 실행할 수 있습니까?


12

타이포그래피에는 특정 기호가 여백의 끝에서 끊어 지도록하는 '돌출'(또는 행 구두점 ) 이라는 관행 이 있습니다.

돌출

텍스트 문서에 대해 동일한 작업을 수행하고 싶습니다.

단락을 채울 때 fill-paragraph줄 끝 문장 부호 ( .?!:;,'"-) 를 무시하도록 (및 친구)를 변경할 수 있습니까 ?


텍스트를 줄 바꿈 할 때 후행 문장 부호를 무시하는 것과 비슷한 정당화 된 텍스트의 돌출 (미묘한 문장 부호의 미묘한 이동)을 실제로 호출 할 수 있는지 확실하지 않습니다 (기본적으로 텍스트를 정당화하지 않으므로 본질적으로 효과가 보이지 않음). 아마도 이것이 fill-paragraph? 의 정당한 변형에 적용된다는 것을 추가하고 싶을 것입니다 .
wasamasa

@wasamasa 돌출 왼쪽 텍스트 블록에 여전히 돌출이 있습니다.
Sean Allred

그러면 텍스트의 왼쪽 가장자리에 적용됩니까?
wasamasa

@wasamasa RTL 언어 및 편집기를 다루지 않는 한 (지원되는 동안 범위를 벗어난 느낌), 이해가되지 않습니다. 오른쪽 플러시 블록이 있고 왼쪽 여백 (예 : 열 0)에 '공간이 부족'하면 구두점을 열 -1에 정확하게 넣을 수 없습니다. (나는 당신이 오른쪽 여백을 (1+ 채우기 열)로 옮길 수 있다고 생각하지만 채우기가 변경되어 루프에 빠질 수 있습니다.)
Sean Allred

1
@wasamasa 구현 측면에서 : 채우지 마십시오. 채우기 열로 이동하십시오. 점이 구두점의 단일 문자를보고 공백 문자 인 경우 앞으로 건너 뜁니다. 그렇지 않으면 단어 중간에 있으면 뒤로 건너 뜁니다. 줄 바꿈, 반복하십시오.
Sean Allred

답변:


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각 라인을 처리 할 때 모두 사용하기 때문에)에 대해 작동해야합니다 . 나는 그것을 좋아하면 좋겠! 😇

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.