2014-11-01 2 views
1

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

Here is some text, we can have inline $math$ symbols and \emph{markup}. 
Sometimes we find offset equations, 

\[ 
    p(\theta|y) \propto p(y|\theta)p(\theta) 
\] 

And then we return to some more text. 

Я хочу, чтобы удалить всю разметку и мне не нужно, чтобы текст, который обернут в разметке.

Так что для $...$ и \emph{...} вещей, вроде sed -E 's/\$[a-z]+\$//' будет работать нормально.

Мой вопрос в том, как удалить уравнения, которые распространяются на несколько строк. Я хочу удалить все между \[ и \] включительно.

ответ

2

Используйте Range Operator .., чтобы удалить текст между двух шаблонов через несколько строк:

use strict; 
use warnings; 

while (<DATA>) { 
    next if /^\s*\\\[/ .. /^\s*\\\]/; 
    print; 
} 

__DATA__ 
Here is some text, we can have inline $math$ symbols and \emph{markup}. 
Sometimes we find offset equations, 

\[ 
    p(\theta|y) \propto p(y|\theta)p(\theta) 
\] 

And then we return to some more text. 

Выходы:

Here is some text, we can have inline $math$ symbols and \emph{markup}. 
Sometimes we find offset equations, 


And then we return to some more text. 

Или как однострочника:

perl -ne 'next if /^\s*\\\[/ .. /^\s*\\\]/; print' file.tex 

Переключатели:

  • -n: Создает цикл while(<>){...} для каждой строки “ ” в исходном файле.
  • -e: Сообщает perl, чтобы выполнить код в командной строке.
+0

замечательный, спасибо за подробный ответ! – keegan

Смежные вопросы