2014-08-15 3 views
-2

Предположим, у меня есть скрипт python, который выводит x0+x1*x2+y40+y1 (переменные с индексами и арифметическими операторами).Форматирование вывода python для математического режима tex?

Теперь я хочу добавить этот вывод в файл tex в математическом режиме. Таким образом, в этом случае, мне нужно форматированный вывод будет:

$ X_ {0} + x_ {1} \ аст x_ {2} + у- {40} + у- {1} $

(выражение заключено два $-х, каждое число загорожено _{ и }, * заменяется \ast).

Каков наилучший способ для этого?

Я не мог решить это даже сейчас. Проблема состоит в том, что числа индексов имеют произвольные длины.

Это моя наивная и неудачная попытка:

expr = 'x0+x1*x2+y40+y1' 
expr = expr.replace('*', '\\ast ') 
expr = expr.replace('x', 'x_') 
expr = expr.replace('y', 'y_') 

#import re 

#for s in expr: 
# if re.match(r'\D', s): 
#  print s, 

expr = '$'+expr+'$' 
print expr  
+1

Возможно, вы захотите попробовать https://github.com/JelteF/PyLaTeX (в частности, 'math = Subsection ('Math is wrong', data = [Math (data = ['2 * 3', ' = ', 9])]) 'строка может быть чем-то вроде вашего кода, если вы решите использовать эту библиотеку). Отказ от ответственности: я никогда не использовал это сам, просто нашел его прямо сейчас с помощью быстрого поиска Google. – Aristocrates

+0

Это вряд ли требует регулярных выражений. Вероятно, вы можете получить с помощью 'string.replace()'. Это сказано - вы что-то пробовали? Не могли бы вы показать нам? – Dannnno

+0

Если вы хотите сделать это самостоятельно, я бы посоветовал вам попытаться получить дерево _expression__и_и_и_определения, а затем определите правила написания выражения в файле \ LaTeX. Например, выражение x1 * x2 будет содержать на корневом уровне оператор умножения и как листья x1 и x2. Итак, правилом для оператора умножения было бы напечатать \ вместо символа *. Что касается x1 и x2, вы можете выполнить строковые операции, чтобы найти числовой компонент и поместить узел в индекс. Я не знаю, есть ли в Python существующая библиотека, которая может быть использована для получения дерева выражений. – aaragon

ответ

1

Вы можете использовать метод re.sub заменить каждое вхождение ряда с _{N} и использовать str.replace для всего остального. Шаблон \d+ будет соответствовать одной или нескольким последующим цифрам.

import re 

def texify(text): 
    text = re.sub('\d+', lambda match: '_{' + match.group(0) + '}', text) 
    return '$' + text.replace('*', '\\ast ') + '$' 

print texify('x0+x1*x2+y40+y1') 

Однако, обратите внимание, что это довольно хрупкое решение - например, это будет ошибкой, если у вас есть какие-либо цифры, которые не предназначены, чтобы быть подстрочные.

+0

Вы можете изменить: 'text' в первой строке внутри' textify' (в темпе 'a') и' \\ ast' вместо '\ ast'. :-) В любом случае, спасибо. Поскольку мои текущие результаты не содержат каких-либо коэффи- циентов, они будут работать нормально. –

+0

@ pushpen.paul - кричит! Спасибо, что поймал эти опечатки :) – Michael0x2a

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