asciidoctor-latex 1.5.0.dev
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.adoc +22 -0
- data/README.adoc +213 -0
- data/Rakefile +55 -0
- data/bin/asciidoctor-latex +22 -0
- data/data/asciidoc_tex_macros.tex +42 -0
- data/data/preamble_article.tex +45 -0
- data/data/preamble_book.tex +44 -0
- data/lib/asciidoctor-latex.rb +1 -0
- data/lib/asciidoctor/latex.rb +8 -0
- data/lib/asciidoctor/latex/chem.rb +24 -0
- data/lib/asciidoctor/latex/click_block.rb +121 -0
- data/lib/asciidoctor/latex/converter.rb +358 -0
- data/lib/asciidoctor/latex/core_ext/colored_string.rb +35 -0
- data/lib/asciidoctor/latex/dollar.rb +28 -0
- data/lib/asciidoctor/latex/ent_to_uni.rb +17 -0
- data/lib/asciidoctor/latex/environment_block.rb +190 -0
- data/lib/asciidoctor/latex/inject_html.rb +49 -0
- data/lib/asciidoctor/latex/inline_macros.rb +20 -0
- data/lib/asciidoctor/latex/macro_insert.rb +49 -0
- data/lib/asciidoctor/latex/node_processors.rb +695 -0
- data/lib/asciidoctor/latex/prepend_processor.rb +36 -0
- data/lib/asciidoctor/latex/preprocess.rb +37 -0
- data/lib/asciidoctor/latex/tex_block.rb +108 -0
- data/lib/asciidoctor/latex/tex_postprocessor.rb +44 -0
- data/lib/asciidoctor/latex/tex_preprocessor.rb +65 -0
- data/lib/asciidoctor/latex/version.rb +5 -0
- data/manual.adoc +285 -0
- data/rake/cacert.pem +3894 -0
- data/rake/jdk_helper.rb +105 -0
- data/rake/tar-licence +19 -0
- data/rake/tar.rb +38 -0
- data/rspec/README.adoc +45 -0
- data/rspec/a.rb +79 -0
- data/rspec/b.rb +111 -0
- data/rspec/c.rb +121 -0
- data/rspec/data/tex1 +65 -0
- data/rspec/data/tex2 +5 -0
- data/rspec/data/tex2.expect +5 -0
- data/rspec/transform.rb +36 -0
- data/spec/README.adoc +45 -0
- data/spec/a.rb +79 -0
- data/spec/b.rb +111 -0
- data/spec/c.rb +121 -0
- data/spec/data/foo +1 -0
- data/spec/data/lorem +1 -0
- data/spec/data/tex1 +65 -0
- data/spec/data/tex2 +5 -0
- data/spec/data/tex2.expect +5 -0
- data/spec/transform.rb +36 -0
- data/test/examples/adoc/env.adoc +16 -0
- data/test/examples/adoc/eq.adoc +12 -0
- data/test/examples/adoc/zero.adoc +3 -0
- data/test/examples/asciidoc-html/block_open.adoc +17 -0
- data/test/examples/tex/env.tex +132 -0
- data/test/examples/tex/eq.tex +132 -0
- data/test/examples/tex/zero.tex +121 -0
- data/test/html_test.rb +8 -0
- data/test/latex_test.rb +8 -0
- data/test/test_helper.rb +4 -0
- data/test_jc/admonition.adoc +4 -0
- data/test_jc/click.adoc +7 -0
- data/test_jc/env.adoc +31 -0
- data/test_jc/example.adoc +17 -0
- data/test_jc/floating_title.adoc +15 -0
- data/test_jc/image.adoc +84 -0
- data/test_jc/images/frog.jpg +0 -0
- data/test_jc/images/red_frog.jpeg +0 -0
- data/test_jc/images/yellow_frog.jpeg +0 -0
- data/test_jc/listing.adoc +9 -0
- data/test_jc/lists.adoc +20 -0
- data/test_jc/math.adoc +10 -0
- data/test_jc/preamble.adoc +14 -0
- data/test_jc/section-numbered.adoc +9 -0
- data/test_jc/section.adoc +7 -0
- data/test_jc/sidebar.adoc +61 -0
- data/test_jc/verse.adoc +15 -0
- data/try-out/README.adoc +348 -0
- data/try-out/click.adoc +108 -0
- data/try-out/code.adoc +122 -0
- data/try-out/env.adoc +139 -0
- data/try-out/eq-latex.adoc +37 -0
- data/try-out/eq-stem.adoc +41 -0
- data/try-out/eqno-latex.adoc +120 -0
- data/try-out/math_article.adoc +138 -0
- data/try-out/pyth-stem.adoc +52 -0
- data/try-out/theorem-latex.adoc +50 -0
- data/try-out/xref-equations.adoc +28 -0
- metadata +210 -0
data/rspec/data/tex1
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
==== The tautological and Hopf bundles
|
2
|
+
|
3
|
+
Projective space may also be viewed as the quotient under
|
4
|
+
a group action. Consider a space $Y$ and a group $G$. An
|
5
|
+
action of $G$ on $Y$ is a map $G\times Y \map Y$,
|
6
|
+
written $(g,y) \mapsto g.y$, that satisfies $e.y = y$ for all
|
7
|
+
$y$, where $e$ is the neutral element, and $g.(h.y) = (gh).y$
|
8
|
+
for all $g,h \in G$, $y \in Y$. The _orbit_ of point $y \in Y$
|
9
|
+
under the action of $G$ is the set $G.y = \sett{g.y}{ g \in G}$.
|
10
|
+
The quotient of $Y$ by $G$, written $Y/G$, is the set of orbits.
|
11
|
+
Note that $Y/G$ is just the set of equivalence classes of elements
|
12
|
+
of $Y$ under the relation $y' \sim y$ if there is an element $g \in G$
|
13
|
+
such that $y' = g.y$.
|
14
|
+
|
15
|
+
Returning to the construction of projective space,
|
16
|
+
the map
|
17
|
+
$(\lambda, Z) \mapsto \lambda Z$
|
18
|
+
defines an
|
19
|
+
action of the group $\CC^*$ on
|
20
|
+
$\CC^{n+1} - \set{0}$, and
|
21
|
+
\[
|
22
|
+
\CP^n = (\CC^{n+1} - \set{0})\big/\CC^*
|
23
|
+
\]
|
24
|
+
is the quotient. If $p: \CC^{n+1} - \set{0} \map \CP^n$
|
25
|
+
is the projection map, then the set
|
26
|
+
\[
|
27
|
+
p^{-1}([Z]) = \set{ Z \in [Z]} \cong \CC^*,
|
28
|
+
\]
|
29
|
+
the so-called
|
30
|
+
_fiber_ of $p$ at $[Z]$ can be identified with $\CC^*$.
|
31
|
+
This leads to the important diagram
|
32
|
+
\[
|
33
|
+
\CC^* \map \CC^{n+1} - \set{0} \mapright{p} \CP^n,
|
34
|
+
\]
|
35
|
+
which defines a $\CC^*$ bundle over $\CP^n$ called the
|
36
|
+
_tautological bundle_.
|
37
|
+
It plays a key role in the theory of projective varieties.
|
38
|
+
|
39
|
+
FIG
|
40
|
+
|
41
|
+
Consider now the unit sphere
|
42
|
+
\[
|
43
|
+
S^{2n+1} = \sett{ Z \in \CC^{n+1} } { ||Z|| = 1 }.
|
44
|
+
\]
|
45
|
+
It is stable under the action of unit circle subgroup
|
46
|
+
\[
|
47
|
+
U = \sett{ \lambda \in \CC}{ |\lambda| = 1 }.
|
48
|
+
\]
|
49
|
+
The natural map
|
50
|
+
\[
|
51
|
+
S^{2n+1} \map \CC^{n+1} - \set{0}
|
52
|
+
\]
|
53
|
+
restricts ot a map of quotient spaces
|
54
|
+
\[
|
55
|
+
S^{2n+1}/U \map (\CC^{n+1} - \set{0})/\CC^*,
|
56
|
+
\]
|
57
|
+
and it is easy to see that this map is an isomorphism.
|
58
|
+
This gives a second presentation of projective space
|
59
|
+
as the quotient of a sphere, and it leads to the famous
|
60
|
+
_Hopf fibration_,
|
61
|
+
\[
|
62
|
+
S^1 \map S^{2n+1} \mapright{h} \CP^n.
|
63
|
+
\]
|
64
|
+
The Hopf map is, by the way, the generator of the homotopy
|
65
|
+
group $\pi_3(S^2)$.
|
data/rspec/data/tex2
ADDED
data/rspec/transform.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# TEX_DOLLAR_SUB = '\1latexmath:[\2]\3'
|
2
|
+
|
3
|
+
module Transform
|
4
|
+
|
5
|
+
# Map $...$ to stem:[...]
|
6
|
+
# Map $...$ to \( ... \)
|
7
|
+
|
8
|
+
|
9
|
+
TEX_DOLLAR_RX = /(^|\s|\()\$(.*?)\$($|\s|\)|,|\.)/
|
10
|
+
TEX_DOLLAR_SUB = '\1\\\(\2\\\)\3'
|
11
|
+
TEX_DOLLAR_SUB2 = '\1latexmath:[\2]\3'
|
12
|
+
|
13
|
+
$fixmath = lambda { |x| x.gsub TEX_DOLLAR_RX, TEX_DOLLAR_SUB }
|
14
|
+
$fixmath2 = lambda { |x| x.gsub TEX_DOLLAR_RX, TEX_DOLLAR_SUB2 }
|
15
|
+
|
16
|
+
$identity = lambda { |x| x }
|
17
|
+
|
18
|
+
def self.read_string in_file
|
19
|
+
return File.open(in_file, 'r') { |f| f.read }
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.map_string str, transformer
|
23
|
+
return transformer.call str
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.map_file in_file, out_file, transform_string
|
27
|
+
|
28
|
+
input = File.open(in_file, 'r') { |f| f.read }
|
29
|
+
output = transform_string.call(input)
|
30
|
+
File.open(out_file, 'w' ) { |f| f.write output }
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
end
|
data/spec/README.adoc
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
== rspec
|
2
|
+
|
3
|
+
At the moment there is just one set of tests, in
|
4
|
+
`transform_spec.rb`, which test a tiny piece
|
5
|
+
of a small part of the code. This is the
|
6
|
+
`gsub` call in the `TeXPreprocessor`.
|
7
|
+
|
8
|
+
I had been having some trouble with
|
9
|
+
instances of $ ... $ not being mapped
|
10
|
+
properly, and I think I've narrowd it down
|
11
|
+
to a few small edge cases -- I am trying
|
12
|
+
to collect these in the wild, as welll
|
13
|
+
as t imagine them.
|
14
|
+
|
15
|
+
I've organized the files as `a.rb`. `b.rb`,
|
16
|
+
and `c.rb`. The first two pass, the third
|
17
|
+
deos not. The strings that I try the
|
18
|
+
transformer on in `c.rb` are only a few
|
19
|
+
characters long.
|
20
|
+
|
21
|
+
=== Help
|
22
|
+
|
23
|
+
@mojavelinux, my knowledge of regular expressions is not
|
24
|
+
so great -- could you look at this?
|
25
|
+
|
26
|
+
Please note that I had changed the output regular expression:
|
27
|
+
|
28
|
+
----
|
29
|
+
TEX_DOLLAR_SUB = '\1\\\(\2\\\)\3'
|
30
|
+
TEX_DOLLAR_SUB2 = '\1latexmath:[\2]\3'
|
31
|
+
----
|
32
|
+
|
33
|
+
using the first, rather than the second, which is your original. I don't
|
34
|
+
think that that is the problem -- it must be in the
|
35
|
+
recognizer,
|
36
|
+
|
37
|
+
----
|
38
|
+
TEX_DOLLAR_RX = /(^|\s|\()\$(.*?)\$($|\s|\)|,|\.)/
|
39
|
+
----
|
40
|
+
|
41
|
+
We can change back to (2), though I must say I like
|
42
|
+
(1) better since it parallels `\[ ... \]` and is more
|
43
|
+
succinct. Is there any difference in their function or
|
44
|
+
behavior _vis a vis_ Asciidoctor, i.e., in being
|
45
|
+
protected from substitution?
|
data/spec/a.rb
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'asciidoctor'
|
2
|
+
require 'asciidoctor/latex'
|
3
|
+
require 'asciidoctor/latex/core_ext/colored_string'
|
4
|
+
require_relative 'transform'
|
5
|
+
|
6
|
+
include Transform
|
7
|
+
|
8
|
+
VERBOSE = true
|
9
|
+
|
10
|
+
def compare_transform input, expected_output, transfomer
|
11
|
+
|
12
|
+
warn ' ' if VERBOSE
|
13
|
+
warn input.blue if VERBOSE
|
14
|
+
warn expected_output.cyan if VERBOSE
|
15
|
+
output = Transform.map_string input, transfomer
|
16
|
+
warn output.blue if VERBOSE
|
17
|
+
warn ' ' if VERBOSE
|
18
|
+
expect(output).to eq expected_output
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe Transform do
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'reads the contents of a file into a string (A1)' do
|
30
|
+
|
31
|
+
contents = Transform.read_string 'data/foo'
|
32
|
+
expect(contents.chomp).to eq 'foo.bar'
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'implements the identity transform on strings (A2)' do
|
37
|
+
|
38
|
+
input = 'foo'
|
39
|
+
output = Transform.map_string input, $identity
|
40
|
+
expect(input).to eq output
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'maps dollar-delimted strings to escapa-paren delimited strings (A3)' do
|
45
|
+
|
46
|
+
input = 'ha ha ha $a^2 = 1$ ho ho ho'
|
47
|
+
expected_output = 'ha ha ha \\(a^2 = 1\\) ho ho ho'
|
48
|
+
compare_transform input, expected_output, $fixmath
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'maps dollar-delimted strings to latexmath-delimited strings' do
|
53
|
+
|
54
|
+
input = 'ha ha ha $a^2 = 1$ ho ho ho'
|
55
|
+
expected_output = 'ha ha ha latexmath:[a^2 = 1] ho ho ho'
|
56
|
+
compare_transform input, expected_output, $fixmath2
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
|
61
|
+
it 'reads strings from files' do
|
62
|
+
|
63
|
+
input = Transform.read_string 'data/lorem'
|
64
|
+
expect(input.length).to be > 0
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'implements the identity transform on files' do
|
69
|
+
|
70
|
+
Transform.map_file 'data/lorem', 'data/tmp', $identity
|
71
|
+
original_content = Transform.read_string 'data/lorem'
|
72
|
+
transformed_content = Transform.read_string 'data/tmp'
|
73
|
+
expect(transformed_content).to eq original_content
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
end
|
data/spec/b.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'asciidoctor'
|
2
|
+
require 'asciidoctor/latex'
|
3
|
+
require 'asciidoctor/latex/core_ext/colored_string'
|
4
|
+
require_relative 'transform'
|
5
|
+
|
6
|
+
include Transform
|
7
|
+
|
8
|
+
VERBOSE = true
|
9
|
+
|
10
|
+
def compare_transform input, expected_output, transfomer
|
11
|
+
|
12
|
+
warn ' ' if VERBOSE
|
13
|
+
warn input.blue if VERBOSE
|
14
|
+
warn expected_output.cyan if VERBOSE
|
15
|
+
output = Transform.map_string input, transfomer
|
16
|
+
warn output.blue if VERBOSE
|
17
|
+
warn ' ' if VERBOSE
|
18
|
+
expect(output).to eq expected_output
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe Transform do
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
it 'handles the edge case of a dollar sign at the beginning of the line (A)' do
|
32
|
+
|
33
|
+
input = '$a^2 = 1$ ho ho ho'
|
34
|
+
expected_output = '\\(a^2 = 1\\) ho ho ho'
|
35
|
+
compare_transform input, expected_output, $fixmath
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'handles the edge case of a dollar sign at the beginning of the line in latexmath (B)' do
|
40
|
+
|
41
|
+
input = '$a^2 = 1$ ho ho ho'
|
42
|
+
expected_output = 'latexmath:[a^2 = 1] ho ho ho'
|
43
|
+
compare_transform input, expected_output, $fixmath2
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'handles the edge case of a dollar sign at the end of the line (C)' do
|
48
|
+
|
49
|
+
input = 'ha ha ha $a^2 = 1$'
|
50
|
+
expected_output = 'ha ha ha \\(a^2 = 1\\)'
|
51
|
+
compare_transform input, expected_output, $fixmath
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'handles the edge case of a dollar sign at the end of the line wth latexmath (D)' do
|
56
|
+
|
57
|
+
input = 'ha ha ha $a^2 = 1$'
|
58
|
+
expected_output = 'ha ha ha latexmath:[a^2 = 1]'
|
59
|
+
compare_transform input, expected_output, $fixmath2
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'handles the edge case of a dollar sign at the beginnng and end of the line (E)' do
|
64
|
+
|
65
|
+
input = '$a^2 = 1$'
|
66
|
+
expected_output = '\\(a^2 = 1\\)'
|
67
|
+
compare_transform input, expected_output, $fixmath
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'handles the edge case of a dollar sign at the beginnng and end of the line plus a little space in mode 2 (F)' do
|
72
|
+
|
73
|
+
input = ' $a^2 = 1 $'
|
74
|
+
expected_output = ' latexmath:[a^2 = 1]'
|
75
|
+
compare_transform input, expected_output, $fixmath2
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'handles the edge case of a dollar sign at the beginnng and end of the line in mode 2 (G)' do
|
80
|
+
|
81
|
+
input = '$a^2 = 1$'
|
82
|
+
expected_output = 'latexmath:[a^2 = 1]'
|
83
|
+
compare_transform input, expected_output, $fixmath2
|
84
|
+
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
|
94
|
+
=begin
|
95
|
+
it 'applies the fixmath transform to files to files' do
|
96
|
+
|
97
|
+
Transform.map_file 'data/tex2', 'data/tmp', $fixmath
|
98
|
+
|
99
|
+
original_content = Transform.read_string 'data/tex2'
|
100
|
+
transformed_content = Transform.read_string 'data/tmp'
|
101
|
+
expected_content = Transform.read_string 'data/tex2.expect'
|
102
|
+
|
103
|
+
warn ('|||'+original_content+'|||').blue if VERBOSE
|
104
|
+
warn ('|||'+transformed_content+'|||').cyan if VERBOSE
|
105
|
+
warn ('|||'+expected_content+'|||').blue if VERBOSE
|
106
|
+
expect(transformed_content).to eq expected_content
|
107
|
+
end
|
108
|
+
=end
|
109
|
+
|
110
|
+
|
111
|
+
end
|
data/spec/c.rb
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
require 'asciidoctor'
|
2
|
+
require 'asciidoctor/latex'
|
3
|
+
require 'asciidoctor/latex/core_ext/colored_string'
|
4
|
+
require_relative 'transform'
|
5
|
+
|
6
|
+
include Transform
|
7
|
+
|
8
|
+
VERBOSE = true
|
9
|
+
|
10
|
+
def compare_transform input, expected_output, transfomer
|
11
|
+
|
12
|
+
warn ' ' if VERBOSE
|
13
|
+
warn input.blue if VERBOSE
|
14
|
+
warn expected_output.cyan if VERBOSE
|
15
|
+
output = Transform.map_string input, transfomer
|
16
|
+
warn output.blue if VERBOSE
|
17
|
+
warn ' ' if VERBOSE
|
18
|
+
expect(output).to eq expected_output
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
describe Transform do
|
24
|
+
|
25
|
+
before :each do
|
26
|
+
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
it 'maps the text "$x$" correctly (A)' do
|
31
|
+
|
32
|
+
input = '$x$'
|
33
|
+
expected_output = '\(x\)'
|
34
|
+
compare_transform input, expected_output, $fixmath
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'maps the text "$x$?" correctly (B)' do
|
39
|
+
|
40
|
+
input = '$x$?'
|
41
|
+
expected_output = '\(x\)?'
|
42
|
+
compare_transform input, expected_output, $fixmath
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'maps the text "$x$-axis" correctly (C)' do
|
47
|
+
|
48
|
+
input = '$x$?-axis'
|
49
|
+
expected_output = '\(x\)-axis'
|
50
|
+
compare_transform input, expected_output, $fixmath
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'maps the text "$Fe^{3+}$" correctly (D)' do
|
55
|
+
|
56
|
+
input = '$Fe^{3+}$'
|
57
|
+
expected_output = '\(Fe^{3+}\)'
|
58
|
+
compare_transform input, expected_output, $fixmath
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'maps the text "$Cr^{+2}$ $Fe^{3+}$" correctly (E)' do
|
63
|
+
|
64
|
+
input = '$Cr^{+2}$ $Fe^{3+}$'
|
65
|
+
expected_output = '\(Cr^{+2}\) \(Fe^{3+}\)'
|
66
|
+
compare_transform input, expected_output, $fixmath
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'maps the text "$\pi:U^+ \map U$" correctly (E)' do
|
71
|
+
|
72
|
+
input = '$\pi:U^+ \map U$'
|
73
|
+
expected_output = '\(\pi:U^+ \map U\)'
|
74
|
+
compare_transform input, expected_output, $fixmath
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'maps the text "$\pi^{-1}(U) = U^+ \cup U^-" correctly (E)' do
|
79
|
+
|
80
|
+
input = '$\pi^{-1}(U) = U^+ \cup U^-$'
|
81
|
+
expected_output = '\(\pi^{-1}(U) = U^+ \cup U^-\)'
|
82
|
+
compare_transform input, expected_output, $fixmath
|
83
|
+
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'maps the text "Then $\pi^{-1}(U) = U^+ \cup U^-$ is the disjoint union of two\nopen sets and $\pi:U^+ \map U$ is a local coordinate." correctly (E)' do
|
87
|
+
|
88
|
+
input = 'Then $\pi^{-1}(U) = U^+ \cup U^-$ is the disjoint union of two\nopen sets and $\pi:U^+ \map U$ is a local coordinate.'
|
89
|
+
expected_output = 'Then \(\pi^{-1}(U) = U^+ \cup U^-\) is the disjoint union of two\nopen sets and \(\pi:U^+ \map U\) is a local coordinate.'
|
90
|
+
compare_transform input, expected_output, $fixmath
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
it 'parses a complicated expression correctly (1)' do
|
95
|
+
|
96
|
+
input = <<EOF
|
97
|
+
iLet $a$ be a point of the set $\\CC - B$ let $U$ be a neighborhood of $a$ in
|
98
|
+
that set. Then $\pi^{-1}(U) = U^+ \\cup U^-$ is the disjoint union of two
|
99
|
+
open sets and $\pi:U^+ \map U$ is a local coordinate.
|
100
|
+
EOF
|
101
|
+
|
102
|
+
expected_output = <<EOF
|
103
|
+
Let \(a\) be a point of the set \(\\CC - B\) let \(U\) be a neighborhood of \(a\) in
|
104
|
+
that set. Then \(pi^{-1}(U) = U^+ \\cup U^-\) is the disjoint union of two
|
105
|
+
open sets and \(\pi:U^+ \map U\)is a local coordinate.
|
106
|
+
EOF
|
107
|
+
|
108
|
+
compare_transform input, expected_output, $fixmath
|
109
|
+
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'maps the text "Call these $y_+$ and $y_-$." correctly (E)' do
|
113
|
+
|
114
|
+
input = 'Call these $y_+$ and $y_-$.'
|
115
|
+
expected_output = 'Call these \(y_+\) and \(y_-\).'
|
116
|
+
compare_transform input, expected_output, $fixmath
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
|
121
|
+
end
|