3 votes

Comment créer un style de citation personnalisé dans MS Word ?

Pour créer un style de citation personnalisé dans MS Word, j'ai suivi les instructions de cette page web. https://msdn.microsoft.com/en-us/vba/word-vba/articles/create-custom-bibliography-styles

et a également suivi les étapes de cette page : https://blogs.office.com/en-us/2009/04/29/bibliography-citations-102-building-custom-styles/

Les deux méthodes n'ont pas fonctionné, le nouveau style n'apparaît pas dans la liste des styles dans Word, j'ai word 2016. S'il existe un autre moyen de créer un style personnalisé sans utiliser xsl, j'aimerais savoir comment.

2voto

spfi Points 93

Je me suis également penché sur les styles personnalisés mais j'ai abandonné l'idée car, comme vous l'avez dit, la méthode n'a pas fonctionné (pas même les échantillons de code finaux à la fin de chaque page).

J'ai fini par utiliser Visual Basic, car vous pouvez accéder aux données de la bibliographie de cette manière. Vous pouvez donc peut-être reproduire le comportement des citations en utilisant VBA et des contrôles de contenu. (Je n'ai pas reproduit les citations mais la bibliographie)

Pour utiliser les contrôles de contenu, vous devez activer les outils de développement dans les paramètres. Désormais, au lieu des citations réelles, vous insérez des contrôles de contenu avec des titres et des balises qui correspondent à la source à laquelle vous voulez faire référence. (Par exemple, donnez-lui un titre tel que cit_auto et une balise correspondant à votre balise source) Vous devez activer le "mode d'édition" ( ?) dans les outils de développement pour accéder aux propriétés des contrôles.

Maintenant, pour accéder aux Sources du document actuel, vous pouvez utiliser ActiveDocument.Bibliography.Sources . Pour obtenir TOUTES les sources, vous pouvez utiliser Application.Bibliography.Sources .

Notez que Bibliography.Sources est un Sources et non un objet Source le tableau.

Un problème similaire se produit avec les contrôles de contenu. La fonction ActiveDocument.SelectContentControlsByTitle renvoie un ContentControls au lieu d'un objet ContentControl le tableau.

Les deux peuvent être itérés et accédés en utilisant leurs indices, cependant vous ne pouvez pas les passer comme paramètre pour leur tableau correspondant, dans le cas où vous voulez modulariser le code.

Vous pouvez itérer les ContentControls dans un For Each sélectionnez l'option correspondante Source en faisant correspondre les ContentControl.Tag avec le Source.Field("Tag") et définir les ContentControl.Range.Text au format que vous souhaitez :

Public Sub FillSources()
    'assign variable types to get some form of autocomplete
    Dim cc As ContentControl
    Dim src As Source
    Dim srcs As Sources

    'get sources
    Set srcs = ActiveDocument.Bibliography.Sources

    'iterate through the 'cit-auto' controls
    For Each cc In ActiveDocument.SelectContentControlsByTitle("cit_auto")
        On Error GoTo catch 'pseudo Try
        For Each src In srcs 'look for the source of the citation
            If (src.field("Tag") = cc.Tag) Then
                cc.Range.text = _ 'results in: lastname, firstname: title (day.month.year)
                    src.field("Author/b:Author/b:NameList/b:Person:b/Last") & ", " & _
                    src.field("Author/b:Author/b:NameList/b:Person:b/First") & ": " & _
                    src.field("Title") & " (" & _
                    src.field("Day") & "." & _
                    src.field("Month") & "." & _
                    src.field("Year") & ")"
                End For 'source found, skip to next control
            End If
        Next
        GoTo finally
catch:  'pseudo Catch
        Debug.Print "source " & cc.Tag & " not found"
finally:'pseudo Finally
    Next
    Debug.Print "done"
End Sub

Notez que je n'ai pas testé cela et que cela peut probablement être mieux fait.

Si les champs sont manquants, la méthode Source.Field() déclenchera une erreur et sera ignorée. Vous pouvez probablement créer un wrapper pour la méthode afin d'insérer une valeur par défaut en cas d'erreur et l'utiliser pour construire votre style.

Si vous avez besoin d'accéder à d'autres champs de la source, vous pouvez regarder dans sa rubrique .XML qui contient toutes les données disponibles. Vous n'avez pas besoin d'ajouter la propriété b: -sur les noms de la première couche du fichier xml, comme l'indique le préfixe .field() l'ajoute automatiquement si elle est manquante.

De plus, je n'ai aucune idée de la façon de gérer les auteurs multiples, mais peut-être que quelqu'un d'autre le sait.

0voto

macropod Points 3927

Le référencement des citations et des bibliographies de Word repose sur l'utilisation d'une feuille de style xsl correctement codée. Vous ne pouvez pas procéder autrement, à moins d'utiliser une application tierce telle qu'EndNote (qui peut ou non prendre en charge le référencement personnalisé).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X