Numérotation systématique du corps de texte et création de titres coulés/noyés

Bonjour,

Introduction : quoi de plus fréquent que de retrouver, dans les articles de doctrine, les thèses, les mémoires, et autres documents de recherche, des “titres coulés” (ou titres noyés) ? En tout cas, c’est ainsi que l’on me les a présentés. Il s’agit simplement de la mise en gras de la première phrase d’un paragraphe pour en indiquer la teneur par la lecture de la suite. Qui plus est, en règle générale, pour faciliter la citation du document par d’autres recherches, certains auteurs numérotent l’ensemble de leurs paragraphes, les précédant alors d’un numéro en gras. Cette numérotation se fait tant sur les paragraphes dotés d’un titre coulé, que sur ceux non dotés.

Exemple :

1. Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

2. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

3. Lorem ipsum dolor sit amet. Consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

Toutefois, cette fonction est introuvable dans LibreOffice, ce qui me pousse à croire qu’il faut bidouiller avec ce que l’on connait déjà : styles de paragraphes, styles de caractères, numérotation par Plan & liste, etc.

Ma solution, pour le moment, est assez hasardeuse :

  • j’ai créé un style de paragraphe Corps de texte me servant à la rédaction général de mon document ;
  • j’ai créé un style de caractère Titre coulé que j’ai mis en gras me servant à la rédaction des titres coulés ;
  • dans la rubrique Plan & liste de mon style de paragraphe Corps de texte, j’ai activé la numérotation 123 pour que chaque paragraphe soit précédé d’un numéro continu du début à la fin de mon document ;
  • j’ai créé un style de caractère Numérotation de titre coulé (simplement en gras) assigné au style de liste de mon style de paragraphe Corps de texte (dans “Éditer le style”, rubrique Plan & liste) pour que les numéros soient en gras. J’aurais pu simplement assigner le style de caractère Titre coulé, toutefois cela me permettra par la suite, si je le souhaite, de garder la numérotation en gras et droite tout en mettant mes titres coulés en italique (par exemple) ;
  • j’ai assigné un raccourci clavier CTRL+T à mon style de caractère Titre coulé, que j’utilise à chaque début de paragraphe pour écrire le titre coulé ;
  • j’ai assigné un raccourci clavier CTRL+SHIFT+T au style de caractère par défaut, que j’utilise après chaque écriture d’un titre coulé pour enchaîner avec le texte du paragraphe.

Problèmes rencontrés :

  • Premier problème : La numérotation du style de paragraphe Corps de texte est influencée par les changements titres au sein du document. À chaque changement de chapitre, la numérotation monte d’un niveau et recommence à partir de 1.

Ma solution temporaire : je me suis attelé à faire en sorte que, pour tous les niveaux, la configuration soit identique (comme ça, ni vu ni connu). Pour ce faire, dans la rubrique Personnaliser de l’onglet “Éditer le style” de la rubrique Plan & liste de mon style de paragraphe Corps de texte, j’ai, pour chacun des 9 niveaux, coché la case “Numérotation continue”, associé un point après la numérotation 123 et associé le style de caractère “Numérotation de titre coulé”. Ce fut long et je n’aime pas vraiment ce genre de bidouille alambiquée pouvant être source de compromission du document. Je préfère l’automatisation.
Savez-vous comment faire en sorte que la numérotation de mon corps de texte reste toujours au niveau 1 sans être influencé par la Numérotation de chapitres interne à mon document (divisé quant à lui en parties, chapitres, sections, etc.) ? Ce sera le plus simple, ça me permettra d’être sûr que jamais les niveaux de liste 2+n n’apparaissent.

  • Deuxième problème : Dans le même genre, à cause de cette numérotation du style de paragraphe, l’indentation de mon corps de texte est modifiée → l’indentation automatique de la numérotation indente mon corps de texte par le biais de la rubrique Position de l’onglet “Éditer le style” de la rubrique Plan & liste de mon style de paragraphe Corps de texte. Pour chacun des niveaux, la valeur à Aligné à augmente (prévu de base dans LibreOffice).

