Since that docbook note element becomes a div with class "note" in the
Pandoc AST you can use a Lua filter to modify the AST for divs with such
a class, by inserting a paragraph with the "Note" label wrapped in div
with a 'custom-style' attribute so that you can apply a custom paragraph
style to the paragraph in docx.
Here is the Lua filter I use for this admonitions when converting to
docx, slightly modified:
``` lua
-- Edit this with labels and attributes for admonition div classes
local cls_data = {
note = {
label = 'Note',
label_attrs = {
['custom-style'] = 'NoteLabel'
},
text_attrs = {
-- ['custom-style'] = 'NoteText'
}
},
warning = {
label = 'Warning',
label_attrs = {
['custom-style'] = 'WarningLabel'
},
text_attrs = {
-- ['custom-style'] = 'WarningText'
}
}
}
-- Get the pandoc library under a shorter name
local p = assert(pandoc, "Cannot find the pandoc library")
if not ('table' == type(p)) then
error("Expected variable pandoc to be table")
end
-- Create the label divs
for cls, data in pairs(cls_data) do
data.label = p.Div({
p.Para({ p.Str(data.label) })
}, data.label_attrs)
end
-- The filter function
function Div (div)
for _, cls in ipairs(div.classes) do
local data = cls_data[cls] -- get data if any
if data then -- if this is an admonition class
-- Set the attributes on the div
for name, val in pairs(data.text_attrs) do
div.attributes[name] = val
end
-- Return the data and the div
return { data.label:clone(), div }
end
end
-- If no class matches
return nil
end
```
Each key in the table `cls_data` is a class which occurs on a div which
should be styled as an admonition. You probably want to add and/or
modify entries in this table to match the classes of divs you want to
style and the paragraph style names you actually have in your
reference-doc.docx.
Each value in that table is a table with three fields:
1. `label` is the string you want as text in the label paragraph above
the text of the div, e.g. "Note".
2. `label_attrs` is a table with the attributes you want to apply to
the div containing the label paragraph, notably the custom-style to
apply to the paragraph.
3. `text_attrs` is a table containing attributes you want to apply to
the admonition text, i.e. the original div. I have commented out
these attributes since a custom-style here will override any
paragraph styles which Pandoc might apply to paragraphs inside the
original div. _If_ you want a custom-style here you might want ro
use it to apply some indentation for example.
An alternative strategy might be to turn each admonition into a
single-item definition list where the label is the "term" and the div
text is the "definition". Please let me know if you want that.
See here if you want to write your own Lua filter: