Historique des modifications [retour]
cliquez ici pour masquer/afficher la révision 4

27 Mar, 11:53

LaTeXBold's gravatar image

LaTeXBold
836

Alertes personnalisées avec tcolorbox (+ Pandoc)

Après avoir réussi la création d'alerte avec le paquet `alertmessage`, j'ai essayé avec `tcolorbox`. Je suis arrivée finalement très vite à un résultat, mais qui demande quelques ajustements. Les avantages de `tcolorbox` : - Beaucoup plus personnalisable, - Permet autant d'alerte que l'on souhaite (`alertmessage` est limité à 4, alors que j'en ai 5), - Compatibilité avec le Markdown et plus précisément le GFM, du coup avec tous mes documents futurs. Pour info, je souhaite proposer ce template sur Github, l'interopérabilité est donc bienvenue. J'ai donc ce code dans le Le `template.tex` : % ============================= % Alertes % ============================= % Définition des couleurs \definecolor{notecolor}{HTML}{183394} \definecolor{tipcolor}{HTML}{339418} \definecolor{importantcolor}{HTML}{FFC800} \definecolor{warningcolor}{HTML}{FF7500} \definecolor{cautioncolor}{HTML}{BD0404} % Environnement pour les alertes \newtcolorbox{alertbox}[3][]{ enhanced, colframe=#2, colback=gray!10, coltitle=black, rounded corners, boxrule=0pt, fonttitle=\bfseries, left=10pt, before upper={\includegraphics[width=12pt]{#3}\hspace{6pt}} } Et toujours un script Lua : function BlockQuote(el) if #el.content > 0 and el.content[1].t == "Para" then local para = el.content[1] if #para.content > 1 and para.content[1].t == "Image" then local img = para.content[1] -- Associe les images aux styles de box local alert_types = { ["note.svg"] = {"notecolor", "note.svg"}, ["lightbulb.svg"] = {"tipcolor", "lightbulb.svg"}, ["important.svg"] = {"importantcolor", "important.svg"}, ["warning.svg"] = {"warningcolor", "warning.svg"}, ["fire.svg"] = {"cautioncolor", "fire.svg"} } local alert_data = alert_types[img.src:match("[^/]+$")] if alert_data then local color, icon = alert_data[1], alert_data[2] -- Récupérer uniquement le texte après l’image local message_parts = {} for i = 2, #para.content do -- Ignore l'image table.insert(message_parts, pandoc.utils.stringify(para.content[i])) end local message = table.concat(message_parts, " ") return pandoc.RawBlock("latex", "\\begin{alertbox}{" .. color .. "}{" .. icon:gsub("%.svg", ".pdf") .. "}\n" .. message .. "\n\\end{alertbox}") end end end end La commande Pandoc : pandoc test.md --pdf-engine=lualatex --from markdown+hard_line_breaks+mark+emoji --metadata-file=metadata.yaml --template=template.tex --no-highlight --lua-filter=newpage.lua --lua-filter=alert.lua -o livre.pdf --pdf-engine-opt=--shell-escape Les icônes au format svg ont été transformées en pdf, car le svg n'est pas compatible. A priori, les modifications que je cherche à mettre en œuvre doivent être dans le script Lua et plus précisément sur la ligne du retour qui comprends la fonction `pandoc.RawBlock`. Ce que je cherche à faire : - Une taille d'icône plus grande (8mm) - Une marge à droite de l'icône (3mm) - Une bordure à droite, de la couleur de l'icône (0.5mm d'épaisseur) - Le texte à gauche de l'icône justifié - Icone et texte alignée sur la verticale en haut. Image de référence ici : https://www.swisstransfer.com/d/df445e82-faa9-49ba-b2b2-47524cd57ac8 L'iA m'a donné ce genre de réponse pour atteindre ces objectifs : return pandoc.RawBlock("latex", "\\begin{alertbox}{" .. color .. "}\n" .. "\\begin{minipage}{\\linewidth}\n" .. " \\raisebox{-0.1\\height}{\\includegraphics[width=8mm]{" .. icon:gsub("%.svg", ".pdf") .. "}} % Icône\n" .. " \\hspace{3mm} % Marge de 3mm\n" .. " \\vrule width 0.5mm height 8mm % Ligne verticale\n" .. " \\hspace{3mm} % Marge après la ligne\n" .. " \\begin{minipage}{\\linewidth - 14mm} % Ajustement largeur texte\n" .. " \\raggedright " .. message .. "\n" .. " \\end{minipage}\n" .. "\\end{minipage}\n" .. "\\end{alertbox}\n") Mais cela ne fonctionne pas du tout.
cliquez ici pour masquer/afficher la révision 3

27 Mar, 11:52

LaTeXBold's gravatar image

LaTeXBold
836

Alertes personnalisées avec tcolorbox (+ Pandoc)

Après avoir réussi la création d'alerte avec le paquet `alertmessage`, j'ai essayé avec `tcolorbox`. Je suis arrivée finalement très vite à un résultat, mais qui demande quelques ajustements. Les avantages de `tcolorbox` : - Beaucoup plus personnalisable, - Permet autant d'alerte que l'on souhaite (`alertmessage` est limité à 4, alors que j'en ai 5), - Compatibilité avec le Markdown et plus précisément le GFM, du coup avec tous mes futurs documents. documents futurs. Pour info, je souhaite proposer ce template sur Github, l'interopérabilité est donc bienvenue. J'ai donc ce code dans le `template.tex` : % ============================= % Alertes % ============================= % Définition des couleurs \definecolor{notecolor}{HTML}{183394} \definecolor{tipcolor}{HTML}{339418} \definecolor{importantcolor}{HTML}{FFC800} \definecolor{warningcolor}{HTML}{FF7500} \definecolor{cautioncolor}{HTML}{BD0404} % Environnement pour les alertes \newtcolorbox{alertbox}[3][]{ enhanced, colframe=#2, colback=gray!10, coltitle=black, rounded corners, boxrule=0pt, fonttitle=\bfseries, left=10pt, before upper={\includegraphics[width=12pt]{#3}\hspace{6pt}} } Et toujours un script Lua : function BlockQuote(el) if #el.content > 0 and el.content[1].t == "Para" then local para = el.content[1] if #para.content > 1 and para.content[1].t == "Image" then local img = para.content[1] -- Associe les images aux styles de box local alert_types = { ["note.svg"] = {"notecolor", "note.svg"}, ["lightbulb.svg"] = {"tipcolor", "lightbulb.svg"}, ["important.svg"] = {"importantcolor", "important.svg"}, ["warning.svg"] = {"warningcolor", "warning.svg"}, ["fire.svg"] = {"cautioncolor", "fire.svg"} } local alert_data = alert_types[img.src:match("[^/]+$")] if alert_data then local color, icon = alert_data[1], alert_data[2] -- Récupérer uniquement le texte après l’image local message_parts = {} for i = 2, #para.content do -- Ignore l'image table.insert(message_parts, pandoc.utils.stringify(para.content[i])) end local message = table.concat(message_parts, " ") return pandoc.RawBlock("latex", "\\begin{alertbox}{" .. color .. "}{" .. icon:gsub("%.svg", ".pdf") .. "}\n" .. message .. "\n\\end{alertbox}") end end end end La commande Pandoc : pandoc test.md --pdf-engine=lualatex --from markdown+hard_line_breaks+mark+emoji --metadata-file=metadata.yaml --template=template.tex --no-highlight --lua-filter=newpage.lua --lua-filter=alert.lua -o livre.pdf --pdf-engine-opt=--shell-escape Les icônes au format svg ont été transformées en pdf, car le svg n'est pas compatible. A priori, les modifications que je cherche à mettre en œuvre doivent être dans le script Lua et plus précisément sur la ligne du retour qui comprends la fonction `pandoc.RawBlock`. Ce que je cherche à faire : - Une taille d'icône plus grande (8mm) - Une marge à droite de l'icône (3mm) - Une bordure à droite, de la couleur de l'icône (0.5mm d'épaisseur) - Le texte à gauche de l'icône justifié - Icone et texte alignée sur la verticale en haut. Image de référence ici : https://www.swisstransfer.com/d/df445e82-faa9-49ba-b2b2-47524cd57ac8 L'iA m'a donné ce genre de réponse pour atteindre ces objectifs : return pandoc.RawBlock("latex", "\\begin{alertbox}{" .. color .. "}\n" .. "\\begin{minipage}{\\linewidth}\n" .. " \\raisebox{-0.1\\height}{\\includegraphics[width=8mm]{" .. icon:gsub("%.svg", ".pdf") .. "}} % Icône\n" .. " \\hspace{3mm} % Marge de 3mm\n" .. " \\vrule width 0.5mm height 8mm % Ligne verticale\n" .. " \\hspace{3mm} % Marge après la ligne\n" .. " \\begin{minipage}{\\linewidth - 14mm} % Ajustement largeur texte\n" .. " \\raggedright " .. message .. "\n" .. " \\end{minipage}\n" .. "\\end{minipage}\n" .. "\\end{alertbox}\n") Mais cela ne fonctionne pas du tout.
cliquez ici pour masquer/afficher la révision 2

27 Mar, 11:51

LaTeXBold's gravatar image

LaTeXBold
836

cliquez ici pour masquer/afficher la révision 1

27 Mar, 11:50

LaTeXBold's gravatar image

LaTeXBold
836

C'est votre première visite ici ? Consultez la FAQ !

×