Communitygithub.com

VesperaZephyr/agent-skills

Ce skill est utilisé pour capitaliser la méthodologie et les pièges du retypesetting haute-fidélité de livres de mathématiques en LaTeX (re-typesetting, pas de traduction). Il couvre quatre types d'ouvrages originaux : Springer GTM occidentaux, livres chinois de mathématiques, monographies occidentales à pagination par chapitre, et monographies à numérotation brute par section.

Qu'est-ce que agent-skills ?

Ce skill d'agent est conçu pour les projets de retypesetting (re-composition) haute-fidélité de livres de mathématiques à partir de scans PDF, visant à produire un code LaTeX compilable, consultable et navigable. Il ne s'agit pas de traduction mais de reproduction intégrale du contenu. Le skill documente en détail quatre grandes catégories d'ouvrages : les livres occidentaux de type Springer GTM (avec compteur partagé `gtmitem`, TikZ natif, construction xelatex) ; les livres chinois de mathématiques (utilisant xeCJK + Fandol + classe personnalisée) ; les monographies occidentales à pagination par chapitre (avec préfixe de chapitre comme I-1, II-42) ; et les monographies à numérotation brute par section avec pagination continue. Pour chaque catégorie, il fournit une méthodologie rigoureuse, des listes de pièges fréquents (problèmes d'OCR, fuites de style de page, références croisées, overfull, caractères manquants), des stratégies de résolution, des seuils de validation et des scripts de vérification automatisés. Le skill est basé sur l'expérience concrète de retypesetting de plusieurs ouvrages complets (Conway, Serre, Samuel, Xu) et est conçu pour être invoqué avant tout projet de retypesetting pour établir les règles de base et éviter les erreurs courantes.

Compatible avec✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/VesperaZephyr/agent-skills/tree/HEAD/latex-book-retypeset

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Compétence de retypesetting (Re-typeset) de livres de mathématiques en LaTeX

Objectif et portée

Méthodologie et base de connaissances des pièges pour le retypesetting haute-fidélité d'ouvrages mathématiques scannés/PDF en code source LaTeX compilable, consultable et navigable. Sources pratiques :

  • Occidental : Conway A Course in Functional Analysis GTM 96 retypesetting complet (436 pages, 11 chapitres + 3 annexes, 0 erreur de compilation / 0 lien mort / 1606 sauts internes).

  • Chinois : Xu Linlin, Xue Chunhua Analyse mathématique (Tome 1) retypesetting complet (551 pages, 6 chapitres + avant-propos + références, 40 fichiers sources de chapitres, 23 TikZ natifs, 0 erreur / 0 caractère manquant / 0 référence non définie / 0 Overfull / 0 ?? dans la couche PDF).

  • Occidental à pagination par chapitre : Serre Abelian l-Adic Representations and Elliptic Curves retypesetting complet (203 pages originales → 129 pages, avant-propos + 4 chapitres + deux séries de références + index, pagination par chapitre I-1/II-42/B-5/Index-3, 0 erreur / 0 non défini / 0 label en double, environnement d'énoncé à numérotation manuelle + sortkey biblatex verrouillant la numérotation originale).

  • Occidental à pagination continue et numérotation brute par section : Samuel Algebraic Theory of Numbers retypesetting complet (110 pages de corps original → 104 pages, numérotation brute Theorème 1/(1), références [1]–[9], exercices numérotés par chapitre, index V.2 lié ; 371 labels / 846 cibles de liens internes / 922 annotations de lien PDF / 110 Q.E.D., 0 erreur / 0 lien mort / couleur de lien mesurée (0,0,178)).

  • Applicable : retypesetting d'ouvrage original (pas de traduction). Quatre routes : ① Springer GTM avec compteur partagé (gtmitem partagé, numérotation \thesection.\arabic{gtmitem}) ; ② Livre chinois avec classe personnalisée (xeCJK + Fandol, fichiers par chapitre + générateur) ; ③ Monographie à pagination par chapitre avec classe personnalisée (\chapcode + redéfinition de \thepage, environnement d'énoncé à numérotation manuelle) ; ④ Monographie à pagination continue et numérotation brute par section avec classe personnalisée (compteurs par mot-clé + réinitialisation par section, \folio ne verrouillant que le début des divisions). Les graphiques suivent la section « Illustrations mathématiques courantes » : pour les redessinables modifiables, utiliser TikZ natif ; pour la reproduction fidèle, conserver le PDF vectoriel original.

  • Non applicable : les projets de pure traduction de type mathtranslation (relevant de la compétence mathtranslation).

