>>> from lxml import html
>>>
>>> doc = html.document_fromstring('<div></div>')
>>>
>>> div = doc.xpath('//div')[0]
>>> div.append(html.Element('p'))
>>> div[0].text = '{pattern1}'
>>>
>>> pat = html.tostring(doc, pretty_print=True, encoding='unicode')
>>> out = pat.format(pattern1='<x>')
>>> out
'<html><body><div><p><x></p></div></body></html>\n'
>>>
Тут вот видно, что не проработаны аргументы у tostring()
http://lxml.de/api/lxml.html-module.html#tostringАргумент pretty_print указан, а описания его нет. А про другой аргумент он пишет, что выводится XML, хотя HTML и XML - это разные языки разметки, поэтому HTML никак нельзя называть XML. Видно, он копипастил документацию и не проработал методы. Так что pretty_print должен работать правильно, но не работает. Это нужно ему написать, чтобы он поправил, тогда код будет выводить всё правильно после обновления модуля lxml. Так что pretty_print оставь там, хоть он и не пашет.