Compétence de mise en page d'articles pour公众号 (WeChat Official Account)
Convertir un article Markdown en HTML prêt à être copié-collé dans l'éditeur du compte WeChat sans perte de style.
L'actif principal est la bibliothèque de thèmes composants dans references/ (chaque thème : variables de design + HTML complet de chaque composant + squelette de modèle + règles de mappage) ainsi qu'1 bibliothèque incrémentale commune (blocs de code, images/GIF, titres à petite étiquette, partagés par tous les thèmes). La liste des thèmes provient uniquement de references/theme-index.md. Ce fichier SKILL.md ne gère que le flux et les décisions ; le code HTML spécifique provient toujours de la bibliothèque de composants, ne l'écrivez pas de mémoire.
Flux de travail
0. Entrée et normalisation de format
L'utilisateur peut fournir : du texte Markdown ou un chemin .md (direct vers l'étape 1), .docx, .pdf, .txt/texte brut sans balise, ou HTML enrichi. Toute entrée non Markdown doit d'abord lire references/format-normalize.md et suivre ses règles pour la convertir en brouillon Markdown et effectuer une vérification de structure (docx avec scripts/extract_docx.py, PDF avec Read page par page + nettoyage, texte brut infère la structure basée sur les titres de manière heuristique). Si rien n'est fourni, demander à l'utilisateur.
Si l'utilisateur dit « Directement / Automatiquement / En un clic / Pas besoin de demander », passer en mode entièrement automatique : sauter la vérification de structure et la sélection de thème, inférer automatiquement la structure, choisir un thème en fonction du sujet, valider la mise en page, et fournir une explication de la décision (structure de section, titre présumé, raison du choix).
1. Sélection de thème (système de recommandation automatique)
Lire references/theme-index.md (source unique des informations sur les thèmes). Recommander activement le thème le plus adapté en fonction du sujet de l'article, puis laisser l'utilisateur confirmer en une étape — recommander mais ne pas imposer :
- L'utilisateur a déjà spécifié un thème dans sa demande → l'utiliser directement, ne pas demander.
- Le sujet correspond clairement → Demander une confirmation unique : « Suggéré : XX (raison), confirmer ou en changer ? » Les options incluent la recommandation + 1-2 alternatives + « Voir tout ». Référence sujet→thème selon la colonne « Scénario applicable » de l'index des thèmes :
- Tutoriel / Test / Liste / Inventaire d'outils / Organisation de connaissances / Décomposition méthodologique (haute densité d'information) → Vert Poisson
- Analyse approfondie / Opinion / Sujets puissants → Rouge & Blanc
- Design / Critique technologique / Opinion professionnelle / Marque haut de gamme → Minimaliste Graphite
- Zen / Vie minimaliste / Essai profond → Zen Blanc
- Comparaison d'outils / Test créatif (métaphore visuelle de facture) → Facture Poisson
- Journal interne / Test approfondi / Analyse de cas → Carnet Olive
- Aucune tendance claire → Utiliser par défaut la première ligne de l'index des thèmes (Vert Poisson) comme recommandation placée en premier, et utiliser AskUserQuestion pour laisser l'utilisateur choisir parmi plusieurs (si plus de 4 thèmes, d'abord regrouper par ambiance et demander, puis demander le thème dans ce groupe).
- Mode entièrement automatique (l'utilisateur dit explicitement « Directement / En un clic / Pas besoin de demander ») → Ne pas demander, choisir automatiquement le thème le plus adapté au sujet ou le premier par défaut, et fournir la raison du choix lors de la livraison.
- L'utilisateur n'est satisfait d'aucun thème existant / veut un nouveau style → Aller dans le flux « Génération de thème personnalisé » (voir section ci-dessous), générer et enregistrer, puis revenir à cette étape pour sélectionner.
- L'index des thèmes est vide → Arrêter la mise en page, informer l'utilisateur qu'il faut d'abord ajouter un thème (peut passer par « Génération de thème personnalisé »).
Une fois le thème choisi par l'utilisateur, entrer dans la phase de sélection des composants de ce thème (étapes 3, 4 : déterminer le type d'article → sélectionner la combinaison de composants selon la recette du thème).
2. Lecture de la bibliothèque de composants (deux parties)
(1) Selon la colonne « Fichier de la bibliothèque de composants » du thème dans l'index, lire la bibliothèque de composants spécifique au thème references/theme-{identifiant}.md (contenant les composants spécifiques au thème : cartes de citation, titres de section, marquages de texte, signature, etc.).
(2) Lire en même temps la bibliothèque incrémentale commune references/common-components.md — blocs de code, images/GIF, titres à petite étiquette, tous partagés par tous les thèmes, à adapter avec la couleur principale du thème actuel.
La génération ultérieure s'appuie entièrement sur ces deux bibliothèques de composants ; le HTML provient toujours de celles-ci, ne pas l'écrire manuellement.
3. Analyse de la structure Markdown
| Élément | Règle d'identification |
|---|---|
| Titre de l'article | # Titre ou frontmatter title |
| Citation d'ouverture | Bloc > Citation au tout début de l'article |
| Titre de section | ## Titre |
| Sous-section | ### Titre |
| Gras / Surlignage / Souligné | **texte** / ==texte== / <u>texte</u> ou ++texte++ |
| Paragraphe de citation | > texte autre que l'ouverture |
| Image / GIF | ,  (GIF traité comme image) |
| Code / Commande / Prompt | ``` bloc de code ```, en ligne `code` |
| Ligne de séparation / Liste | ---, *** / - élément ou 1. élément |
| Tableau | Tableau Markdown séparé par ` |
Après avoir analysé la structure, déterminer le type d'article (prendre le type dominant, possiblement composite) : Tutoriel / guide d'opération, Inventaire / Liste d'outils, Opinion / Analyse approfondie, Interview / Portrait de personnalité, Analyse de données / Rapport, Essai de vie / émotionnel, Cas pratique. Base de détermination : présence d'étapes et de commandes → Tutoriel ; éléments parallèles nombreux → Inventaire ; récits et citations de personnes nombreux → Interview ; chiffres et comparaisons nombreux → Données ; argumentation et déduction nombreuses → Opinion.
4. Sélection de la combinaison de composants selon la recette → Assemblage HTML
D'abord consulter le tableau « Type d'article → Combinaison de composants (recette) » de la bibliothèque de thèmes sélectionnée, déterminer la combinaison de composants de base et les composants d'embellissement pour cet article en fonction de son type — ne pas sélectionner les composants au hasard paragraphe par paragraphe ; la recette garantit une ambiance de mise en page cohérente pour des articles du même type. Les éléments en dehors de la recette sont ensuite complétés selon les règles de mappage de la bibliothèque de thèmes.
Ensuite, assembler selon la section « Squelette de modèle d'article complet » de la bibliothèque de thèmes, en remplaçant chaque élément Markdown par le composant correspondant :
- L'ordre du squelette est celui de la bibliothèque de thèmes ; différents thèmes peuvent avoir des squelettes différents, ne pas utiliser le squelette d'un autre thème.
- Les marquages en ligne sont mappés sémantiquement au composant correspondant dans la bibliothèque de thèmes sélectionnée (les numéros de composants ne sont pas uniformes entre les bibliothèques, toujours se baser sur la sémantique) :
**gras**→ gras de la couleur principale ;==surlignage==→ surlignage de couleur claire ;<u>texte</u>ou++texte++→ soulignement ;~~texte~~→ surligneur (couleur claire) ;>citation→ bloc de citation surligné. - Composants de la bibliothèque incrémentale commune :
``` bloc de code ```→ 1a bloc sombre / 1b bloc clair, en ligne`code`→ 1c ;→ 2a image (ajouter composant de description seulement si description présente),.gif→ 2b GIF ; sous-titre/emphase nécessitant mise en avant → 3a sous-titre à barre verticale gauche ou 3b étiquette pilule, phrase clé → 3d, note contextuelle → 3e. Priorité : d'abord consulter les règles de mappage de la bibliothèque de thèmes — si le thème a un composant sémantique équivalent (ex. sa propre phrase clé ou bloc de note), utiliser la version du thème pour une ambiance cohérente ; si le thème n'a pas de composant correspondant, utiliser les composants 3x de la bibliothèque commune en appliquant leurs règles de changement de couleur pour les adapter à la couleur du thème. - Un seul article utilise l'ensemble de composants d'un seul thème sélectionné, ne pas mélanger les thèmes.
- Pour les emphase et sous-titres, utiliser « petite étiquette / barre verticale gauche », ne pas utiliser de cadre pointillé : pour mettre en avant un sous-titre ou un contenu, utiliser le sous-titre à barre verticale gauche (3a), l'étiquette pilule (3b), la phrase clé/bloc de note à barre verticale gauche (3d/3e) ; ne pas utiliser de cadre pointillé (
dashedborder) autour d'un titre, cela est lourd et détourne l'attention.
5. Vérification de conformité (obligatoire)
Après avoir écrit le HTML généré dans le fichier cible, exécuter obligatoirement le script de validation, s'assurer qu'il n'y a aucune ERROR avant de terminer :
# Utiliser le chemin absolu du script dans le répertoire du skill, le paramètre HTML doit également être son chemin réel (les deux répertoires sont généralement différents)
<SKILL_ROOT>/scripts/validate_gzh_html.py <chemin réel du .html généré>
Il vérifie de manière déterministe les éléments interdits par la plateforme et l'encapsulation <span leaf>. En cas d'ERROR, revenir à l'étape 4 pour corriger ; les WARNING de ponctuation demi-largeur doivent également être réduits à 0 avant livraison (c'est le point de reprise le plus fréquent en utilisation réelle).
Les WARNING de fond dégradé doivent être traités un par un : le fond des surlignages de texte, citations, cartes de données/guidage doit par défaut être changé en couleur unie du thème ou rgba unie ; si l'utilisateur demande explicitement de conserver, notifier lors de la livraison que cela peut déclencher la popup darkmode-no-gradient. Les dégradés purement décoratifs sont également notifiés, mais non encore confirmés comme ne déclenchant pas de popup ; si conservés, expliquer le risque.
6. Sortie
Format du livrable : fragment de corps <section>…</section> pur, commençant à partir du conteneur global, ne pas encapsuler avec <!DOCTYPE>/<html>/<head>/<body> — l'éditeur WeChat n'accepte que des fragments de corps, les enveloppes de document supplémentaires seront ignorées ou perturberont le collage.
- Fichier de corps propre : HTML sauvegardé dans le répertoire de travail actuel, nom de fichier
{nom_original}_排版_{nom_chinois_du_thème}({identifiant_anglais}).html(identifiant anglais = nom du fichier de la bibliothèque de thèmes sans le préfixetheme-et suffixe.md). Ce fichier sert pour la validation et le collage manuel de secours. - Page de prévisualisation avec bouton « Copier » (pour que l'utilisateur copie en un clic, sans avoir à tout sélectionner manuellement) :
Produit<SKILL_ROOT>/scripts/wrap_preview.py <chemin du corps propre.html>{...}_预览.html— une fois ouverte dans le navigateur, un bouton « Copier dans le compte » apparaît en haut à droite ; un clic copie le contenu riche rendu dans le presse-papiers (équivalent Ctrl+A/Ctrl+C), puis Ctrl/⌘+V dans l'éditeur du compte. Le bouton et le script sont uniquement dans l'enveloppe de prévisualisation, pas dans la section à copier, donc ce qui est collé dans le compte reste un fragment de corps propre et conforme. - Informer l'utilisateur : Ouvrir
{...}_预览.html→ cliquer sur « Copier » en haut à droite → coller dans l'éditeur du compte ; et fournir le chemin du fichier de corps propre comme secours. Joindre la conclusion du script de validation (réussi / warning restants).
Traitements intelligents lors de la génération (caractéristiques de ce skill, à faire impérativement)
- Numérotation automatique des sections : attribuer
01/02/03…selon l'ordre d'apparition des##; si la dernière section est de type conclusion/résumé, utiliser la variante de numérotation spécifiée par la bibliothèque de thèmes pour la conclusion (ex.∞) ; si non spécifiée, utiliser la numérotation numérique. - Étiquette anglaise : générer une étiquette anglaise à partir du titre de section chinois (pratique → TEST, tutoriel → TUTORIAL, résumé → SUMMARY, réflexion → THOUGHTS…) ; utiliser si le thème dispose d'un emplacement correspondant.
- Soulignement des mots-clés du corps (caractéristique principale) : pour chaque paragraphe du corps, trouver activement 1–3 phrases les plus importantes et les marquer avec le CSS de soulignement du thème (voir l'index des thèmes). Prioriser les idées principales, conclusions, données clés, noms propres ; phrases de 4–15 caractères ; si aucun point essentiel, ne pas marquer. Même si le texte original n'a pas de gras, ajouter activement le soulignement — c'est le marquage de base le plus fréquent.
- Surlignage des mots-clés de la citation d'ouverture : identifier les mots-clés dans la phrase d'ouverture et les marquer avec le composant de surlignage.
- Extraction de la table des matières : prendre les 3 premiers
##comme points de lecture/table des matières (si la bibliothèque de thèmes a un composant de table des matières). - Signature dans la carte de citation d'ouverture : déterminée par l'auteur ou le thème de l'article — si l'article a une signature, écrire « — Nom de l'auteur » ; sinon, utiliser une brève attribution liée au thème ou omettre simplement. Ne pas écrire systématiquement « Jiamo » (la zone de signature finale utilise également le placeholder
{{nom_auteur}}, voir point 7). - Zone de signature d'auteur en fin d'article (à remplir par l'auteur, unique en fin) : par défaut, ne pas inscrire de nom fixe, utiliser un placeholder de signature que l'utilisateur remplacera par le sien.
- Première phrase (présentation de l'auteur) :
Je suis {{nom_auteur}}, {{brève description, ex. : passionné par le partage d'observations sur l'IA et de contenus utiles}}— si l'utilisateur a fourni un nom ou une description dans la demande/les préférences, insérer directement ; sinon, conserver le placeholder{{nom_auteur}}/{{description}}et inviter l'utilisateur à le remplacer lors de la livraison. - Deuxième phrase (appel à l'interaction, générale, peut rester telle quelle) :
Si vous avez trouvé cet article utile, n'hésitez pas à cliquer sur **J'aime, Regarder, Partager** — à la prochaine ! - Si l'original contient déjà une signature d'auteur (ex. « Je suis XXX… ») → conserver directement la signature originale, ne pas la remplacer par un placeholder.
- Première phrase (présentation de l'auteur) :
- Conversion des listes : traiter selon les règles de mappage de la bibliothèque de thèmes ; si aucun composant de liste spécifique, convertir en paragraphes indentés du corps.
- Ponctuation pleine largeur chinoise : la ponctuation du corps doit toujours être en pleine largeur(,。!?:;""''()—— …),ne pas utiliser la demi-largeur
, . ! ? :ni les guillemets droits anglais" '. Lors de la génération du HTML, écrire directement les guillemets courbes ""'' , ne pas écrire d'abord les guillemets droits puis les remplacer — les guillemets droits dans le texte original sont convertis sur-le-champ. Exception : les blocs de code, le code en ligne, les noms propres anglais/URL/identifiants de code à l'intérieur restent inchangés.
Hiérarchie visuelle (3 niveaux progressifs, communs à tous les thèmes)
| Niveau | Rôle | Fréquence | Moyen |
|---|---|---|---|
| Niveau d'ancrage | Ancrage le plus fort : nom de produit/étape/CTA/phrase clé | ≤ 5 emplacements dans l'article | Gras de la couleur principale, citation fond blanc texte sombre |
| Niveau de marquage | Mots-clés du corps, 1–3 par paragraphe | Haute fréquence | Marquage par soulignement |
| Niveau de conteneur | Blocs de citation, étiquettes de concept, emphase de phrases longues | Au besoin | Citation fond clair, surligneur, badge |
Lignes rouges de la plateforme (essentiel, vérification complète par le script de validation)
- Interdit :
<style>/<script>/<div>, attributsclass/id,position:fixed/absolute/sticky,float,@media/@keyframes,display:grid, variables CSS, polices/CSS externes. - Obligatoire : tous les styles en
styleinline ; tous les nœuds de texte doivent être encapsulés par<span leaf="">texte</span>(sinon le style est perdu après collage). - Autorisé :
display:flex(limité),border-radius,box-shadow,<section>/<p>/<span>/<strong>/<img>/<h3>. - Compatibilité des fonds dégradés : le dégradé peut être rendu, mais peut déclencher la détection de structure
darkmode-no-gradientdu compte ; le fond des textes et cartes doit par défaut être uni, sans ajout de dégradé. Les anciens composants/thèmes personnalisés rencontrant ce cas sont également traités comme à l'étape 5.
Gotchas (pièges rencontrés en mise en page réelle)
- Oubli d'encapsuler avec
<span leaf>est l'erreur fatale la plus courante — le style est entièrement perdu après collage dans le compte. Le script de validation de l'étape 5 sert de filet de sécurité, ne pas sauter. - Soulignement : appliquer paragraphe par paragraphe, 1–3 phrases par paragraphe. Ne pas souligner tout un paragraphe (perd le focus), ni sauter certains paragraphes ; les descriptions clés dans les éléments de liste doivent également être marquées.
- Numérotation de section incorrecte : respecter strictement l'ordre des
##, ne pas sauter de numéro ; la variante de numérotation de conclusion uniquement pour la dernière section, pas pour les sections intermédiaires. - Zone de signature unique en fin : utiliser le texte fixe, ne pas apparaître au milieu ou plusieurs fois ; si l'original contient déjà une signature d'auteur / un paragraphe de type « Aimez, regardez, partagez, trois gestes », l'intégrer dans cette unique zone de signature/carte CTA, ne pas conserver le paragraphe original tout en en générant un nouveau.
- Description d'image artificielle : ne générer le composant de description que si
contient réellement du texte de description ; ne pas inventer de description pouravec alt vide. - Image adaptative, non pleine largeur : pour
<img>, toujoursmax-width:100%;height:auto;display:block;margin:0 auto— l'image s'affiche à sa taille native, centrée ; les grandes images se réduisent à la largeur du conteneur, les petites images conservent leur taille. Ne pas utiliserwidth:100%(cela étire les petites images et les rend floues) ; uniquement les éléments de mise en page comme les tableaux, cartes de couverture, diagrammes utilisentwidth:100%. - Mélange de composants entre thèmes : un seul article utilise les composants du thème sélectionné + la bibliothèque commune, ne pas emprunter de composants d'autres thèmes.
- Abus du niveau d'ancrage : emphase forte ≤ 5 emplacements dans l'article, trop de gras équivaut à aucun point clé.
- Omission de contenu original : chaque paragraphe, chaque image doit être converti, sans omission ; ne pas ajouter ou supprimer de contenu substantiel de l'original.
- Placeholders d'image résiduels : si la zone de signature/CTA contient des placeholders d'image de carte de visite (ex.
<img src="...URL de carte de visite ou image de guidage">), supprimer toute la ligne s'il n'y a pas de véritable URL d'image, ne pas laisser de placeholder dans le livrable. - Table des matières : sélectionnée, pas exhaustive : le composant de préface/table des matières affiche 3 points forts sélectionnés, pas la liste complète des sections ; si plus de 3 sections, choisir les 3 plus importantes, ne pas en forcer davantage ni induire en erreur en laissant croire qu'il n'y a que 3 sections.
- Ne pas utiliser de cadre pointillé : pour mettre en avant un titre/emphase, utiliser une petite étiquette ou une barre verticale gauche (bibliothèque commune 3a–3e), ne pas utiliser de cadre pointillé
border:…dashedautour d'un titre. Exception : les composants pointillés clairement définis par la bibliothèque de thèmes (ex. le bloc de citation quote-box du thème Vert Poisson, la carte de point fort oneliner-card) sont des caractéristiques stylistiques du thème, à utiliser normalement selon les usages de la bibliothèque. - Ne pas mélanger la ponctuation demi-largeur : remplacer les virgules et points demi-largeur, les guillemets droits anglais
"'par la pleine largeur ; mais dans les blocs de code/code en ligne, les symboles demi-largeur restent inchangés, ne pas « pleine largeuriser » le code. - Code/Prompt doivent être dans des blocs de code : le code, les commandes, les prompts dans l'article doivent utiliser le composant bloc de code de la bibliothèque commune (1a/1b), ne pas les mettre dans des paragraphes normaux ou des blocs de citation, sinon l'indentation et la largeur fixe seront perdues.
- Blocs de code compacts, éviter les grands espaces blancs : utiliser l'écriture « un
<p style="margin:0">par ligne » des 1a/1b de la bibliothèque commune, jamaiswhite-space:pre— cela rend l'indentation avant le span et les sauts de ligne entre les lignes du code source HTML comme une grande indentation gauche et des lignes vides ; l'indentation utilise uniquement les espaces pleine largeur, l'espacement des lignes repose surline-height:1.6. - Placeholders de matériau à insérer centrés : les placeholders comme
【Insérer…】, captures d'écran/GIF/vidéo/illustrations de résultats à venir, utiliser le composant 2c de la bibliothèque commune : bloc de placeholder de matériau centré (cadre pointillé doux fond clair + icône et description centrés), ne pas utiliser de bloc de note aligné à gauche.
Génération de thème personnalisé (deuxième flux de travail)
Si l'utilisateur souhaite un nouveau style en dehors des thèmes intégrés (dit « Générer un nouveau thème / style personnalisé / créer une bibliothèque de composants basée sur cette image de référence », ou n'est satisfait d'aucun thème existant), lire references/theme-generator.md et exécuter strictement selon son flux :
- Collecter les préférences : description du thème obligatoire (ou image de référence), nom/ID/cinq couleurs/police/trois types de TAG/coins ronds/ombre peuvent être laissés vides pour être automatiquement complétés ; demander tout en une fois, ne pas demander champ par champ.
- Générer la bibliothèque de blocs HTML : exécuter exactement le 【Prompt de génération】 à la fin du theme-generator.md, produire une bibliothèque complète de 45~75 blocs, sauvegardée dans
assets/theme-previews/{theme-id}.html— tous les blocs disposés en continu sur une même page, l'utilisateur ouvre la page entière en une fois pour confirmer le style, pas de confirmation bloc par bloc. - Conversion + enregistrement : une fois le style confirmé par l'utilisateur, le convertir en
references/theme-{identifiant}.mdstandard (ajouter obligatoirement l'encapsulation<span leaf="">, supprimer les id de prévisualisation, compléter les cinq chapitres, règles détaillées dans l'étape 3 du theme-generator.md), enregistrer dans theme-index.md, exécutercomponent_lint.pyjusqu'à 0 ERROR. - Après livraison, ce thème devient un thème permanent sélectionnable pour les mises en page futures, avec les mêmes droits que les thèmes intégrés.
Pendant la phase de génération, suivre les règles du prompt ; pendant la phase de conversion dans la bibliothèque de thèmes, suivre les « Lignes rouges de la plateforme » et les « Normes d'ajout de nouveau thème » de ce fichier (en cas de conflit, ces dernières priment car la bibliothèque de thèmes détermine directement le livrable de mise en page).
Normes d'ajout de nouveau thème
Le nouveau thème est nommé references/theme-{identifiant_anglais}.md, le contenu doit inclure :
- Tableau de référence des variables de design (couleur principale/fond clair/texte sombre/couleur de titre/couleur de corps/couleur de séparation, etc.)
- HTML complet de chaque composant (styles inline + encapsulation
<span leaf="">, respect des « Lignes rouges de la plateforme » ci-dessus) - Squelette de modèle d'article complet (ordre d'assemblage des composants ; si un composant de table des matières/navigation existe, préciser sa position relative par rapport à la couverture/l'introduction)
- Tableau Type d'article → Combinaison de composants (recette) (combinaison de composants de base + composants d'embellissement pour chaque type d'article, la recette est la clé de la stabilité de l'ambiance de mise en page)
- Tableau de règles de mappage Markdown → Composant
Après ajout, enregistrer une ligne dans references/theme-index.md (nom du thème / couleur principale / scénario applicable / fichier de la bibliothèque de composants / CSS de soulignement du corps), et exécuter python3 scripts/component_lint.py . pour confirmer l'absence d'anti-patron dans la bibliothèque de composants (0 ERROR).
Les cas de test de retour pour le déclenchement et la sélection de thème se trouvent dans
references/eval-cases.md(utilisé pour la vérification de régression lors de la maintenance, n'affecte pas la génération unique).
