#!/usr/bin/python # coding: utf-8 import sys import string import random import re filename = sys.argv[1] f = open(filename, 'r') thisline = f.readline() list = [] resultlist = [] inp = 'f' COMMAND = 'emph' while (len(thisline) != 0): list.append(thisline) thisline = f.readline() linenumber = 0 while(linenumber < (len(list))): line = list[linenumber] letternumber = 0 while(letternumber < (len(line))): letter = line[letternumber] if(letter == '/' and (line[letternumber-1] == '\\')): line=line[:letternumber-1] + line[letternumber:] elif(letter == '/' and inp == 'f' and (line[letternumber-1] != '\\')): line = line[:letternumber] + '\\' + COMMAND + '{' + line[letternumber+1:] inp = 't' letternumber = letternumber + len(COMMAND) elif (letter == '/' and inp == 't' and (line[letternumber-1] != '\\')): line = line[:letternumber] + '}' + line[letternumber+1:] inp = 'f' letternumber = letternumber+1 resultlist.append(line) linenumber = linenumber + 1 # the following is a trick to make sure that footnotes defined by footnotemark/footnotetext commands show up on the correct page doc = '' for x in range(len(resultlist)): doc += resultlist[x] footnotetexts = re.findall('(?<=\\\\fnt\\{).*?(?=\\}\\\\*\n)', doc) # non greedy # delete old fnts doc = re.sub('\\\\fnt\\{.*\\}\n', '', doc,) # \footnotetext{} must end with a newline # replace fnm by fnt for m in footnotetexts: m = re.sub('\\\\','\\\\\\\\', m) # replace all backslashes by double backslashes so that e.g. \b{} in a footnote will work fnt = '\\\\footnote{' + m + '}' doc = re.sub('\\\\fnm(?!\})', fnt, doc, 1) # replace only the first instance print doc