Bisakah saya membiarkan tanda baca berjalan melewati kolom isian?


12

Dalam tipografi, ada praktik yang disebut 'tonjolan' (atau menggantung tanda baca ) yang memungkinkan simbol tertentu untuk menggantung ujung margin:

tonjolan

Saya ingin melakukan hal yang sama untuk dokumen teks saya.

Bisakah saya mengubah fill-paragraph(dan teman?) Untuk mengabaikan tanda baca akhir ( .?!:;,'"-) ketika mengisi paragraf?


Saya tidak yakin apakah Anda benar-benar dapat memanggil penonjolan (pengalihan tanda baca trailing yang halus) dari teks yang dibenarkan sebanding dengan mengabaikan tanda baca trailing ketika teks yang dibungkus dengan keras (yang tidak membenarkan teks secara default, membuat efek dasarnya tidak terlihat). Mungkin Anda ingin menambahkan bahwa ini berlaku untuk varian yang dibenarkan fill-paragraph?
wasamasa

@wasamasa Protrusion masih ada untuk blok teks flush left.
Sean Allred

Apakah itu berlaku untuk tepi kiri teks?
wasamasa

@wasamasa Kecuali Anda berurusan dengan bahasa dan editor RTL (yang, meskipun didukung, saya merasa di luar cakupan), itu tidak masuk akal. Jika Anda memiliki blok kanan flush dan Anda 'kehabisan kamar' di margin kiri (yaitu, kolom 0), Anda tidak bisa menempatkan tanda baca di kolom -1. (Saya kira Anda bisa menggeser margin kanan ke (1+ kolom isian), tetapi itu akan mengubah isian dan Anda bisa terjebak dalam satu lingkaran.)
Sean Allred

1
@wasamasa Dalam hal implementasi: unfill. lompat ke kolom isian. jika titik melihat satu karakter tanda baca dan kemudian spasi, lewati. lain jika di tengah kata, lewati mundur. baris baru, ulangi.
Sean Allred

Jawaban:


2

Aha, saya punya solusinya! Masukan ini di suatu tempat di Anda .emacs/ .emacs.d/init.elberkas:

(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)))

Saya sudah menguji ini dengan fill-paragraph, dan seharusnya berfungsi untuk semua fungsi isian (karena semuanya digunakan current-fill-columnsaat memproses setiap baris). Saya harap Anda menyukainya! 😇

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.