Ma solution temporaire : je me suis attelé à faire en sorte que, pour tous les niveaux, la configuration soit identique (comme ça, ni vu ni connu, comme pour le premier problème). Pour ce faire, dans la rubrique Position de l’onglet “Éditer le style” de la rubrique Plan & liste de mon style de paragraphe Corps de texte, j’ai, pour chacun des 9 niveaux, assigné la valeur 0,00 cm à Aligné à et Espace à Suivi par.

Problème sous-jacent : Il m’est désormais impossible de modifier l’indentation de mon paragraphe Corps de texte en jouant de sa rubrique Retraits et espacements. Cela ne fonctionne plus. S’y est substitué le positionnement de ma numérotation. Si je souhaite faire un alinéa (indentation de première ligne), je dois alors configurer cela dans la rubrique Position de l’onglet “Éditer le style” de la rubrique Plan & liste de mon style de paragraphe Corps de texte. D’une part, c’est absolument pas naturel et à priori par prévu pour ; d’autre part, je dois le faire pour chacun des niveaux…

  • Troisième problème : certes je peux avoir un titre coulé en gras suivi de mon corps de texte et, oui, quand je changerai ensuite mon style de caractère “Titre coulé” il se configurera correctement sur l’ensemble de mes titres coulés, toutefois j’aimerais savoir s’il existait ou non une solution pour que le style de caractère Titre coulé s’applique automatiquement au début de tous mes paragraphes, suivi après un point du style de caractère par défaut.

Concernant tous ces problèmes liés à un bidouillage approximatif que j’ai fait pour créer mes titres coulés (ou titres noyés), auriez-vous des solutions, ou à minima des pistes de réflexion ?

Merci par avance pour votre participation.

Programmation avec LibreOffice Basic

une formalisation pourrait faire l’objet d’une demande d’amélioration (en passant par l’anglais)
Welcome to the Design and User Experience team - The Document Foundation Wiki

Bonjour Fpy,

Je savais que l’on pouvait poser des questions sur Ask et déclarer des bugs sur Bugzilla, mais je ne connaissais pas la possibilité de faire des suggestions, des propositions, des “demandes d’amélioration”. Comment s’y prendre ? Par le biais d’un rapport de bug détourné ?

