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.

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}}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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")
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Mais cela ne fonctionne pas du tout.

Posée 27 Mar, 11:50

LaTeXBold's gravatar image

LaTeXBold
635
Taux d'acceptation : 0%

Modifiée 27 Mar, 11:53


Je suis presque au bout, voici le script Lua pratiquement définitif :

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"] = {"notecolor", "note"},
["lightbulb"] = {"tipcolor", "lightbulb"},
["important"] = {"importantcolor", "important"},
["warning"] = {"warningcolor", "warning"},
["fire"] = {"cautioncolor", "fire"}
}
local alert_data = alert_types[img.src:match("[^/]+$"):gsub("%.svg$", "")]
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, " ")
local content = {
pandoc.RawBlock(
"latex",
string.format(
"\\begin{tcolorbox}[colback=gray!5,boxrule=0pt,left=4mm,right=8mm,top=4mm,bottom=4mm,arc=4pt]\n" ..
"\\begin{minipage}[c]{8mm}\n" ..
"\\raisebox{-.5\\height}{\\includegraphics[height=8mm]{icons/%s.pdf}}\n" ..
"\\end{minipage}\n" ..
"\\hspace{3mm}\\textcolor{%s}{\\vrule width 0.5pt}\\hspace{6mm}" ..
"\\begin{minipage}[t]{\\dimexpr\\linewidth-14mm\\relax}\n" ..
"%s\n" ..
"\\end{minipage}\n" ..
"\\end{tcolorbox}",
icon,
color,
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

J'aimerais juste faire 2 choses :

  1. Centrer l'icone verticalement,
  2. Si possible, "remonter" le texte pour qu'il soit aligné avec le trait vertical.

Voici une capture d'écran de l'alerte actuelle : https://www.swisstransfer.com/d/18801699-a839-449a-8b11-55a89e77d003

(j'ai les points de réputations pour les images, mais je prends toujours une erreur lors de l'importation).

Lien permanent

Publiée Il y a 2 jours

LaTeXBold's gravatar image

LaTeXBold
635
Taux d'acceptation : 0%

Pour maximiser l'aide que je pourrais trouver et aussi en terme de logique, j'ai modifié le script Lua et passé toute la configuration des alertes dans le template LaTeX.

Voici donc ce que j'ai au niveau du template :

% =============================
% 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}
% Configuration des alertes avec alignement vertical et gestion du contenu
\newtcolorbox{alertblock}[2]{
enhanced,
fontupper=\raggedright,
colback=gray!5,
boxrule=0pt,
arc=4pt,
frame empty,
left=4mm,
right=2mm,
top=4mm,
bottom=4mm,
before upper={%
\begin{minipage}[c]{8mm}%
\raisebox{-.5\height}{\includegraphics[height=7mm]{icons/#2.pdf}}%
\end{minipage}%
\hspace{3mm}\textcolor{#1}{\vrule width 0.6pt}\hspace{6mm}%
\begin{minipage}[t]{\dimexpr\linewidth-22mm\relax}%
},
after upper={%
\end{minipage}%
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

La seule chose qui me manque, c'est de centrer l'icône verticalement. Après plusieurs essais, je n'arrive pas a atteindre cet objectif.

A titre d'information, voici la nouvelle version du 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"] = {"notecolor", "note"},
["lightbulb"] = {"tipcolor", "lightbulb"},
["important"] = {"importantcolor", "important"},
["warning"] = {"warningcolor", "warning"},
["fire"] = {"cautioncolor", "fire"}
}
local alert_data = alert_types[img.src:match("[^/]+$"):gsub("%.svg$", "")]
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, " ")
local content = {
pandoc.RawBlock(
"latex",
string.format(
"\\begin{alertblock}{%s}{%s}%s\\end{alertblock}",
color,
icon,
message
)
)
}
return pandoc.Div(
content,
{
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Lien permanent

Publiée hier

LaTeXBold's gravatar image

LaTeXBold
635
Taux d'acceptation : 0%

Votre réponse
[Masquer l'aperçu]

Suivre cette question

Par courriel :

Une fois que vous serez enregistré, vous pourrez souscrire à n'importe quelle mise à jour ici

Par flux RSS :

Réponses

Réponses et commentaires

Mots-clés de la question :

×42
×7
×5

Question posée : 27 Mar, 11:50

Question vue : 76 fois

Dernière mise à jour : hier

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

×