2009-03-12 4 views
1

J'ai un long document dans LaTex, qui contient des paragraphes. Les paragraphes contiennent des phrases telles qu'aucune phrase suivante ne commence à une nouvelle ligne.Impossible de faire chaque phrase pour commencer à une nouvelle ligne dans LaTex par AWK/Python

Comment faire en sorte que chaque phrase suivante commence à une nouvelle ligne dans mon fichier .tex?

Ma tentative du problème

Nous avons besoin de mettre \ n à la fin du paragraphe B, où la peine B a la peine d'un devant lui.

Nous ne devons pas mettre \ n aux situations où il y a la marque \.

Je vois que le problème peut être résolu par AWK et Python.

Répondre

2

Qu'est-ce qui ne va pas avec une nouvelle ligne après chaque période? Par exemple:

awk '{ gsub(/\. +/, ".\n"); print }' 

$ echo "abc. 123. xyz." | awk '{ gsub(/\. +/, ".\n"); print }' 
abc. 
123. 
xyz. 
+0

Dr Jones, je présume. –

+0

@David: Je ne comprends pas la partie "gsub (/ \. + /,". \ N ")". Pourriez-vous s'il vous plaît l'expliquer –

+1

sub est une fonction awk qui accepte une expression régulière et une chaîne et remplace le texte qui correspond à l'expression régulière avec la chaîne. Le 'g' dans 'gsub' signifie "remplacer plus d'une fois par ligne". L'expression régulière signifie "correspondre à une période littérale suivie d'un ou plusieurs espaces". Cette aide? –

2

Vous voulez donc que chaque phrase de votre fichier .tex commence sur une nouvelle ligne, mais sans introduire de paragraphes supplémentaires? Est-ce exact?

Peut-être que vous pourriez parcourir votre fichier et, chaque fois que vous voyez un '.' suivi d'un espace et d'une lettre majuscule, insérez une nouvelle ligne.

par exemple. en python:

import re 
sentence_end = r'\.\s+([A-Z])' 

source = open('myfile.tex') 
dest = open('myfile-out.tex', 'w') 
for line in source: 
    dest.write(re.sub(sentence_end, '.\n\g<1>', line)) 
2

Si je lis bien votre question, ce dont vous avez besoin est la commande \newline. Mettez-le après chaque phrase. \\ est un raccourci pour cela.

A regex pour ce faire serait quelque chose comme

s/\. ([A-Z])/.\\newline\1/ 
+0

On dirait un travail pour sed, quand on le dit –

Questions connexes