Quand l'utiliser

  • L'utilisateur dit « retypeseter tel livre », « mettre le PDF en LaTeX », « compléter les références croisées », « corriger les overfull », « décalage de numérotation des formules », « caractères OCR illisibles ».
  • Démarrer un projet de retypesetting, besoin d'établir les règles de base avant d'agir.
  • La compilation produit des multiply defined / undefined references / décalage de numérotation / nombreux overfull.

Règles strictes (lignes rouges, à confirmer avant d'agir)

ÉlémentExigence
Fin de ligneCRLF, UTF-8 sans BOM (pour tous les .tex/.cls/.py)
Constructionxelatex -interaction=batchmode main.tex × 3 (après modification de label, vider aux × 4)
Seuil de qualité0 erreur de compilation, 0 référence non définie, 0 caractère manquant, 0 overfull pour les nouvelles sections
Source du contenuBasé sur l'image PDF du livre original, l'OCR sert uniquement d'index de recherche
Modification du contenuModifier uniquement le générateur (make_chNN_secM.py) → assembler ; ne jamais éditer directement chapters/*.tex
NumérotationD'abord choisir la route selon le livre original : GTM utiliser le compteur partagé gtmitem ; pour les énoncés à numérotation manuelle des monographies, utiliser l'affichage brut + compteur d'ancrage caché. Ne pas changer la numérotation originale pour la continuité
FormulesLes formules hors texte non numérotées utiliser \[\] / align*, ou equation\notag ; interdiction de leur attribuer un numéro
GraphiquesPrivilégier le redessin avec TikZ/PGFPlots natif ; lorsqu'un vecteur fiable existe dans le livre original, conserver le PDF vectoriel. Interdiction de convertir un vecteur en PNG puis de prétendre qu'il est sans perte ; les bitmap du livre original doivent être documentés avec leurs limitations

Mappage des pages du livre original

Page physique = page du livre + offset (GTM96 offset = 15). Calculer d'abord le décalage, toutes les vérifications ultérieures « retour au livre original » se feront avec la page physique.

Illustrations mathématiques courantes : fidélité, lisibilité et vérification image par image

Cette section s'applique aux courbes, surfaces, champs de vecteurs, grilles de coordonnées, orientations/limites, figures géométriques, etc. ; les diagrammes commutatifs continuent avec la section suivante d'audit bord par bord. Utiliser le processus de correction des illustrations commun aux deux compétences, ne pas appliquer mécaniquement les proportions de recadrage ou d'échelle d'un livre particulier.

D'abord inventorier séparément les figures du livre original et de la chaîne de construction réelle, puis créer un registre image par image, enregistrant la page physique/recadrage, le numéro de figure, toutes les sous-figures, les labels, les flèches/orientations, les actifs sources, la page PDF finale et la preuve de vérification. Un même nombre ou un même nom de fichier n'exclut pas qu'une « mauvaise figure remplace la bonne » ; vérifier les figures adjacentes, en particulier les figures multiples sur une même page et les légendes en regard.

Privilégier la conservation du contenu vectoriel fiable du livre original ; lorsqu'une sinisation, une uniformisation des polices ou une correction géométrique est nécessaire, utiliser TikZ/PGFPlots natif pour le redessin. Avant le redessin, lister les faits mathématiques visibles : relations de coordonnées/courbes, extrémités des vecteurs, nombre et valeur des lignes de niveau, orientation, symboles de bordure, occultations et projections. Ne pas modifier ces faits pour des raisons esthétiques. Les figures complexes de surface et de champ ne doivent pas être réduites à des schémas de sens proche. Le réarrangement des sous-figures doit préserver l'ordre de lecture, la signification des proportions et les relations de connexion.

Le rendu à 400 DPI n'est qu'un bitmap ; la véritable réutilisation vectorielle doit conserver les chemins/contours/transparence du PDF et vérifier la sortie. Les boîtes englobantes des chemins fournies par le package de dessin peuvent contenir des points de contrôle de courbe ou être soumises à des contraintes de recadrage internes ; elles ne doivent pas être prises comme union aveuglément, ni être intersectées avec le cadre de recadrage pour servir de preuve de troncature. Le recadrage automatique ne génère que des candidats ; une vérification visuelle de la page originale complète, du candidat et de la page finale est nécessaire. Conserver les petites flèches, les étiquettes éloignées, les numéros de sous-figure et une marge de sécurité appropriée.

La taille des figures est déterminée par la taille de la police finale et l'espace de la page ; il n'y a pas de largeur minimale/maximale uniforme pour tout le livre ; la largeur utilise \linewidth localement, en respectant le rapport hauteur/largeur. Les figures denses peuvent être agrandies ou réarrangées, mais pas réduites en coupant les bords/étiquettes. La livraison doit inclure la correspondance entre chaque figure et sa page finale ; la compilation réussie, la correspondance de 256 numéros de figures avec 256 fichiers, la similarité de pixels élevée ne remplacent pas le contenu, la couverture et la vérification visuelle.

Diagrammes commutatifs et vérification de la fidélité des flèches

Cette section traite spécifiquement des diagrammes commutatifs composés de nœuds et de morphismes, des grilles de suites exactes, des diagrammes de pullback/pushout, etc. ; les illustrations géométriques courantes, les graphiques de courbes et les matrices de formules suivent leurs propres règles. Utiliser tikzcd pour le dessin ou la vérification, ne pas utiliser array par défaut pour assembler les diagrammes de flèches. Lors de la découverte d'anciens manuscrits, ne pas se contenter de chercher tikzcd : exécuter le scripts/inventory_diagrams.py de la compétence d'audit associée, couvrant tous les fichiers source participant réellement à la construction, les fichiers d'entrée, les notes de bas de page/annexes et les définitions de macros ; classer chaque candidat comme diagramme commutatif, formule/tableau, macro à déplier ou non résolu. Les diagrammes de flèches dans array/aligned/matrix/CD/xymatrix sont également inclus, les matrices ordinaires ne sont pas mécaniquement migrées parce qu'elles contiennent un environnement matriciel.

Pour chaque diagramme, établir séparément une grille de nœuds et une liste d'arêtes à partir du PDF original et du retypesetting, puis comparer arête par arête : point de départ, point d'arrivée, tête de flèche, crochet d'injection, double tête/ligne d'égalité/ligne sans tête, ligne pleine/pointillée, label et son côté, nœuds vides et lignes/colonnes nulles. r/l/u/d sont des déplacements géométriques, ils ne remplacent pas le jugement sur la direction de la flèche ; vérifier les from/to explicites, les options de flèche inversée, les nœuds nommés et les macros après expansion. L'injection doit effectivement afficher un crochet dans le PDF final, la surjection une double tête. hook' ne fait que changer le côté du crochet, il n'inverse pas la flèche ; le \hookrightarrow dans le label ne modifie pas non plus le style de l'arête. Vérifier les options locales et l'ordre de superposition de \tikzcdset, every arrow/.style et des macros personnalisées ; une définition ultérieure de rightarrow peut effacer le hook précédent. La compilation réussie et la présence de hook dans le code source ne remplacent pas la vérification des extrémités.

Déterminer les faits visibles des nœuds et des arêtes à partir de l'image de la version publiée du livre original ; le TeX original, l'OCR, la sémantique mathématique ne servent que de preuves auxiliaires. Mapper séparément les pages physiques du livre original et du retypesetting ; ne pas utiliser le numéro de page d'un théorème/preuve pour déterminer directement la page où se trouve la figure. Voir d'abord la structure globale de la figure, puis zoomer pour vérifier les crochets, les doubles têtes, les extrémités de flèches et le recadrage ; vérifier en même temps les petits échantillons isolés et la page finale.

Si l'image ne peut pas être visualisée directement, d'abord confirmer le chemin de l'image locale et l'outil de visualisation, puis réessayer ; une erreur de chemin/outil n'équivaut pas à une absence de capacité visuelle du modèle. Si la visualisation est toujours impossible, suivre le processus de vérification sans vision de la compétence associée : déplier la grille à partir du code source avec les &/\\ de haut niveau (en conservant les nœuds vides et en traitant les macros imbriquées), vérifier la direction des arêtes et le style effectif ; dans la zone de recadrage PDF déjà confirmée, vérifier l'étendue du texte et les chemins/contours vectoriels, en distinguant trois types de preuves : topologie du code source, géométrie PDF et observation directe. L'absence de traits de tête de flèche extraits du PDF ne prouve pas que la figure originale n'avait pas de flèche. Conserver les figures, arêtes, numéros de ligne, pages/positions de recadrage qui n'ont pas pu être confirmés ; ces détails doivent être marqués comme non résolus, la compilation réussie ou la présence de → dans l'OCR ne remplace pas la vérification visuelle.

Pièges clés rapides

Tableau complet dans references/pitfalls.md. Les plus fréquents :

  • Piège du texte PDF bicouche : le livre original peut contenir une couche de texte cachée HiddenHorzOCR, get_text() renvoie du texte mélangé et illisible (Jf = ℋ, &i( = ℬ). Les formules doivent être rendues par get_pixmap pour confirmation visuelle.
  • Compteur partagé pour les formules numérotées : les formules hors texte numérotées utiliser gtmeq (qui avance le compteur) ; les formules sans numéro à gauche utiliser equation\notag (qui n'avance pas le compteur). Un equation nu tomberait dans le compteur equation et s'afficherait avec le numéro de chapitre.
  • Numérotation des Claims par chapitre : claim* sans numéro pour les chapitres 1 et 2, claim avec numéro pour les chapitres 3, 4, 9.
  • Ne pas ajouter de label d'environnement basé sur la sémantique : le livre original contient de nombreux paragraphes nus ; les envelopper dans remark peut manger la numérotation et décaler tous les éléments suivants.
  • Références croisées A–E (voir references/crossref.md pour les détails) : décalage de \gtmtarget avant \item, deux écritures pour les blocs d'exercices, dommages collatéraux de la regex \\S, double remplacement de remplacement d'espaces en masse + fausses erreurs dues à un .aux obsolète, complément de numéro de chapitre nul / \ref{} vide.
  • Fuite de \pagestyle{empty} (perte des en-têtes et numéros de page dans tout le livre) : le fichier de page de titre définit \pagestyle{empty} sans jamais le rétablir, entraînant la perte de tous les en-têtes et numéros de page sur les pages suivantes de tout le livre. \thispagestyle n'affecte que la première page ; il faut explicitement rétablir \pagestyle{fancy} dans les macros d'en-tête de chapitre/préface/références/index (voir la section spéciale « Monographie à pagination par chapitre » ci-dessous).

Spécificités des monographies à pagination par chapitre (format \chapcode)

Les livres de type Serre ont une pagination indépendante par chapitre avec un préfixe de chapitre (I-1…I-30, II-1…II-42, B-1…B-8, Index-1…Index-3). La classe personnalisée ajoute toute une catégorie de pièges par rapport à la route GTM à compteur partagé. La version complète se trouve dans references/chapcode-retypeset.md. Les cinq plus fréquents :

SymptômeSolution correcte
Pages suivantes sans en-tête ni numéro de page dans tout le livreFuite de \pagestyle{empty} dans front/titlepages.tex ; dans chaque macro d'en-tête (\chapterhead/\fmhead/bib/index), rétablir explicitement \pagestyle{...} ; ne pas se contenter de \thispagestyle (ne concerne que la première page)
Le format de la page est réinitialisé par \pagenumberingLe kernel \pagenumbering{roman} redéfinit \thepage ; il faut séparer le « format d'impression » du « comptage », et après chaque \pagenumbering, reconstruire \thepage/\theHpage (ce dernier = le numéro de page imprimé, pour que l'ancrage corresponde au numéro de page)
Le folio de la préface saute des pages / s'imprime deux fois\fmhead[folio#] n'incrémente que si le folio cible est supérieur à la valeur actuelle (uniquement progression, pas de retour en arrière), évitant les sauts de page vers l'avant
La numérotation des énoncés ne correspond pas à l'originalLe livre original a une numérotation manuelle (mélange avec/sans numéro, souvent recommencée) : utiliser un « paramètre de numérotation manuelle + compteur d'ancrage caché », \begin{stmt}{LEMMA}{3}, laisser le deuxième paramètre vide s'il n'y a pas de numéro
La numérotation biblatex bouleverse l'ordre originalModèle de tri personnalisé + champ sortkey pour chaque entrée, verrouillant le refnumber à la plage [1]–[88]
L'impression par catégorie perd exactement la dernière entrée de chaque catégorieLe } de fermeture de \addtocategory mis sur une nouvelle ligne → TeX lit le saut de ligne comme un espace, la dernière clé devient xxx␠, biblatex ne peut pas faire correspondre l'entrée après l'avoir écrite dans .aux. Correction : ajouter % en fin de ligne pour la clé de la dernière entrée. Vérifier d'abord dans .aux si \abx@aux@category{...} a un espace final (defernumbers=true ne corrige pas ce problème)
Les entrées de la table des matières ont des liens mortshyperref ne génère pas de cible page.<folio> pour certaines pages ; utiliser \hyperref[<label de l'entrée elle-même>] (chapitre chap:I/section sec:I.2/r´ef´erence bib:main), avec \@ifundefined{r@…} pour basculer sur \hyperlink{page.<folio>}

Quatre conventions d'en-tête pour les livres à pagination par chapitre (vérifier pour chaque type selon le livre original, la version complète se trouve dans references/chapcode-retypeset.md) : Corps du texte de chaque chapitre (page paire titre du livre / page impaire titre court du chapitre), préface (titre de section remplaçant le titre du livre), références principales/supplémentaires, index (de chaque côté, uniquement le numéro de page nu à l'extérieur).

Spécificités des monographies à numérotation brute par section (type Samuel)

Livres à volume unique, pagination arabe continue, énoncés avec compteurs par mot-clé et réinitialisation par section, impression du numéro brut, formules réinitialisées par section avec impression (1), références [n], exercices numérotés par chapitre. La version complète se trouve dans references/samuel-style-retypeset.md. Les neuf plus fréquents :

SymptômeSolution correcte
Numérotation décalée après un énoncé nommé (Proposition 3 imprimée 2)Le wrapper d'énoncé doit impérativement faire un \refstepcounter, le paramètre optionnel ne sert qu'à afficher le nom
Impossible de faire correspondre les pages scannées une par uneNe pas forcer la mise en page page par page ; n'ajuster \folio{n} qu'au début des chapitres/Supplements/Exercices/Bib/Index (uniquement progression, pas de retour en arrière)
L'en-tête doit afficher l'intervalle des numéros de section de la page en cours\pagefirstsec + \afterpage pour enregistrer la première section de la page précédente ; verso folio|titre du chapitre|§§ c.a–c.b, recto inversé
Le numéro de chapitre de la littérature externe est lié par erreur ([1], Algèbre, Chapitre VI, Chapitre V de [9])Exclure en utilisant trois règles : proximité de [n] et Chapitre, de [n], \emph{Algèbre} ; d'abord protéger \divhead{Chapitre X}
Les références [n] ne sont pas cliquables\item[\textbf{[n]}] \phantomsection\label{bib:n} ; dans le corps du texte \hyperref[bib:n]{[n]} (affichage verrouillé)
Les chaînes de référence des exercices ne fonctionnent pasDans \exitem, \refstepcounter{exno} + \label{exer:chapitre.n} ; \exchap{X} réinitialise à chaque chapitre ; pour les Problèmes de révision, utiliser R1/R2/R3 pour éviter les doublons de numéro avec le dernier chapitre
Les entrées de liste (1)(2) sans ancrage\item\label{prop:c.s.i} ; dans le corps du texte, écrire \hyperref[...]{(1)} car \ref d'enumerate ne produit pas les parenthèses
L'audit des références nues produit des faux positifs en masseIl faut masquer par bloc les \hyperref[...]{...} (accolades appariées) ; le masquage de \[...\] nécessite re.S
.aux signale un label inexistant / la couleur dans le code source ne correspond pas au PDFAnalyser \newlabel avec appariement des accolades (la valeur de l'entrée est de la forme {{(1)}}) ; pour la couleur, échantillonner à 300 dpi le rectangle du lien et affirmer (0,0,178)

Construction : si la classe utilise fontspec, pdflatex échouera forcément (fontspec requires XeTeX or LuaTeX) ; utiliser lualatex/xelatex ; latexmk peut conserver un fichier fdb et toujours appeler pdflatex, si nécessaire, appeler directement.

Spécificités des livres chinois (xeCJK)

Le retypesetting de livres de mathématiques chinois présente une catégorie entière de pièges que l'on ne rencontre pas avec les livres occidentaux. La version complète se trouve dans references/cjk-retypeset.md. Les cinq plus fréquents :

SymptômeSolution correcte
Échec de l'analyse de \draw/\fill/\path[domain=…] plot (…) dans TikZRemplacer par plot[smooth] coordinates{…}, les coordonnées étant calculées en Python par scripts/gen_tikz_curve.py et injectées
Missing character: … (U+6685) in font FandolSongLa famille Fandol ne contient pas de caractères rares ; ajouter \newCJKfontfamily\zmbhan{SimSun} dans la classe pour la famille de repli, et dans le corps 祖{\zmbhan 暅}
Lignes purement CJK with 2–3pt Overfull, \hspace{0pt plus 3pt} inefficace, plus 1fil crée un grand espaceDiagnostiquer d'abord avec \tracingparagraphs ; la solution correcte est d'utiliser localement \begingroup\xeCJKsetup{CJKglue={\hskip 0pt plus 1pt}}…\endgroup pour un espacement uniforme et lâche
Étiquettes denses qui se chevauchent (2n / 2n+1 / 2n+2)Utiliser l'une des deux dispositions du livre original : « décalage vers le bas » ou « ligne oblique », ne pas forcer sur une seule ligne
Apparition de \extref{6.3.2} sous forme de référence textuelle brute dans tout le livreAprès la génération de la section cible, remplacer par Théorème~\ref{thm:6.3.2}, et modifier uniquement la source du générateur avant de regénérer

Trois autres « phénomènes normaux » des livres chinois facilement confondus avec des défauts : xelatex fatal: memory exhausted (pression mémoire temporaire, une nouvelle exécution suffit), page blanche en fin de texte (dans \makebibliography avec \cleardoublepage, si elle correspond à la parité du livre original, c'est la mise en page attendue), exercices coupés à cheval sur deux pages dans l'OCR brut (vérifier image par image en comptant les exercices par rapport à la copie scannée).

Complément des références croisées (sept passes progressives)

Références codées en dur dans le corps du texte (Theorem X.Y / (2.3) / Exercise N / Section N) → Stratégie complète de transformation en hyperliens \ref/\eqref, voir references/crossref.md : d'abord normaliser les noms de label (kind:c.s.i), ajouter les labels sec:/exercise:, puis effectuer les conversions progressivement : cross-chapitre → parenthèses intra-chapitre → numéros bruts intra-chapitre, avec compilation et vérification après chaque passe.

Les livres à numérotation brute par section ont trois autres types d'objets non couverts par crossref.md : références [n] (ancrage dans la ligne d'entrée, utilisation de \hyperref[bib:n]{[n]} dans le corps du texte), numéros d'exercices par chapitre (exer:c.n, les Problèmes de révision utilisent le préfixe R), entrées de liste (1)(2) dans les énoncés (\item\label{...}). Deux autres éléments doivent rester en texte brut : le numéro de chapitre des ouvrages externes, et les erreurs typographiques du livre original (par exemple « §4, Proposition 2 » alors que cette section n'a qu'une Proposition 1 — conserver le texte imprimé, le lien pointe vers la cible réelle et l'information est enregistrée dans STATE.md). Voir references/samuel-style-retypeset.md pour les détails.

Compétences d'audit associées (déjà installées, appelables selon les besoins)

  • latex-eq-numbering-audit — Vérification une à une des formules numérotées par rapport à l'original
  • latex-display-layout-audit — Mise en page des formules hors texte (over-wrap / faux alignement)
  • latex-footnote-fidelity-audit — Vérification que toutes les notes de bas de page sont bien placées
  • latex-ocr-math-defect-audit — Mathématiques détruites silencieusement par l'OCR
  • Compétence d'audit des diagrammes commutatifs — Inventaire des candidats de diagrammes anciens, vérification bord par bord des directions/crochets/doubles têtes, vérification de la superposition des styles et processus sans preuve visuelle
  • latex-bookmark-anchor-audit — Ancres des signets PDF
  • mathtranslation — Compilation xelatex/biber et validation visuelle (references/build-verify.md)

Seuils de validation

Voir references/verification.md : après avoir vidé .aux, 4 passes avec exit=0 ; 0 erreur / 0 doublon / 0 non défini / 0 lien mort ; numérotation des exercices continue par section ; conformité CRLF/BOM ; les incohérences de numérotation propres au livre original sont conservées en texte brut et leur nombre est audité.

Trois éléments supplémentaires pour les livres chinois (à exécuter en une seule fois avec scripts/verify_cjk_book.py main.pdf --log main.log --bib-page N) : 0 occurrence de ?? dans la couche texte PDF, 0 occurrence de Missing character, les références remplacées sont effectivement résolues en numéros dans le PDF (et non en texte original).

Un élément supplémentaire pour les livres à pagination par chapitre : avec scripts/dump_page_heads.py main.pdf, extraire page par page les bandes de texte en haut/bas, et affirmer que chaque page suivante a un en-tête et un numéro de page, chaque première page n'a pas d'en-tête mais un numéro de page nu centré en bas, et que le format du numéro de page (I-2 / B-5 / Index-3 / chiffres romains) est correct. Pour les hyperliens de la table des matières, utiliser --check-toc-links pour affirmer que toutes les cibles nommées page.* sont résolues.

Deux éléments supplémentaires pour les livres à numérotation brute par section et par volume unique : scripts/audit_internal_links.py affirme que toutes les cibles de \ref/\eqref/\pageref/\hyperref sont sans défaut (ne pas vérifier uniquement \ref) ; scripts/check_link_color.py main.pdf --expect 0,0,178 utilise un échantillonnage de pixels pour affirmer la couleur des liens (les colorlinks dans le code source ne sont pas une preuve). Le balayage des références nues utilise scripts/audit_bare_xrefs.py ; les éléments restants doivent être jugés un par un comme « étiquette de liste / référence externe » et non comme une référence manquante.

Scripts clés

  • scripts/audit_text_refs.py : Scanne les .tex pour lister les références codées en dur non encore converties en \ref (liste de travail, ne modifie pas les fichiers).
  • scripts/rebuild_exercise_labels.py : Reconstruit en toute sécurité les exercise:c.s.i (dry-run par défaut, gère correctement les \gtmtarget sur la même ligne et les blocs d'exercices manuels).
  • scripts/gen_tikz_curve.py : Lorsque plot[domain=…] n'est pas disponible sous la classe xeCJK, il calcule les courbes paramétriques/cartésiennes/polaires en littéral plot[smooth] coordinates{…} (--wrap pour un \draw complet).
  • scripts/verify_cjk_book.py : Vérificateur final du livre entier (résidus ?? / nombre de signets / emplacement des références remplacées / entrées bibliographiques / caractères manquants) ; exit=1 si un seuil dur est franchi ; à exécuter avant la livraison.
  • scripts/dump_page_heads.py : Vérificateur final des en-têtes/numéros de page pour les livres à pagination par chapitre. Extrait les bandes de texte en haut/bas page par page, rapporte l'en-tête courant et le folio de chaque page ; --check-toc-links affirme en plus que toutes les cibles page.* de la table des matières sont résolues.
  • scripts/audit_internal_links.py : Vérifie tous les \ref/\eqref/\pageref/\hyperref[...] contre main.aux (appariement des accolades de \newlabel ; ignore automatiquement les répertoires de sauvegarde work/bak/render/build) ; exit=1 en cas de manque.
  • scripts/audit_bare_xrefs.py : Masque d'abord par blocs les textes déjà liés, les maths, les paramètres optionnels de \item[...]/\pdfbookmark[...], puis énumère les Theorème 3 / (4) / [3] / exercise 8 nus, affiche le compte STMT/PAREN/FORM/BIB/EXERC.
  • scripts/check_link_color.py : Affiche le PDF, pour chaque rectangle de lien fait un histogramme des pixels non blancs, affirme la couleur du texte du lien ; --expect 0,0,178 correspond à blue!70!black, empêche toute surcharge ultérieure par \hypersetup.

Resources

  • references/discipline.md — Classe de document / compteurs rapides, mappage des pages, paramètres typographiques de la zone bibliographique
  • references/pitfalls.md — Tous les pièges des livres occidentaux (OCR / formules numérotées / Claim / labels d'environnement / overfull / références croisées A–E)
  • references/cjk-retypeset.md — Spécificités des livres chinois (courbes TikZ / caractères manquants et repli / espacement CJKglue / étiquettes qui se chevauchent / retour sur les extref / mémoire insuffisante / biber / point de sortie unique)
  • references/chapcode-retypeset.md — Spécificités des monographies à pagination par chapitre (mécanisme de pagination \chapcode / fuite de \pagestyle{empty} / quatre conventions d'en-tête / énoncés à numérotation manuelle / verrouillage sortkey biblatex / hyperliens de la table des matières)
  • references/samuel-style-retypeset.md — Spécificités des monographies à numérotation brute par section et volume unique (numérotation par mot-clé / réinitialisation par section, \folio ne verrouillant que le début des divisions, intervalle de sections dans l'en-tête, exclusion du numéro de chapitre externe, ancres bib:n et exer:, références d'entrées de liste, analyse avec appariement des accolades de .aux, validation par pixels de la couleur des liens)
  • references/crossref.md — Stratégie de complément des références croisées en sept passes + algorithme de reconstruction des exercices + liste des éléments à conserver en texte brut
  • references/verification.md — Commandes de construction, liste de vérification, contrôle CRLF/BOM
  • scripts/audit_text_refs.py — Scanneur de références codées en dur
  • scripts/rebuild_exercise_labels.py — Reconstructeur sécurisé des labels d'exercices
  • scripts/gen_tikz_curve.py — Courbes paramétriques/cartésiennes/polaires → fragment plot[smooth] coordinates{…}
  • scripts/verify_cjk_book.py — Vérificateur final du livre entier (couche PDF ?? / signets / emplacement des références remplacées / entrées bibliographiques / caractères manquants)
  • scripts/dump_page_heads.py — Vérificateur final des en-têtes/numéros de page + hyperliens de la table des matières pour les livres à pagination par chapitre
  • scripts/audit_internal_links.py — Vérification de toutes les cibles de liens internes (\ref/\eqref/\pageref/\hyperref) contre aux
  • scripts/audit_bare_xrefs.py — Énumération des références nues après masquage du texte déjà lié (STMT/PAREN/FORM/BIB/EXERC)
  • scripts/check_link_color.py — Échantillonnage de pixels des rectangles de lien PDF, affirmation de la couleur du lien (par défaut 0,0,178)

Recueils d'examens chinois reconstitués de mémoire

Pour les examens de plusieurs années de plusieurs établissements, avec des numéros de questions et des barèmes indépendants par copie, et un retypesetting simultané avec vérification, lire le Spécificités des examens reconstitués de mémoire. Il faut distinguer les erreurs de retypesetting des erreurs originales du sujet, vérifier si les en-têtes et pieds de page ignorés par l'OCR ne cachent pas des numéros de questions ; tant que la démonstration question par question n'est pas terminée, ne pas considérer le premier tri comme une preuve que toutes les questions sont correctes.

Parallélisme borné et source OCR au niveau de la page

Lorsque la tâche du livre entier nécessite de réduire le contexte d'un seul agent, consulter le Sous-agent borné, source OCR au niveau de la page et mappage d'index. Cela comprend la propriété des fichiers, la passation entre agents, la détection de doublons dans les tables de révision, la police mathématique et la portée des énoncés, la validation par hachage PDF, ainsi que des méthodes éprouvées pour les déplacements de paragraphes à cheval sur les pages dans le brouillon d'Ahlfors, le redémarrage local de la pagination des volumes, un bloc avec plusieurs figures, la vérification finale du regroupement sémantique de l'index, la décision sur les points litigieux, la vérification croisée des notes de bas de page à cheval sur les pages et la conservation des corrections éditoriales.

Skills associés