maruku 0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/maruku +25 -0
- data/bin/marutex +29 -0
- data/docs/Makefile +25 -0
- data/docs/char_codes.xml +884 -0
- data/docs/color-package-demo.aux +1 -0
- data/docs/color-package-demo.log +127 -0
- data/docs/color-package-demo.tex +149 -0
- data/docs/index.html +74 -0
- data/docs/markdown_syntax.aux +13 -0
- data/docs/markdown_syntax.html +266 -0
- data/docs/markdown_syntax.log +287 -0
- data/docs/markdown_syntax.md +920 -0
- data/docs/markdown_syntax.out +0 -0
- data/docs/markdown_syntax.pdf +0 -0
- data/docs/markdown_syntax.tex +1203 -0
- data/docs/maruku.aux +13 -0
- data/docs/maruku.html +74 -0
- data/docs/maruku.log +294 -0
- data/docs/maruku.md +394 -0
- data/docs/maruku.out +0 -0
- data/docs/maruku.pdf +0 -0
- data/docs/maruku.tex +548 -0
- data/docs/style.css +65 -0
- data/docs/todo.md +12 -0
- data/lib/maruku.rb +20 -0
- data/lib/maruku/parse_block.rb +577 -0
- data/lib/maruku/parse_span.rb +336 -0
- data/lib/maruku/string_utils.rb +270 -0
- data/lib/maruku/structures.rb +31 -0
- data/lib/maruku/to_html.rb +430 -0
- data/lib/maruku/to_latex.rb +345 -0
- data/lib/maruku/to_latex_strings.rb +330 -0
- data/tests/abbreviations.md +11 -0
- data/tests/blank.md +4 -0
- data/tests/code.md +5 -0
- data/tests/code2.md +8 -0
- data/tests/code3.md +16 -0
- data/tests/email.md +4 -0
- data/tests/entities.md +19 -0
- data/tests/escaping.md +14 -0
- data/tests/extra_dl.md +101 -0
- data/tests/extra_header_id.md +13 -0
- data/tests/extra_table1.md +40 -0
- data/tests/footnotes.md +17 -0
- data/tests/headers.md +10 -0
- data/tests/hrule.md +10 -0
- data/tests/images.md +20 -0
- data/tests/inline_html.md +35 -0
- data/tests/links.md +31 -0
- data/tests/list1.md +4 -0
- data/tests/list2.md +5 -0
- data/tests/list3.md +8 -0
- data/tests/lists.md +32 -0
- data/tests/lists_ol.md +39 -0
- data/tests/misc_sw.md +105 -0
- data/tests/one.md +1 -0
- data/tests/paragraphs.md +13 -0
- data/tests/sss06.md +352 -0
- data/tests/test.md +4 -0
- metadata +113 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
class Maruku
|
|
4
|
+
|
|
5
|
+
# Render as a LaTeX fragment
|
|
6
|
+
def to_latex
|
|
7
|
+
children_to_latex
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# Render as a complete LaTeX document
|
|
11
|
+
def to_latex_document
|
|
12
|
+
header = ""
|
|
13
|
+
|
|
14
|
+
if @doc.meta[:latex_use_listings]
|
|
15
|
+
header += "\\usepackage{listings}\n"
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
body = to_latex
|
|
19
|
+
|
|
20
|
+
# I found a fix!! :-)
|
|
21
|
+
# ## xxx only if `...` is used in footnotes
|
|
22
|
+
# header += "\\usepackage{fancyvrb}\n"
|
|
23
|
+
# body = "\\VerbatimFootnotes\n"+body
|
|
24
|
+
|
|
25
|
+
"\\documentclass{article}
|
|
26
|
+
|
|
27
|
+
#{header}
|
|
28
|
+
\\usepackage{hyperref}
|
|
29
|
+
%\\usepackage[x11names]{xcolor}
|
|
30
|
+
\\usepackage[usenames,dvipsnames]{color}
|
|
31
|
+
\\hypersetup{colorlinks=true}
|
|
32
|
+
\\begin{document}
|
|
33
|
+
#{body}
|
|
34
|
+
\\end{document}
|
|
35
|
+
"
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class MDElement
|
|
41
|
+
DEFAULT_CODE_COLOR = '#f0f0e0'
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
class MDElement
|
|
45
|
+
|
|
46
|
+
def to_latex_hrule; "\n\\vspace{.5em} \\hrule \\vspace{.5em}\n" end
|
|
47
|
+
def to_latex_linebreak; "\\linebreak " end
|
|
48
|
+
|
|
49
|
+
def to_latex_paragraph;
|
|
50
|
+
children_to_latex+"\n\n"
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def get_setting(name, default=nil)
|
|
54
|
+
self.meta[name] || @doc.meta[name] || default
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
# Returns the name to use and possibly a declaration to append
|
|
58
|
+
def define_color_if_necessary(color)
|
|
59
|
+
if color =~ /^\#(\w\w)(\w\w)(\w\w)$/
|
|
60
|
+
# init colors hash in document
|
|
61
|
+
hash = (@doc.meta[:defined_colors] ||= {})
|
|
62
|
+
if hash[color] then
|
|
63
|
+
return hash[color], nil
|
|
64
|
+
else
|
|
65
|
+
r = $1.hex; g = $2.hex; b=$3.hex
|
|
66
|
+
|
|
67
|
+
colorname = "maruku_color#{hash.size}"
|
|
68
|
+
|
|
69
|
+
# convert from 0-255 to 0.0-1.0
|
|
70
|
+
r = r / 255.0
|
|
71
|
+
g = g / 255.0
|
|
72
|
+
b = b / 255.0
|
|
73
|
+
declaration = "\\definecolor{#{colorname}}{rgb}{#{r},#{g},#{b}}\n"
|
|
74
|
+
hash[color] = colorname
|
|
75
|
+
|
|
76
|
+
return colorname, declaration
|
|
77
|
+
end
|
|
78
|
+
else
|
|
79
|
+
color
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def to_latex_code;
|
|
85
|
+
raw_code = @meta[:raw_code]
|
|
86
|
+
|
|
87
|
+
if @doc.meta[:latex_use_listings]
|
|
88
|
+
# puts @meta.inspect
|
|
89
|
+
s = "\\lstset{columns=fixed,frame=shadowbox}"
|
|
90
|
+
|
|
91
|
+
show_spaces = get_setting(:code_show_spaces)
|
|
92
|
+
if show_spaces
|
|
93
|
+
s+= "\\lstset{showspaces=true,showtabs=true}\n"
|
|
94
|
+
else
|
|
95
|
+
s+= "\\lstset{showspaces=false,showtabs=false}\n"
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
color = get_setting(:code_background_color,DEFAULT_CODE_COLOR)
|
|
99
|
+
if color
|
|
100
|
+
colorname, declaration = define_color_if_necessary(color)
|
|
101
|
+
s+= declaration if declaration
|
|
102
|
+
s+= "\\lstset{backgroundcolor=\\color{#{colorname}}}\n"
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
s+= "\\lstset{basicstyle=\\ttfamily\\footnotesize}\n"
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
lang = self.meta[:lang] || @doc.meta[:code_lang] || '{}'
|
|
109
|
+
if lang
|
|
110
|
+
s += "\\lstset{language=#{lang}}\n"
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
"#{s}\n\\begin{lstlisting}\n#{raw_code}\n\\end{lstlisting}"
|
|
114
|
+
else
|
|
115
|
+
"\\begin{verbatim}#{raw_code}\\end{verbatim}\n"
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
TexHeaders = {
|
|
120
|
+
1=>'section',
|
|
121
|
+
2=>'subsection',
|
|
122
|
+
3=>'subsubsection',
|
|
123
|
+
4=>'paragraph'}
|
|
124
|
+
|
|
125
|
+
def to_latex_header
|
|
126
|
+
h = TexHeaders[@meta[:level]] || 'paragraph'
|
|
127
|
+
s =
|
|
128
|
+
# \hyperdef{category}{name}{text}
|
|
129
|
+
|
|
130
|
+
if @meta[:id]
|
|
131
|
+
id = @meta[:id]
|
|
132
|
+
if id[0,1] == '#' then id = [1,id.size] end
|
|
133
|
+
%{\\hypertarget{%s}{}\\%s*{{%s}}\n\n} % [ id,h, children_to_latex]
|
|
134
|
+
|
|
135
|
+
# s + "\\hypertarget{user}{#{id}}{link}"
|
|
136
|
+
else
|
|
137
|
+
%{\\%s*{%s}\n\n} % [ h, children_to_latex]
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
def to_latex_quote; wrap_as_environment('quote') end
|
|
142
|
+
|
|
143
|
+
def to_latex_ul; wrap_as_environment('itemize') end
|
|
144
|
+
def to_latex_ol; wrap_as_environment('enumerate') end
|
|
145
|
+
def to_latex_li;
|
|
146
|
+
"\\item #{children_to_latex}\n"
|
|
147
|
+
end
|
|
148
|
+
def to_latex_li_span;
|
|
149
|
+
"\\item #{children_to_latex}\n"
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
def to_latex_strong; wrap_as_span('\bf') end
|
|
153
|
+
def to_latex_emphasis; wrap_as_span('\em') end
|
|
154
|
+
# def to_html_header; wrap_as_element "h#{@meta[:level]}" end
|
|
155
|
+
|
|
156
|
+
def wrap_as_span(c)
|
|
157
|
+
"{#{c} #{children_to_latex}}"
|
|
158
|
+
end
|
|
159
|
+
def wrap_as_environment(name)
|
|
160
|
+
"\\begin{#{name}}%
|
|
161
|
+
#{children_to_latex}
|
|
162
|
+
\\end{#{name}}\n"
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
# the ultimate escaping
|
|
166
|
+
def latex_escape(source)
|
|
167
|
+
s="";
|
|
168
|
+
source.each_byte do |b| s+= "\\char%d" % b end
|
|
169
|
+
s
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def to_latex_inline_code;
|
|
173
|
+
source = self.meta[:raw_code]
|
|
174
|
+
|
|
175
|
+
# Convert to printable latex chars (is much better than using \verb)
|
|
176
|
+
s=latex_escape(source)
|
|
177
|
+
|
|
178
|
+
color = get_setting(:code_background_color,DEFAULT_CODE_COLOR)
|
|
179
|
+
colorname, declaration = define_color_if_necessary(color)
|
|
180
|
+
(declaration||'')+
|
|
181
|
+
"\\colorbox{#{colorname}}{\\tt #{s}}"
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
def to_latex_immediate_link
|
|
185
|
+
url = @meta[:url]
|
|
186
|
+
return "\\href{#{url}}{#{url.to_latex}}"
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
def to_latex_link
|
|
190
|
+
id = @meta[:ref_id]
|
|
191
|
+
ref = @doc.refs[id]
|
|
192
|
+
if not ref
|
|
193
|
+
$stderr.puts "Could not find id = '#{id}'"
|
|
194
|
+
return title.to_latex
|
|
195
|
+
else
|
|
196
|
+
url = ref[:url]
|
|
197
|
+
#title = ref[:title] || 'no title'
|
|
198
|
+
|
|
199
|
+
if url[0,1] == '#'
|
|
200
|
+
url = url[1,url.size]
|
|
201
|
+
return "\\hyperlink{#{url}}{#{children_to_latex}}"
|
|
202
|
+
else
|
|
203
|
+
return "\\href{#{url}}{#{children_to_latex}}"
|
|
204
|
+
end
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def to_latex_email_address
|
|
209
|
+
email = @meta[:email]
|
|
210
|
+
"\\href{mailto:#{email}}{#{latex_escape(email)}}"
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def to_latex_table
|
|
215
|
+
align = @meta[:align]
|
|
216
|
+
num_columns = align.size
|
|
217
|
+
|
|
218
|
+
head = @children.slice(0, num_columns)
|
|
219
|
+
rows = []
|
|
220
|
+
i = num_columns
|
|
221
|
+
while i<@children.size
|
|
222
|
+
rows << @children.slice(i, num_columns)
|
|
223
|
+
i+=num_columns
|
|
224
|
+
end
|
|
225
|
+
|
|
226
|
+
h = {:center=>'c',:left=>'l',:right=>'r'}
|
|
227
|
+
align_string = align.map{|a| h[a]}.join('|')
|
|
228
|
+
|
|
229
|
+
s = "\\begin{tabular}{#{align_string}}\n"
|
|
230
|
+
|
|
231
|
+
s += array_to_latex(head, '&') + "\\\\" +"\n"
|
|
232
|
+
|
|
233
|
+
s += "\\hline \n"
|
|
234
|
+
|
|
235
|
+
rows.each do |row|
|
|
236
|
+
s += array_to_latex(row, '&') + "\\\\" +"\n"
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
s += "\\end{tabular}"
|
|
240
|
+
|
|
241
|
+
# puts table in its own paragraph
|
|
242
|
+
s += "\n\n"
|
|
243
|
+
|
|
244
|
+
s
|
|
245
|
+
end
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def to_latex_head_cell; children_to_latex end
|
|
249
|
+
def to_latex_cell; children_to_latex end
|
|
250
|
+
|
|
251
|
+
|
|
252
|
+
def to_latex_footnote_reference
|
|
253
|
+
id = @meta[:footnote_id]
|
|
254
|
+
f = @doc.footnotes[id]
|
|
255
|
+
if f
|
|
256
|
+
"\\footnote{#{f.children_to_latex.strip}} "
|
|
257
|
+
else
|
|
258
|
+
$stderr.puts "Could not find footnote '#{fid}'"
|
|
259
|
+
end
|
|
260
|
+
end
|
|
261
|
+
|
|
262
|
+
def to_latex_raw_html
|
|
263
|
+
'{\bf Raw HTML removed in latex version }'
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
## Definition lists ###
|
|
267
|
+
def to_latex_definition_list
|
|
268
|
+
s = "\\begin{description}\n"
|
|
269
|
+
s += children_to_latex
|
|
270
|
+
s += "\\end{description}\n"
|
|
271
|
+
s
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
def to_latex_definition
|
|
275
|
+
terms = @meta[:terms]
|
|
276
|
+
definitions = @meta[:definitions]
|
|
277
|
+
|
|
278
|
+
s = ""
|
|
279
|
+
terms.each do |t|
|
|
280
|
+
s +="\n\\item[#{t.children_to_latex}] "
|
|
281
|
+
end
|
|
282
|
+
|
|
283
|
+
definitions.each do |d|
|
|
284
|
+
s += "#{d.children_to_latex} \n"
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
s
|
|
288
|
+
end
|
|
289
|
+
# def to_latex_definition_term; "" end
|
|
290
|
+
# def to_latex_definition_data; "" end
|
|
291
|
+
|
|
292
|
+
def to_latex_abbreviation
|
|
293
|
+
children_to_latex
|
|
294
|
+
end
|
|
295
|
+
|
|
296
|
+
def to_latex_image
|
|
297
|
+
id = @meta[:ref_id]
|
|
298
|
+
ref = @doc.refs[id]
|
|
299
|
+
if not ref
|
|
300
|
+
$stderr.puts "Could not find id = '#{id}'"
|
|
301
|
+
""
|
|
302
|
+
else
|
|
303
|
+
url = ref[:url]
|
|
304
|
+
"{\\bf Images not supported yet (#{latex_escape(url)})}"
|
|
305
|
+
end
|
|
306
|
+
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
# Some utilities
|
|
312
|
+
class MDElement
|
|
313
|
+
|
|
314
|
+
# Convert each child to html
|
|
315
|
+
def children_to_latex
|
|
316
|
+
array_to_latex(@children)
|
|
317
|
+
end
|
|
318
|
+
|
|
319
|
+
def array_to_latex(array, join_char='')
|
|
320
|
+
e = []
|
|
321
|
+
array.each do |c|
|
|
322
|
+
method = c.kind_of?(MDElement) ?
|
|
323
|
+
"to_latex_#{c.node_type}" : "to_latex"
|
|
324
|
+
|
|
325
|
+
if not c.respond_to?(method)
|
|
326
|
+
raise "Object does not answer to #{method}: #{c.class} #{c.inspect[0,100]}"
|
|
327
|
+
end
|
|
328
|
+
|
|
329
|
+
h = c.send(method)
|
|
330
|
+
|
|
331
|
+
if h.nil?
|
|
332
|
+
raise "Nil html for #{c.inspect} created with method #{method}"
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
if h.kind_of?Array
|
|
336
|
+
e = e + h
|
|
337
|
+
else
|
|
338
|
+
e << h
|
|
339
|
+
end
|
|
340
|
+
end
|
|
341
|
+
e.join(join_char)
|
|
342
|
+
end
|
|
343
|
+
|
|
344
|
+
end
|
|
345
|
+
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
require 'rexml/document'
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class String
|
|
5
|
+
# escapes special characters
|
|
6
|
+
def to_latex
|
|
7
|
+
s = self
|
|
8
|
+
# We escape '{' before, so we can use it in convert_entities
|
|
9
|
+
s = s.gsub(/([\{\}])/) { |m| "\\#{m}" }
|
|
10
|
+
# better yet, we should use the catcode for {}
|
|
11
|
+
s = String.convert_entities(s)
|
|
12
|
+
s = s.gsub(/([\$\&\%\#\_])/) { |m| "\\#{m}" }
|
|
13
|
+
# s = s.gsub(/([\$\&\%\#\_\{\}])/) { |m| "\\#{m}" }
|
|
14
|
+
s
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def String.convert_entities(s)
|
|
18
|
+
init_tables
|
|
19
|
+
|
|
20
|
+
r = s.gsub(/&([\w\d]+);/) do |match|
|
|
21
|
+
replace = @@entity_to_latex[match]
|
|
22
|
+
if replace
|
|
23
|
+
# puts "#{match} -> #{replace}"
|
|
24
|
+
replace
|
|
25
|
+
else
|
|
26
|
+
$stderr.puts "Cannot translate #{match}"
|
|
27
|
+
match
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
include REXML
|
|
33
|
+
# create hash @@entity_to_latex
|
|
34
|
+
def String.init_tables
|
|
35
|
+
## why can't I use a class variable?
|
|
36
|
+
if not $conversion_table_inited
|
|
37
|
+
doc = Document.new XML_TABLE
|
|
38
|
+
@@entity_to_latex = {}
|
|
39
|
+
doc.elements.each("//char") do |c|
|
|
40
|
+
num = c.attributes['num']
|
|
41
|
+
name = c.attributes['name']
|
|
42
|
+
convert = c.attributes['convertTo']
|
|
43
|
+
|
|
44
|
+
# add space after commands
|
|
45
|
+
if convert[0,1] == "\\" then
|
|
46
|
+
convert += " "
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
convert.gsub!(/^\$/, "\\begin{math}")
|
|
50
|
+
convert.gsub!(/\$$/, "\\end{math}")
|
|
51
|
+
|
|
52
|
+
@@entity_to_latex["&#{num};"] = convert
|
|
53
|
+
@@entity_to_latex["&#{name};"] = convert
|
|
54
|
+
|
|
55
|
+
end
|
|
56
|
+
# puts @@entity_to_latex.inspect
|
|
57
|
+
$conversion_table_inited = true
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# The following is a conversion chart for html elements, courtesy of ??
|
|
62
|
+
|
|
63
|
+
XML_TABLE =<<EOF
|
|
64
|
+
<chars>
|
|
65
|
+
<char num='913' name='Alpha' convertTo='$A$' />
|
|
66
|
+
<char num='914' name='Beta' convertTo='$B$' />
|
|
67
|
+
<char num='915' name='Gamma' convertTo='$\\Gamma$' />
|
|
68
|
+
<char num='916' name='Delta' convertTo='$\\Delta$' />
|
|
69
|
+
<char num='917' name='Epsilon' convertTo='$E$' />
|
|
70
|
+
<char num='918' name='Zeta' convertTo='$Z$' />
|
|
71
|
+
<char num='919' name='Eta' convertTo='$H$' />
|
|
72
|
+
<char num='920' name='Theta' convertTo='$\\Theta$' />
|
|
73
|
+
<char num='921' name='Iota' convertTo='$I$' />
|
|
74
|
+
|
|
75
|
+
<char num='922' name='Kappa' convertTo='$K$' />
|
|
76
|
+
<char num='923' name='Lambda' convertTo='$\\Lambda$' />
|
|
77
|
+
<char num='924' name='Mu' convertTo='$M$' />
|
|
78
|
+
<char num='925' name='Nu' convertTo='$N$' />
|
|
79
|
+
<char num='926' name='Xi' convertTo='$\\Xi$' />
|
|
80
|
+
<char num='927' name='Omicron' convertTo='$O$' />
|
|
81
|
+
<char num='928' name='Pi' convertTo='$\\Pi$' />
|
|
82
|
+
<char num='929' name='Rho' convertTo='$P$' />
|
|
83
|
+
<char num='931' name='Sigma' convertTo='$\\Sigma$' />
|
|
84
|
+
|
|
85
|
+
<char num='932' name='Tau' convertTo='$T$' />
|
|
86
|
+
<char num='933' name='Upsilon' convertTo='$Y$' />
|
|
87
|
+
<char num='934' name='Phi' convertTo='$\\Phi$' />
|
|
88
|
+
<char num='935' name='Chi' convertTo='$X$' />
|
|
89
|
+
<char num='936' name='Psi' convertTo='$\\Psi$' />
|
|
90
|
+
<char num='937' name='Omega' convertTo='$\\Omega$' />
|
|
91
|
+
<char num='945' name='alpha' convertTo='$\\alpha$' />
|
|
92
|
+
<char num='946' name='beta' convertTo='$\\beta$' />
|
|
93
|
+
<char num='947' name='gamma' convertTo='$\\gamma$' />
|
|
94
|
+
|
|
95
|
+
<char num='948' name='delta' convertTo='$\\delta$' />
|
|
96
|
+
<char num='949' name='epsilon' convertTo='$\\epsilon$' />
|
|
97
|
+
<char num='950' name='zeta' convertTo='$\\zeta$' />
|
|
98
|
+
<char num='951' name='eta' convertTo='$\\eta$' />
|
|
99
|
+
<char num='952' name='theta' convertTo='$\\theta$' />
|
|
100
|
+
<char num='953' name='iota' convertTo='$\\iota$' />
|
|
101
|
+
<char num='954' name='kappa' convertTo='$\\kappa$' />
|
|
102
|
+
<char num='955' name='lambda' convertTo='$\\lambda$' />
|
|
103
|
+
<char num='956' name='mu' convertTo='$\\mu$' />
|
|
104
|
+
|
|
105
|
+
<char num='957' name='nu' convertTo='$\\nu$' />
|
|
106
|
+
<char num='958' name='xi' convertTo='$\\xi$' />
|
|
107
|
+
<char num='959' name='omicron' convertTo='$o$' />
|
|
108
|
+
<char num='960' name='pi' convertTo='$\\pi$' />
|
|
109
|
+
<char num='961' name='rho' convertTo='$\\rho$' />
|
|
110
|
+
<char num='963' name='sigma' convertTo='$\\sigma$' />
|
|
111
|
+
<char num='964' name='tau' convertTo='$\\tau$' />
|
|
112
|
+
<char num='965' name='upsilon' convertTo='$\\upsilon$' />
|
|
113
|
+
<char num='966' name='phi' convertTo='$\\phi$' />
|
|
114
|
+
|
|
115
|
+
<char num='967' name='chi' convertTo='$\\chi$' />
|
|
116
|
+
<char num='968' name='psi' convertTo='$\\psi$' />
|
|
117
|
+
<char num='969' name='omega' convertTo='$\\omega$' />
|
|
118
|
+
<char num='962' name='sigmaf' convertTo='$\\varsigma$' />
|
|
119
|
+
<char num='977' name='thetasym' convertTo='$\\vartheta$' />
|
|
120
|
+
<char num='982' name='piv' convertTo='$\\varpi$' />
|
|
121
|
+
<char num='8230' name='hellip' convertTo='\\ldots' />
|
|
122
|
+
<char num='8242' name='prime' convertTo='$\\prime$' />
|
|
123
|
+
<char num='8254' name='oline' convertTo='-' />
|
|
124
|
+
|
|
125
|
+
<char num='8260' name='frasl' convertTo='/' />
|
|
126
|
+
<char num='8472' name='weierp' convertTo='$\\wp$' />
|
|
127
|
+
<char num='8465' name='image' convertTo='$\\Im$' />
|
|
128
|
+
<char num='8476' name='real' convertTo='$\\Re$' />
|
|
129
|
+
<char num='8501' name='alefsym' convertTo='$\\aleph$' />
|
|
130
|
+
<char num='8226' name='bull' convertTo='$\\bullet$' />
|
|
131
|
+
<char num='8482' name='trade' convertTo='$^{\\rm TM}$' /> <!-- \texttrademark -->
|
|
132
|
+
<char num='8592' name='larr' convertTo='$\\leftarrow$' />
|
|
133
|
+
|
|
134
|
+
<char num='8594' name='rarr' convertTo='$\\rightarrow$' />
|
|
135
|
+
<char num='8593' name='uarr' convertTo='$\\uparrow$' />
|
|
136
|
+
<char num='8595' name='darr' convertTo='$\\downarrow$' />
|
|
137
|
+
<char num='8596' name='harr' convertTo='$\\leftrightarrow$' />
|
|
138
|
+
<char num='8629' name='crarr' convertTo='$\\hookleftarrow$' />
|
|
139
|
+
<char num='8657' name='uArr' convertTo='$\\Uparrow$' />
|
|
140
|
+
<char num='8659' name='dArr' convertTo='$\\Downarrow$' />
|
|
141
|
+
<char num='8656' name='lArr' convertTo='$\\Leftarrow$' />
|
|
142
|
+
<char num='8658' name='rArr' convertTo='$\\Rightarrow$' />
|
|
143
|
+
|
|
144
|
+
<char num='8660' name='hArr' convertTo='$\\Leftrightarrow$' />
|
|
145
|
+
<char num='8704' name='forall' convertTo='$\\forall$' />
|
|
146
|
+
<char num='8706' name='part' convertTo='$\\partial$' />
|
|
147
|
+
<char num='8707' name='exist' convertTo='$\\exists$' />
|
|
148
|
+
<char num='8709' name='empty' convertTo='$\\emptyset$' />
|
|
149
|
+
<char num='8711' name='nabla' convertTo='$\\nabla$' />
|
|
150
|
+
<char num='8712' name='isin' convertTo='$\\in$' />
|
|
151
|
+
<char num='8715' name='ni' convertTo='$\\ni$' />
|
|
152
|
+
<char num='8713' name='notin' convertTo='$\\notin$' />
|
|
153
|
+
|
|
154
|
+
<char num='8721' name='sum' convertTo='$\\sum$' />
|
|
155
|
+
<char num='8719' name='prod' convertTo='$\\prod$' />
|
|
156
|
+
<char num='8722' name='minus' convertTo='$-$' />
|
|
157
|
+
<char num='8727' name='lowast' convertTo='$\\ast$' />
|
|
158
|
+
<char num='8730' name='radic' convertTo='$\\surd$' />
|
|
159
|
+
<char num='8733' name='prop' convertTo='$\\propto$' />
|
|
160
|
+
<char num='8734' name='infin' convertTo='$\\infty$' />
|
|
161
|
+
<char num='8736' name='ang' convertTo='$\\angle$' />
|
|
162
|
+
<char num='8743' name='and' convertTo='$\\wedge$' />
|
|
163
|
+
|
|
164
|
+
<char num='8744' name='or' convertTo='$\\vee$' />
|
|
165
|
+
<char num='8745' name='cup' convertTo='$\\cup$' />
|
|
166
|
+
<char num='8746' name='cap' convertTo='$\\cap$' />
|
|
167
|
+
<char num='8747' name='int' convertTo='$\\int$' />
|
|
168
|
+
<char num='8756' name='there4' convertTo='$\\therefore$' /> <!-- only AMS -->
|
|
169
|
+
<char num='8764' name='sim' convertTo='$\\sim$' />
|
|
170
|
+
<char num='8776' name='asymp' convertTo='$\\approx$' />
|
|
171
|
+
<char num='8773' name='cong' convertTo='$\\cong$' />
|
|
172
|
+
|
|
173
|
+
<char num='8800' name='ne' convertTo='$\\neq$' />
|
|
174
|
+
<char num='8801' name='equiv' convertTo='$\\equiv$' />
|
|
175
|
+
<char num='8804' name='le' convertTo='$\\leq$' />
|
|
176
|
+
<char num='8805' name='ge' convertTo='$\\geq$' />
|
|
177
|
+
<char num='8834' name='sub' convertTo='$\\subset$' />
|
|
178
|
+
<char num='8835' name='sup' convertTo='$\\supset$' />
|
|
179
|
+
<char num='8838' name='sube' convertTo='$\\subseteq$' />
|
|
180
|
+
<char num='8839' name='supe' convertTo='$\\supseteq$' />
|
|
181
|
+
<char num='8836' name='nsub' convertTo='$\\nsubset$' /> <!-- only AMS -->
|
|
182
|
+
|
|
183
|
+
<char num='8853' name='oplus' convertTo='$\\oplus$' />
|
|
184
|
+
<char num='8855' name='otimes' convertTo='$\\otimes$' />
|
|
185
|
+
<char num='8869' name='perp' convertTo='$\\perp$' />
|
|
186
|
+
<char num='8901' name='sdot' convertTo='$\\cdot$' />
|
|
187
|
+
<char num='8968' name='rceil' convertTo='$\\rceil$' />
|
|
188
|
+
<char num='8969' name='lceil' convertTo='$\\lceil$' />
|
|
189
|
+
<char num='8970' name='lfloor' convertTo='$\\lfloor$' />
|
|
190
|
+
<char num='8971' name='rfloor' convertTo='$\\rfloor$' />
|
|
191
|
+
<char num='9001' name='rang' convertTo='$\\rangle$' />
|
|
192
|
+
|
|
193
|
+
<char num='9002' name='lang' convertTo='$\\langle$' />
|
|
194
|
+
<char num='9674' name='loz' convertTo='$\\lozenge$' /> <!-- only AMS -->
|
|
195
|
+
<char num='9824' name='spades' convertTo='$\\spadesuit$' />
|
|
196
|
+
<char num='9827' name='clubs' convertTo='$\\clubsuit$' />
|
|
197
|
+
<char num='9829' name='hearts' convertTo='$\\heartsuit$' />
|
|
198
|
+
<char num='9830' name='diams' convertTo='$\\diamondsuit$' />
|
|
199
|
+
<char num='38' name='amp' convertTo='\\@AMP' />
|
|
200
|
+
<char num='34' name='quot' convertTo='@DOUBLEQUOT' />
|
|
201
|
+
<char num='169' name='copy' convertTo='\\copyright' />
|
|
202
|
+
|
|
203
|
+
<char num='60' name='lt' convertTo='$@LT$' />
|
|
204
|
+
<char num='62' name='gt' convertTo='$@GT$' />
|
|
205
|
+
<char num='338' name='OElig' convertTo='\\OE' />
|
|
206
|
+
<char num='339' name='oelig' convertTo='\\oe' />
|
|
207
|
+
<char num='352' name='Scaron' convertTo='\\v{S}' />
|
|
208
|
+
<char num='353' name='scaron' convertTo='\\v{s}' />
|
|
209
|
+
<char num='376' name='Yuml' convertTo='\\"Y' />
|
|
210
|
+
<char num='710' name='circ' convertTo='\\textasciicircum' />
|
|
211
|
+
<char num='732' name='tilde' convertTo='\\textasciitilde' />
|
|
212
|
+
|
|
213
|
+
<char num='8211' name='ndash' convertTo='--' />
|
|
214
|
+
<char num='8212' name='mdash' convertTo='---' />
|
|
215
|
+
<char num='8216' name='lsquo' convertTo='`' />
|
|
216
|
+
<char num='8217' name='rsquo' convertTo='@QUOT' />
|
|
217
|
+
<char num='8220' name='ldquo' convertTo='``' />
|
|
218
|
+
<char num='8221' name='rdquo' convertTo='@QUOT@QUOT' />
|
|
219
|
+
<char num='8224' name='dagger' convertTo='\\dag' />
|
|
220
|
+
<char num='8225' name='Dagger' convertTo='\\ddag' />
|
|
221
|
+
<char num='8240' name='permil' convertTo='\\permil' /> <!-- wasysym package -->
|
|
222
|
+
|
|
223
|
+
<char num='8364' name='euro' convertTo='\\euro' /> <!-- eurosym package -->
|
|
224
|
+
<char num='8249' name='lsaquo' convertTo='\\guilsinglleft' />
|
|
225
|
+
<char num='8250' name='rsaquo' convertTo='\\guilsinglright' />
|
|
226
|
+
<!-- <char num='160' name='nbsp' convertTo='\\nolinebreak' />-->
|
|
227
|
+
<char num='160' name='nbsp' convertTo='~' />
|
|
228
|
+
<char num='161' name='iexcl' convertTo='\\textexclamdown' />
|
|
229
|
+
<char num='163' name='pound' convertTo='\\pounds' />
|
|
230
|
+
<char num='164' name='curren' convertTo='\\currency' /> <!-- wasysym package -->
|
|
231
|
+
<char num='165' name='yen' convertTo='\\textyen' /> <!-- textcomp -->
|
|
232
|
+
|
|
233
|
+
<char num='166' name='brvbar' convertTo='\\brokenvert' /> <!-- wasysym -->
|
|
234
|
+
<char num='167' name='sect' convertTo='\\S' />
|
|
235
|
+
<char num='171' name='laquo' convertTo='\\guillemotleft' />
|
|
236
|
+
<char num='187' name='raquo' convertTo='\\guillemotright' />
|
|
237
|
+
<char num='174' name='reg' convertTo='\\textregistered' />
|
|
238
|
+
<char num='170' name='ordf' convertTo='\\textordfeminine' />
|
|
239
|
+
<char num='172' name='not' convertTo='$\\neg$' />
|
|
240
|
+
<char num='176' name='deg' convertTo='$\\degree$' /> <!-- mathabx -->
|
|
241
|
+
|
|
242
|
+
<char num='177' name='plusmn' convertTo='$\\pm$' />
|
|
243
|
+
<char num='180' name='acute' convertTo='@QUOT' />
|
|
244
|
+
<char num='181' name='micro' convertTo='$\\mu$' />
|
|
245
|
+
<char num='182' name='para' convertTo='\\P' />
|
|
246
|
+
<char num='183' name='middot' convertTo='$\\cdot$' />
|
|
247
|
+
<char num='186' name='ordm' convertTo='\\textordmasculine' />
|
|
248
|
+
<char num='162' name='cent' convertTo='\\cent' /> <!-- wasysym -->
|
|
249
|
+
<char num='185' name='sup1' convertTo='$^1$' />
|
|
250
|
+
|
|
251
|
+
<char num='178' name='sup2' convertTo='$^2$' />
|
|
252
|
+
<char num='179' name='sup3' convertTo='$^3$' />
|
|
253
|
+
<char num='189' name='frac12' convertTo='$\\frac{1}{2}$' />
|
|
254
|
+
<char num='188' name='frac14' convertTo='$\\frac{1}{4}$' />
|
|
255
|
+
<char num='190' name='frac34' convertTo='$\\frac{3}{4}' />
|
|
256
|
+
<char num='192' name='Agrave' convertTo='\\`A' />
|
|
257
|
+
<char num='193' name='Aacute' convertTo='\\@QUOTA' />
|
|
258
|
+
<char num='194' name='Acirc' convertTo='\\^A' />
|
|
259
|
+
<char num='195' name='Atilde' convertTo='\\~A' />
|
|
260
|
+
|
|
261
|
+
<char num='196' name='Auml' convertTo='\\@DOUBLEQUOTA' />
|
|
262
|
+
<char num='197' name='Aring' convertTo='\\AA' />
|
|
263
|
+
<char num='198' name='AElig' convertTo='\\AE' />
|
|
264
|
+
<char num='199' name='Ccedil' convertTo='\\cC' />
|
|
265
|
+
<char num='200' name='Egrave' convertTo='\\`E' />
|
|
266
|
+
<char num='201' name='Eacute' convertTo='\\@QUOTE' />
|
|
267
|
+
<char num='202' name='Ecirc' convertTo='\\^E' />
|
|
268
|
+
<char num='203' name='Euml' convertTo='\\@DOUBLEQUOTE' />
|
|
269
|
+
<char num='204' name='Igrave' convertTo='\\`I' />
|
|
270
|
+
|
|
271
|
+
<char num='205' name='Iacute' convertTo='\\@QUOTI' />
|
|
272
|
+
<char num='206' name='Icirc' convertTo='\\^I' />
|
|
273
|
+
<char num='207' name='Iuml' convertTo='\\"I' />
|
|
274
|
+
<char num='208' name='ETH' convertTo='$\\eth$' /> <!-- AMS -->
|
|
275
|
+
<char num='209' name='Ntilde' convertTo='\\~N' />
|
|
276
|
+
<char num='210' name='Ograve' convertTo='\\`O' />
|
|
277
|
+
<char num='211' name='Oacute' convertTo='\\@QUOTO' />
|
|
278
|
+
<char num='212' name='Ocirc' convertTo='\\^O' />
|
|
279
|
+
<char num='213' name='Otilde' convertTo='\\~O' />
|
|
280
|
+
|
|
281
|
+
<char num='214' name='Ouml' convertTo='\\@DOUBLEQUOTO' />
|
|
282
|
+
<char num='215' name='times' convertTo='$\\times$' />
|
|
283
|
+
<char num='216' name='Oslash' convertTo='\\O' />
|
|
284
|
+
<char num='217' name='Ugrave' convertTo='\\`U' />
|
|
285
|
+
<char num='218' name='Uacute' convertTo='\\@QUOTU' />
|
|
286
|
+
<char num='219' name='Ucirc' convertTo='\\^U' />
|
|
287
|
+
<char num='220' name='Uuml' convertTo='\\@DOUBLEQUOTU' />
|
|
288
|
+
<char num='221' name='Yacute' convertTo='\\@QUOTY' />
|
|
289
|
+
<char num='222' name='THORN' convertTo='\\Thorn' /> <!-- wasysym -->
|
|
290
|
+
|
|
291
|
+
<char num='223' name='szlig' convertTo='\\ss' />
|
|
292
|
+
<char num='224' name='agrave' convertTo='\\`a' />
|
|
293
|
+
<char num='225' name='aacute' convertTo='\\@QUOTa' />
|
|
294
|
+
<char num='226' name='acirc' convertTo='\\^a' />
|
|
295
|
+
<char num='227' name='atilde' convertTo='\\~a' />
|
|
296
|
+
<char num='228' name='auml' convertTo='\\@DOUBLEQUOTa' />
|
|
297
|
+
<char num='229' name='aring' convertTo='\\aa' />
|
|
298
|
+
<char num='230' name='aelig' convertTo='\\ae' />
|
|
299
|
+
<char num='231' name='ccedil' convertTo='\\cc' />
|
|
300
|
+
|
|
301
|
+
<char num='232' name='egrave' convertTo='\\`e' />
|
|
302
|
+
<char num='233' name='eacute' convertTo='\\@QUOTe' />
|
|
303
|
+
<char num='234' name='ecirc' convertTo='\\^e' />
|
|
304
|
+
<char num='235' name='euml' convertTo='\\@DOUBLEQUOTe' />
|
|
305
|
+
<char num='236' name='igrave' convertTo='\\`i' />
|
|
306
|
+
<char num='237' name='iacute' convertTo='\\@QUOTi' />
|
|
307
|
+
<char num='238' name='icirc' convertTo='\\^i' />
|
|
308
|
+
<char num='239' name='iuml' convertTo='\\@DOUBLEQUOTi' />
|
|
309
|
+
<char num='240' name='eth' convertTo='$\\eth$' /> <!-- -->
|
|
310
|
+
|
|
311
|
+
<char num='241' name='ntilde' convertTo='\\~n' />
|
|
312
|
+
<char num='242' name='ograve' convertTo='\\`o' />
|
|
313
|
+
<char num='243' name='oacute' convertTo='\\@QUOTo' />
|
|
314
|
+
<char num='244' name='ocirc' convertTo='\\^o' />
|
|
315
|
+
<char num='245' name='otilde' convertTo='\\~o' />
|
|
316
|
+
<char num='246' name='ouml' convertTo='\\@DOUBLEQUOTo' />
|
|
317
|
+
<char num='247' name='divide' convertTo='$\\divide$' />
|
|
318
|
+
<char num='248' name='oslash' convertTo='\\o' />
|
|
319
|
+
<char num='249' name='ugrave' convertTo='\\`u' />
|
|
320
|
+
<char num='250' name='uacute' convertTo='\\@QUOTu' />
|
|
321
|
+
|
|
322
|
+
<char num='251' name='ucirc' convertTo='\\^u' />
|
|
323
|
+
<char num='252' name='uuml' convertTo='\\@DOUBLEQUOTu' />
|
|
324
|
+
<char num='253' name='yacute' convertTo='\\@QUOTy' />
|
|
325
|
+
<char num='254' name='thorn' convertTo='\\thorn' /> <!-- wasysym -->
|
|
326
|
+
<char num='255' name='yuml' convertTo='\\@DOUBLEQUOTy' />
|
|
327
|
+
</chars>
|
|
328
|
+
EOF
|
|
329
|
+
|
|
330
|
+
end
|