jektex 0.0.5 → 0.0.8

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 290626aa91c28cc4961baf40ec00dde81928da68e0a923ee84999027e7f3c9b0
4
- data.tar.gz: 4ec8d501a4ab6f1b068ec01bb21a7d84bd844a5bca7d105bdc0c9c6e2652eec8
3
+ metadata.gz: 9405c84a9c1c4d137d5f9fe152943a72613a52fb741ea8dc3074c64368257b77
4
+ data.tar.gz: fcf023964df85b84be1ebab055fd778f923a63e3857facc083e451370168b366
5
5
  SHA512:
6
- metadata.gz: ccdddba235b4d0462ccb5e4d2ee4cbf5b97e9964c10fd0395e814635281563c6363a381422feeefdd9eb6a895877a47aba6fae95de36c98a6f710785ed18ba51
7
- data.tar.gz: 4d0a8dad642c30c5f26ca5903d715e3728d918bb17fe1eaeaf3ce8ad814a25e9c50d0df15533522275665978971ee269164a2969cf73db9823b71b9ea29a7217
6
+ metadata.gz: 1fda6a4eda19f919edc732da120ccfe2a20c520476465d53d79a98eb80087d94b438a84b863194009213781f5b15d180a5e7b22a6ca1eeb35e4bf3676da709c2
7
+ data.tar.gz: 7f3bd08cb26988e28c5ff910148404dcc0dee7f83478bbd04786aa5bf73ca5ea50fc93117e536c417549cb98f2192a27b20bdea99e598d3fcc15b49ef9b71208
data/README.md CHANGED
@@ -1,23 +1,27 @@
1
+ [![Gem Version](https://badge.fury.io/rb/jektex.svg)](https://rubygems.org/gems/jektex)
2
+
1
3
  # Jektex
2
- Jekyll plugin for blazing fast server side cached LaTeX rendering with support of macros.
3
- Enjoy comfort of latex and markdown without cluttering your site with bloated javascript.
4
+ A Jekyll plugin for blazing-fast server-side cached LaTeX rendering, with support for macros.
5
+ Enjoy the comfort of LaTeX and Markdown without cluttering your site with bloated JavaScript.
4
6
 
5
7
  ## Features
6
8
  - Renders LaTeX formulas during Jekyll rendering
7
- - Works without any javascript on clients side
8
- - Is faster than any other server side Jekyll latex renderer
9
- - Supports user defined global macros
10
- - Has I/O efficient caching system
11
- - Has dynamic and informative log during rendering
12
- - Is easy to setup
13
- - Does not interfere with Jekyll workflow and project structure
14
- - Marks invalid syntax in document
15
- - Prints location of invalid expression during rendering
16
- - Highly configurable but still having sensible defaults
9
+ - Works without any client-side JavaScript
10
+ - Is faster than any other server-side Jekyll LaTeX renderer
11
+ - Supports user-defined global macros
12
+ - Has I/O-efficient caching system
13
+ - Dynamically informs about the number of expressions during rendering
14
+ - Is very easy to setup
15
+ - Doesn't interfere with Jekyll workflow and project structure
16
+ - Marks invalid expressions in document, printing its location during rendering
17
+ - Is highly configurable with sensible defaults
18
+ - Makes sure that cache does not contain expression rendered with outdated configuration
17
19
 
18
20
  ## Usage
19
21
 
20
- ### Notation
22
+ Jektex supports both the built-in Kramdown math notation, and the newer LaTeX-only math notation.
23
+
24
+ ### Kramdown notation
21
25
  **Inline formula**
22
26
  Put formula between two pairs of dolar signs (`$$`) inside of paragraph.
23
27
  ```latex
@@ -26,7 +30,7 @@ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliq
26
30
  ```
27
31
 
28
32
  **Display formula**
29
- Put formula between two pairs of dolar sings (`$$`) and surround it by two empty lines.
33
+ Put formula between two pairs of dolar sings (`$$`) and surround it with two empty lines.
30
34
  ```latex
31
35
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
32
36
  incididunt ut labore et dolore magna aliqua.
@@ -42,54 +46,74 @@ display mode?
42
46
  This is how [kramdown](https://kramdown.gettalong.org/)(Jekyll's markdown parser) works
43
47
  so I decided to respect this convention. It makes this plugin more consistent and universal._
44
48
 
49
+
50
+ ### LaTex math mode notation
51
+ **Inline formula**
52
+ Put formula between two escaped brackets `\(` `\)`.
53
+ Its position in the text does not matter.
54
+ ```latex
55
+ Lorem ipsum dolor sit amet, consectetur \(e^{i\theta}=\cos(\theta)+i\sin(\theta)\)
56
+ adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
57
+ ```
58
+
59
+ **Display formula**
60
+ Put formula between two escaped square brackets `\[` `\]`.
61
+ Its position in the text does not matter.
62
+ ```latex
63
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
64
+ incididunt ut labore et dolore magna aliqua.
65
+
66
+ \[ \left[ \frac{-\hbar^2}{2\mu}\nabla^2 + V(\mathbf{r},t)\right] \Psi(\mathbf{r},t) \]
67
+
68
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex
69
+ ea commodo consequat.
70
+ ```
71
+
45
72
  ### Config
46
- Jektex si highly configurable from your `_config.yml` file
73
+ Jektex si highly configurable via your `_config.yml` file.
47
74
 
48
75
  **Disabling cache**
49
- You can disable caching with `disable_disk_cache = true` in `_config.yml`. Cache is
50
- enabled by default. You can find more information on [Jekyll official website](https://jekyllrb.com/docs/configuration/options/).
76
+ You can disable caching with `disable_disk_cache = true` in `_config.yml`.
77
+ Caching is enabled by default.
78
+ You can find more information on [Jekyll's official website](https://jekyllrb.com/docs/configuration/options/).
51
79
 
52
80
  **Setting cache location**
53
- By default jektex cache will be saved in `.jekyll-cache` directory. This results in it's
54
- deletion when you call `jekyll clean`. To prevent cache deletion or you just want to
55
- change location of cache for another reason you can achieve that by specifying
56
- `cache_dir` in `_config.yml`.
81
+ By default, Jektex cache will be saved in `.jekyll-cache` directory.
82
+ This results in its deletion when you call `jekyll clean`.
83
+ To prevent cache deletion or to change the cache location, you can specify `cache_dir` in `_config.yml`:
57
84
  ```yaml
58
85
  # Jektex cache dir location
59
86
  jektex:
60
87
  cache_dir: ".jektex-cache"
61
88
  ```
62
89
 
63
- **Ignore**
64
- By default jektex tries to render LaTeX in all files not excluded by Jekyll. But
65
- sometimes you get in situation when you do not want to render some files. For example
66
- _RSS feed_ with excerpts containing LaTeX. As a solution jektex offers `ignore` option.
67
- You can use conventional wild cards using `*`. For example:
90
+ **Ignoring files**
91
+ By default, Jektex tries to render LaTeX in all files rendered by Jekyll.
92
+ This can sometimes be undesirable, for example when rendering an _RSS feed_ with excerpts containing LaTeX.
93
+ Jektex solves this by using the `ignore` option:
68
94
  ```yaml
69
95
  # Jektex ignore files
70
96
  jektex:
71
97
  ignore: ["*.xml", "README.md", "_drafts/*" ]
72
98
  ```
73
99
 
74
- This example configuration ignores all `.xml` files, `README.md` and all files
75
- in `_drafts` directory.
100
+ You can use conventional wild cards using `*`.
101
+ This example configuration ignores all `.xml` files, `README.md` and all files in the `_drafts` directory.
76
102
 
77
- Another option for ignoring specific posts is setting `jektex` tag in front matter of
78
- post to `false`. For example:
103
+ Another way to ignore specific posts is setting the `jektex` attribute in front matter to `false`:
79
104
  ```yaml
80
105
  ---
81
- title: "How Jektex works"
106
+ ttle: "How Jektex works"
82
107
  category: "Development"
83
108
  jektex: false
84
109
  layout: post
85
110
  ---
86
111
  ```
87
112
 
88
- Setting `jektex` tag to `true` or not setting at all will result in jektex rendering LaTeX
89
- expressions in that post.
113
+ Setting `jektex` tag to `true` or not setting at all will result in Jektex rendering LaTeX expressions in that post.
90
114
 
91
- **Macros**
92
- You can define global macros like this:
115
+ **Using macros**
116
+ You can define global macros:
93
117
  ```yaml
94
118
  # Jektex macros
95
119
  jektex:
@@ -97,9 +121,8 @@ jektex:
97
121
  - ["\\Q", "\\mathbb{Q}"]
98
122
  - ["\\C", "\\mathbb{C}"]
99
123
  ```
100
- And yes you have to escape backlash(`\`) with another backlash. This is caused by
101
- [yaml definition](https://yaml.org/). YOU SHOULD ALWAYS delete jektex cache after changing
102
- definition of a macro for change to take effect.
124
+ And yes, you have to escape the backlash (`\`) with another backlash.
125
+ This is due to the [yaml specification](https://yaml.org/).
103
126
 
104
127
  **Complete examples**
105
128
  Recommended config:
@@ -111,6 +134,7 @@ jektex:
111
134
  - ["\\Q", "\\mathbb{Q}"]
112
135
  - ["\\C", "\\mathbb{C}"]
113
136
  ```
137
+
114
138
  Having no configuration is equivalent to this:
115
139
  ```yaml
116
140
  jektex:
@@ -123,7 +147,7 @@ jektex:
123
147
  This plugin is available as a [RubyGem](https://rubygems.org/gems/jektex).
124
148
 
125
149
  **Using bundler**
126
- Add `jektex` to your `Gemfile` like this:
150
+ Add Jektex to your `Gemfile`:
127
151
  ```ruby
128
152
  group :jekyll_plugins do
129
153
  gem "jektex"
@@ -133,22 +157,23 @@ end
133
157
  and run `bundle install`
134
158
 
135
159
  **Without bundler**
136
- Just run `gem install jektex`
160
+ Run `gem install jektex`
137
161
 
138
162
  **After installation**
139
- Add jektex to your plugin list in your `_config.yml` file:
163
+ Add Jektex to your plugin list in your `_config.yml` file
140
164
  ```yaml
141
165
  plugins:
142
166
  - jektex
143
167
  ```
144
168
 
145
- and do not forget to add `katex.min.css` to you html head:
169
+ and don't forget to add `katex.min.css` to you HTML head:
146
170
  ```html
147
171
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css" integrity="sha384-MlJdn/WNKDGXveldHDdyRP1R4CTHr3FeuDNfhsLPYrq2t0UBkUdK2jyTnXPEK1NQ" crossorigin="anonymous">
148
172
  ```
149
- It is much better practice to download **css** file and load it as an asset from your server directly.
173
+ It is much better practice to download the [**css** file](https://cdn.jsdelivr.net/npm/katex@0.15.2/dist/katex.min.css) and load it as an asset from your server directly.
150
174
  You can find more information on [KaTeX's website](https://katex.org/docs/browser.html).
151
175
 
152
176
  ## Contributions and bug reports
153
177
  Feel free to repost any bugs or even make feature request in [issues on official repository](https://github.com/yagarea/jektex/issues).
154
178
  I am opened for pull requests as well.
179
+
data/lib/jektex/jektex.rb CHANGED
@@ -7,146 +7,176 @@ PATH_TO_JS = File.join(__dir__, "/katex.min.js")
7
7
  DEFAULT_CACHE_DIR = ".jekyll-cache"
8
8
  CACHE_FILE = "jektex-cache.marshal"
9
9
  KATEX = ExecJS.compile(open(PATH_TO_JS).read)
10
- PARSE_ERROR_PLACEHOLDER = "<b style='color: red;'>PARSE ERROR</b>"
11
10
  FRONT_MATTER_TAG = "jektex"
11
+ INDENT = " " * 13
12
+
12
13
  $global_macros = Hash.new
14
+ $updated_global_macros = Array.new
15
+
13
16
  $count_newly_generated_expressions = 0
17
+
14
18
  $path_to_cache = File.join(DEFAULT_CACHE_DIR, CACHE_FILE)
15
19
  $cache = nil
16
20
  $disable_disk_cache = false
21
+
17
22
  $ignored = Array.new
18
23
 
24
+ def get_list_of_updated_global_macros(current_macros, cached_global_macros)
25
+ return Array.new unless cached_global_macros || current_macros
26
+ return current_macros.keys unless cached_global_macros
27
+ return cached_global_macros.keys unless current_macros
28
+
29
+ macro_set = Set.new(cached_global_macros.keys + current_macros.keys)
30
+ macro_set.delete_if { |m| cached_global_macros[m] == current_macros[m] }
31
+ return macro_set.to_a
32
+ end
33
+
19
34
  def is_ignored?(page)
20
- for patern in $ignored
21
- if File.fnmatch?(patern, page.relative_path, File::FNM_DOTMATCH) then
22
- return true
23
- end
24
- end
25
- return false
35
+ return true if page.data[FRONT_MATTER_TAG] == "false"
36
+ return $ignored.any? { |patern| File.fnmatch?(patern, page.relative_path, File::FNM_DOTMATCH) }
37
+ end
38
+
39
+ def contains_updated_global_macro?(expression)
40
+ return $updated_global_macros.any? { |m| expression[m] }
26
41
  end
27
42
 
28
- def render(page)
43
+ def print_stats
44
+ print "#{INDENT}LaTeX: " \
45
+ "#{$count_newly_generated_expressions} expressions rendered " \
46
+ "(#{$cache.size} already cached)".ljust(72) + "\r"
47
+ $stdout.flush
48
+ end
49
+
50
+ #######################################################################################
51
+ # Render
52
+
53
+ def render_latex_notation(page)
29
54
  # check if document is not set to be ignored
30
- if page.data == nil or is_ignored?(page) or page.data[FRONT_MATTER_TAG] == "false" then
31
- return page.output
32
- end
55
+ return page.content if !page.data || is_ignored?(page)
56
+ # convert HTML entities back to characters
57
+ post = HTMLEntities.new.decode(page.content.to_s)
58
+ # render inline expressions
59
+ post = post.gsub(/(\\\()((.|\n)*?)(?<!\\)\\\)/) { |m| escape_method($1, $2, page.relative_path) }
60
+ # render display mode expressions
61
+ post = post.gsub(/(\\\[)((.|\n)*?)(?<!\\)\\\]/) { |m| escape_method($1, $2, page.relative_path) }
62
+ return post
63
+ end
33
64
 
65
+ def render_kramdown_notation(page)
66
+ # check if document is not set to be ignored
67
+ return page.output if !page.data || is_ignored?(page)
34
68
  # convert HTML entities back to characters
35
69
  post = HTMLEntities.new.decode(page.output.to_s)
36
70
  # render inline expressions
37
- post = post.gsub(/(\\\()((.|\n)*?)(?<!\\)\\\)/) { |m| escape_method($1, $2, page.path) }
38
- # render display expressions
39
- post = post.gsub(/(\\\[)((.|\n)*?)(?<!\\)\\\]/) { |m| escape_method($1, $2, page.path) }
71
+ post = post.gsub(/(\\\()((.|\n)*?)(?<!\\)\\\)/) { |m| escape_method($1, $2, page.relative_path) }
72
+ # render display mode expressions
73
+ post = post.gsub(/(\\\[)((.|\n)*?)(?<!\\)\\\]/) { |m| escape_method($1, $2, page.relative_path) }
40
74
  return post
41
75
  end
42
76
 
43
- def escape_method( type, string, doc_path )
44
- @display = false
45
-
46
- # detect if expression is display view
47
- case type.downcase
48
- when /\(/
49
- @display = false
50
- else /\[/
51
- @display = true
52
- end
77
+ def escape_method( type, expression, doc_path )
78
+ # detect if expression is in display mode
79
+ is_in_display_mode = type.downcase =~ /\[/
53
80
 
54
81
  # generate a hash from the math expression
55
- @expression_hash = Digest::SHA2.hexdigest(string) + @display.to_s
82
+ expression_hash = Digest::SHA2.hexdigest(expression) + is_in_display_mode.to_s
56
83
 
57
84
  # use it if it exists
58
- if($cache.has_key?(@expression_hash))
85
+ if($cache.has_key?(expression_hash) && !contains_updated_global_macro?(expression))
86
+ # check if expressin conains updated macro
59
87
  $count_newly_generated_expressions += 1
60
88
  print_stats
61
- return $cache[@expression_hash]
89
+ return $cache[expression_hash]
62
90
 
63
91
  # else generate one and store it
64
92
  else
65
93
  # create the cache directory, if it doesn't exist
66
94
  begin
67
95
  # render using ExecJS
68
- @result = KATEX.call("katex.renderToString", string,
69
- {displayMode: @display, macros: $global_macros})
96
+ result = KATEX.call("katex.renderToString", expression,
97
+ { displayMode: is_in_display_mode,
98
+ macros: $global_macros
99
+ })
70
100
  rescue SystemExit, Interrupt
71
101
  # save cache to disk
72
102
  File.open($path_to_cache, "w"){|to_file| Marshal.dump($cache, to_file)}
73
103
  # this stops jekyll being immune to interrupts and kill command
74
104
  raise
75
- rescue Exception => e
105
+ rescue ExecJS::ProgramError => pe
76
106
  # catch parse error
77
- puts "\e[31m " + e.message.gsub("ParseError: ", "") + "\n\t" + doc_path + "\e[0m"
78
- return PARSE_ERROR_PLACEHOLDER
107
+ puts "\e[31m #{pe.message.gsub("ParseError: ", "")}\n\t#{doc_path}\e[0m"
108
+ # render expression with error highlighting enabled
109
+ return KATEX.call("katex.renderToString", expression,
110
+ { displayMode: is_in_display_mode,
111
+ macros: $global_macros,
112
+ throwOnError: false
113
+ })
79
114
  end
80
115
  # save to cache
81
- $cache[@expression_hash] = @result
116
+ $cache[expression_hash] = result
82
117
  # update count of newly generated expressions
83
118
  $count_newly_generated_expressions += 1
84
119
  print_stats
85
- return @result
120
+ return result
86
121
  end
87
122
  end
88
123
 
89
- def print_stats
90
- print " LaTeX: " +
91
- ($count_newly_generated_expressions).to_s +
92
- " expressions rendered (" + $cache.size.to_s +
93
- " already cached) \r"
94
- $stdout.flush
95
- end
96
-
97
124
  Jekyll::Hooks.register :pages, :post_render do |page|
98
- page.output = render(page)
125
+ page.output = render_kramdown_notation(page)
99
126
  end
100
127
 
101
128
  Jekyll::Hooks.register :documents, :post_render do |doc|
102
- doc.output = render(doc)
129
+ doc.output = render_kramdown_notation(doc)
130
+ end
131
+
132
+ Jekyll::Hooks.register :pages, :pre_render do |page|
133
+ page.content = render_latex_notation(page)
103
134
  end
104
135
 
136
+ Jekyll::Hooks.register :documents, :pre_render do |doc|
137
+ doc.content = render_latex_notation(doc)
138
+ end
139
+
140
+ #######################################################################################
141
+ # SETTINGS AND INIT
142
+
105
143
  Jekyll::Hooks.register :site, :after_init do |site|
106
- if site.config["jektex"] == nil then
107
- # if no config is defined make empty one
108
- config = Hash.new
144
+ # load jektex config from config file and if no config is defined make empty one
145
+ config = site.config["jektex"] || Hash.new
146
+
147
+ # check if there is defined custom cache location in config
148
+ $path_to_cache = File.join(config["cache_dir"].to_s, CACHE_FILE) if config.has_key?("cache_dir")
149
+
150
+ # load content of cache file if it exists
151
+ if File.exist?($path_to_cache)
152
+ $cache = File.open($path_to_cache, "r"){ |from_file| Marshal.load(from_file)}
109
153
  else
110
- # load jektex config from config file
111
- config = site.config["jektex"]
154
+ $cache = Hash.new
112
155
  end
156
+
157
+ # check if cache is disabled in config
158
+ $disable_disk_cache = site.config["disable_disk_cache"] if site.config.has_key?("disable_disk_cache")
159
+
113
160
  # load macros
114
- if config["macros"] != nil then
161
+ if config.has_key?("macros")
115
162
  for macro_definition in config["macros"]
116
163
  $global_macros[macro_definition[0]] = macro_definition[1]
117
164
  end
118
165
  end
119
166
 
167
+ # make list of updated macros
168
+ $updated_global_macros = get_list_of_updated_global_macros($global_macros, $cache["cached_global_macros"])
120
169
  # print macro information
121
- if $global_macros.size == 0 then
122
- puts " LaTeX: no macros loaded"
170
+ if $global_macros.empty?
171
+ puts "#{INDENT}LaTeX: no macros loaded"
123
172
  else
124
- puts " LaTeX: " + $global_macros.size.to_s + " macro" +
125
- ($global_macros.size == 1 ? "" : "s") + " loaded"
126
- end
127
-
128
- # check if there is defined custom cache location in config
129
- if config["cache_dir"] != nil then
130
- $path_to_cache = File.join(config["cache_dir"].to_s, CACHE_FILE)
173
+ puts "#{INDENT}LaTeX: #{$global_macros.size} macro" \
174
+ "#{$global_macros.size == 1 ? "" : "s"} loaded" +
175
+ ($updated_global_macros.empty? ? "" : " (#{$updated_global_macros.size} updated)")
131
176
  end
132
177
 
133
178
  # load list of ignored files
134
- if config["ignore"] != nil then
135
- $ignored = config["ignore"]
136
- end
137
-
138
- # load content of cache file if it exists
139
- if(File.exist?($path_to_cache)) then
140
- $cache = File.open($path_to_cache, "r"){|from_file| Marshal.load(from_file)}
141
- else
142
- $cache = Hash.new
143
- end
144
-
145
- # check if cache is disable in config
146
- if site.config["disable_disk_cache"] != nil then
147
- $disable_disk_cache = site.config["disable_disk_cache"]
148
- end
149
-
179
+ $ignored = config["ignore"] if config.has_key?("ignore")
150
180
  end
151
181
 
152
182
  Jekyll::Hooks.register :site, :after_reset do
@@ -155,12 +185,18 @@ Jekyll::Hooks.register :site, :after_reset do
155
185
  end
156
186
 
157
187
  Jekyll::Hooks.register :site, :post_write do
188
+ # print stats once more to prevent them from being overwriten by error log
189
+ print_stats
158
190
  # print new line to prevent overwriting previous output
159
191
  print "\n"
160
192
  # check if caching is enabled
161
- if $disable_disk_cache == false
193
+ if !$disable_disk_cache
194
+ # save global macros to cache
195
+ $cache["cached_global_macros"] = $global_macros
196
+ # create cache path
197
+ Pathname.new($path_to_cache).dirname.mkpath
162
198
  # save cache to disk
163
- Dir.mkdir(File.dirname($path_to_cache)) unless File.exists?(File.dirname($path_to_cache))
164
199
  File.open($path_to_cache, "w"){|to_file| Marshal.dump($cache, to_file)}
165
200
  end
166
201
  end
202
+
@@ -1,3 +1,3 @@
1
1
  module Jektex
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jektex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Černý
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-22 00:00:00.000000000 Z
11
+ date: 2022-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: execjs
@@ -108,7 +108,7 @@ licenses:
108
108
  - GPL-3.0-or-later
109
109
  metadata:
110
110
  bug_tracker_uri: https://github.com/yagarea/jektex/issues
111
- documentation_uri: https://github.com/yagarea/jektex
111
+ documentation_uri: https://github.com/yagarea/jektex/blob/master/README.md
112
112
  homepage_uri: https://github.com/yagarea/jektex
113
113
  source_code_uri: https://github.com/yagarea/jektex
114
114
  changelog_uri: https://github.com/yagarea/jektex/blob/master/changelog.md
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  - !ruby/object:Gem::Version
128
128
  version: '0'
129
129
  requirements: []
130
- rubygems_version: 3.3.5
130
+ rubygems_version: 3.3.8
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: Highly optimized latex rendering for Jekyll