erb_latex 0.3.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +20 -9
- data/erb_latex.gemspec +5 -5
- data/lib/erb_latex/context.rb +3 -3
- data/lib/erb_latex/file_access.rb +6 -4
- data/lib/erb_latex/template.rb +6 -3
- data/lib/erb_latex/version.rb +1 -1
- data/test/erb_latex_test.rb +12 -2
- data/test/fixtures/custom_context.tex.erb +4 -0
- data/test/fixtures/lastpage.sty +283 -0
- data/test/fixtures/lastpage209.sty +70 -0
- data/test/helper.rb +6 -0
- metadata +29 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8b825b8d2a9b6081794d78c2e7fc175e5421137
|
4
|
+
data.tar.gz: 38dcda7203964f63909e59ac7db46066ed853bfc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0db92f74e5ef160be972bd6a3452ebb158b5725b852429ef8794cebe3f043a469b81da7ff56ce2b493260bfedea08bdbe946484e4690df5edac8a76caff077b1
|
7
|
+
data.tar.gz: f685266897821c197c3bd724bfbfb01e3b91077d601b37b75cf5932d02e7cc82d2eafe988f2a7df86a1f7ae9d8cffe143d449c3773f7b489a02382bc9e0f84dd
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
# ERB LaTeX
|
2
2
|
|
3
|
-
Applies ERB template processing to a LaTeX file and compiles it to a PDF.
|
3
|
+
Applies ERB template processing to a LaTeX file and compiles it to a PDF using xelatex.
|
4
4
|
|
5
|
-
Supports layouts, partials, and
|
5
|
+
Supports layouts, partials, string escaping and packages installed in custom directories.
|
6
6
|
|
7
7
|
Also supplies a Guard task to watch for modifications and auto-building files.
|
8
8
|
|
@@ -11,14 +11,12 @@ Also supplies a Guard task to watch for modifications and auto-building files.
|
|
11
11
|
[Argosity](http://argosity.com/) uses this for several different projects
|
12
12
|
|
13
13
|
* I originally used a bare-bones & hacky version to generate my resume in both HTML & PDF
|
14
|
-
* [Stockor](http://stockor.org/),
|
14
|
+
* [Stockor](http://stockor.org/), my open-source ERP platform. It's used for building all the form that output as PDF.
|
15
15
|
* Generating proposals for client projects. Hit me up with a consulting request and you'll probably receive one!
|
16
16
|
|
17
17
|
## Links
|
18
18
|
|
19
|
-
API docs
|
20
|
-
|
21
|
-
The source is on github at [github.com/nathanstitt/erb_latex](https://github.com/nathanstitt/erb_latex)
|
19
|
+
[API docs](http://www.rubydoc.info/gems/erb_latex), Source on github at [github.com/nathanstitt/erb_latex](https://github.com/nathanstitt/erb_latex)
|
22
20
|
|
23
21
|
## Installation
|
24
22
|
|
@@ -36,6 +34,16 @@ Or install it yourself as:
|
|
36
34
|
|
37
35
|
$ gem install erb_latex
|
38
36
|
|
37
|
+
## Configuration
|
38
|
+
|
39
|
+
```ruby
|
40
|
+
ErbLatex.configure do | config |
|
41
|
+
config.file_extesion = '.tex' # defaults to .tex.erb
|
42
|
+
config.verbose_logs = true # will output failure diagnostics to STDERR when enabled
|
43
|
+
config.xelatex_path = '/opt/texlive/bin/xelatex' # for cases where xelatex is not located in PATH
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
39
47
|
## Usage
|
40
48
|
|
41
49
|
Given a LaTeX layout template: ``layout.tex``
|
@@ -66,10 +74,12 @@ and a simple LaTeX body: ``body.tex``
|
|
66
74
|
|
67
75
|
```latex
|
68
76
|
\lettrine[lines=2]{T}{hank} you for your your consideration.
|
69
|
-
Please let us know if we can help you
|
77
|
+
Please let us know if we can help you!
|
70
78
|
|
71
79
|
<%=q @message %>
|
72
80
|
|
81
|
+
So long and thanks for all the fish.
|
82
|
+
|
73
83
|
Thank you,
|
74
84
|
<%=q @author %>
|
75
85
|
```
|
@@ -106,12 +116,13 @@ guard :erb_latex do
|
|
106
116
|
end
|
107
117
|
```
|
108
118
|
|
109
|
-
While the one below would compile the hypothetical body.tex file above
|
119
|
+
While the one below would compile the hypothetical body.tex file above.
|
110
120
|
|
111
121
|
```ruby
|
112
122
|
require 'erb_latex/guard'
|
113
123
|
|
114
|
-
|
124
|
+
data = {:author=>'Nathan Stitt', :message=>'Buy low, Sell High!'}
|
125
|
+
guard :erb_latex, :layout=>'proposal.tex', :data => data do
|
115
126
|
watch 'body.tex'
|
116
127
|
end
|
117
128
|
```
|
data/erb_latex.gemspec
CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_development_dependency "rake"
|
22
|
-
spec.add_development_dependency "bundler"
|
23
|
-
spec.add_development_dependency "yard"
|
24
|
-
spec.add_development_dependency "guard"
|
25
|
-
spec.add_development_dependency "guard-minitest"
|
21
|
+
spec.add_development_dependency "rake"
|
22
|
+
spec.add_development_dependency "bundler"
|
23
|
+
spec.add_development_dependency "yard"
|
24
|
+
spec.add_development_dependency "guard"
|
25
|
+
spec.add_development_dependency "guard-minitest"
|
26
26
|
end
|
data/lib/erb_latex/context.rb
CHANGED
@@ -30,13 +30,13 @@ module ErbLatex
|
|
30
30
|
|
31
31
|
# include another latex file into the current template
|
32
32
|
def partial( template, data={} )
|
33
|
-
context =
|
33
|
+
context = self.class.new( @directory, data )
|
34
34
|
ErbLatex::File.evaluate(Pathname.new(template), context.getBinding, @directory)
|
35
35
|
end
|
36
36
|
|
37
|
-
# convert newline characters into latex '\\
|
37
|
+
# convert newline characters into latex '\\linebreak'
|
38
38
|
def break_lines( txt )
|
39
|
-
q(txt.to_s).gsub("\n",'\\
|
39
|
+
q(txt.to_s).gsub("\n",'\\linebreak ')
|
40
40
|
end
|
41
41
|
|
42
42
|
# return a reference to the instance's scope or 'binding'
|
@@ -5,15 +5,17 @@ module ErbLatex
|
|
5
5
|
# simualar to File.read, except:
|
6
6
|
# * Will search in_directory for file if given, otherwise expects file to be an absolute path
|
7
7
|
# * appends ErbLatex.config.file_extension to the file if it's not found as-is.
|
8
|
-
def self.read(
|
8
|
+
def self.read(requested_file, in_directory = nil)
|
9
|
+
file = requested_file
|
9
10
|
if in_directory
|
10
11
|
file = Pathname.new(in_directory.to_s).join(file)
|
11
12
|
end
|
12
|
-
|
13
|
-
file = Pathname.new(file.to_s + ErbLatex.config.file_extension)
|
13
|
+
if file.to_s !~ /#{ErbLatex.config.file_extension}$/ && !file.exist?
|
14
|
+
file = Pathname.new(file.to_s + ErbLatex.config.file_extension)
|
14
15
|
end
|
15
16
|
unless file.exist?
|
16
|
-
msg = "Unable to read from #{
|
17
|
+
msg = "Unable to read from #{requested_file}."
|
18
|
+
msg << " Also tried extension #{file}" if file != requested_file
|
17
19
|
raise LatexError.new(msg)
|
18
20
|
end
|
19
21
|
file.read
|
data/lib/erb_latex/template.rb
CHANGED
@@ -34,10 +34,13 @@ module ErbLatex
|
|
34
34
|
# create a new Template
|
35
35
|
# @param view_file [String] path to the latex template
|
36
36
|
# @option options [String] :layout path to a latex template that calls yield
|
37
|
-
# @option options [Hash]
|
37
|
+
# @option options [Hash] :data an instance variable will be created in the view for each key/value pair
|
38
|
+
# @option context [Class] : a class that will be instantiated to provide helper methods to ERB templates. Defaults to ErbLatex:Context
|
39
|
+
|
38
40
|
def initialize( view_file, options={} )
|
39
41
|
@data = options[:data] || {}
|
40
42
|
@layout = options[:layout]
|
43
|
+
@context = options[:context] || ErbLatex::Context
|
41
44
|
@packages_path = options[:packages_path]
|
42
45
|
@partials_path = options[:partials_path]
|
43
46
|
@view = Pathname.new( view_file )
|
@@ -113,14 +116,14 @@ module ErbLatex
|
|
113
116
|
# @raise [LatexError] if the xelatex process does not complete successfully
|
114
117
|
def compile_latex
|
115
118
|
begin
|
116
|
-
context =
|
119
|
+
context = @context.new( @partials_path || @view.dirname, @data )
|
117
120
|
content = ErbLatex::File.evaluate(@view, context.getBinding)
|
118
121
|
if layout
|
119
122
|
ErbLatex::File.evaluate(layout_file, context.getBinding{ content })
|
120
123
|
else
|
121
124
|
content
|
122
125
|
end
|
123
|
-
rescue
|
126
|
+
rescue LocalJumpError=>e
|
124
127
|
raise LatexError.new( "ERB compile raised #{e.class} on #{@view}", e.backtrace )
|
125
128
|
end
|
126
129
|
end
|
data/lib/erb_latex/version.rb
CHANGED
data/test/erb_latex_test.rb
CHANGED
@@ -27,7 +27,10 @@ class ErbLatexTest < MiniTest::Test
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def test_multiple_runs
|
30
|
-
tmpl = ErbLatex::Template.new(
|
30
|
+
tmpl = ErbLatex::Template.new(
|
31
|
+
document(:multi_page),
|
32
|
+
packages_path: Pathname.new(__FILE__).dirname.join('fixtures')
|
33
|
+
)
|
31
34
|
tmpl.to_file tmp_output_file
|
32
35
|
assert_equal 2, tmpl.pass_count
|
33
36
|
text = text_output
|
@@ -48,5 +51,12 @@ class ErbLatexTest < MiniTest::Test
|
|
48
51
|
assert_match "a test ’ of a partial", text_output
|
49
52
|
end
|
50
53
|
|
51
|
-
|
54
|
+
def test_custom_context
|
55
|
+
tmpl = ErbLatex::Template.new(
|
56
|
+
document('custom_context.tex.erb'),
|
57
|
+
context: CustomContext
|
58
|
+
)
|
59
|
+
tmpl.to_file tmp_output_file
|
60
|
+
assert_match "custom helper method", text_output
|
61
|
+
end
|
52
62
|
end
|
@@ -0,0 +1,283 @@
|
|
1
|
+
%%
|
2
|
+
%% This is file `lastpage.sty',
|
3
|
+
%% generated with the docstrip utility.
|
4
|
+
%%
|
5
|
+
%% The original source files were:
|
6
|
+
%%
|
7
|
+
%% lastpage.dtx (with options: `package')
|
8
|
+
%%
|
9
|
+
%% This is a generated file.
|
10
|
+
%%
|
11
|
+
%% Project: lastpage
|
12
|
+
%% Version: 2015/03/29 v1.2m
|
13
|
+
%%
|
14
|
+
%% Copyright (C) 2010 - 2015 by
|
15
|
+
%% H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
|
16
|
+
%% Portions of code copyrighted by other people as marked.
|
17
|
+
%%
|
18
|
+
%% The usual disclaimer applies:
|
19
|
+
%% If it doesn't work right that's your problem.
|
20
|
+
%% (Nevertheless, send an e-mail to the maintainer
|
21
|
+
%% when you find an error in this package.)
|
22
|
+
%%
|
23
|
+
%% This work may be distributed and/or modified under the
|
24
|
+
%% conditions of the LaTeX Project Public License, either
|
25
|
+
%% version 1.3c of this license or (at your option) any later
|
26
|
+
%% version. This version of this license is in
|
27
|
+
%% http://www.latex-project.org/lppl/lppl-1-3c.txt
|
28
|
+
%% and the latest version of this license is in
|
29
|
+
%% http://www.latex-project.org/lppl.txt
|
30
|
+
%% and version 1.3c or later is part of all distributions of
|
31
|
+
%% LaTeX version 2005/12/01 or later.
|
32
|
+
%%
|
33
|
+
%% This work has the LPPL maintenance status "maintained".
|
34
|
+
%%
|
35
|
+
%% The Current Maintainer of this work is H.-Martin Muench.
|
36
|
+
%%
|
37
|
+
%% This package was invented by
|
38
|
+
%% Jeffrey P. Goldberg (jeffrey+news at goldmark dot org).
|
39
|
+
%% I thought that a replacement was needed and therefore created the pageslts package,
|
40
|
+
%% https://www.ctan.org/pkg/pageslts
|
41
|
+
%% . Nevertheless, for compatibility with existing documents/packages as well as for
|
42
|
+
%% the low amount of resources needed by the lastpage package (no new counter!),
|
43
|
+
%% I updated this package.
|
44
|
+
%% Thanks go to Jeffrey P. Goldberg for allowing me to do this.
|
45
|
+
%%
|
46
|
+
%% This work consists of the main source file lastpage.dtx,
|
47
|
+
%% the README, and the derived files
|
48
|
+
%% lastpage.sty, lastpage.pdf,
|
49
|
+
%% lastpage.ins, lastpage.drv,
|
50
|
+
%% lastpage-example.tex, lastpage-example.pdf.
|
51
|
+
%%
|
52
|
+
%% In memoriam
|
53
|
+
%% Claudia Simone Barth + 1996/01/30
|
54
|
+
%% Tommy Muench + 2014/01/02
|
55
|
+
%% Hans-Klaus Muench + 2014/08/24
|
56
|
+
%%
|
57
|
+
\NeedsTeXFormat{LaTeX2e}[2014/05/01]
|
58
|
+
\ProvidesPackage{lastpage}%
|
59
|
+
[2015/03/29 v1.2m Refers to last page's name (HMM; JPG)]%
|
60
|
+
|
61
|
+
%% lastpage may work with earlier versions of LaTeX,
|
62
|
+
%% but this was not tested. Please consider updating
|
63
|
+
%% your LaTeX (and packages) to the most recent version
|
64
|
+
%% (if it is/they are not already the most recent version).
|
65
|
+
|
66
|
+
%% Allows for things like
|
67
|
+
%% Page \thepage{} of \pageref{LastPage}
|
68
|
+
%% to get
|
69
|
+
%% 'Page 7 of 9'.
|
70
|
+
%% For LaTeX 2.09 use lastpage209.sty.
|
71
|
+
%% For LaTeX 2e maybe consider upgrading to the pageslts package.
|
72
|
+
%% lastpage may work with earlier versions of LaTeX2e,
|
73
|
+
%% but this was not tested. Please consider updating your LaTeX
|
74
|
+
%% contribution to the most recent version (if it is not already
|
75
|
+
%% the most recent version).
|
76
|
+
|
77
|
+
%% The recent version of the endfloat package is v2.5d as of 2011/12/25.
|
78
|
+
%% The lastpage package is not fully compatible with version 2.0
|
79
|
+
%% (and earlier) of the endfloat package, because those versions
|
80
|
+
%% redefined the \enddocument command.
|
81
|
+
|
82
|
+
\def\lastpage@one{1}
|
83
|
+
\gdef\lastpage@hyper{0}
|
84
|
+
\gdef\lastpage@nameref{0}
|
85
|
+
\gdef\lastpage@LTS{0}
|
86
|
+
\def\lastpage@firstpage{1}
|
87
|
+
|
88
|
+
\AtBeginDocument{%
|
89
|
+
\@ifpackageloaded{tikz}{\gdef\lastpage@tikz{1}}{}%
|
90
|
+
\@ifpackageloaded{hyperref}{\gdef\lastpage@hyper{1}}{}%
|
91
|
+
\@ifpackageloaded{nameref}{\gdef\lastpage@nameref{1}}{}%
|
92
|
+
\@ifpackageloaded{pageslts}{%
|
93
|
+
\PackageWarning{lastpage}{Package pageslts found.\MessageBreak%
|
94
|
+
Therefore the lastpage package is no longer\MessageBreak%
|
95
|
+
necessary.%
|
96
|
+
}%
|
97
|
+
\gdef\lastpage@LTS{1}%
|
98
|
+
}{\PackageInfo{lastpage}{%
|
99
|
+
Please have a look at the pageslts package at\MessageBreak%
|
100
|
+
https://www.ctan.org/pkg/pageslts\MessageBreak%
|
101
|
+
!}%
|
102
|
+
}%
|
103
|
+
\@ifpackageloaded{pagesLTS}{%
|
104
|
+
\PackageWarning{lastpage}{%
|
105
|
+
Outdated pagesLTS package found.\MessageBreak%
|
106
|
+
Please replace by a recent version of\MessageBreak%
|
107
|
+
pageslts package, see e.g. at\MessageBreak%
|
108
|
+
https://www.ctan.org/pkg/pageslts\MessageBreak%
|
109
|
+
!\MessageBreak%
|
110
|
+
With pagesLTS as well as pageslts package\MessageBreak%
|
111
|
+
the lastpage package is no longer necessary.\MessageBreak%
|
112
|
+
}%
|
113
|
+
\gdef\lastpage@LTS{1}%
|
114
|
+
}{}%
|
115
|
+
\gdef\lastpage@putlabel{\relax}%
|
116
|
+
}
|
117
|
+
|
118
|
+
\newcommand{\lastpage@putl@bel}{%
|
119
|
+
\@ifundefined{Hy@Warning}{% hyperref not loaded
|
120
|
+
}{\gdef\lastpage@hyper{1}% hyperref loaded
|
121
|
+
}%
|
122
|
+
\ifx\lastpage@LTS\lastpage@one%
|
123
|
+
\else%
|
124
|
+
\ifx\lastpage@hyper\lastpage@one%
|
125
|
+
\lastpage@putlabelhyper%
|
126
|
+
\else%
|
127
|
+
\ifx\lastpage@nameref\lastpage@one%
|
128
|
+
\lastpage@putlabelNR%
|
129
|
+
\else%
|
130
|
+
\begingroup%
|
131
|
+
\addtocounter{page}{-1}%
|
132
|
+
\immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}}}%
|
133
|
+
\immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
|
134
|
+
\immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
|
135
|
+
\addtocounter{page}{+1}%
|
136
|
+
\endgroup%
|
137
|
+
\fi%
|
138
|
+
\fi%
|
139
|
+
\fi%
|
140
|
+
}
|
141
|
+
|
142
|
+
\newcommand{\lastpage@putlabelhyper}{%
|
143
|
+
\ifHy@pageanchor%
|
144
|
+
\else%
|
145
|
+
\PackageError{lastpage}{hyperref option pageanchor disabled}{%
|
146
|
+
The \string\pageref{LastPage} link doesn't work\MessageBreak%
|
147
|
+
using hyperref with disabled option `pageanchor'.\MessageBreak%
|
148
|
+
}%
|
149
|
+
\fi%
|
150
|
+
\begingroup%
|
151
|
+
\addtocounter{page}{-1}%
|
152
|
+
%% The following code is from the hyperref package %%
|
153
|
+
%% [2010/04/17 v6.80x; newer versions are available] %%
|
154
|
+
%% by Heiko Oberdiek (Big Thanks!). %%
|
155
|
+
\let\@number\@firstofone
|
156
|
+
\ifHy@pageanchor
|
157
|
+
\ifHy@hypertexnames
|
158
|
+
\ifHy@plainpages
|
159
|
+
\def\Hy@temp{\arabic{page}}%
|
160
|
+
\else
|
161
|
+
\Hy@unicodefalse
|
162
|
+
%% Code not from hyperref package: %%
|
163
|
+
%% The following lines are taken from the pageslts package, %%
|
164
|
+
%% which in turn got them from the hyperref package and %%
|
165
|
+
%% modified them. %%
|
166
|
+
%% Without the modification, after the first shipout "PD1" %%
|
167
|
+
%% is inserted each time |\pdfstringdef\Hy@temp{\thepage}| %%
|
168
|
+
%% is executed. %%
|
169
|
+
\ifnum \value{page}=1%
|
170
|
+
\ifx \lastpage@firstpage\lastpage@one
|
171
|
+
\def\Hy@temp{\thepage}%
|
172
|
+
\gdef\lastpage@firstpage{0}%
|
173
|
+
\else%
|
174
|
+
%% Code from hyperref package again: %%
|
175
|
+
\pdfstringdef\Hy@temp{\thepage}%
|
176
|
+
%% End of code from the hyperref package. %%
|
177
|
+
\fi%
|
178
|
+
%% The pageslts package would even check for fnsymbol page %%
|
179
|
+
%% numbering scheme and adapt the code correspondingly. %%
|
180
|
+
\else%
|
181
|
+
%% Code from hyperref package again: %%
|
182
|
+
\pdfstringdef\Hy@temp{\thepage}%
|
183
|
+
%% Code from pageslts package again: %%
|
184
|
+
\fi%
|
185
|
+
%% Code from hyperref package again: %%
|
186
|
+
\fi
|
187
|
+
\else
|
188
|
+
\def\Hy@temp{\the\Hy@pagecounter}%
|
189
|
+
\fi
|
190
|
+
\fi
|
191
|
+
\immediate\write\@auxout{%
|
192
|
+
\string\newlabel
|
193
|
+
{LastPage}{{}{\thepage}{}{%
|
194
|
+
\ifHy@pageanchor page.\Hy@temp\fi}{}}%
|
195
|
+
}%
|
196
|
+
%% End of code from the hyperref package. %%
|
197
|
+
\immediate\write\@auxout{%
|
198
|
+
\string\xdef\string\lastpage@lastpage{\thepage}}%
|
199
|
+
\ifHy@pageanchor%
|
200
|
+
\immediate\write\@auxout{%
|
201
|
+
\string\xdef\string\lastpage@lastpageHy{\Hy@temp}}%
|
202
|
+
\else%
|
203
|
+
\immediate\write\@auxout{%
|
204
|
+
\string\gdef\string\lastpage@lastpageHy{}}%
|
205
|
+
\fi%
|
206
|
+
\addtocounter{page}{+1}%
|
207
|
+
\endgroup%
|
208
|
+
}
|
209
|
+
|
210
|
+
\newcommand{\lastpage@putlabelNR}{%
|
211
|
+
\begingroup%
|
212
|
+
\addtocounter{page}{-1}%
|
213
|
+
\immediate\write\@auxout{\string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
|
214
|
+
\immediate\write\@auxout{\string\xdef\string\lastpage@lastpage{\thepage}}%
|
215
|
+
\immediate\write\@auxout{\string\gdef\string\lastpage@lastpageHy{}}%
|
216
|
+
\addtocounter{page}{+1}%
|
217
|
+
\endgroup%
|
218
|
+
}
|
219
|
+
|
220
|
+
\newcommand{\lastpage@fileswtest}[2]{%
|
221
|
+
\edef\lastpage@testa{#1}%
|
222
|
+
\edef\lastpage@testb{#2}%
|
223
|
+
\ifx\lastpage@testa\lastpage@testb% OK
|
224
|
+
\else%
|
225
|
+
\ifx\lastpage@tikz\lastpage@one%
|
226
|
+
\PackageWarning{lastpage}%
|
227
|
+
{The lastpage package was not allowed to write to an\MessageBreak%
|
228
|
+
.aux file. This package does not work without access\MessageBreak%
|
229
|
+
to an .aux file.\MessageBreak%
|
230
|
+
It is OK if the .aux file was already updated\MessageBreak%
|
231
|
+
by a previouse compiler run\MessageBreak%
|
232
|
+
and would not have changed anyway.\MessageBreak%
|
233
|
+
}%
|
234
|
+
\else%
|
235
|
+
\PackageError{lastpage}{No auxiliary file allowed}%
|
236
|
+
{The lastpage package was not allowed to write to an .aux file.\MessageBreak%
|
237
|
+
This package does not work without access to an .aux file.\MessageBreak%
|
238
|
+
Press Ctrl+Z to exit.\MessageBreak%
|
239
|
+
}%
|
240
|
+
\fi%
|
241
|
+
\fi%
|
242
|
+
}
|
243
|
+
\newcommand{\lastpage@fileswtestHy}{%
|
244
|
+
\ifHy@pageanchor%
|
245
|
+
\lastpage@fileswtest{\Hy@temp}{\lastpage@lastpageHy}%
|
246
|
+
\else%
|
247
|
+
\lastpage@fileswtest{\empty}{\lastpage@lastpageHy}%
|
248
|
+
\fi%
|
249
|
+
}
|
250
|
+
|
251
|
+
\AtEndDocument{%
|
252
|
+
\gdef\lastpage@putlabel{\relax}%
|
253
|
+
\ifx\lastpage@LTS\lastpage@one%
|
254
|
+
\else%
|
255
|
+
\@ifundefined{lastpage@lastpage}%
|
256
|
+
{\gdef\lastpage@lastpage{LastpagePackageError}%
|
257
|
+
% If there really is a page numbered (!) "LastpagePackageError",
|
258
|
+
% you will get the rerun warning whether it is necessary or not.
|
259
|
+
\PackageWarning{lastpage}{Rerun to get the references right}%
|
260
|
+
}{% already defined, nothing to be done.
|
261
|
+
}%
|
262
|
+
\@ifundefined{lastpage@lastpageHy}%
|
263
|
+
{\gdef\lastpage@lastpageHy{LastpagePackageError}%
|
264
|
+
}{% already defined, nothing to be done.
|
265
|
+
}%
|
266
|
+
\fi%
|
267
|
+
\if@filesw%
|
268
|
+
\message{^^JAED: lastpage setting LastPage^^J}%
|
269
|
+
\clearpage\lastpage@putl@bel%
|
270
|
+
\else%
|
271
|
+
\ifx\lastpage@LTS\lastpage@one%
|
272
|
+
\else%
|
273
|
+
\lastpage@fileswtest{\thepage}{\lastpage@lastpage}%
|
274
|
+
\ifx\lastpage@hyper\lastpage@one%
|
275
|
+
\lastpage@fileswtestHy%
|
276
|
+
\fi%
|
277
|
+
\fi%
|
278
|
+
\fi%
|
279
|
+
}
|
280
|
+
|
281
|
+
\endinput
|
282
|
+
%%
|
283
|
+
%% End of file `lastpage.sty'.
|
@@ -0,0 +1,70 @@
|
|
1
|
+
%%
|
2
|
+
%% This is file `lastpage209.sty',
|
3
|
+
%% generated with the docstrip utility.
|
4
|
+
%%
|
5
|
+
%% The original source files were:
|
6
|
+
%%
|
7
|
+
%% lastpage.dtx (with options: `lastpage209')
|
8
|
+
%%
|
9
|
+
%% This is a generated file.
|
10
|
+
%%
|
11
|
+
%% Project: lastpage
|
12
|
+
%% Version: 2015/03/29 v1.2m
|
13
|
+
%%
|
14
|
+
%% Copyright (C) 2010 - 2015 by
|
15
|
+
%% H.-Martin M"unch <Martin dot Muench at Uni-Bonn dot de>
|
16
|
+
%% Portions of code copyrighted by other people as marked.
|
17
|
+
%%
|
18
|
+
%% The usual disclaimer applies:
|
19
|
+
%% If it doesn't work right that's your problem.
|
20
|
+
%% (Nevertheless, send an e-mail to the maintainer
|
21
|
+
%% when you find an error in this package.)
|
22
|
+
%%
|
23
|
+
%% This work may be distributed and/or modified under the
|
24
|
+
%% conditions of the LaTeX Project Public License, either
|
25
|
+
%% version 1.3c of this license or (at your option) any later
|
26
|
+
%% version. This version of this license is in
|
27
|
+
%% http://www.latex-project.org/lppl/lppl-1-3c.txt
|
28
|
+
%% and the latest version of this license is in
|
29
|
+
%% http://www.latex-project.org/lppl.txt
|
30
|
+
%% and version 1.3c or later is part of all distributions of
|
31
|
+
%% LaTeX version 2005/12/01 or later.
|
32
|
+
%%
|
33
|
+
%% This work has the LPPL maintenance status "maintained".
|
34
|
+
%%
|
35
|
+
%% The Current Maintainer of this work is H.-Martin Muench.
|
36
|
+
%%
|
37
|
+
%% This package was invented by
|
38
|
+
%% Jeffrey P. Goldberg (jeffrey+news at goldmark dot org).
|
39
|
+
%% I thought that a replacement was needed and therefore created the pageslts package,
|
40
|
+
%% https://www.ctan.org/pkg/pageslts
|
41
|
+
%% . Nevertheless, for compatibility with existing documents/packages as well as for
|
42
|
+
%% the low amount of resources needed by the lastpage package (no new counter!),
|
43
|
+
%% I updated this package.
|
44
|
+
%% Thanks go to Jeffrey P. Goldberg for allowing me to do this.
|
45
|
+
%%
|
46
|
+
%% This work consists of the main source file lastpage.dtx,
|
47
|
+
%% the README, and the derived files
|
48
|
+
%% lastpage.sty, lastpage.pdf,
|
49
|
+
%% lastpage.ins, lastpage.drv,
|
50
|
+
%% lastpage-example.tex, lastpage-example.pdf.
|
51
|
+
%%
|
52
|
+
%% In memoriam
|
53
|
+
%% Claudia Simone Barth + 1996/01/30
|
54
|
+
%% Tommy Muench + 2014/01/02
|
55
|
+
%% Hans-Klaus Muench + 2014/08/24
|
56
|
+
%%
|
57
|
+
% FOR LaTeX 2.09 ONLY - FOR LaTeX 2e USE lastpage.sty OR pageslts.sty!
|
58
|
+
% This is lastpage209.sty invented by Jeffrey P. Goldberg
|
59
|
+
% (jeffrey+news at goldmark dot org), maintained by
|
60
|
+
% H.-Martin M\"{u}ench (Martin dot Muench at Uni-Bonn dot de).
|
61
|
+
\let\origenddocument=\enddocument%
|
62
|
+
\def\enddocument{\clearpage%
|
63
|
+
{\addtocounter{page}{-1}%
|
64
|
+
\immediate\write\@mainaux{\string\newlabel{LastPage}{{}{\thepage}}}}%
|
65
|
+
\addtocounter{page}{+1}%
|
66
|
+
\origenddocument%
|
67
|
+
}%
|
68
|
+
\endinput
|
69
|
+
%%
|
70
|
+
%% End of file `lastpage209.sty'.
|
data/test/helper.rb
CHANGED
@@ -9,6 +9,12 @@ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
|
9
9
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
10
10
|
require 'erb_latex'
|
11
11
|
|
12
|
+
class CustomContext < ErbLatex::Context
|
13
|
+
def output_test_string
|
14
|
+
'A string from custom helper method'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
12
18
|
class MiniTest::Test
|
13
19
|
|
14
20
|
def document( name )
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erb_latex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathan Stitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
26
|
+
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: yard
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
47
|
+
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- - "
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0
|
54
|
+
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '
|
68
|
+
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: guard-minitest
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '0'
|
83
83
|
description: Applies ERB template processing to a Latex file and compiles it to a
|
84
84
|
PDF. Supports layouts, partials, and string escaping. Also supplies a Guard task
|
85
85
|
to watch for modifications and auto-building files.
|
@@ -108,6 +108,9 @@ files:
|
|
108
108
|
- lib/erb_latex/version.rb
|
109
109
|
- test/erb_latex_test.rb
|
110
110
|
- test/fixtures/body.tex.erb
|
111
|
+
- test/fixtures/custom_context.tex.erb
|
112
|
+
- test/fixtures/lastpage.sty
|
113
|
+
- test/fixtures/lastpage209.sty
|
111
114
|
- test/fixtures/layout.tex.erb
|
112
115
|
- test/fixtures/multi_page.tex.erb
|
113
116
|
- test/fixtures/partial.tex.erb
|
@@ -137,13 +140,16 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
140
|
version: '0'
|
138
141
|
requirements: []
|
139
142
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
143
|
+
rubygems_version: 2.5.1
|
141
144
|
signing_key:
|
142
145
|
specification_version: 4
|
143
146
|
summary: Applies ERB template processing to a Latex file and compiles it to a PDF
|
144
147
|
test_files:
|
145
148
|
- test/erb_latex_test.rb
|
146
149
|
- test/fixtures/body.tex.erb
|
150
|
+
- test/fixtures/custom_context.tex.erb
|
151
|
+
- test/fixtures/lastpage.sty
|
152
|
+
- test/fixtures/lastpage209.sty
|
147
153
|
- test/fixtures/layout.tex.erb
|
148
154
|
- test/fixtures/multi_page.tex.erb
|
149
155
|
- test/fixtures/partial.tex.erb
|