jirutka / asciidoctor-katex

Asciidoctor extension for converting latexmath using KaTeX at build time
MIT License
17 stars 5 forks source link

Requiring asciidoctor-katex fails #11

Closed hybras closed 1 year ago

hybras commented 2 years ago

I am unable to run the example in the readme. I'm using the asciidoctor docker container, after running gem install asciidoctor-katex and apk add nodejs.

Stacktrace ``` /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-katex-0.4.0/lib/asciidoctor/katex/treeprocessor.rb:25:in 'initialize': asciidoctor: FAILED: /documents/answers.adoc: Failed to load AsciiDoc document - wrong number of arguments (given 1, expected 0) (ArgumentError) from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:1359:in 'new' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:1359:in 'add_document_processor' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:837:in 'tree_processor' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-katex-0.4.0/lib/asciidoctor/katex.rb:11:in 'block in ' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:737:in 'instance_exec' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:737:in 'block in activate' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:732:in 'each' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/extensions.rb:732:in 'activate' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/document.rb:497:in 'initialize' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/load.rb:84:in 'new' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/load.rb:84:in 'load' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/convert.rb:78:in 'convert' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/convert.rb:190:in 'block in convert_file' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/convert.rb:190:in 'open' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/convert.rb:190:in 'convert_file' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/cli/invoker.rb:129:in 'block in invoke!' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/cli/invoker.rb:112:in 'each' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/lib/asciidoctor/cli/invoker.rb:112:in 'invoke!' from /usr/lib/ruby/gems/3.0.0/gems/asciidoctor-2.0.17/bin/asciidoctor:15:in '' from /usr/bin/asciidoctor:25:in 'load' from /usr/bin/asciidoctor:25:in '
' ```
traits commented 1 year ago

This still makes the gem completely unusable for newer asciidoc versions. Anyone?

traits commented 1 year ago

I will not provide a formal PR here, but FWIW:

I'm no Ruby programmer, but probably something changed in AsciiDoctor's TreeProcessor constructor signature. The following fixed this for me:

class Treeprocessor < ::Asciidoctor::Extensions::Treeprocessor
    def initialize(*, katex_options: {}, katex_renderer: nil, require_stem_attr: true, **)  # <-- 1st arg here
      @katex_renderer = katex_renderer || KatexAdapter.new(katex_options)
      @require_stem_attr = require_stem_attr
      super()  # <-- here
    end
hybras commented 1 year ago

As per the Asciidoctor extension/processor api, a processor should take a config hash. This lib's treeprocessor does not, instead taking keyword args (with default values). I suspect this happened due to ruby 2 and 3 handling keyword args differently.

hybras commented 1 year ago

Hey you beat me to it! I was literally about to file a PR.