latex_to_png 0.0.2 → 0.0.3
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/Gemfile +3 -3
- data/README.md +11 -3
- data/latex_to_png.gemspec +2 -0
- data/lib/latex_to_png/version.rb +1 -1
- data/lib/latex_to_png.rb +73 -57
- data/lib/templates/equation.erb +4 -2
- data/spec/convert_spec.rb +31 -48
- data/spec/spec_helper.rb +2 -2
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2343b421ba8305388e395e8ec3f072ad0d36005d
|
4
|
+
data.tar.gz: 5ed7548a0e922fcca88a2d2f8c86d32b025c460a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ba388cc7b822b3849cfbbed26e5db5881181d40d2042b4ac2abfd90d349fdb9b9edde12949a10d05444fb03d3d8a8284ed5221253f5f4e21c29a64ba1d2fdcf
|
7
|
+
data.tar.gz: bb8a3588cb7b6cb329b5b5af9eba84fe3ccb88108969787cff9c9d9dfd7c84ab26f0dd6804521160ee1ed6d77c50f80504112405f3356f6d32556d1e3bdd63b8
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -19,7 +19,15 @@ Or install it yourself as:
|
|
19
19
|
## External Dependencies
|
20
20
|
|
21
21
|
sudo apt-get install imagemagick libmagickcore-dev
|
22
|
-
|
22
|
+
|
23
23
|
sudo apt-get install texlive texlive-latex-extra
|
24
|
-
|
25
|
-
sudo apt-get install texinfo
|
24
|
+
|
25
|
+
sudo apt-get install texinfo
|
26
|
+
|
27
|
+
|
28
|
+
## From source
|
29
|
+
|
30
|
+
```
|
31
|
+
$ cd latex_to_png
|
32
|
+
$ gem build
|
33
|
+
```
|
data/latex_to_png.gemspec
CHANGED
data/lib/latex_to_png/version.rb
CHANGED
data/lib/latex_to_png.rb
CHANGED
@@ -1,8 +1,6 @@
|
|
1
1
|
require "latex_to_png/version"
|
2
2
|
require 'tempfile'
|
3
3
|
require "erb"
|
4
|
-
require 'ostruct'
|
5
|
-
|
6
4
|
|
7
5
|
|
8
6
|
#precisa do programa texi2dvi
|
@@ -23,85 +21,103 @@ begin
|
|
23
21
|
end
|
24
22
|
rescue Exception => e
|
25
23
|
puts e
|
26
|
-
# raise Gem::Installer::ExtensionBuildError
|
24
|
+
# raise Gem::Installer::ExtensionBuildError
|
27
25
|
end
|
28
26
|
|
29
27
|
require "latex_to_png/sizes"
|
30
28
|
|
31
29
|
module LatexToPng
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
ROOT_LIB = File.dirname __FILE__
|
36
30
|
|
31
|
+
Formula = Struct.new(:formula)
|
37
32
|
|
38
33
|
class Convert
|
39
34
|
|
40
|
-
attr_accessor
|
35
|
+
attr_accessor :filepath
|
41
36
|
|
42
|
-
|
43
|
-
size = Sizes.invert[size_in_pixels]
|
44
|
-
if size.nil?
|
45
|
-
size_in_points "#{size_in_pixels.to_i + 1}px"
|
37
|
+
class << self
|
46
38
|
|
47
|
-
|
48
|
-
|
39
|
+
def template
|
40
|
+
return @doc if @doc
|
41
|
+
@doc = ERB.new(File.read("#{ File.dirname __FILE__}/templates/equation.erb"))
|
42
|
+
@doc
|
49
43
|
end
|
44
|
+
|
50
45
|
end
|
51
46
|
|
52
|
-
|
53
|
-
|
54
|
-
@filename = opts[:filename] if opts[:filename]
|
55
|
-
@basename = File.basename opts[:filename].split(".")[0] if opts[:filename]
|
56
|
-
@dirname = File.dirname opts[:filename] if opts[:filename]
|
47
|
+
#or formula or filepath
|
48
|
+
def initialize opts={ filepath: nil, formula: nil, size: nil }
|
57
49
|
|
50
|
+
@filepath = opts[:filepath] if opts[:filepath]
|
58
51
|
@size = (opts[:size] || 10).to_i
|
59
|
-
@template_path = opts[:template_path] if opts[:template_path]
|
60
52
|
@formula = opts[:formula] if opts[:formula]
|
53
|
+
|
61
54
|
end
|
62
55
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
doc = doc.result(infos.instance_eval { binding })
|
68
|
-
|
69
|
-
tmp_file = Tempfile.new("formula")
|
70
|
-
tmp_file.write doc
|
71
|
-
tmp_file.close
|
72
|
-
# debugger
|
73
|
-
@filename = tmp_file.path
|
74
|
-
else
|
75
|
-
@filename
|
76
|
-
end
|
56
|
+
def size_in_points size_in_pixels
|
57
|
+
size = Sizes.invert[size_in_pixels]
|
58
|
+
return (size.nil?)? size_in_points("#{size_in_pixels.to_i + 1}px") : size
|
59
|
+
end
|
77
60
|
|
78
|
-
|
79
|
-
dirname = File.dirname @filename
|
80
|
-
basename = @filename.gsub( /.tex$/,'')
|
81
|
-
density = ((300/10)*@size).to_i
|
61
|
+
def from_formula formula, size
|
82
62
|
|
83
|
-
%x(cd #{dirname}; latex -halt-on-error #{@filename} >> convert_#{name}.log)
|
84
|
-
%x(cd #{dirname}; dvips -q* -E #{name}.dvi >> convert_#{name}.log)
|
85
|
-
%x(cd #{dirname}; convert -density #{density}x#{density} #{name}.ps #{name}.png >> convert_#{name}.log)
|
86
|
-
%x(cd #{dirname}; rm -f #{name}.dvi #{name}.log #{name}.aux #{name}.ps)
|
87
|
-
png_path = "#{@filename.gsub(/.tex$/,"")}.png"
|
88
63
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
raise StandardError
|
95
|
-
end
|
64
|
+
tmp_file = Tempfile.new("formula")
|
65
|
+
tmp_file.write mount_tex(formula)
|
66
|
+
tmp_file.close
|
67
|
+
# debugger
|
68
|
+
filepath = tmp_file.path
|
96
69
|
|
97
|
-
|
70
|
+
convert(filepath,size )
|
98
71
|
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
72
|
+
end
|
73
|
+
|
74
|
+
def mount_tex formula
|
75
|
+
self.class.template.result(Formula.new( formula ).instance_eval { binding })
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
def from_estatic filepath, size
|
80
|
+
|
81
|
+
convert(filepath, size )
|
82
|
+
end
|
83
|
+
|
84
|
+
def convert filepath, size,
|
85
|
+
name = filepath.split("/").last.split(".").first
|
86
|
+
dirname = File.dirname filepath
|
87
|
+
density = ((300/10)*size).to_i
|
88
|
+
# debugger
|
89
|
+
#convert for .dvi
|
90
|
+
# dvi to .ps
|
91
|
+
# .ps to .png "q*" option is to run quietly
|
92
|
+
|
93
|
+
%x(
|
94
|
+
cd #{dirname}; latex -halt-on-error #{filepath} &&
|
95
|
+
dvips -q* -E #{name}.dvi &&
|
96
|
+
convert -density #{density}x#{density} #{name}.ps #{name}.png 1>&2 > /dev/null
|
97
|
+
)
|
98
|
+
|
99
|
+
Thread.new {
|
100
|
+
%x(cd #{dirname}; rm -f #{name}.dvi #{name}.log #{name}.aux #{name}.ps &)
|
101
|
+
}.run()
|
102
|
+
|
103
|
+
png_path = "#{filepath.gsub(/.tex$/,"")}.png"
|
104
|
+
|
105
|
+
if File.exist?(png_path)
|
106
|
+
return open(png_path)
|
107
|
+
else
|
108
|
+
raise StandardError("Image not generated")
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
def to_png
|
114
|
+
if @formula
|
115
|
+
from_formula @formula, @size
|
116
|
+
|
117
|
+
else
|
118
|
+
from_estatic @filepath, @size
|
119
|
+
end
|
120
|
+
end
|
104
121
|
|
105
122
|
end
|
106
123
|
end
|
107
|
-
|
data/lib/templates/equation.erb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
|
-
\documentclass{
|
1
|
+
\documentclass{standalone}
|
2
|
+
\usepackage[active,tightpage]{preview}
|
2
3
|
\usepackage{amsmath}
|
3
4
|
\usepackage{cancel}
|
4
5
|
\usepackage{amsfonts}
|
5
6
|
\usepackage{amssymb}
|
6
7
|
\usepackage{amsthm}
|
7
8
|
\usepackage{mathtools}
|
8
|
-
\pagestyle{empty}
|
9
9
|
\begin{document}
|
10
|
+
\begin{preview}
|
10
11
|
$$<%= formula %>$$
|
12
|
+
\end{preview}
|
11
13
|
\end{document}
|
data/spec/convert_spec.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
describe "" do
|
3
|
+
describe "" do
|
4
4
|
|
5
5
|
after(:each) do
|
6
|
-
|
6
|
+
%x(rm -Rf #{ROOT_DIR_SPEC}/support/*.png)
|
7
7
|
end
|
8
8
|
|
9
9
|
context "convert.size_in_points" do
|
10
|
-
it "com valor exato" do
|
11
|
-
|
12
|
-
image = LatexToPng::Convert.new(
|
13
|
-
|
10
|
+
it "com valor exato" do
|
11
|
+
|
12
|
+
image = LatexToPng::Convert.new(filepath: "#{ROOT_DIR_SPEC}/support/flux.tex")
|
13
|
+
|
14
14
|
expect(image.size_in_points("12px")).to eq "9pt"
|
15
15
|
|
16
16
|
end
|
17
17
|
|
18
|
-
it "com valor inexato pontos arredondadndo" do
|
19
|
-
|
20
|
-
image = LatexToPng::Convert.new(
|
21
|
-
|
18
|
+
it "com valor inexato pontos arredondadndo" do
|
19
|
+
|
20
|
+
image = LatexToPng::Convert.new(filepath: "#{ROOT_DIR_SPEC}/support/flux.tex")
|
21
|
+
|
22
22
|
expect(image.size_in_points("18px")).to eq "14pt"
|
23
23
|
|
24
24
|
end
|
@@ -27,97 +27,80 @@ describe "" do
|
|
27
27
|
end
|
28
28
|
|
29
29
|
|
30
|
-
it "
|
31
|
-
|
32
|
-
image = LatexToPng::Convert.new(filename: "#{ROOT_DIR_SPEC}/support/flux.tex")
|
33
|
-
|
34
|
-
expect(image.dirname).to eq "#{ROOT_DIR_SPEC}/support"
|
35
|
-
expect(image.basename).to eq "flux"
|
30
|
+
it "filepath flux.tex" do
|
36
31
|
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
it "dirname do arquivo" do
|
41
|
-
|
42
|
-
image = LatexToPng::Convert.new(filename: "#{ROOT_DIR_SPEC}/support/flux.tex")
|
32
|
+
image = LatexToPng::Convert.new(filepath: "#{ROOT_DIR_SPEC}/support/flux.tex")
|
43
33
|
image = image.to_png
|
44
34
|
expect(image.class).to eq File
|
45
35
|
|
46
|
-
File.delete image.path
|
47
36
|
end
|
48
37
|
|
49
|
-
it "
|
50
|
-
|
51
|
-
image = LatexToPng::Convert.new(
|
38
|
+
it "filepath cancel_example.tex" do
|
39
|
+
|
40
|
+
image = LatexToPng::Convert.new(filepath: "#{ROOT_DIR_SPEC}/support/cancel_example.tex")
|
52
41
|
image = image.to_png
|
53
42
|
|
54
43
|
expect(image.class).to eq File
|
55
|
-
File.delete image.path
|
56
44
|
|
57
45
|
end
|
58
|
-
|
59
|
-
context "formula com usando template" do
|
60
46
|
|
61
|
-
|
62
|
-
|
47
|
+
context "formula usando template" do
|
48
|
+
|
49
|
+
it "fração simples" do
|
50
|
+
|
63
51
|
image = LatexToPng::Convert.new(formula: "\\frac{a}{b}")
|
64
52
|
image = image.to_png
|
65
53
|
|
66
54
|
expect(image.class).to eq File
|
67
55
|
expect(File.exist? image).to eq true
|
68
56
|
|
69
|
-
File.delete image.path
|
70
57
|
end
|
71
58
|
|
72
|
-
it "fração com \\cdot" do
|
73
|
-
|
59
|
+
it "fração com \\cdot" do
|
60
|
+
|
74
61
|
image = LatexToPng::Convert.new(formula: "\\frac{a}{b}\\cdot\\frac{b}{a}")
|
75
62
|
image = image.to_png
|
76
63
|
|
77
64
|
expect(image.class).to eq File
|
78
65
|
expect(File.exist? image).to eq true
|
79
66
|
|
80
|
-
File.delete image.path
|
81
67
|
end
|
82
68
|
|
83
|
-
it "fração com \\cdot e espaços" do
|
84
|
-
|
69
|
+
it "fração com \\cdot e espaços" do
|
70
|
+
|
85
71
|
image = LatexToPng::Convert.new(formula: "\\frac{a}{b} \\cdot \\frac{b}{a}")
|
86
72
|
image = image.to_png
|
87
73
|
|
88
74
|
expect(image.class).to eq File
|
89
75
|
expect(File.exist? image).to eq true
|
90
76
|
|
91
|
-
File.delete image.path
|
92
77
|
end
|
93
78
|
|
94
|
-
it "fração com \\cdot e espaços e tab" do
|
95
|
-
|
79
|
+
it "fração com \\cdot e espaços e tab" do
|
80
|
+
|
96
81
|
image = LatexToPng::Convert.new(formula: "\\frac{a}{b} \\cdot \\frac{b}{a}")
|
97
82
|
image = image.to_png
|
98
83
|
|
99
84
|
expect(image.class).to eq File
|
100
85
|
expect(File.exist? image).to eq true
|
101
86
|
|
102
|
-
File.delete image.path
|
103
87
|
end
|
104
88
|
|
105
|
-
it "fração com tamanho de fonte" do
|
106
|
-
|
89
|
+
it "fração com tamanho de fonte" do
|
90
|
+
|
107
91
|
image = LatexToPng::Convert.new(formula: "\\frac{a}{b}", size_in_pixels: "19px")
|
108
92
|
image = image.to_png
|
109
93
|
|
110
94
|
expect(image.class).to eq File
|
111
95
|
expect(File.exist? image).to eq true
|
112
96
|
|
113
|
-
# File.delete image.path
|
114
97
|
end
|
115
98
|
|
116
|
-
it "insstrução inexistente como \\blabla" do
|
117
|
-
|
99
|
+
it "insstrução inexistente como \\blabla" do
|
100
|
+
|
118
101
|
image = LatexToPng::Convert.new(formula: "\\blabla")
|
119
|
-
expect{image.to_png}.to raise_error
|
102
|
+
expect{image.to_png}.to raise_error(StandardError)
|
120
103
|
end
|
121
104
|
|
122
105
|
end
|
123
|
-
end
|
106
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: latex_to_png
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- luizamboni
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: Conversor de documentos Latex em imagens, via shell script
|
42
56
|
email:
|
43
57
|
- luizamboni2002@hotmail.com
|
@@ -88,7 +102,7 @@ requirements:
|
|
88
102
|
- dvips
|
89
103
|
- imageMagik
|
90
104
|
rubyforge_project:
|
91
|
-
rubygems_version: 2.4.
|
105
|
+
rubygems_version: 2.4.8
|
92
106
|
signing_key:
|
93
107
|
specification_version: 4
|
94
108
|
summary: Conversor de documentos Latex em imagens
|