Callouts are a great way to add more attention ot certain details of the text (in the form of a box). Quarto provides 5 different types of callouts:
note
warning
important
tip
caution
.
The color and icon will be different depending upon the type that you select. You could preview them in the official documentation - Quarto - Callout Blocks. If you want to check the end effect jump directly to it here.
When writing your text directly in markdown compiled in Quarto you need to use pandoc div
syntax
::: {.callout-note}
Note that there are five types of callouts, including:
`note`, `warning`, `important`, `tip`, and `caution`.
:::
When you want to edit your text in Obsidian obisidian doesnt pick the pandoc div
syntax, instead it will have:
> [!note] My note
>
> Note content
There is no easy way to have nice formatted callouts in qmd/md files in Obsidian before compiling them to pdf/html
Pandoc can be supplemented by filters written by Lua that might some complex operations with source text.
I found a nice pandoc filter on the Obsidian forum, which I modified, so it support the default callouts in Quarto.
You need to save it as a pandoc filter and put inro your project folder and point to it when running quarto command (either via commandline or by putting it into you _quart.yml
project settings.
In my case the file is called obsidian-callouts.lua
and I point to it in the _quarto,yml
in the root of the folder in the following section (I excluded irrelevant details):
project:
output-dir: _output
filters:
- filters/obsidian-callouts.lua
Content of the file obsidian-callouts.lua
:
local stringify = (require "pandoc.utils").stringify
function BlockQuote (el)
start = el.content[1]
if (start.t == "Para" and start.content[1].t == "Str" and
start.content[1].text:match("^%[!%w+%][-+]?$")) then
_, _, ctype = start.content[1].text:find("%[!(%w+)%]")
el.content:remove(1)
start.content:remove(1)
local class = "callout-" .. ctype:lower()
div = pandoc.Div(el.content, {class = class})
div.attributes["data-callout"] = ctype:lower()
div.attributes["title"] = stringify(start.content):gsub("^ ", "")
return div
else
return el
end
end
As a source I used this thread https://forum.obsidian.md/t/rendering-callouts-similarly-in-pandoc/40020/6
By default Obsidian recognize only note
and warning
callouts, to have the other 3 callouts the same icons and colors as in Quarto add the following CSS snippet quarto-callout-styllling
to hidden .snippets
folder and turn it on in the Obsidian appearance section of settings
/* See https://lucide.dev for icon codes */
/* annotation */
.callout[data-callout="important"] {
--callout-color: 251, 70, 76;
--callout-icon: lucide-alert-circle
}
.callout[data-callout="tip"] {
--callout-color: 28, 207, 110;
--callout-icon: lucide-lightbulb
}
.callout[data-callout="caution"] {
--callout-color: 255,153,102;
--callout-icon: lucide-flame
}
After applying the css could see the difference between callouts in Live Preview in Obsidian
and PDF generated via Quarto
Below is the markdown used to generate it
> [!note] My note
>
> Note content
> [!warning] My note
>
> Note content
> [!important] My note
>
> Note content
> [!tip] My note
>
> Note content
> [!caution] My note
>
> Note content
While those snippets will ensure that your notes will render nicely in Obsidian, it may cause other editors that support Quarto to offer the same (altough) it will nice compile to pdf/html.
I didnt extensively test this Lua filter, so it might easily go broke in more complex cases and if you will try to use the callouts outside the one defined in Quarto by default.
In general I enabled Obsidian to see quarto files as md files via plugin, and then use obsidian-shellcomands
with quarto render {{file_path:absolute}} --to pdf
to render the file inside Obsidian (quarto is installed via homebrew on mac, this might work for linux, I am not sure about windows).
I also assigned this shellcomand to a button in my GUI via commander
plugin (so I dont need to invoke it every time via command switcher when I want to re-run it on a file.
I created rudimentary plugin to support QMD files in Obsidian, in the Readme.md
you could find more advices how to streamline work with your qmd files in Quarto:
danieltomasz/qmd-as-md-obsidian: A plugin for Obsidian which allows editing of qmd
Quarto files.
Hi @jadebarclay, thanks for the comment!
I've put this gist in a blog post and rewritten it due to recent Quarto changes affecting how it parses callouts. Please use the updated gist from the blog post instead of this one: https://danielborek.me/2023/obsidian-quarto-callouts/
For wikilinks I'm using a different filter that unfortunately doesn't fully work for aliases.
https://gist.github.com/danieltomasz/bde887dcc775bd47acc0ddf993e3ec2b
Regarding adding this to the plugin - I could probably easily include the CSS and register it within Obsidian, but to make it worthwhile shipping the filter itself, I'd likely need to write a basic system for rendering and preview without relying on other plugins. That would be an interesting project for learning, but right now I unfortunately don't have time for it :(