Il est parfois souhaitable de démarrer chaque phrase dans un paragraphe sur une ligne distincte. Par exemple, cela facilite la diffusion de documents texte différents, car une modification d'une phrase n'affectera pas le paragraphe entier. Certains systèmes de balisage (par exemple * * Roff) nécessitent également que chaque phrase commence sur une nouvelle ligne.
Y a-t-il un moyen, par exemple. par judicieuse redéfinition de ( REMARQUE: J'utilise EMACS 23.3.1) P> Mise à jour: Exemple MDOC (* ROFF) Marquage: P> paragraphe-distinct code> et paragraphe-start code>, pour faire remplir-paragraphe code> arrêter entre phrases? p>
The
.Nm
utility makes a series of passes with increasing block sizes.
In each pass, it either reads or writes (or both) a number of
non-consecutive blocks at increasing offsets relative to the ideal
alignment, which is assumed to be multiples of the block size.
The results are presented in terms of time elapsed, transactions per second and kB per second.
3 Réponses :
Que diriez-vous de raconter Notez que la nouvelle partie est qui devrait fonctionner dans la plupart des cas, il suffisait de surveiller les rares cas où vous avez une peine de mi-phrase capitale et que cette phrase est suffisamment longue. à la pause juste avant ce mot à mi-phrase. p> EDIT: Vous voulez probablement rendre compte de l'indentation aussi: p> L'espace entre les crochets contient Un espace et un onglet. P> EDIT: Vous devez désactiver Edit: Si vous souhaitez désactiver la recherche de cas-lachez de cette fonction, liez les points suivants à paragraphe-start code> pour rechercher une ligne qui commence par une lettre majuscule: \\ ^ [Az] code> p> Case-Fold-Search Code> Pour que cela fonctionne, sinon les majuscules et les lettres minuscules ne se distinguent pas dans le match! p> MQ code> (que vous pouvez faire localement ou globalement, comme vous le voyez bien. ). P> (defun my-fill-paragraph ()
(interactive)
(let ((case-fold-search nil))
(fill-paragraph)))
HMM, si la syntaxe REGEXP de EMACS prend en charge les assertions de l'aspect de longueur variable de largeur zéro, il devrait être possible de construire une regexpe qui correspond au Perl Re / \. (?: \ N \ s {2,} ) \ K \ s / s code>, qui correspond au premier caractère non-blancs après une période suivie d'un caractère nouveau ou d'au moins deux caractères blancheurs.
Tu m'as perdu. Quand est-ce que la Regexp j'ai posté échec? Je suppose que vous frappez manuellement le retour après chaque phrase que vous les entrez, de sorte que Emacs n'a pas à diviser les paragraphes pour vous, il doit simplement respecter les limites de la peine lors du remplissage.
Je ne pense pas que Emacs soutient les assertions non plus.
Les lettres majuscules n'indiquent pas nécessairement le début d'une nouvelle séquence. Par exemple, dans votre premier commentaire, vous avez capitalisé un mot au milieu de la troisième phrase.
Vrai, mais comme je l'ai mentionné ci-dessus, cela ne tient que lorsqu'il y a une peine de mi-phrase capitale, et elle tombe exactement sur un chevreak. Et même alors, s'il tombe exactement sur une pause à la ligne, la ligne va toujours casser à l'endroit où vous le souhaitez. Le boîtier de bord semble assez rare par rapport à l'effort de construction d'une nouvelle fonction de remplissage qui couvre tous les cas possibles;)
Cela évolue la motion de paragraphe et la définition d'un paragraphe, pas seulement le paragraphe de remplissage. L'OP n'a pas dit si c'est ce qu'il veut.
L'OP a dit qu'il souhaitait remplir le paragraphe de ne pas rejoindre des phrases consécutives sur la même ligne, comme l'exige des formats de marque (et est utile pour le contrôle de la révision en général). Il n'a indiqué aucune préférence sur la motion de paragraphe, alors je suppose que ce n'est pas important.
Cela ne me dérange pas de la manière (en ce qui concerne la motion de paragraphe). Je pense que c'est aussi proche que nous allons arriver à ce que je voulais, je vais donc accepter cette réponse.
Oups, non accepté. Il y a quelque chose qui ne va pas avec cette solution: paragraphe de remplissage code> est maintenant correctement enfreint les longues lignes sans toucher la phrase suivante, mais elle ne joint jamais à des lignes courtes ensemble; Je soupçonne que le REGEXP est appliqué de manière insensible à la casse, il considère donc tout i> nouvelle ligne un nouveau paragraphe.
Oui, mais je ne veux pas la mettre globalement, ni même localement - je devrais envelopper remplir paragraphe code> dans une fonction qui le définit à nil puis restaure la valeur, à moins que vous ne puissiez Pensez à quelque chose de plus simple.
Les cas de coin restent non résolus. Modification FILL-Paragarph-Fonction code> fonctionne plus largement. @Tyler, j'ai été confus parce qu'il dit "Démarrer chaque phrase dans un paragraphe", que j'ai pris pour dire qu'il souhaitait garder les concepts d'une phrase et un paragraphe distinct, mais en modifiant la manière dont les paragraphes sont définis ne l'accomplissent pas. Je laisserai op de clarifier ce qu'il veut réellement.
Cela transforme également efficacement paragraphe de remplissage code> dans Message de remplissage code>. Si nous avons commencé à vouloir cela, je pense que la situation serait beaucoup plus facile. :)
Ce DTRT?
(defun separate-sentences (&optional beg end)
"ensure each sentence ends with a new line.
When no region specified, use current paragraph."
(interactive (when (use-region-p)
(list (region-beginning) (region-end))))
(unless (and beg end)
(save-excursion
(forward-paragraph -1)
(setq beg (point))
(forward-paragraph 1)
(setq end (point))))
(setq end (if (markerp end)
end
(set-marker (make-marker) end)))
(save-excursion
(goto-char beg)
(while (re-search-forward (sentence-end) end t)
(unless (or (looking-at-p "[ \t]*$")
(looking-back "^[ \t]*"))
(insert "\n")))))
(defun fill-paragraph-sentence-groups (justify)
"Groups of sentences filled together. A sentence ending with newline marks end of group."
(save-excursion
(save-restriction
(narrow-to-region (progn (forward-paragraph -1) (point))
(progn (forward-paragraph 1) (point)))
(goto-char (point-min))
(skip-chars-forward " \t\n")
(while (not (or (looking-at-p paragraph-separate)
(eobp)))
(fill-region (point)
(progn
(loop do (forward-sentence 1)
until (looking-at "[ \t]*$"))
(point))
justify)
(unless (looking-back "^[ \t]*")
(forward-line 1)))
t)))
(defun fill-paragraph-sentence-individual (justify)
"Each sentence in paragraph is put on new line."
(save-excursion
(separate-sentences)
(fill-paragraph-sentence-groups justify)))
;; deployment option 1: add to major-mode hook
(add-hook 'text-mode-hook (lambda ()
(set (make-local-variable fill-paragraph-function) 'fill-paragraph-sentence-individual)))
;; deployment option 2: call my-fill-paragraph any where
(defun my-fill-paragraph (arg)
(interactive "*P")
(let ((fill-paragraph-function 'fill-paragraph-sentence-individual))
(fill-paragraph arg)))
La question n'était pas de savoir comment séparer un paragraphe en phrases, mais comment empêcher remplir-paragraphe code> de les rejoindre.
La question n'est pas très claire. Pouvez-vous ajouter quelques exemples de ce que vous voulez? Voulez-vous également garder le comportement de mouvement de paragraphe actuel?
Je
Vous pouvez avoir les deux manières. Choisissez remplir-paragraphe-phrase-groupes code> ou remplissage-paragraphe-phrase-individu-individu code>. IMO La version des groupes est plus puissante car il existe un moyen d'arrêter de casser la phrase.
Vous pouvez utiliser Si la ligne se termine par un une ligne commence une phrase si sa ligne prédécesseur est soit vide, soit une ligne de fin de phrase. P> li>
ul>
C'est plutôt difficile de le faire fonctionner correctement dans tous les cas, cependant. P> Région de remplissage code> qui, sans surprise, ne remplit que la région actuelle. Sur la base de cela, vous pouvez définir une fonction Message de remplissage code>. Je suppose qu'un moyen simpliste de détecter de telles phrases est de dire: p>
. code>, ? code> ou ! code>, c'est une ligne de fin de phrases. < / p> li>
J'espérais une combinaison de paramètres qui rendrait paragraphe de remplissage code> dTRT.