Невозможно заставить каждое предложение начинаться с новой строки в LaTex с помощью AWK/Python

У меня есть длинный документ в LaTex, содержащий абзацы. Абзацы содержат такие предложения, что ни одно последующее предложение не начинается с новой строки.

Как сделать так, чтобы каждое последующее предложение начиналось с новой строки в моем файле .tex?

Моя попытка решить проблему

Нам нужно поставить \n в конец предложения B, где перед предложением B стоит предложение A.

Мы не должны ставить \n в ситуациях, когда есть отметка \.

Я вижу, что проблему можно решить с помощью AWK и Python.


person Léo Léopold Hertz 준영    schedule 12.03.2009    source источник


Ответы (3)


Что плохого в том, чтобы ставить новую строку после каждой точки? Например:

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

$ echo "abc. 123. xyz." | awk '{ gsub(/\. +/, ".\n"); print }'
abc.
123.
xyz.
person David Wolever    schedule 12.03.2009
comment
@David: я не понимаю часть gsub(/\. +/, .\n). Не могли бы вы объяснить это - person Léo Léopold Hertz 준영; 12.03.2009
comment
sub — это функция awk, которая принимает регулярное выражение и строку и заменяет текст, соответствующий регулярному выражению, строкой. «g» в «gsub» означает замену более одного раза в строке. Регулярное выражение означает соответствие буквальной точке, за которой следует один или несколько пробелов. Эта помощь? - person David Wolever; 12.03.2009

Итак, вы хотите, чтобы каждое предложение в вашем .tex-файле начиналось с новой строки, но без дополнительных абзацев? Это правильно?

Возможно, вы могли бы просмотреть свой файл и каждый раз, когда вы видите '.' затем пробел и заглавная буква, вставьте новую строку.

например в питоне:

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))
person John Fouhy    schedule 12.03.2009

Если я правильно прочитал ваш вопрос, вам нужна команда \newline. Ставьте после каждого предложения. \\ — это ярлык для этого.

Регулярное выражение для этого было бы чем-то вроде

s/\.  ([A-Z])/.\\newline\1/
person Svante    schedule 12.03.2009
comment
Похоже на работу для Сэда, если так выразиться - person David Z; 12.03.2009