Par ailleurs, j’avoue ne pas savoir comment traduire “titre coulé”. Je sais que @ajlittoz (rendons à César ce qui est à César, et à Dieu ce qui est à Dieu ; Ajlittoz représentant même peut-être plus le deuxième que le premier :wink: ) m’a écrit que “titre coulé est ce qu['il] connai[t] sous le nom de run-in heading, recommandé en particulier dans le APA Manual of Style”. Ce doit à priori être cela, mais je vais fouiller pour chercher confirmation et voir s’il n’y a pas un terme également lié à l’idée de numérotation systématique de chaque paragraphe (je crois que ce run-in heading ne fait référence qu’à la mise en gras de la première phrase).

Mentionnez Feature Request dans le titre du rapport. Soyez convaincant car les développeurs sont peu nombreux. Argumentez l’intérêt de la proposition. Décrivez des cas d’usage et démontrez que les palliatifs actuels sont insuffisants.

Ne vous attendez pas à un réponse positive rapide.

Ceci s’appelle un article de liste. Modifiez Body Text en lui ajoutant un style de liste bien choisi dans l’onglet Outline & List. Cependant, ATTENTION. Body Text est la tête de tout une série de styles qui vont hériter de la modification. Ce n’est pas grave si vous voulez vraiment tout numéroter mais si des paragraphes ne doivent pas porter de numéro (style différent), il vaut peut-être mieux créer un style de paragraphe dédié afin d’éviter l’omniprésence de la numérotation.


Il existe une autre forme de numérotation (de lignes cette fois) utilisées dans les brevets, textes de lois ou arrêts de cour. Elle est activée par Tools>Line Numbering. Vous avez alors un numéro de ligne dans la marge. En général, il est utilsé pour désigner précisément une partie de la page. Ce numéro redémarre à chaque page.

L’inconvénient principal est que le numéro est indépendant du texte. Il ne peut pas être référencé par une référence croisée. Ceci veut dire que la “citation” est manuelle et doit être révisée après chaque edition du document.

non, c’est une procédure en bonne et due forme.

non plus :innocent:
y a une valeur dédiée :
Screenshot from 2024-10-10 18-07-14

cf. la file d’attente actuelle : unconfirmed feature requests

réalistement, les arguments en général c’est :

  • est-ce que c’est défini dans ODF (OpenDocument — Wikipédia)
  • est-ce que c’est disponible dans MS Word
  • est-ce que c’est très proche d’une fonctionalité existante et ça ne couterait pas bcp à implémenter
  • ou ultimement, y a-t-il un financement !?

sur ce cas d’espèce, ça permet de dégrossir le problème.

je n’ai pas lu dans le détail, mais l’impression que ça donne, c’est qu’en combinant qq solutions simples :

Bonsoir Ajlittoz,

Merci pour ton commentaire.

Si le Body Text fait référence au Corps de texte, c’est à priori ce que j’ai fait. La précision de “style de liste bien choisi” me pose tout de même question. Est-ce ce que j’ai décrit dans ma solution ?

J’ai en effet remarqué l’existence de cet outil, mais je crois que c’est loin de ce que je recherche. Je pense sincèrement que le plus proche de mes attentes est la liste de styles de paragraphe. Maintenant, je crois que ma configuration de ladite liste n’est pas très bonne (cf. le problème de changement de niveau de liste [dû à Plan & liste] à chaque changement de chapitre [dû à Numérotation des chapitres]).

Très bien, merci. Je pensais que Bugzilla n’était fait que pour, comme son nom l’indique, les bugs.

Je prendrai donc le temps d’en faire la demande, en pensant par ailleurs à prendre en compte les conseils de @ajlittoz.

Si réponse positive doit être donnée à l’un ou plusieurs de ces trois questionnements, ma proposition n’a que peu de chance d’aboutir : Word ne le prévoit pas (quelle aberration au vu de leur trésorerie, m’enfin s’il n’y avait que ça…), du temps doit à priori y être consacré et le financement viendrait difficilement de ma besace (quoiqu’un financement universitaire pourrait être envisagé, mais les développeurs LO ne seraient pas les seuls à convaincre).

Également, sans parler de codage, la demande de fonctionnalité doit-elle inclure, au-delà du résultat final attendu, une proposition d’emplacement de la fonction et son apparence pour l’utilisateur ? Car, de ce côté, j’ai du mal à me projeter concernant sa matérialisation dans LO (une coche dans l’onglet Général des paramètres du style de paragraphe ? dans son onglet Plan & liste ? dans l’onglet LO “Outil” ?). Toute proposition est la bienvenue.

Merci pour ces renvois.

  • Concernant le premier, il m’a l’air de contenir la solution pour faire en sorte que la première phrase des paragraphes d’un même style de paragraphe (pour moi Corps de texte) soit systématiquement en gras. Toutefois, c’est compliqué à décrypter pour moi : le code doit être adapté à ma nécessité, je ne sais où l’entrer pour qu’il se lise systématiquement sur mon style de paragraphe Corps de texte et j’ai du mal à interpréter le code (en particulier : String est-il l’emplacement du nom du style de caractère bold que j’aimerais associer à la première phrase ?).
  • Concernant le deuxième, il ne m’a pas l’air utile à la numérotation de mes styles de paragraphe. Peut-être fais-je erreur.

———
D'ailleurs, en ce que la question ici posée ne porte pas sur la recherche d'une solution précise à un problème spécifique mais plus sur celle d'une réflexion commune quant à la meilleure façon de pallier l'inexistence d'une fonctionnalité par un bidouillage de fonctions existantes, dois-je marquer d'office la question comme résolue ? Dois-je la laisser continuellement ouverte ? À voir.

y a effectivement 2 ou 3 pts, pas techniquement directement liés d’ailleurs.

  1. titre coulé
    1.1 une macro pour assigner le style de la première phrase ("^.+?\.") du paragraphe courant
    1.2 possiblement une macro pour enlever ce style (remettre “corps de texte”)

  2. numérotation : une macro pour actualiser la numérotation de tous les paragraphes, avec un compteur dédié sur tout le doc.

donc 1.1 doit ressembler à :

Sub actionControlT
  replaceFirstSentenceStyle( ThisComponent, "(^.+?\.)", "Titre coulé")
End Sub

Sub replaceFirstSentenceStyle(oDoc as Object, regex as String, style as String)
	vC = oDoc.currentController.getViewCursor()
	
	tC = oDoc.text.createTextCursorByRange(vC)
	tC.gotoStartOfParagraph(false)
	
	oDesc = oDoc.createSearchDescriptor()
	with oDesc
		.SearchString= regex
		.SearchRegularExpression=true
	end with
	oFound=oDoc.findNext(tC.Start, oDesc)

	if  NOT IsNull(oFound) then
		oFound.CharStyleName= style
   end if
End Sub

le pt 2 est plus ouvert …
en première approche on peut traiter les numeros comme du texte brut en début de paragraphe ^(\d+\. ):

Sub renumAll
   oDoc=ThisComponent
   counter = 1
   eParas = oDoc.text.createEnumeration()
   
   Do While eParas.hasMoreElements()
     par = eParas.nextElement()
     ePortions = par.createEnumeration()
	If  ePortions.hasMoreElements () then
	po= ePortions.nextElement()
     tC = oDoc.text.createTextCursorByRange(po)
    if tC.CharStyleName = "Titre coulé" then
      renum(oDoc, tC, counter)
      counter = counter + 1
    End if
    End if
   Loop
End sub

Sub renum(oDoc as Object, tC as Object, c as Integer)
   	oDesc = oDoc.createSearchDescriptor()
	with oDesc
		.SearchString= "^(\d+\. )"
		.SearchRegularExpression=true
	end with
	oFound=oDoc.findNext(tC.Start, oDesc)
	If  IsNull(oFound) then
		tC.string = c & ". " & tC.string
	Else
    	oFound.string = c & ". "
    End if
End Sub

C’est en effet une précision fort à propos, qui a l’air de pouvoir être d’une utilité remarquable ! Merci pour ce partage. Je vois qui plus est le travail fourni pour l’adaptation de ces fonctions à mon problème et j’en suis sincèrement reconnaissant.

Après essai de la macro, celle-ci fonctionne d’ailleurs très bien ! Toutefois, le résultat n’est obtenu qu’a posteriori, une fois le paragraphe rédigé, et après une activation manuelle de la macro. Ce qui revient en réalité un peu au même que le fait de faire, manuellement, mes raccourcis CTRL+T puis CTRL+SHIFT+T. Qui plus est, je n’ai pas l’impression de pouvoir assigner un raccourci clavier à l’exécution d’une macro (si je me trompe, n’hésitez pas à me reprendre), ce qui pourrait déjà me permettre d’assigner le raccourci CTRL+T à la macro et ainsi gagner une manip.
En effet, les entrées raccourcis clavier ne me permettent que d’ouvrir la fenêtre d’exécution et non d’exécuter directement une macro :

Je crois néanmoins que pour obtenir la réactivité souhaitée (mise en gras de la première phrase au cours de la rédaction sans intervention de ma part), il faudrait une fonctionnalité qui surveille en temps réel la saisie de texte, ce que LibreOffice ne supporte peut-être pas avec les macros LibreOffice Basic seules. Mais ce suivi au cours de la frappe existe pour l’AutoCorrection par exemple, LibreOffice doit donc a priori pouvoir permettre ce système. Peut-être pas en Basic.

(Je viens de modifier mon message après l’aide précieuse de Copilot qui m’a expliqué comment utiliser les macros :wink:)

surveiller quoi précisément ? :thinking:
quel auspice permet(trait) de distinguer un paragraphe avec titre coulé d’un paragraphe sans ? :slight_smile:

Le but de l’automatisation serait la mise en gras systématique de la première phrase de chaque paragraphe sans intervention manuelle. Durant la rédaction, il faudrait alors que la fonction :

  • soit, comprenne que l’auteur écrit un nouveau paragraphe (avec le style de paragraphe Corps de texte), mette alors en gras les caractères au cours de la frappe en appliquant le style de caractère Titre coulé, puis, au moment où l’auteur ajouterait un point pour finir le titre coulé, la fonction retire le style de caractère Titre coulé (fonction a priori) ;
  • soit, détecte, une fois la première phrase écrite sans style de caractère spécifique, l’existence de celle-ci et active automatiquement la macro proposée (tel un humain le ferait en exécutant manuellement la macro après avoir écrit sa première phrase) (fonction a posteriori).

La question de la différenciation entre paragraphe avec ou sans titre coulé n’a pas lieu d’être en ce que cela ne dépend de rien d’autre que la volonté de l’auteur (j’imagine ne rien vous apprendre). Ce dont je parlais n’était donc pas une “surveillance” pour savoir si tel ou tel paragraphe mérite le titre coulé, mais une simple surveillance de frappe pour savoir quand l’auteur commence un nouveau paragraphe et termine sa première phrase pour automatiser la mise en gras de cette dernière. Le titrage était principe et le non-titrage exception, il est plus simple de faire ainsi, et pourquoi pas de prévoir ensuite un moyen de supprimer la mise en gras par une macro inverse (pas bien compliquée à coder, maintenant qu’on a la première).

Mais cette macro est déjà une avancée très intéressante, merci encore ! N’y a-t-il toutefois pas de solution pour y assigner un raccourci ? Si un raccourci-clavier était assignable, ça réglerait tout à fait la demande pour ceux dont le titre coulé est l’exception et non le principe (ça serait alors similaire aux raccourcis CTRL+numéro permettant l’assignation d’un titre de paragraphe).

ok, donc il conviendrait d’ajuster le titre de ce post :wink:

c’est là où la systématique en prend un coup :innocent:

effectivement un mécanisme “Durant la rédaction” semble plutot douteux. Macros pilotées par les événements de document
la macro du pt 2 peut etre utilisée pour la (re)numérotation + l’assignation systématique du style “titre coulé”; une peu comme Actualiser la table des matières

il semblait que Copilot avait répondu ? …

il ne faut pas choisir macro comme dans votre copie d’écran, mais dérouler un peu plus
bas Application Macros > My Macros et choisir celle que vous avez créée

Mon message faisait référence à mon commentaire initial qui demandait comment fonctionnaient les macros (je ne savais en effet pas comment ajouter du code pour améliorer LibreOffice soi-même). Copilot m’a permis de pallier cette méconnaissance et m’a expliqué comment inclure la proposition de macro à LibreOffice, ce qui a très bien fonctionné.

Ah super, ça fonctionne parfaitement. Je m’attendais à retrouver les macros dans la fenêtre du centre et non celle de gauche. Eh bien, avec un raccourci assigné à cette macro de mise en gras de la première phrase, on a une solution intéressante pour la création de titres coulés :clap:. @fpy toujours d’une aide précieuse ! Il faut toutefois garder en tête que le raccourci doit être effectué individuellement pour chaque paragraphe doté d’un titre coulé, mais ça ne devrait pas être trop dérangeant.

Encore merci.

Concernant la numérotation toutefois, la macro ne fonctionne pas pour ma part : “wrong number of parameters” pour la numérotation individuelle ; “createEnumeration non trouvée” pour la numérotation générale.

De ce que je comprends, il s’agirait de créer une numérotation dans le corps de texte en y incluant directement comme caractères un numéro (j’imagine suivi d’un point). Quel serait l’avantage comparativement à la mise en place d’une numérotation de style de paragraphe via Plan et liste comme j’ai pu le faire ?

normal, la macro doit être appelée dans le contexte de la (re)numérotation générale (le compteur est global).
(idem replaceFirstSentenceStyle ne peut pas être appelée directement)

quelle ligne ?
mais sur le fond, c’est probablement un élément (paragraphe) un peu exotique.
à tester d’abord sur un document minimal, pour aller progressivement vers le cas général

heu, probablement …

Quelle serait donc la manip à effectuer pour pouvoir exécuter correctement la macro de numérotation ? Après avoir retiré la numérotation par Plan et liste, l’exécution me met en avant ces erreurs. Je ne sais comment les pallier.

à partir d’un doc vide, ajouter qq “Titre xx”, et qq paragraphes “corps de texte” et “coulé” pour valider le fonctionnement.

et sur le document où ça plante, réduire au minimum et supprimer les données perso, pour l’uploader ici.