diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 88aa252..51a4fd0 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -257,7 +257,8 @@ } ], "direction": "horizontal", - "width": 200 + "width": 200, + "collapsed": true }, "left-ribbon": { "hiddenItems": { @@ -274,6 +275,7 @@ }, "active": "b8c0b940e83a0cce", "lastOpenFiles": [ + "conf/sedSNuLNp", "chapters/00_Introduction.md", "chapters/01_Getting_Started.md", "chapters/02_Features.md", diff --git a/build/basic-book-builder.pdf b/build/basic-book-builder.pdf index 8d9991b..9ea5ca2 100644 Binary files a/build/basic-book-builder.pdf and b/build/basic-book-builder.pdf differ diff --git a/chapters/01_Getting_Started.md b/chapters/01_Getting_Started.md index 38ea34f..4981885 100644 --- a/chapters/01_Getting_Started.md +++ b/chapters/01_Getting_Started.md @@ -19,6 +19,7 @@ For Debian / ZorinOS and likely Ubuntu based systems. #### Code Editor + > [!established] Code Editor > [VSCodium](https://vscodium.com/) is recommend for privacy (telemetry/tracking) reasons > - https://vscodium.com/ diff --git a/filters/callouts.lua b/filters/callouts.lua index c0c0905..6b35d3d 100644 --- a/filters/callouts.lua +++ b/filters/callouts.lua @@ -10,46 +10,58 @@ local callout_env_map = { } -function BlockQuote(el) - if #el.content > 0 and el.content[1].t == "Para" then - local firstPara = el.content[1] - if #firstPara.content > 0 and firstPara.content[1].t == "Str" then - local firstWord = firstPara.content[1].text - local calloutType = firstWord:match("^%[%!(%w+)%]$") - if calloutType and callout_env_map[calloutType] then - -- remove the [!type] marker - table.remove(firstPara.content, 1) - -- remove one following space if present - if #firstPara.content > 0 and firstPara.content[1].t == "Space" then + function BlockQuote(el) + if #el.content > 0 and el.content[1].t == "Para" then + local firstPara = el.content[1] + if #firstPara.content > 0 and firstPara.content[1].t == "Str" then + local firstWord = firstPara.content[1].text + local calloutType = firstWord:match("^%[%!(%w+)%]$") + + if calloutType and callout_env_map[calloutType] then + -- 1. Remove the [!type] marker table.remove(firstPara.content, 1) - end - - -- gather optional custom title (may contain spaces) - local titleInlines = {} - while #firstPara.content > 0 do - local t = firstPara.content[1].t - if t == "SoftBreak" then + + -- 2. Remove one following space if present + if #firstPara.content > 0 and firstPara.content[1].t == "Space" then table.remove(firstPara.content, 1) - break - elseif t == "Space" or t == "Str" or t == "Emph" or t == "Strong" or t == "Code" then - table.insert(titleInlines, table.remove(firstPara.content, 1)) - else - break end + + -- 3. Gather optional custom title + local titleInlines = {} + while #firstPara.content > 0 do + local t = firstPara.content[1].t + if t == "SoftBreak" then + table.remove(firstPara.content, 1) + break + elseif t == "Space" or t == "Str" or t == "Emph" or t == "Strong" or t == "Code" then + table.insert(titleInlines, table.remove(firstPara.content, 1)) + else + break + end + end + + local customTitle = pandoc.utils.stringify(pandoc.Span(titleInlines)) + customTitle = customTitle:gsub("^%s+", ""):gsub("%s+$", "") + if customTitle == "" then customTitle = nil end + + -- 4. Map to LaTeX environment + local env = callout_env_map[calloutType] + local titleOption = customTitle and ("[" .. customTitle .. "]") or "[]" + + -- 5. Handle the Margin Issue + -- We add \par and \medskip specifically for 'established' + local prefix = "" + if calloutType == "established" then + prefix = "\\par\\medskip\\noindent\n" + end + + -- 6. Construct the LaTeX block + local latex = prefix .. "\\begin{" .. env .. "}" .. titleOption .. "\n" + .. pandoc.write(pandoc.Pandoc(el.content), "latex") + .. "\n\\end{" .. env .. "}" + + return pandoc.RawBlock("latex", latex) end - local customTitle = pandoc.utils.stringify(pandoc.Span(titleInlines)) - customTitle = customTitle:gsub("^%s+", ""):gsub("%s+$", "") - if customTitle == "" then customTitle = nil end - - local env = callout_env_map[calloutType] - local titleOption = customTitle and ("[" .. customTitle .. "]") or "[]" - - local latex = "\\begin{" .. env .. "}" .. titleOption .. "\n" - .. pandoc.write(pandoc.Pandoc(el.content), "latex") - .. "\n\\end{" .. env .. "}" - - return pandoc.RawBlock("latex", latex) end end - end -end + end \ No newline at end of file