2015-04-21 4 views
1

У меня очень большое выражение, которое содержит много дробных чисел (a/b). Я хочу заменить все дробные числа на их латексную форму, то есть мой вывод будет \ frac {a} {b} глобально. Вот часть входного файла:Как заменить дробное число латексом frac глобально

 + 93 
     - 220/3*zeta3 
     + 536/9*zeta2 
     - 4/5*zeta2^2 

Мой результат будет что-то вроде:

 + 93 
     - \frac{220}{3}*zeta3 
     + \frac{536}{9}*zeta2 
     - \frac{4}{5}*zeta2^2 

Я могу сделать это вручную с помощью редактора VIM (что очень много времени). Я искал сценарий, который может делать это глобально для всех таких фракций. Можно ли это сделать в сценарии оболочки?

ответ

2

С GNU СЭД:

sed -E 's|([0-9]+)/([0-9]+)|\\frac{\1}{\2}|' file 

Выход:

 
     + 93 
     - \frac{220}{3}*zeta3 
     + \frac{536}{9}*zeta2 
     - \frac{4}{5}*zeta2^2 
+0

С «g» в конце, если есть несколько фракций на строку | ... | ... | g ' – mcoolive

3

Предполагая, что ваши фракции состоят только из цифр, и они не охватывают несколько строк:

:%s!\v(\d+)\s*/\s*(\d+)!\\frac{\1}{\2}!g 
+0

Это короткий ответ. Я предполагаю, что это команда VI. – mcoolive

+0

Или команда 'ex (1)' из-за ':% s'. Но так как обычные инкарнации 'ex (1)' не поддерживают '\ v', а поскольку вопрос помечен' vim', может быть безопаснее идти с Vim. ;) – lcd047

0

с использованием регулярных выражений :

match : ^(\s+(\+|\-)\s+)(\d+)\/(\d+)(\*.*)$ 
replace : \1\\frac{\3}{\4}\5 

использовать инструменты, такие как sed для редактирования файла.

см DEMO

0

Обычно, когда вы думаете:

Я могу сделать это вручную с помощью редактора VIM (который очень много времени).

Вы делаете что-то неправильно, так как ничто не должно занять много времени в редакторе VIM, таким образом:

Используйте ВИМ макросъемки

Первый поиск /:

<esc>/\/ 

запись следующий макрос:

nbifrac{<esc>nvc}{<esc>ea}<esc> 

Шаг за шагом

Начало записи макроса в буфере q:

qq 

Найти следующее вхождение /

n 

Шаг перед числителе и вставить frac{:

bifrac{<esc> 

Найти знак деления, выберите его и изменить его на }{:

nvc}{<esc> 

Шаг за знаменателю и добавить }:

ea}<esc> 

Остановка записи макроса:

q 

Играть макрос 1000 раз, если вам нравится:

[email protected] 
Смежные вопросы