2013-11-25 3 views
5

Я хочу использовать латекс для создания PDF-файлов с помощью шаблонов Django.Django template and latex

Но, когда он генерирует PDF-файл, некоторые символы не кодируются в хорошем смысле, особенно в «апострофе»: латекс останавливает компиляцию и, если я игнорирую ошибку, вывод & # 39.

Я французский, поэтому мои файлы Python - это UTF-8, моя база данных UTF8-general-CI, и я использую эти пакеты для латекса: [utf8] {inputenc} [T1] {fontenc} [francais] { babel} {lmodern}

Все французские акценты генерируются, поэтому я не знаю, где проблема?

Любая идея?

Вот мое мнение:

# -*- coding: utf-8 -*- 
... 
def results_contact(request, checkup_id): 
    ... 
    title = get_object_or_404(Checkup, pk=checkup_id).name 
    ... 

    template_file = 'activities/results.tex' 

    t = loader.get_template(template_file) 
    context = Context({ 
       ... 
       "title": title, 
       ... 
       }) 

    ... 
    f.write(smart_str(t.render(context))) 
    ... 
    return HttpResponseRedirect('/download_file/upload/checkups/%s.pdf' % basename) 

И мой шаблон:

\documentclass[11pt]{lettre} 
\usepackage[utf8]{inputenc} 
\usepackage[T1]{fontenc} 
\usepackage[francais]{babel} 
\usepackage{lmodern} 
... 

\begin{document} 
\begin{letter}{...} 
\name{My name} 
\address{My address} 
\lieu{My city} 
... 
\conc{ {{ title }} } %here is my variable 
... 
\end{letter} 
\end{document} 

Например, если название = Visite d'Adam, выход будет

Objet: Visite d & # 39Adam

Вот лог:

! Misplaced alignment tab character &. 
<argument> Visite d& 
         ##39;embauche 
l.35 \conc{ Visite d&#39;Adam } 
? 

ответ

8

Это результат automatic HTML escaping. Поскольку вы не генерируете HTML, вы можете turn this feature off:

{% autoescape off %} 
    \documentclass[11pt]{lettre} 
    \usepackage[utf8]{inputenc} 
    \usepackage[T1]{fontenc} 
    \usepackage[francais]{babel} 
    \usepackage{lmodern} 
    ... 

    \begin{document} 
     \begin{letter}{...} 
      \name{My name} 
      \address{My address} 
      \lieu{My city} 
      ... 
      \conc{ {{ title }} } 
     ... 
     \end{letter} 
    \end{document} 
{% endautoescape %} 
+0

Ответил в 10 минут ... и он работает! Спасибо @ Ludwik. – lebastidien09