dsl-latex-simple 0.0.1
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/.gitignore +17 -0
- data/Gemfile +5 -0
- data/LICENSE.txt +22 -0
- data/README.md +32 -0
- data/Rakefile +50 -0
- data/bin/rex +11 -0
- data/dsl-latex-simple.gemspec +21 -0
- data/examples/example.rex +51 -0
- data/examples/example0.rex +96 -0
- data/examples/fibonacci.png +0 -0
- data/examples/mystyle.css +154 -0
- data/examples/section.tex +81 -0
- data/lib/dsl-latex-simple.rb +3 -0
- data/lib/dsl-latex-simple/simple.rb +102 -0
- data/lib/dsl-latex-simple/version.rb +7 -0
- metadata +73 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Casiano Rodriguez Leon
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Dsl::Latex::Simple
|
2
|
+
|
3
|
+
TODO: LaTeX like Ruby DSL
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
It needs latex and latex2html installed
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
gem 'dsl-latex-simple'
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install dsl-latex-simple
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
TODO:
|
24
|
+
1. Now blocks are used only for environments. A block can follow any latex command
|
25
|
+
|
26
|
+
## Contributing
|
27
|
+
|
28
|
+
1. Fork it
|
29
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
30
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
31
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
32
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
|
3
|
+
LATEX2HTMLOPTIONS = '-html_version 4.0,latin1,unicode -contents_in_navigation -style mystyle.css -white -local_icons'
|
4
|
+
|
5
|
+
task :default => :compile
|
6
|
+
|
7
|
+
desc "Uses the example inside lib/dsl-latex-simple/simple.rb"
|
8
|
+
task :compile do
|
9
|
+
sh "ruby -Ilib lib/dsl-latex-simple/simple.rb > examples/simple.tex"
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "compiles example0.rex onto examples/simple.tex"
|
13
|
+
task :c0 do
|
14
|
+
sh "ruby -Ilib bin/rex examples/example0.rex > examples/simple.tex"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "simple.tex -> simple.dvi"
|
18
|
+
task :dvi do
|
19
|
+
sh "latex -output-directory=examples examples/simple.tex"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "simple.tex -> simple.pdf"
|
23
|
+
task :pdf do
|
24
|
+
sh "pdflatex -output-directory=examples examples/simple.tex"
|
25
|
+
end
|
26
|
+
|
27
|
+
task :html do
|
28
|
+
sh "latex2html #{LATEX2HTMLOPTIONS} examples/simple"
|
29
|
+
sh "cp examples/mystyle.css examples/simple/"
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "Have a look to the .dvi generated"
|
33
|
+
task :look do
|
34
|
+
sh "open examples/simple.dvi"
|
35
|
+
end
|
36
|
+
|
37
|
+
task :clean do
|
38
|
+
sh "rm -f examples/*.log examples/*.dvi examples/*.aux examples/*.pdf"
|
39
|
+
sh "rm -fR examples/simple"
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Generates a pygmentize CSS"
|
43
|
+
task :css do
|
44
|
+
sh "pygmentize -f html -S colorful > examples/colorful.css"
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "uninstall the gem"
|
48
|
+
task :uninstall do
|
49
|
+
sh "gem uninstall dsl-latex-simple"
|
50
|
+
end
|
data/bin/rex
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'dsl-latex-simple/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "dsl-latex-simple"
|
8
|
+
gem.version = Dsl::Latex::Simple::VERSION
|
9
|
+
gem.authors = ["Casiano Rodriguez Leon"]
|
10
|
+
gem.email = ["casiano.rodriguez.leon@gmail.com"]
|
11
|
+
gem.description = %q{Ruby DSL for LaTeX}
|
12
|
+
gem.summary = %q{Ruby DSL for LaTeX}
|
13
|
+
gem.homepage = "https://github.com/crguezl/dsl-latex-simple"
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
gem.add_dependency 'highlight'
|
20
|
+
# gem.add_development_dependency 'rspec', '~> 2.7'
|
21
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
documentclass ["12pt"], "article"
|
2
|
+
usepackage ["fleqn"], %q{amsmath}
|
3
|
+
usepackage ["paper=a4paper,dvips,top=1.5cm,left=1.5cm,right=1.5cm,
|
4
|
+
foot=1cm,bottom=1.5cm"], "geometry"
|
5
|
+
|
6
|
+
title "An elementary proof of the reconstruction conjecture"
|
7
|
+
|
8
|
+
author do
|
9
|
+
c('Dagwood Remifa')
|
10
|
+
thanks(%q{Thanks to the editors of this wonderful journal!})
|
11
|
+
c '\\\\'
|
12
|
+
end
|
13
|
+
|
14
|
+
|
15
|
+
date { today }
|
16
|
+
|
17
|
+
start "document" do
|
18
|
+
maketitle
|
19
|
+
start "abstract" do
|
20
|
+
c esc %q{ The reconstruction conjecture states that the multiset of unlabeled
|
21
|
+
vertex-deleted subgraphs of a graph determines the graph, provided it
|
22
|
+
has at least 3 vertices. A version of the problem was first stated
|
23
|
+
by Stanis\l aw Ulam. In this paper, we show that the conjecture can
|
24
|
+
be proved by elementary methods. It is only necessary to integrate
|
25
|
+
the Lenkle potential of the Broglington manifold over the quantum
|
26
|
+
supervacillatory measure in order to reduce the set of possible
|
27
|
+
counterexamples to a small number (less than a trillion). A simple
|
28
|
+
computer program that implements Pipletti's classification theorem
|
29
|
+
for torsion-free Aramaic groups with simplectic socles can then
|
30
|
+
finish the remaining cases. }
|
31
|
+
end
|
32
|
+
c "Hola, hoy son las #{Time.now} y $\\sqrt{2} = #{Math.sqrt(2)}$"
|
33
|
+
start "verbatim" do
|
34
|
+
c "a = 4*5"
|
35
|
+
c "b = 4*5"
|
36
|
+
end
|
37
|
+
|
38
|
+
start %q{equation} do
|
39
|
+
c esc '\Delta =\sum_{i=1}^N w_i (x_i - \bar{x})^2.'
|
40
|
+
end
|
41
|
+
|
42
|
+
c %q{We can give an equation a label so that we can refer to it later.}
|
43
|
+
start %q{equation} do
|
44
|
+
label %q{eq:ising}
|
45
|
+
c %q{E = -J \sum_{i=1}^N s_i s_{i+1},}
|
46
|
+
end
|
47
|
+
c esc %q{Equation~\eqref{eq:ising} expresses the energy of a configuration
|
48
|
+
of spins in the Ising model.\footnote{It is necessary to typeset a
|
49
|
+
file twice to get the counters correct.}}
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
documentclass ["12pt"], "article"
|
2
|
+
usepackage ['pdftex'], %q{graphicx}
|
3
|
+
usepackage %q{html}
|
4
|
+
usepackage ["fleqn"], %q{amsmath}
|
5
|
+
|
6
|
+
# this package is not compatible with l2h
|
7
|
+
#usepackage ["paper=a4paper,dvips,top=1.5cm,left=1.5cm,right=1.5cm, foot=1cm,bottom=1.5cm"], "geometry"
|
8
|
+
|
9
|
+
usepackage ['spanish'], %q{babel}
|
10
|
+
usepackage %q{ucs}
|
11
|
+
usepackage ['utf8x'], %q{inputenc}
|
12
|
+
usepackage 'listings'
|
13
|
+
|
14
|
+
newcommand %q{\lb}, %q{{\langle}}
|
15
|
+
|
16
|
+
title "An elementary proof of the reconstruction conjecture"
|
17
|
+
|
18
|
+
author do
|
19
|
+
c('Dagwood Remifa')
|
20
|
+
thanks(%q{Thanks to the editors of this wonderful journal!})
|
21
|
+
c '\\\\'
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
date { today }
|
26
|
+
|
27
|
+
start "document" do
|
28
|
+
maketitle
|
29
|
+
start "abstract" do
|
30
|
+
c esc %q{ The reconstruction conjecture states that the multiset of unlabeled
|
31
|
+
vertex-deleted subgraphs of a graph determines the graph, provided it
|
32
|
+
has at least 3 vertices. A version of the problem was first stated
|
33
|
+
by Stanislaw Ulam. In this paper, we show that the conjecture can
|
34
|
+
be proved by elementary methods. It is only necessary to integrate
|
35
|
+
the Lenkle potential of the Broglington manifold over the quantum
|
36
|
+
supervacillatory measure in order to reduce the set of possible
|
37
|
+
counterexamples to a small number (less than a trillion). A simple
|
38
|
+
computer program that implements Pipletti's classification theorem
|
39
|
+
for torsion-free Aramaic groups with simplectic socles can then
|
40
|
+
finish the remaining cases. }
|
41
|
+
end
|
42
|
+
c "Hola, hoy son las #{Time.now} y $\\sqrt{2} = #{Math.sqrt(2)}$"
|
43
|
+
start "verbatim" do
|
44
|
+
c "a = 4*5"
|
45
|
+
c "b = 4*5"
|
46
|
+
end
|
47
|
+
|
48
|
+
start %q{equation} do
|
49
|
+
c esc '\Delta =\sum_{i=1}^N w_i (x_i - \bar{x})^2.'
|
50
|
+
end
|
51
|
+
|
52
|
+
c %q{We can give an equation a label so that we can refer to it later.}
|
53
|
+
start %q{equation} do
|
54
|
+
label %q{eq:ising}
|
55
|
+
c %q{E = -J \sum_{i=1}^N s_i s_{i+1},}
|
56
|
+
end
|
57
|
+
c esc %q{Equation~\eqref{eq:ising} expresses the energy of a configuration
|
58
|
+
of spins in the Ising model.\footnote{It is necessary to typeset a
|
59
|
+
file twice to get the counters correct.}
|
60
|
+
}
|
61
|
+
|
62
|
+
htmladdnormallink %q{https://github.com/cocoa/eloquent-ruby}, %q{https://github.com/cocoa/eloquent-ruby}
|
63
|
+
|
64
|
+
start %q{align} do c trim(%q{
|
65
|
+
a & = b \\\\
|
66
|
+
c &= d,})
|
67
|
+
end
|
68
|
+
|
69
|
+
highlight_code(:ruby,
|
70
|
+
%q{
|
71
|
+
class Test;
|
72
|
+
|
73
|
+
def tutu
|
74
|
+
end
|
75
|
+
end
|
76
|
+
})
|
77
|
+
|
78
|
+
start(%q{tabular}, %q{|c|}) do
|
79
|
+
hline
|
80
|
+
c %q{
|
81
|
+
test1\\\\
|
82
|
+
test2\\\\
|
83
|
+
}
|
84
|
+
hline
|
85
|
+
end
|
86
|
+
|
87
|
+
input "examples/section.tex"
|
88
|
+
|
89
|
+
start %q{figure}, [ 'htb' ] do
|
90
|
+
start %q{center} do
|
91
|
+
includegraphics ['scale=0.7'], %q{examples/fibonacci.png}
|
92
|
+
end
|
93
|
+
label %q{figure:fibonacci}
|
94
|
+
caption %q{Arbol de llamadas para la función de Fibonacci}
|
95
|
+
end
|
96
|
+
end
|
Binary file
|
@@ -0,0 +1,154 @@
|
|
1
|
+
@import url(print.css) print;
|
2
|
+
|
3
|
+
/* Century Schoolbook font is very similar to Computer Modern Math: cmmi */
|
4
|
+
.MATH { font-family: "Century Schoolbook", serif; }
|
5
|
+
.MATH I { font-family: "Century Schoolbook", serif; font-style: italic }
|
6
|
+
.BOLDMATH { font-family: "Century Schoolbook", serif; font-weight: bold }
|
7
|
+
|
8
|
+
/* implement both fixed-size and relative sizes */
|
9
|
+
SMALL.XTINY { font-size : xx-small }
|
10
|
+
SMALL.TINY { font-size : x-small }
|
11
|
+
SMALL.SCRIPTSIZE { font-size : smaller }
|
12
|
+
SMALL.FOOTNOTESIZE { font-size : small }
|
13
|
+
SMALL.SMALL { }
|
14
|
+
BIG.LARGE { }
|
15
|
+
BIG.XLARGE { font-size : large }
|
16
|
+
BIG.XXLARGE { font-size : x-large }
|
17
|
+
BIG.HUGE { font-size : larger }
|
18
|
+
BIG.XHUGE { font-size : xx-large }
|
19
|
+
|
20
|
+
/* heading styles */
|
21
|
+
H1 { }
|
22
|
+
H2 { }
|
23
|
+
H3 { }
|
24
|
+
H4 { }
|
25
|
+
H5 { }
|
26
|
+
|
27
|
+
/* mathematics styles */
|
28
|
+
DIV.displaymath { } /* math displays */
|
29
|
+
TD.eqno { } /* equation-number cells */
|
30
|
+
|
31
|
+
|
32
|
+
/* document-specific styles come next */
|
33
|
+
DIV.logo-LaTeX { }
|
34
|
+
SPAN.itshape { }
|
35
|
+
/* PRE.preform { } */
|
36
|
+
/* pre { color: #fff; background-color: #000; padding: 10px; } */
|
37
|
+
pre { color: LightGreen; font-size: larger; background-color: black; padding: 10px; overflow-x: none; } /* width: 900px;} */
|
38
|
+
tr pre { color: LightGreen; font-size: larger; background-color: black; padding: 10px; width: auto; overflow-x: none; }
|
39
|
+
/* CODE { color: brown; padding: 10px; } */
|
40
|
+
CODE { color: brown; }
|
41
|
+
i i { color: red; }
|
42
|
+
|
43
|
+
/* @media print { CODE {color: black; } } */
|
44
|
+
|
45
|
+
BLOCKQUOTE { background-color: #ADD8E6; }
|
46
|
+
DIV.Large { }
|
47
|
+
DIV.small { }
|
48
|
+
DIV.quote { }
|
49
|
+
DIV.center { }
|
50
|
+
DIV.verse { }
|
51
|
+
DIV.flushleft { }
|
52
|
+
TABLE.equation* { }
|
53
|
+
SPAN.it { }
|
54
|
+
DIV.navigation { }
|
55
|
+
SPAN.bfseries { }
|
56
|
+
TABLE.equation { }
|
57
|
+
DIV.LaTeX { }
|
58
|
+
SPAN.tt { }
|
59
|
+
DIV.alltt { }
|
60
|
+
SPAN.textbf { /* font-weight: bold; */
|
61
|
+
color: red
|
62
|
+
}
|
63
|
+
SPAN.arabic { }
|
64
|
+
SPAN.textit { font-style: italic; color: blue }
|
65
|
+
#txt7229 { text-decoration: underline; }
|
66
|
+
#txt7230 { text-decoration: underline; }
|
67
|
+
#txt7757 { text-decoration: underline; }
|
68
|
+
|
69
|
+
/* Template::Plugin::VimColor style */
|
70
|
+
|
71
|
+
/* pre { color: green; background-color: #000; padding: 10px; } */
|
72
|
+
pre { color: LightGreen; background-color: black; padding: 10px; }
|
73
|
+
i pre { font-style: normal; }
|
74
|
+
|
75
|
+
span.lightblue { color: #ADD8E6; }
|
76
|
+
span.red { color: red; }
|
77
|
+
span.synComment { color: blue; }
|
78
|
+
span.synConstant { color: red; }
|
79
|
+
span.synIdentifier { color: aqua; }
|
80
|
+
span.synStatement { color: yellow; }
|
81
|
+
span.synPreProc { color: fuchsia; }
|
82
|
+
span.synType { color: lime; }
|
83
|
+
span.synSpecial { color: fuchsia; }
|
84
|
+
span.synUnderlined { color: fuchsia; text-decoration: underline; }
|
85
|
+
span.synError { background-color: red; color: white; font-weight: bold; }
|
86
|
+
span.synTodo { background-color: yellow; color: black; }
|
87
|
+
span.Linenum { color: yellow; }
|
88
|
+
|
89
|
+
/* used for perl debugger to signal user input */
|
90
|
+
|
91
|
+
/* Simplabs::Highlight.highlight(:ruby, 'class Test; end') */
|
92
|
+
/* python pygments */
|
93
|
+
|
94
|
+
.hll { background-color: #ffffcc }
|
95
|
+
.c { color: #808080 } /* Comment */
|
96
|
+
.err { color: #F00000; background-color: #F0A0A0 } /* Error */
|
97
|
+
.k { color: #008000; font-weight: bold } /* Keyword */
|
98
|
+
.o { color: #303030 } /* Operator */
|
99
|
+
.cm { color: #808080 } /* Comment.Multiline */
|
100
|
+
.cp { color: #507090 } /* Comment.Preproc */
|
101
|
+
.c1 { color: #808080 } /* Comment.Single */
|
102
|
+
.cs { color: #cc0000; font-weight: bold } /* Comment.Special */
|
103
|
+
.gd { color: #A00000 } /* Generic.Deleted */
|
104
|
+
.ge { font-style: italic } /* Generic.Emph */
|
105
|
+
.gr { color: #FF0000 } /* Generic.Error */
|
106
|
+
.gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
107
|
+
.gi { color: #00A000 } /* Generic.Inserted */
|
108
|
+
.go { color: #808080 } /* Generic.Output */
|
109
|
+
.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
|
110
|
+
.gs { font-weight: bold } /* Generic.Strong */
|
111
|
+
.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
112
|
+
.gt { color: #0040D0 } /* Generic.Traceback */
|
113
|
+
.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
|
114
|
+
.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
|
115
|
+
.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
|
116
|
+
.kp { color: #003080; font-weight: bold } /* Keyword.Pseudo */
|
117
|
+
.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
|
118
|
+
.kt { color: #303090; font-weight: bold } /* Keyword.Type */
|
119
|
+
.m { color: #6000E0; font-weight: bold } /* Literal.Number */
|
120
|
+
.s { background-color: #fff0f0 } /* Literal.String */
|
121
|
+
.na { color: #0000C0 } /* Name.Attribute */
|
122
|
+
.nb { color: #007020 } /* Name.Builtin */
|
123
|
+
.nc { color: #B00060; font-weight: bold } /* Name.Class */
|
124
|
+
.no { color: #003060; font-weight: bold } /* Name.Constant */
|
125
|
+
.nd { color: #505050; font-weight: bold } /* Name.Decorator */
|
126
|
+
.ni { color: #800000; font-weight: bold } /* Name.Entity */
|
127
|
+
.ne { color: #F00000; font-weight: bold } /* Name.Exception */
|
128
|
+
.nf { color: #0060B0; font-weight: bold } /* Name.Function */
|
129
|
+
.nl { color: #907000; font-weight: bold } /* Name.Label */
|
130
|
+
.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
|
131
|
+
.nt { color: #007000 } /* Name.Tag */
|
132
|
+
.nv { color: #906030 } /* Name.Variable */
|
133
|
+
.ow { color: #000000; font-weight: bold } /* Operator.Word */
|
134
|
+
.w { color: #bbbbbb } /* Text.Whitespace */
|
135
|
+
.mf { color: #6000E0; font-weight: bold } /* Literal.Number.Float */
|
136
|
+
.mh { color: #005080; font-weight: bold } /* Literal.Number.Hex */
|
137
|
+
.mi { color: #0000D0; font-weight: bold } /* Literal.Number.Integer */
|
138
|
+
.mo { color: #4000E0; font-weight: bold } /* Literal.Number.Oct */
|
139
|
+
.sb { background-color: #fff0f0 } /* Literal.String.Backtick */
|
140
|
+
.sc { color: #0040D0 } /* Literal.String.Char */
|
141
|
+
.sd { color: #D04020 } /* Literal.String.Doc */
|
142
|
+
.s2 { background-color: #fff0f0 } /* Literal.String.Double */
|
143
|
+
.se { color: #606060; font-weight: bold; background-color: #fff0f0 } /* Literal.String.Escape */
|
144
|
+
.sh { background-color: #fff0f0 } /* Literal.String.Heredoc */
|
145
|
+
.si { background-color: #e0e0e0 } /* Literal.String.Interpol */
|
146
|
+
.sx { color: #D02000; background-color: #fff0f0 } /* Literal.String.Other */
|
147
|
+
.sr { color: #000000; background-color: #fff0ff } /* Literal.String.Regex */
|
148
|
+
.s1 { background-color: #fff0f0 } /* Literal.String.Single */
|
149
|
+
.ss { color: #A06000 } /* Literal.String.Symbol */
|
150
|
+
.bp { color: #007020 } /* Name.Builtin.Pseudo */
|
151
|
+
.vc { color: #306090 } /* Name.Variable.Class */
|
152
|
+
.vg { color: #d07000; font-weight: bold } /* Name.Variable.Global */
|
153
|
+
.vi { color: #3030B0 } /* Name.Variable.Instance */
|
154
|
+
.il { color: #0000D0; font-weight: bold } /* Literal.Number.Integer.Long */
|
@@ -0,0 +1,81 @@
|
|
1
|
+
\section{Tipos, Clases y Módulos}
|
2
|
+
|
3
|
+
|
4
|
+
\begin{verbatim}
|
5
|
+
>> obj = [1, {:a => 2}]
|
6
|
+
=> [1, {:a=>2}]
|
7
|
+
>> obj.class # retorna la clase de un objeto
|
8
|
+
=> Array
|
9
|
+
>> obj.class.superclass # retorna la superclase de un objeto
|
10
|
+
=> Object
|
11
|
+
>> obj.instance_of? Object # determina si obj.class == Object
|
12
|
+
=> false
|
13
|
+
>> obj.instance_of? Array
|
14
|
+
=> true
|
15
|
+
>> obj.is_a? Object # determina si obj es de una subclase de Object
|
16
|
+
=> true
|
17
|
+
>> obj.is_a? Array
|
18
|
+
=> true
|
19
|
+
>> obj.kind_of? Object # kind_of? es un sinónimo de is_a?
|
20
|
+
=> true
|
21
|
+
>> Array === obj # equivalente a obj.is_a? Array
|
22
|
+
=> true
|
23
|
+
>> Object === obj
|
24
|
+
=> true
|
25
|
+
>> obj.respond_to? 'each' # si tiene un método público o protected llamado 'each'
|
26
|
+
=> true # si se le pasa true como segundo argumento se comprueban
|
27
|
+
# también los privados
|
28
|
+
>> Array.instance_methods(false)
|
29
|
+
=> ["insert"
|
30
|
+
"sort" "include?" "size" "&" "to_ary" "clear" "yaml_initialize" "shuffle"
|
31
|
+
"replace" "pack" "zip" "flatten!" "to_s" "pop" "pretty_print_cycle" "hash"
|
32
|
+
"cycle" "*" "indices" "nitems" "index" "collect" "+" "compact!"
|
33
|
+
"last" "rassoc" "count" "drop" "delete" "delete_at" "combination" "collect!"
|
34
|
+
"select" "each_index" "-" "flatten" "eql?" "fill" "length" "uniq!"
|
35
|
+
"at" "choice" "reject!" "[]" "take" "inspect" "shift" "compact"
|
36
|
+
"pretty_print" "[]=" "|" "find_index" "slice!" "each" "empty?" "transpose"
|
37
|
+
"<<" "frozen?" "rindex" "map" "reverse_each" "reverse!" "to_a" "push"
|
38
|
+
"uniq" "delete_if" "first" "product" "drop_while" "concat" "reject"
|
39
|
+
"map!" "join" "slice" "indexes" "taguri" "<=>" "assoc" "fetch" "to_yaml"
|
40
|
+
"==" "values_at" "permutation" "take_while" "unshift" "reverse"
|
41
|
+
"sort!" "shuffle!" "taguri="]
|
42
|
+
\end{verbatim}
|
43
|
+
|
44
|
+
\subsection{Antepasados y Módulos}
|
45
|
+
|
46
|
+
Los siguientes métodos sirven para determinar que módulos han sido incluídos
|
47
|
+
y cuales son los ancestros de una clase o módulo:
|
48
|
+
\begin{verbatim}
|
49
|
+
[~/chapter8ReflectionandMetaprogramming]$ cat ancestryAndModules.rb
|
50
|
+
module A; end
|
51
|
+
|
52
|
+
module B; include A; end
|
53
|
+
|
54
|
+
class C; include B; end
|
55
|
+
|
56
|
+
if __FILE__ == $0
|
57
|
+
puts C < B # => true: C includes B
|
58
|
+
puts B < A # => true: B includes A
|
59
|
+
puts C < A # => true
|
60
|
+
puts Fixnum < Integer # => true: all fixnums are integers
|
61
|
+
puts Integer <Comparable # => true: integers are comparable
|
62
|
+
puts Integer < Fixnum # => false: not all integers are fixnums
|
63
|
+
puts (String < Numeric).inspect # => nil: strings are not numbers
|
64
|
+
|
65
|
+
puts A.ancestors.inspect # => [A]
|
66
|
+
puts B.ancestors.inspect # => [B, A]
|
67
|
+
puts C.ancestors.inspect # => [C, B, A, Object, Kernel, BasicObject]
|
68
|
+
puts String.ancestors.inspect # => [String, Comparable, Object, Kernel, BasicObject]
|
69
|
+
|
70
|
+
puts C.include?(B) # => true
|
71
|
+
puts C.include?(A) # => true
|
72
|
+
puts B.include?(A) # => true
|
73
|
+
puts A.include?(A) # => false
|
74
|
+
puts A.include?(B) # => false
|
75
|
+
|
76
|
+
puts A.included_modules.inspect # => []
|
77
|
+
puts B.included_modules.inspect # => [A]
|
78
|
+
puts C.included_modules.inspect # => [B, A, Kernel]
|
79
|
+
end
|
80
|
+
\end{verbatim}
|
81
|
+
|
@@ -0,0 +1,102 @@
|
|
1
|
+
require 'simplabs/highlight'
|
2
|
+
module Dsl
|
3
|
+
module Latex
|
4
|
+
class Simple
|
5
|
+
attr_accessor :out
|
6
|
+
|
7
|
+
def initialize()
|
8
|
+
@out = ''
|
9
|
+
end
|
10
|
+
|
11
|
+
def macro_begin(name, tagname, block)
|
12
|
+
@out << "\\#{tagname}"
|
13
|
+
@out << '{' if block and tagname != :begin
|
14
|
+
name.each do |n|
|
15
|
+
if n.is_a? Array
|
16
|
+
@out << "["+n.join('][')+"]"
|
17
|
+
else
|
18
|
+
@out << "{#{n}}"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
@out << "\n"
|
22
|
+
end
|
23
|
+
|
24
|
+
def macro_end(name, tagname)
|
25
|
+
if tagname == :begin
|
26
|
+
@out << "\\end{#{name[0]}}"
|
27
|
+
else
|
28
|
+
@out << '}'
|
29
|
+
name.each do |n|
|
30
|
+
if n.is_a? Array
|
31
|
+
@out << "["+n.join('][')+"]"
|
32
|
+
else
|
33
|
+
@out << "{#{n}}"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
@out << "\n"
|
38
|
+
end
|
39
|
+
|
40
|
+
def tag(tagname, *name, &block)
|
41
|
+
if tagname == :start
|
42
|
+
tagname = :begin
|
43
|
+
end
|
44
|
+
macro_begin(name, tagname, block_given?)
|
45
|
+
if block_given?
|
46
|
+
# create a new object and translate it
|
47
|
+
# then concat its output
|
48
|
+
aux = Dsl::Latex::Simple.new
|
49
|
+
aux.instance_eval &block
|
50
|
+
content = aux.out
|
51
|
+
if content
|
52
|
+
@out << content.to_s
|
53
|
+
end
|
54
|
+
macro_end(name, tagname)
|
55
|
+
end
|
56
|
+
nil
|
57
|
+
end
|
58
|
+
|
59
|
+
alias method_missing tag
|
60
|
+
|
61
|
+
def esc(s)
|
62
|
+
s.gsub!(%q{\\},%q{\\\\})
|
63
|
+
s
|
64
|
+
end
|
65
|
+
|
66
|
+
def trim(s)
|
67
|
+
s.gsub!(/^\s+/,'')
|
68
|
+
s.gsub!(/\s+$/,'')
|
69
|
+
s
|
70
|
+
end
|
71
|
+
|
72
|
+
def c(*x)
|
73
|
+
@out << x.join("\n")+"\n"
|
74
|
+
end
|
75
|
+
|
76
|
+
def self.generate(path)
|
77
|
+
s = File.read(path)
|
78
|
+
x = Dsl::Latex::Simple.new
|
79
|
+
x.instance_eval(s, path, 1)
|
80
|
+
puts x.out
|
81
|
+
end
|
82
|
+
|
83
|
+
def highlight_code(language, code)
|
84
|
+
start %q{rawhtml} do
|
85
|
+
hl = Simplabs::Highlight.highlight(language, code)
|
86
|
+
c "<pre>\n#{hl}\n</pre>\n"
|
87
|
+
end
|
88
|
+
|
89
|
+
start %q{latexonly} do
|
90
|
+
start :lstlisting, %Q{language=#{language}} do
|
91
|
+
c code
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
if $0 == __FILE__
|
100
|
+
Dsl::Latex::Simple.generate('examples/example.rex')
|
101
|
+
end
|
102
|
+
|
metadata
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dsl-latex-simple
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Casiano Rodriguez Leon
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-12-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: highlight
|
16
|
+
requirement: &70227644942980 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70227644942980
|
25
|
+
description: Ruby DSL for LaTeX
|
26
|
+
email:
|
27
|
+
- casiano.rodriguez.leon@gmail.com
|
28
|
+
executables:
|
29
|
+
- rex
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- .gitignore
|
34
|
+
- Gemfile
|
35
|
+
- LICENSE.txt
|
36
|
+
- README.md
|
37
|
+
- Rakefile
|
38
|
+
- bin/rex
|
39
|
+
- dsl-latex-simple.gemspec
|
40
|
+
- examples/example.rex
|
41
|
+
- examples/example0.rex
|
42
|
+
- examples/fibonacci.png
|
43
|
+
- examples/mystyle.css
|
44
|
+
- examples/section.tex
|
45
|
+
- lib/dsl-latex-simple.rb
|
46
|
+
- lib/dsl-latex-simple/simple.rb
|
47
|
+
- lib/dsl-latex-simple/version.rb
|
48
|
+
homepage: https://github.com/crguezl/dsl-latex-simple
|
49
|
+
licenses: []
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
require_paths:
|
53
|
+
- lib
|
54
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ! '>='
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '0'
|
60
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
requirements: []
|
67
|
+
rubyforge_project:
|
68
|
+
rubygems_version: 1.8.11
|
69
|
+
signing_key:
|
70
|
+
specification_version: 3
|
71
|
+
summary: Ruby DSL for LaTeX
|
72
|
+
test_files: []
|
73
|
+
has_rdoc:
|