asciidoctor-latex 1.5.0.dev → 1.5.0.1.dev
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.
- checksums.yaml +4 -4
- data/README.adoc +118 -122
- data/data/extras.css +6 -0
- data/{try-out → examples}/README.adoc +8 -4
- data/examples/box.adoc +16 -0
- data/examples/chem.adoc +17 -0
- data/{try-out → examples}/click.adoc +0 -0
- data/{try-out → examples}/code.adoc +0 -0
- data/{try-out → examples}/env.adoc +0 -0
- data/examples/eq-alignment.adoc +5 -0
- data/examples/eq-block.adoc +60 -0
- data/{try-out → examples}/eq-latex.adoc +0 -0
- data/{try-out → examples}/eq-stem.adoc +0 -0
- data/{try-out → examples}/eqno-latex.adoc +0 -0
- data/{try-out → examples}/math_article.adoc +0 -0
- data/{try-out → examples}/pyth-stem.adoc +0 -0
- data/{try-out → examples}/theorem-latex.adoc +0 -0
- data/{try-out → examples}/xref-equations.adoc +2 -1
- data/lib/asciidoctor/latex/click_block.rb +0 -2
- data/lib/asciidoctor/latex/converter.rb +90 -77
- data/lib/asciidoctor/latex/environment_block.rb +44 -26
- data/lib/asciidoctor/latex/prepend_processor.rb +1 -1
- data/lib/asciidoctor/latex/preprocess.rb +0 -8
- data/lib/asciidoctor/latex/tex_preprocessor.rb +2 -2
- data/lib/asciidoctor/latex/version.rb +1 -1
- data/manual.adoc +2 -2
- data/test/examples/adoc/env.adoc +1 -9
- data/test/examples/adoc/eq.adoc +1 -1
- data/test/examples/adoc/zero.adoc +2 -0
- data/test/examples/asciidoc-html/env.adoc +103 -0
- data/test/examples/asciidoc-html/equations.adoc +15 -0
- data/test/examples/tex/env.tex +1 -127
- data/test/examples/tex/eq.tex +2 -125
- data/test/examples/tex/zero.tex +2 -120
- metadata +39 -21
- data/rake/cacert.pem +0 -3894
- data/rake/jdk_helper.rb +0 -105
- data/rake/tar-licence +0 -19
- data/rake/tar.rb +0 -38
- data/test/examples/asciidoc-html/block_open.adoc +0 -17
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -25,4 +25,5 @@ Proin ac blandit magna, vel ultrices magna. Suspendisse non ligula lobortis, fau
|
|
25
25
|
|
26
26
|
The first section is <<This is a test>>
|
27
27
|
|
28
|
-
The professor harrumphed and said: I repeat,
|
28
|
+
The professor harrumphed and said: I repeat,
|
29
|
+
equation (<<qq>>) is very important.
|
@@ -157,90 +157,27 @@ module Asciidoctor::LaTeX
|
|
157
157
|
|
158
158
|
def info node
|
159
159
|
|
160
|
-
|
161
|
-
|
162
|
-
warn "\n HTMLConverter, node: #{node.node_name}".red
|
163
|
-
# warn " title: #{attrs['title']}".cyan
|
164
|
-
# warn " role: #{attrs['role']}".cyan
|
165
|
-
# warn " options: #{attrs['options']}".cyan
|
160
|
+
warn "\n HTMLConverter, node: #{node.node_name}".red if $VERBOSE
|
166
161
|
|
167
162
|
end
|
168
163
|
|
169
164
|
def environment node
|
170
165
|
|
171
|
-
# info node if $VERBOSE
|
172
|
-
options = node.attributes['options']
|
173
166
|
attrs = node.attributes
|
174
167
|
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
node
|
168
|
+
case attrs['role']
|
169
|
+
when 'box'
|
170
|
+
handle_null(node)
|
171
|
+
when 'equation'
|
172
|
+
handle_equation(node)
|
173
|
+
when 'equationalign'
|
174
|
+
handle_equation_align(node)
|
175
|
+
when 'chem'
|
176
|
+
handle_chem(node)
|
177
|
+
when 'jsxgraph'
|
178
|
+
handle_jsxgraph(node)
|
186
179
|
else
|
187
|
-
node
|
188
|
-
end
|
189
|
-
elsif attrs['role'] == 'equationalign'
|
190
|
-
warn "execting env role = #{attrs['role']}".yellow if $VERBOSE
|
191
|
-
node.title = nil
|
192
|
-
number_part = '<td style="text-align:right">' + "(#{node.caption}) </td>"
|
193
|
-
number_part = ["+++ #{number_part} +++"]
|
194
|
-
equation_part = ['+++<td style="width:100%";>+++'] + ['\\[\\begin{split}'] + node.lines + ['\\end{split}\\]'] + ['+++</td>+++']
|
195
|
-
table_style='style="width:100%; border-collapse:collapse;border:0" class="zero" '
|
196
|
-
row_style='style="border-collapse: collapse; border:0; font-size: 12pt; "'
|
197
|
-
if options['numbered']
|
198
|
-
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + number_part + [TABLE_ROW_END]
|
199
|
-
else
|
200
|
-
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + [TABLE_ROW_END]
|
201
|
-
end
|
202
|
-
elsif node.attributes['role'] == 'chem'
|
203
|
-
node.title = nil
|
204
|
-
number_part = '<td style="text-align:right">' + "(#{node.caption}) </td>"
|
205
|
-
number_part = ["+++ #{number_part} +++"]
|
206
|
-
equation_part = ['+++<td style="width:100%;">+++'] + [' \\[\\ce{' + node.lines[0] + '}\\] '] + ['+++</td>+++']
|
207
|
-
table_style='class="zero" style="width:100%; border-collapse:collapse; border:0"'
|
208
|
-
row_style='class="zero" style="border-collapse: collapse; border:0; font-size: 10pt; "'
|
209
|
-
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + number_part +['+++</tr></table>+++']
|
210
|
-
elsif attrs['role'] == 'jsxgraph'
|
211
|
-
if attrs['box'] == nil
|
212
|
-
attrs['box'] = 'box'
|
213
|
-
end
|
214
|
-
if attrs['width'] == nil
|
215
|
-
attrs['width'] = 450
|
216
|
-
end
|
217
|
-
if attrs['height'] == nil
|
218
|
-
attrs['height'] = 450
|
219
|
-
end
|
220
|
-
warn "jxxgraph attributes: #{attrs}".cyan if $VERBOSE
|
221
|
-
line_array = ["\n+++\n"]
|
222
|
-
# line_array += ["<link rel='stylesheet' type='text/css' href='jsxgraph.css' />"]
|
223
|
-
|
224
|
-
line_array += ["<link rel='stylesheet' type='text/css' href='http://jsxgraph.uni-bayreuth.de/distrib/jsxgraph.css' />"]
|
225
|
-
line_array += ['<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.3/jsxgraphcore.js"></script>']
|
226
|
-
line_array += ["<script src='http://jsxgraph.uni-bayreuth.de/distrib/GeonextReader.js' type='text/javascript'></script>"]
|
227
|
-
# line_array += ['<div id="box" class="jxgbox" style="width:500px; height:500px;"></div>']
|
228
|
-
line_array += ["<div id='#{attrs['box']}' class='jxgbox' style='width:" + "#{attrs['width']}" + "px; height:" + "#{attrs['height']}" +"px;'></div>"]
|
229
|
-
line_array += ['<script type="text/javascript">']
|
230
|
-
|
231
|
-
# line_array += ["<link rel='stylesheet' type='text/css' href='http://jsxgraph.uni-bayreuth.de/distrib/jsxgraph.css' />"]
|
232
|
-
# line_array += ["<script src='http://jsxgraph.uni-bayreuth.de/distrib/jsxgraphcore.js' type='text/javascript'></script>"]
|
233
|
-
# line_array += ["<script src='http://jsxgraph.uni-bayreuth.de/distrib/GeonextReader.js' type='text/javascript'></script>"]
|
234
|
-
# line_array += ["<div id='jxgbox' class='jxgbox' style='width:500px; height:500px;'></div>"]
|
235
|
-
# line_array += ["<script type='text/javascript'>"]
|
236
|
-
|
237
|
-
line_array += node.lines
|
238
|
-
line_array += ['</script>']
|
239
|
-
line_array += ['<br/>']
|
240
|
-
line_array += ["\n+++\n"]
|
241
|
-
node.lines = line_array
|
242
|
-
else
|
243
|
-
node.lines = [ENV_CSS] + node.lines + [DIV_END]
|
180
|
+
handle_default(node)
|
244
181
|
end
|
245
182
|
|
246
183
|
node.attributes['roles'] = (node.roles + ['environment']) * ' '
|
@@ -249,7 +186,6 @@ module Asciidoctor::LaTeX
|
|
249
186
|
|
250
187
|
def click node
|
251
188
|
|
252
|
-
# info node if $VERBOSE
|
253
189
|
node.lines = [ENV_CSS] + node.lines + [DIV_END]
|
254
190
|
node.attributes['roles'] = (node.roles + ['click']) * ' '
|
255
191
|
self.open node
|
@@ -290,6 +226,83 @@ module Asciidoctor::LaTeX
|
|
290
226
|
output
|
291
227
|
end
|
292
228
|
|
229
|
+
def handle_equation(node)
|
230
|
+
options = node.attributes['options']
|
231
|
+
node.title = nil
|
232
|
+
number_part = '<td style="text-align:right">' + "(#{node.caption}) </td>"
|
233
|
+
number_part = ["+++ #{number_part} +++"]
|
234
|
+
equation_part = ['+++<td style="width:100%";>+++'] + ['\\['] + node.lines + ['\\]'] + ['+++</td>+++']
|
235
|
+
table_style='style="width:100%; border-collapse:collapse;border:0" class="zero" '
|
236
|
+
row_style='style="border-collapse: collapse; border:0; font-size: 12pt; "'
|
237
|
+
if options['numbered']
|
238
|
+
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + number_part + [TABLE_ROW_END]
|
239
|
+
else
|
240
|
+
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + [TABLE_ROW_END]
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def handle_equation_align(node)
|
245
|
+
options = node.attributes['options']
|
246
|
+
attrs = node.attributes
|
247
|
+
node.title = nil
|
248
|
+
number_part = '<td style="text-align:right">' + "(#{node.caption}) </td>"
|
249
|
+
number_part = ["+++ #{number_part} +++"]
|
250
|
+
equation_part = ['+++<td style="width:100%";>+++'] + ['\\[\\begin{split}'] + node.lines + ['\\end{split}\\]'] + ['+++</td>+++']
|
251
|
+
table_style='style="width:100%; border-collapse:collapse;border:0" class="zero" '
|
252
|
+
row_style='style="border-collapse: collapse; border:0; font-size: 12pt; "'
|
253
|
+
if options['numbered']
|
254
|
+
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + number_part + [TABLE_ROW_END]
|
255
|
+
else
|
256
|
+
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + [TABLE_ROW_END]
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
def handle_chem(node)
|
261
|
+
node.title = nil
|
262
|
+
number_part = '<td style="text-align:right">' + "(#{node.caption}) </td>"
|
263
|
+
number_part = ["+++ #{number_part} +++"]
|
264
|
+
equation_part = ['+++<td style="width:100%;">+++'] + [' \\[\\ce{' + node.lines[0] + '}\\] '] + ['+++</td>+++']
|
265
|
+
table_style='class="zero" style="width:100%; border-collapse:collapse; border:0"'
|
266
|
+
row_style='class="zero" style="border-collapse: collapse; border:0; font-size: 10pt; "'
|
267
|
+
node.lines = ["+++<table #{table_style}><tr #{row_style}>+++"] + equation_part + number_part +['+++</tr></table>+++']
|
268
|
+
end
|
269
|
+
|
270
|
+
def handle_jsxgraph(node)
|
271
|
+
attrs = node.attributes
|
272
|
+
if attrs['box'] == nil
|
273
|
+
attrs['box'] = 'box'
|
274
|
+
end
|
275
|
+
if attrs['width'] == nil
|
276
|
+
attrs['width'] = 450
|
277
|
+
end
|
278
|
+
if attrs['height'] == nil
|
279
|
+
attrs['height'] = 450
|
280
|
+
end
|
281
|
+
line_array = ["\n+++\n"]
|
282
|
+
# line_array += ["<link rel='stylesheet' type='text/css' href='jsxgraph.css' />"]
|
283
|
+
|
284
|
+
line_array += ["<link rel='stylesheet' type='text/css' href='http://jsxgraph.uni-bayreuth.de/distrib/jsxgraph.css' />"]
|
285
|
+
line_array += ['<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsxgraph/0.99.3/jsxgraphcore.js"></script>']
|
286
|
+
line_array += ["<script src='http://jsxgraph.uni-bayreuth.de/distrib/GeonextReader.js' type='text/javascript'></script>"]
|
287
|
+
# line_array += ['<div id="box" class="jxgbox" style="width:500px; height:500px;"></div>']
|
288
|
+
line_array += ["<div id='#{attrs['box']}' class='jxgbox' style='width:" + "#{attrs['width']}" + "px; height:" + "#{attrs['height']}" +"px;'></div>"]
|
289
|
+
line_array += ['<script type="text/javascript">']
|
290
|
+
|
291
|
+
line_array += node.lines
|
292
|
+
line_array += ['</script>']
|
293
|
+
line_array += ['<br/>']
|
294
|
+
line_array += ["\n+++\n"]
|
295
|
+
node.lines = line_array
|
296
|
+
end
|
297
|
+
|
298
|
+
def handle_null(node)
|
299
|
+
|
300
|
+
end
|
301
|
+
|
302
|
+
def handle_default(node)
|
303
|
+
node.lines = [ENV_CSS] + node.lines + [DIV_END]
|
304
|
+
end
|
305
|
+
|
293
306
|
end
|
294
307
|
|
295
308
|
|
@@ -95,16 +95,8 @@ module Asciidoctor::LaTeX
|
|
95
95
|
|
96
96
|
def process parent, reader, attrs
|
97
97
|
|
98
|
-
|
99
|
-
|
100
|
-
# Get orginal title if there is one
|
101
|
-
if attrs['title']
|
102
|
-
original_title = attrs['title']
|
103
|
-
attrs['original_title'] = original_title
|
104
|
-
else
|
105
|
-
original_title = nil
|
106
|
-
end
|
107
|
-
|
98
|
+
original_title = attrs['title']
|
99
|
+
attrs['original_title'] = attrs['title']
|
108
100
|
|
109
101
|
# Ensure that role is defined
|
110
102
|
if attrs['role'] == nil
|
@@ -118,15 +110,19 @@ module Asciidoctor::LaTeX
|
|
118
110
|
attrs['role'] = attrs['role'].gsub(/\\/, '')
|
119
111
|
end
|
120
112
|
|
121
|
-
# Determine whether
|
122
|
-
#
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
113
|
+
# Determine whether the block is numbered
|
114
|
+
# Use the option set if present (numbered, no+_number) otherwise
|
115
|
+
# use a default value, e.g. 'box' is not numbered, the others are numbered
|
116
|
+
if !(attrs['options'] =~ /no_number|numbered/)
|
117
|
+
if %w(box).include? role
|
118
|
+
attrs['options'] = 'no_number'
|
119
|
+
else
|
120
|
+
attrs['options'] = 'numbered'
|
121
|
+
end
|
127
122
|
end
|
128
123
|
|
129
124
|
|
125
|
+
# Adjust title according to environment name
|
130
126
|
env_name = role # roles.first # FIXME: roles.first is probably best
|
131
127
|
if %w(equation equationalign chem).include? role
|
132
128
|
attrs['title'] = env_name
|
@@ -134,51 +130,73 @@ module Asciidoctor::LaTeX
|
|
134
130
|
attrs['title'] = 'Listing'
|
135
131
|
elsif role == 'jsxgraph'
|
136
132
|
attrs['title'] = 'JSXGraph'
|
133
|
+
elsif role == 'box'
|
134
|
+
attrs['title'] = ''
|
137
135
|
else
|
138
136
|
attrs['title'] = env_name.capitalize
|
139
137
|
end
|
140
138
|
env_title = attrs['title']
|
141
139
|
|
142
140
|
|
141
|
+
# Creat the block
|
143
142
|
if attrs['role'] == 'code'
|
144
143
|
block = create_block parent, :listing, reader.lines, attrs
|
145
144
|
else
|
146
145
|
block = create_block parent, :environment, reader.lines, attrs
|
147
146
|
end
|
148
147
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
148
|
+
if attrs['options'] =~ /numbered/
|
149
|
+
# THE NUMBERED OPTION
|
150
|
+
# Use same prefix for cross referencing for the
|
151
|
+
# equation_align environment as for the equation
|
152
|
+
# environment so as not to have separate numbering
|
153
|
+
# sequences
|
154
154
|
if env_name == 'equationalign'
|
155
155
|
env_ref_prefix = 'equation'
|
156
156
|
else
|
157
157
|
env_ref_prefix = env_name
|
158
158
|
end
|
159
|
+
# Define caption_num so that we can make references
|
160
|
+
# that display as "(17)", for example
|
161
|
+
# This is where we can set the caption number by hand
|
162
|
+
# once I figure out how to do so.
|
159
163
|
caption_num = parent.document.counter_increment("#{env_ref_prefix}-number", block)
|
160
164
|
attrs['caption-num'] = caption_num
|
161
165
|
caption = "#{caption_num}"
|
166
|
+
# Set the title, e.g., "Theorem 3: Pythagoras" or just "Theorem 3"
|
167
|
+
# depending on whether the user sets a title, .e.g, ".Pythgoras"
|
168
|
+
# in the line preceding "[env.theorem]"
|
162
169
|
if original_title
|
163
170
|
attrs['title'] = "#{env_title} #{caption_num}: #{original_title}"
|
164
171
|
else
|
165
172
|
attrs['title'] = "#{env_title} #{caption_num}."
|
166
173
|
end
|
167
|
-
warn "eb: ".blue + "caption: #{caption}, title = #{attrs['title']}".magenta if $VERBOSE
|
168
174
|
else
|
169
|
-
|
170
|
-
|
175
|
+
# THE NON-NUMBERED OPTION
|
176
|
+
# Set the title, e.g., "Pythagoras" or just "Theorem"
|
177
|
+
# depending on whether the user sets a title, .e.g, ".Pythgoras"
|
178
|
+
# in the line preceding "[env.theorem]"
|
179
|
+
# FIXME: this code is a tad spaghetti-like
|
180
|
+
if original_title
|
181
|
+
if %w(box).include? role
|
182
|
+
attrs['title'] = "#{original_title}"
|
183
|
+
else
|
184
|
+
attrs['title'] = "#{env_title}: #{original_title}"
|
185
|
+
end
|
186
|
+
else
|
187
|
+
attrs['title'] = "#{env_title}"
|
188
|
+
end
|
171
189
|
end
|
172
190
|
|
173
191
|
if attrs['role'] == 'code'
|
174
192
|
caption = nil
|
175
193
|
end
|
176
194
|
|
177
|
-
warn "attributes are now #{attrs}" if $VERBOSE
|
178
|
-
|
179
195
|
block.assign_caption caption
|
180
196
|
if %w(equation equationalign chem).include? role
|
181
197
|
block.title = "#{caption_num}"
|
198
|
+
elsif %w(box).include? role
|
199
|
+
block.title = attrs['title']
|
182
200
|
else
|
183
201
|
block.title = attrs['title']
|
184
202
|
end
|
@@ -22,16 +22,8 @@ output_file = base_name + "out"
|
|
22
22
|
|
23
23
|
input = File.open(input_file, 'r') { |f| f.read }
|
24
24
|
|
25
|
-
puts "input:"
|
26
|
-
puts "-----------------"
|
27
|
-
puts input
|
28
|
-
puts "-----------------\n\n"
|
29
25
|
|
30
26
|
output = Asciidoctor::LaTeX::TeXBlock.process_environments input
|
31
27
|
|
32
|
-
puts "output:"
|
33
|
-
puts "-----------------"
|
34
|
-
puts output
|
35
|
-
puts "-----------------\n\n"
|
36
28
|
|
37
29
|
# File.open(output_file, 'w') {|f| f.write(output) }
|
@@ -49,10 +49,10 @@ module Asciidoctor::LaTeX
|
|
49
49
|
if line.include? '$'
|
50
50
|
line = line.gsub TEX_DOLLAR_RX, TEX_DOLLAR_SUB2
|
51
51
|
end
|
52
|
-
if line.include? '
|
52
|
+
if line.include? '^\\['
|
53
53
|
line = line.gsub '\\[', '+\\['
|
54
54
|
end
|
55
|
-
if line.include? '
|
55
|
+
if line.include? '^\\]'
|
56
56
|
line = line.gsub '\\]', '\\]+'
|
57
57
|
end
|
58
58
|
line
|
data/manual.adoc
CHANGED
@@ -17,7 +17,7 @@ As a demonstration of the current state of this
|
|
17
17
|
project, the file you are looking at, `manual.adoc`,
|
18
18
|
can be rendered into HTML by
|
19
19
|
----
|
20
|
-
$ asciidoctor manual.adoc
|
20
|
+
$ asciidoctor-latex -b html manual.adoc
|
21
21
|
----
|
22
22
|
or can be rendered as a LaTeX file via
|
23
23
|
----
|
@@ -25,7 +25,7 @@ or can be rendered as a LaTeX file via
|
|
25
25
|
# => manual.tex
|
26
26
|
----
|
27
27
|
The `.tex` file can in turn be rendred into pdf via
|
28
|
-
`pdflatex`.
|
28
|
+
`pdflatex` or `xelatex`. We recommend the latter.
|
29
29
|
|
30
30
|
|
31
31
|
Mathematical text in Asciidoc can be written as
|
data/test/examples/adoc/env.adoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
//.env
|
2
2
|
|
3
3
|
[env.theorem]
|
4
4
|
--
|
@@ -6,11 +6,3 @@ The equation $a^2 + b^2 = c^2$
|
|
6
6
|
has infinitely many non-proportional
|
7
7
|
integer solutions.
|
8
8
|
--
|
9
|
-
|
10
|
-
[env.theorem]
|
11
|
-
--
|
12
|
-
The equation $a^n + b^n = c^n$,
|
13
|
-
for $n > 2$, has only trivial
|
14
|
-
integer solutions, where one of
|
15
|
-
the variables is zero.
|
16
|
-
--
|
data/test/examples/adoc/eq.adoc
CHANGED