Posso consentire la punteggiatura oltre la colonna di riempimento?


12

Nella tipografia, esiste una pratica chiamata "sporgenza" (o punteggiatura sospesa ) che consente a determinati simboli di appendere alla fine del margine:

sporgenza

Vorrei fare la stessa cosa per i miei documenti di testo.

Posso cambiare fill-paragraph(e amici?) Per ignorare la punteggiatura di fine riga ( .?!:;,'"-) quando riempie il paragrafo?


Non sono sicuro se si possa davvero chiamare protrusione (sottile spostamento della punteggiatura finale) di testo giustificato paragonabile all'ignorare la punteggiatura finale quando si esegue il wrapping del testo (che non giustifica il testo per impostazione predefinita, rendendo l'effetto sostanzialmente invisibile). Forse ti piacerebbe aggiungere che questo vale per la variante giustificata di fill-paragraph?
Wasamasa,

@wasamasa La protrusione esiste ancora per i blocchi di testo a filo a sinistra.
Sean Allred,

Si applica quindi al bordo sinistro del testo?
Wasamasa,

@wasamasa A meno che tu non abbia a che fare con un linguaggio ed editor RTL (che, sebbene supportato, ritengo che sia fuori portata), non ha senso. Se hai un blocco di colore a destra e 'esaurisci lo spazio' sul margine sinistro (cioè, colonna 0), non puoi inserire esattamente la punteggiatura nella colonna -1. (Suppongo che potresti spostare il margine destro su (1+ colonna di riempimento), ma ciò cambierebbe il riempimento e potresti essere colto in un ciclo.)
Sean Allred

1
@wasamasa In termini di implementazione: unfill. salta alla colonna di riempimento. se punto sta guardando un singolo carattere di punteggiatura e quindi spazi bianchi, saltare in avanti. altrimenti, nel mezzo di una parola, salta indietro. newline, ripeti.
Sean Allred,

Risposte:


2

Ah, ho la soluzione! Metti questo da qualche parte nel tuo .emacs/ .emacs.d/init.elfile:

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

Ho provato con questo fill-paragraphe dovrebbe funzionare per tutte le funzioni di riempimento (dal momento che tutte usano current-fill-columndurante l'elaborazione di ogni riga). Spero vi piaccia! 😇

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.