From aa4af0c42aa8065fbf8b079f5f86c251de8e4cdf Mon Sep 17 00:00:00 2001 From: Meik Hellmund Date: Tue, 14 May 2024 00:11:21 +0200 Subject: [PATCH] update extensions --- .../MHellmund/julia-color/_extension.yml | 4 ++ .../MHellmund/julia-color/ansi2htmltex.lua | 56 +++++++++++++++++++ .../julia-color/resources/typst/juliainc.typ | 31 ++++++++++ .../latex-environment/_extension.yml | 6 +- .../latex-environment/latex-environment.lua | 27 +++++++-- chapters/14_Plot.qmd | 1 - 6 files changed, 116 insertions(+), 9 deletions(-) create mode 100644 _extensions/MHellmund/julia-color/resources/typst/juliainc.typ diff --git a/_extensions/MHellmund/julia-color/_extension.yml b/_extensions/MHellmund/julia-color/_extension.yml index b264a63..ac280a4 100644 --- a/_extensions/MHellmund/julia-color/_extension.yml +++ b/_extensions/MHellmund/julia-color/_extension.yml @@ -15,3 +15,7 @@ contributes: pdf: include-in-header: - "resources/tex/juliainc.tex" + + typst: + include-in-header: + - "resources/typst/juliainc.typ" diff --git a/_extensions/MHellmund/julia-color/ansi2htmltex.lua b/_extensions/MHellmund/julia-color/ansi2htmltex.lua index 8e41bce..c8050c5 100644 --- a/_extensions/MHellmund/julia-color/ansi2htmltex.lua +++ b/_extensions/MHellmund/julia-color/ansi2htmltex.lua @@ -118,6 +118,55 @@ local function LaTeXconverter(fg, bg, bold, light, italic, underline, inverse) return starttag, endtag end + +local function Typstconverter(fg, bg, bold, light, italic, underline, inverse) + local starttag = "raw(\"" + local endtag = "\")" + + if inverse then + fg, bg = bg, fg + end + + if underline then + starttag = "show: c => underline(c);" .. starttag + end + + if type(bg) == "number" then + starttag = "show: c => invertbox(" .. ANSI_COLORS[bg+1] .. ",c);" .. starttag + elseif type(bg) == "table" then + starttag = string.format("show: c => invertbox(rgb(%d,%d,%d),c);", bg[1], bg[2], bg[3]) .. starttag + elseif inverse then + starttag = "show: c => invertbox(ansi-default-inverse-bg ,c);" .. starttag + end + + + if type(fg) == "number" then + starttag = "set text(fill:" .. ANSI_COLORS[fg+1] ..");" .. starttag + elseif type(fg) == "table" then + starttag = string.format("set text(fill:rgb(%d,%d,%d));", fg[1], fg[2], fg[3]) .. starttag + elseif inverse then + starttag = "set text(fill: ansi-default-inverse-fg);" .. starttag + end + + if italic then + starttag = "set text(style:\"italic\");" .. starttag + end + + if bold then + starttag = "set text(weight:\"bold\");" .. starttag + end + + if light then + starttag = "set text(weight:\"light\");" .. starttag + end + + + return "#{" .. starttag, endtag.."}" +end + + + + local function HTMLconverter(fg, bg, bold, light, italic, underline, inverse) if not (fg or bg or bold or light or italic or underline or inverse) then return "","" @@ -184,6 +233,9 @@ local function codeBlockTrans(e) elseif quarto.doc.isFormat('html') then converter = HTMLconverter fmt = 'html' + elseif quarto.doc.isFormat('typst') then + converter = Typstconverter + fmt = 'typst' else return end @@ -316,6 +368,10 @@ local function codeBlockTrans(e) if fmt == 'latex' then return pandoc.RawBlock(fmt, [[\begin{]]..texenv.."}\n"..out.."\n"..[[\end{]].. texenv .. "}") end + if fmt == 'typst' then + return pandoc.RawBlock(fmt, "#"..texenv.."[\n"..out.."\n]") + end + end diff --git a/_extensions/MHellmund/julia-color/resources/typst/juliainc.typ b/_extensions/MHellmund/julia-color/resources/typst/juliainc.typ new file mode 100644 index 0000000..ba12ab3 --- /dev/null +++ b/_extensions/MHellmund/julia-color/resources/typst/juliainc.typ @@ -0,0 +1,31 @@ + +#show raw: set text(font: "JuliaMono") + +// define cell layout +#let OutputCell = block.with(width:100%, inset: 5pt) +#let AnsiOutputCell = block.with(width: 100%, inset: 5pt) +#let StderrOutputCell = block.with(width: 100%, stroke: 1pt + red, inset: 5pt) + +//#set highlight(top-edge: "ascender", bottom-edge: "descender") +#let invertbox(color, c) = box(outset: (x: 0.05em, y: 0.25em), fill: color, c) + +//https://github.com/typst/typst/discussions/3057q + +#let ansi-black = rgb("#3E424D") +#let ansi-black-intense = rgb("#282C36") +#let ansi-red = rgb("#E75C58") +#let ansi-red-intense = rgb("#B22B31") +#let ansi-green = rgb("#00A250") +#let ansi-green-intense = rgb("#007427") +#let ansi-yellow = rgb("#DDB62B") +#let ansi-yellow-intense = rgb("#B27D12") +#let ansi-blue = rgb("#208FFB") +#let ansi-blue-intense = rgb("#0065CA") +#let ansi-magenta = rgb("#D160C4") +#let ansi-magenta-intense = rgb("#A03196") +#let ansi-cyan = rgb("#60C6C8") +#let ansi-cyan-intense = rgb("#258F8F") +#let ansi-white = rgb("#C5C1B4") +#let ansi-white-intense = rgb("#A1A6B2") +#let ansi-default-inverse-fg = rgb("#FFFFFF") +#let ansi-default-inverse-bg = rgb("#000000") diff --git a/_extensions/quarto-ext/latex-environment/_extension.yml b/_extensions/quarto-ext/latex-environment/_extension.yml index 0e655d7..2f55b2f 100644 --- a/_extensions/quarto-ext/latex-environment/_extension.yml +++ b/_extensions/quarto-ext/latex-environment/_extension.yml @@ -1,7 +1,7 @@ title: LaTeX Environment -author: RStudio, PBC -version: 1.1.1 -quarto-required: ">=1.2.198" +author: Posit Software, PBC +version: 1.2.1 +quarto-required: ">=1.3" contributes: filters: - latex-environment.lua diff --git a/_extensions/quarto-ext/latex-environment/latex-environment.lua b/_extensions/quarto-ext/latex-environment/latex-environment.lua index 0c7b8f0..389a25f 100644 --- a/_extensions/quarto-ext/latex-environment/latex-environment.lua +++ b/_extensions/quarto-ext/latex-environment/latex-environment.lua @@ -97,6 +97,17 @@ local function writeEnvironments(divEl) end end +local function buildCommandArgs(opts, format) + local function wrap(o) + return string.format(format, o) + end + local t = pandoc.List() + for str in string.gmatch(opts, "([^"..",".."]+)") do + t:insert(str) + end + return table.concat(t:map(wrap), "") +end + -- use the environments from metadata to -- emit a custom environment for latex local function writeCommands(spanEl) @@ -105,19 +116,25 @@ local function writeCommands(spanEl) if spanEl.attr.classes:includes(k) then -- resolve the begin command - local beginCommand = pandoc.RawInline('latex', '\\' .. pandoc.utils.stringify(v) .. '{') + local beginCommand = '\\' .. pandoc.utils.stringify(v) local opts = spanEl.attr.attributes['options'] + local args = spanEl.attr.attributes['arguments'] if opts then - beginCommand = pandoc.RawInline('latex', '\\' .. pandoc.utils.stringify(v) .. '[' .. opts .. ']{') + beginCommand = beginCommand .. buildCommandArgs(opts, "[%s]") + end + if args then + beginCommand = beginCommand .. buildCommandArgs(args, "{%s}") end + local beginCommandRaw = pandoc.RawInline('latex', beginCommand .. '{') + -- the end command - local endCommand = pandoc.RawInline('latex', '}') + local endCommandRaw = pandoc.RawInline('latex', '}') -- attach the raw inlines to the span contents local result = spanEl.content - table.insert(result, 1, beginCommand) - table.insert(result, endCommand) + table.insert(result, 1, beginCommandRaw) + table.insert(result, endCommandRaw) return result end diff --git a/chapters/14_Plot.qmd b/chapters/14_Plot.qmd index 177004e..b90abcb 100644 --- a/chapters/14_Plot.qmd +++ b/chapters/14_Plot.qmd @@ -26,7 +26,6 @@ Es ist vollständig in Julia geschrieben und bietet als _backends_ `Cairo` (Vekt - [Beautiful Makie](https://beautiful.makie.org/) - eine Seite mit vielen Beispielen - ## Einbindung anderer Grafikbibliotheken