Problème d'accents...

Bonsoir
Ce n'est pas vraiment une question LaTeX !

Je travaille avec un Mac et aimerais utiliser le Terminal pour faire des recherches "puissantes".
Mais voilà (j'attache la pièce jointe, qui se passe de commentaire).

Savez-vous ce qu'il faut changer ?

Merci pour votre aide.120836

Réponses

  • Bonsoir,

    Il est probable que le document .tex soit codé en ISO 8859-1, ISO 8859-15 ou MacRoman, et non en UTF-8. Le plus raisonnable est de coder tous ses documents TeX (et texte) en UTF-8. À l'époque de la Grande Migration, j'avais fait une conversion semi-automatisée de tous mes fichiers texte (pas seulement TeX) avec un petit script Python. Je n'ai jamais regretté.

    Si tu as Emacs, ouvre le fichier .tex avec et regarde en bas à gauche dans la “mode line” : un U indique UTF-8, un 1 ISO 8859-1, etc (voir capture ci-dessous). La commande 'file' semble aussi détecter le codage des fichiers texte (dans la mesure du possible).

    Pour ta commande, avec Zsh, on peut faire 'grep -r difficulté **/*.tex' — c'est plus vite tapé.120840
  • Bonsoir Brian,

    Un grand merci pour ta réponse.
    Oui, tu as raison (et je le savais !) mes fichiers sont encodés en 1 ISO 8859-1.
    Pour l'instant, je souhaite rester avec cet encodage.
    Car j'échange avec plusieurs collègues qui sont restés avec cet encodage.

    Tu m'as l'air très au point sur l'utilisation du Terminal (merci pour la commande courte !).
    As-tu une idée pour qu'il puisse "lire" du ISO 8859-1 ?

    Merci encore pour ton aide.
  • Pour l'instant, je souhaite rester avec cet encodage.
    Car j'échange avec plusieurs collègues qui sont restés avec cet encodage.
    Désolé de faire la morale, mais je trouve que c'est une très mauvaise idée. Je me rappelle m'être fait engueuler pour ça en 2007, donc en 2021, il est temps d'arrêter ces fantaisies.

    Tu peux regarder ici comment convertir les encodages https://stackoverflow.com/questions/4544669/batch-convert-latin-1-files-to-utf-8-using-iconvhttps://stackoverflow.com/questions/4544669/batch-convert-latin-1-files-to-utf-8-using-iconv (réponse https://stackoverflow.com/a/4544843)
  • @Clairon

    Je n'utilise pas macOS, mais les terminaux POSIX sont un truc assez standard. ll y a ici deux problèmes à ne pas confondre :
    - ce que grep va chercher (il ne fait que “matcher” des suites d'octets ; il faut donc impérativement que le codage utilisé dans la commande soit le même que dans les fichiers examinés) ;
    - comment ça va être affiché par le terminal.

    À condition de chercher dans un ensemble de fichiers qui sont tous dans le même codage, on peut résoudre les deux d'un coup en lançant le terminal avec une locale adaptée au codage, par exemple pour ISO 8859-1 :
    LANG=fr_FR xterm
    
    ou
    LANG=fr_FR.ISO-8859-1 xterm
    
    Il faut bien sûr remplacer 'xterm' par le nom de l'exécutable permettant de lancer le terminal souhaité. Il faut aussi que la locale en question ait été générée sur le système (je sais comment faire sous Debian mais pas sous macOS).

    Edit : je plussoie marsup. :-P
  • Merci pour vos réponses.

    Brian, je teste cela demain.
    Merci
  • Tu as bien raison de te préparer psychologiquement :
    Lao Tseu ? a écrit:
    Celui qui pense que les choses sont faciles rencontre bien vite des difficultés. Le sage pense que tout est difficile, et ne rencontre aucune difficulté.
  • On peut le faire convertir à la volée. Voici la version la plus sommaire.
    iconv -f latin1 -t utf8 toto.tex | grep difficulté
    
    On peut remplacer toto.tex par **/*.tex mais on perd l'affichage du nom du fichier. Je ne sais pas écrire une commande en ligne. Voici un script bricolage qui semble marcher (je ne l'ai pas poussé dans ses retranchements, loin s'en faut).
    #! /bin/bash
    
    for file in `ls **/*.tex`;
    do
      string="`iconv -f latin1 -t utf8 $file | grep $1`";
      if [[ -n $string ]]; then
        echo $file;
        echo $string;
        echo;
      fi
    done
    
    À supposer que tu aies appelé ce fichier grepe.sh et que tu lui aies donné les droits d'exécution (chmod +x grepe.sh), pour trouver "difficulté" dans les sous-répertoires du répertoire courant, voici la commande.
    ./grepe.sh difficulté
    
    Disclaimer: sans garantie du gouvernement !
  • @Math Coss

    A priori (en tout cas dans ma config.), pour Bash, le motif ** semble être équivalent à *, donc je crois que ton script ne cherche que dans les sous-dossiers de niveau 1. On peut s'en sortir de différentes façons avec find. Par exemple, on peut lancer un mini-script un peu comme le tien avec l'option -exec de find (avec la terminaison '+' de -exec, le script sera amené à traiter plein de fichiers d'un coup pour gagner en efficacité). Il est aussi possible d'écrire des choses comme :
    find ... | while read f; do ... avec $f ... done
    
    mais c'est un petit peu moins robuste (ça marche mal si un nom de fichier a le mauvais goût de contenir des sauts de ligne).

    Autrement : os.walk() et module subprocess de Python pour lancer 'grep'.
  • Je prends note avec intérêt du pipe contenant "while read f". Pour **/*.tex, on doit pouvoir remplacer par "ls -R */*.tex" – peut-être.
  • Bonsoir Clairon
    Avec find, si tu veux connaître le nom des fichiers, tu continues après le \; avec -print
    Si en plus tu veux les numéro de ligne, alors immédiatement après grep tu mets -n et si tu veux faire abstraction des maj/min-uscules tu mets -i.
    % find . -name "*.tex" -exec grep -ni difficulté {} \; -print
    Alain
  • Merci pour tous vos conseils.
    J'ai appris des choses !

    Figurez-vous que la réponse était plus simple que prévue (j'ai presque honte de ne pas y avoir pensé avant...).121042
  • Tiens, c'est amusant, j'ai la même option et je ne le savais pas...121066
Connectez-vous ou Inscrivez-vous pour répondre.