Texworks: aiuto RegEx per syntax highlightning

  • Creatore
    Topic
  • #117892
    Filippo
    Partecipante
      Up
      0
      Down
      ::


      Carissimi, chiedo aiuto a chi è più pratico di me con le RegEx. Ho provato a inserire delle stringhe aggiuntive nel file syntax-patterns.txt di Texworks per migliorare la colorazione della sintassi.
      Ho preso spunto da delle espressioni che ho trovato sul forum del tug, provando ad adattarle alle mie esigenze, in alcuni casi ci son riuscito, ma ho qualche difficoltà con le seguenti:
      `# LaTeX footnotes
      plum N \\footnote\s*\{[^}]*\}`

      Fondamentalmente la riga funziona, ma se nella nota c’è un altro comando che richiede un argomento obbligatorio fra graffe, l’espressione qui sopra vede la graffa di chiusura dell’argomento obbligatorio come la fine della \footnote, e termina lì la colorazione, lasciando scoperto quel che segue.
      Es:
      \footnote{Nel paragrafo~\ ref{par} l’argomento è trattato meglio}

      Altro problema:
      `# LaTeX definitions
      mediumorchid N \\(?:def|let|newcommand|renewcommand)\s*\\[^{^[]*

      # LaTeX commands\environments renewals
      blueviolet N \\(?:re|)new(?:command|environment|theorem)\s*\{[^}]*\}`
      Il commando asteriscato \newcommand* resta escluso (non ho provato ma penso succeda anche con gli altri), come dovrei modificare la stringa per evidenziare anche la versione asteriscata?
      Mi rimane fuori \DeclareRobustCommand, ma ho anche lì lo stesso problema dell’asterisco.

      Infine, con questo:
      `# LaTeX cite
      lightcoral N \\cite\s*\{[^}]*\}`
      Riesco a colorare il comando cite, MA, così com’è è molto restrittivo. funziona solo in maniera base \cite{chiave}. se uso degli argomenti opzionali tra quadre (biblatex ne accetta due, che vengono inseriti uno prima e uno dopo la nota), il comando non viene riconosciuto. C’è un modo per inserire nell’espressione una variabile che dice che potrebbero esserci da 0 a 2 argomenti racchiusi tra quadre?
      Inoltre, si può creare un’unica espressione per inserire anche le varianti? tipo parencite, textcite, footcite… e versioni asteriscate?

      Grazie mille. All’anima pia che avrà la pazienza di rispondermi, chiedo se mi può dare oltre alla soluzione, anche delle indicazioni su come si costruiscono le stringhe, perché pur avendo letto qualcosa, non ci ho capito molto, e non tutto quel che ho trovato funziona, credo di aver capito che non c’è un unico standard.

    Visualizzazione 1 filone di risposte
    • Autore
      Risposte
      • #117893
        Filippo
        Partecipante
          Up
          0
          Down
          ::


          Rieccomi, giusto per fare anch’io la mia parte, dopo un pomeriggio di prove estenuanti, ho trovato una soluzione al problema delle note a piè di pagina:
          `\\footnote\s*\{((?:[^}{]+|\{(?1)\})+)\}`
          Così tutta la nota viene evidenziata. Tuttavia, mi chiedo se sia la soluzione migliore: forse sarebbe preferibile colorare solo:
          \footnote{Nel paragrafo~\ ref{par} l’argomento è trattato meglio}
          Così che gli altri comandi eventualmente presenti all’interno possano assumere la colorazione prevista dalle altre regole di sintassi… Però come ottenere una cosa del genere va proprio oltre quel che riesco a immaginare.

        • #117894
          Filippo
          Partecipante
            Up
            0
            Down
            ::


            A favore di chi può essere interessato, ho trovato una soluzione per il comando cite e tutti i suoi parenti:
            `lightcoral N \\(?i)(paren|text|foot|smart|super|auto)?cite[*]?\s*(\[((?:[^][]+|\[(?2)\])+)\])*\{[^}]*\}
            lightcoral N \\(?i)(paren|text|foot|smart|super|auto)?cites\s*((\[([^]])*\])*(\{([^}])*\})+)((?2))*(\[([^]])*\])*(\{([^}])*\})`
            In realtà le stringhe di ricerca sono due come potete vedere, forse si possono combinare, ma io non ci sono riuscito.

            Una breve spiegazione di quel che ho fatto, visto che sono stringhe molto lunghe, partiamo dalla prima.
            `\\ serve per cercare il carattere \, che essendo un carattere speciale va preceduto dal comando \
            (?i)specifica che il gruppo che segue deve essere case insensitive
            (paren|text|foot|smart|super|auto)? questo gruppo prevede tutti i comandi supportati da biblatex come prefisso alla parola cite che segue, il ? alla fine dice 0 o 1 occorrenze
            cite è il comando da cercare
            [*]? prevede 0 o 1 occorrenze del carattere *, per i comandi asteriscati previsti da biblatex
            \s* eventuali spazi (non dovrebbero essercene, ma non si sa mai)
            (\[((?:[^][]+|\[(?2)\])+)\])* lunga stringa con una ricursione per cercare 0 o più occorrenze di elementi tra quadre [] (biblatex ne prevede fino a due, prenote e postnote)
            \{[^}]*\} fa la ricerca tra due {}
            `

            La seconda stringa, non la commento pezzo per pezzo, ma oltre ad avere cites invece di cite, serve per le citazioni multiple, e ha più ricursioni perché non si può sapere a priori quante citazioni possono essere trovate contemporaneamente. per ciascuna è prevista l’opzione delle due note (pre e post).

            il codice, per me che sono completamente digiuno di queste cose è un po’ complicato, ma funziona. e se ci sono riuscito io, ci può riuscire chiunque. forse chi ne sa più di me può rendere la stringa di ricerca lunga la metà 😀

        Visualizzazione 1 filone di risposte
        • Devi essere connesso per rispondere a questo topic.

        Go to top