-
Notifications
You must be signed in to change notification settings - Fork 14
/
Copy pathuserdef_environments.py
85 lines (79 loc) · 2.38 KB
/
userdef_environments.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from mako.template import Template
import re
envir2format = {
'intro': {
'latex': u"""
\\usepackage{amsthm}
\\theoremstyle{definition}
\\newtheorem{remark}{Замечание}
\\newtheorem{example}{Example}
\\newtheorem{definition}{Definition}
""",}
}
envirs = ['remark', 'example', 'definition']
for env in envirs:
envir2format.update({
env: {
'latex': lambda text, titleline, counter, format, env=env: latex_env(env, text, titleline, counter, format),
'do': lambda text, titleline, counter, format, env=env: do_env(env, text, titleline, counter, format),
'html': lambda text, titleline, counter, format, env=env: html_env(env, text, titleline, counter, format),
},
})
def get_label(titleline):
"""
Extract label from title line in begin environment.
Return label and title (without label).
"""
label = ''
if 'label=' in titleline:
pattern = r'label=([^\s]+)'
m = re.search(pattern, titleline)
if m:
label = m.group(1)
titleline = re.sub(pattern, '', titleline).strip()
return label, titleline
def latex_env(env, text, titleline, counter, format):
"""LaTeX typesetting of theorem-style environment."""
label, titleline = get_label(titleline)
titleline = titleline.strip()
template = ur"""
\begin{${env}}
% if label:
label{${label}}
% endif
% if titleline:
\noindent\emph{${titleline}.
%endif
${text}
\end{${env}}
"""
return Template(template).render(**vars())
def do_env(env, text, titleline, counter, format):
"""General typesetting of theorem-style environment via a section."""
label, titleline = get_label(titleline)
titleline = titleline.strip()
if titleline:
titleline = ": "+titleline
template = ur"""
===== ${env.capitalize()} ${counter} ${titleline} =====
% if label:
label{${label}}
% endif
${text}
"""
return Template(template).render(**vars())
def html_env(env, text, titleline, counter, format):
"""HTML typesetting of theorem-style environment."""
label, titleline = get_label(titleline)
titleline = titleline.strip()
template = ur"""
% if label:
<!-- custom environment: label=${label}, number=${counter} -->
% endif
<p class='env-${env}'><b>${env.capitalize()} ${counter}${titleline}.</b>
${text}
</p>
"""
return Template(template).render(**vars())