pdflatex intègre les fontes utilisées dans le document à l'exception des 14 fontes de base définies par le standard. Pour celles ci, voir l'option pdftexDownloadBase14 dans le fichier updmap.cfg.
Et une fois que l'on a identifié la fonte posant problème (donc Monospace21BT avec Roman), on peut alors rajouter un alias dans /etc/fonts/conf.d ou localement dans ~/.config/fontconfig/conf.d/
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE fontconfig SYSTEM "../fonts.dtd"><fontconfig><aliasbinding="same"><family>Monospace821BT</family><accept><family>Monospace</family></accept></alias></fontconfig>
Pour info, pdffonts est un des outils de manipulation des PDF fournit par poppler-utils (Debian). L'option -subst permet d'obtenir facilement les substitutions pour les fontes 'not-embedded'. Par exemple
(bash) pdffonts -subst test-pdf-fonts-anon.pdf
name object ID substitute font substitute font file
------------------------------------ --------- ------------------------------------ ------------------------------------
Calibri-Bold 80 Carlito Bold /usr/share/fonts/truetype/crosextra/Carlito-Bold.ttf
Arial-BoldMT 90 Liberation Sans Bold /usr/share/fonts/truetype/liberation2/LiberationSans-Bold.ttf
ArialMT 100 Bitstream Vera Sans /usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf
Calibri 110 Carlito /usr/share/fonts/truetype/crosextra/Carlito-Regular.ttf
Monospace821BT-Roman 120 Bitstream Vera Sans /usr/share/fonts/truetype/ttf-bitstream-vera/Vera.ttf
Après quelques tests, il me semble que le problème vient du paramêtre qual="all" dans le test du spacing. Cela fonctionne correctement en l'enlevant ou en remplaçant all par any (la valeur par défaut).
En théorie, qual=all permet de comparer la propriété à plusieurs valeurs. Cela n'a pas vraiment de sens pour un entier donc j'imagine que le cas n'a été ni programmé ni testé correctement dans Fontconfig.
Es tu certain que cela fonctionne comme tu le penses?
Ce qui m'embête c'est ça :
# fc-match "AAAAAAAA:lang=xx" file family
Bitstream Vera Sans Mono:file=/usr/share/fonts/truetype/ttf-bitstream-vera/VeraMono.ttf
Avec ton fichier de config, j'ai donc l'impression que toutes les polices inconnues deviennent monospace. Je n'ai pas trouvé de PDF où cela se produit mais en cherchant un peu j'ai trouvé ce post daté de quelques mois et décrivant le même problème.
C'est un nom propre comme Galaxy S21, Apple, ou Toyota Corolla Hybrid.
Et ceux qui ne sont pas content peuvent aller manifester devant les bureaux de Toyota France (20 Bd de la République, 92420 Vaucresson) pour exiger le rajout d'un 'e' à 'Hybrid'.
Non. Je veux dire que ce que tu cherches à faire n'est pas clair. Toi tu le sais mais tu ne le dit pas explicitement.
Après avoir parcouru ton journal plusieurs fois, j'imagine que la réponse se trouve dans ce petit bout de phrase : «Par ((très) mauvaise) habitude, je faisais mes sauvegardes à coup de tar». J'imagine que l'on peut en déduire que ton but est de mettre en place un vrai système de sauvegarde. Cela semble se confirmer par la partie «Gestion des Backups» mais soudain on voit arriver la «Gestion des mots de passe» qui semble sortir de nulle part. S'agit t'il de tes mots de passes web, git ou alors des mots de passes gpg utilisés pour chiffrer tes sauvegardes? Au final, je pense que je finis par comprendre (et il est même possible que j'essaye gopass) mais c'est un peu comme regarder lire le tome 2 d'un livre sans avoir lu le tome 1.
Non. Je veux dire que ce que tu cherches à faire n'est pas clair. Toi tu le sais mais tu ne le dit pas explicitement.
Après avoir parcouru ton journal plusieurs fois, j'imagine que la réponse se trouve dans ce petit bout de phrase : «Par ((très) mauvaise) habitude, je faisais mes sauvegardes à coup de tar». J'imagine que l'on peut en déduire que ton but est de mettre en place un vrai système de sauvegarde. Cela semble se confirmer par la partie «Gestion des Backups» mais soudain on voit arriver la «Gestion des mots de passe» qui semble sortir de nulle part. S'agit t'il de tes mots de passes web, git ou alors des mots de passes gpg utilisés pour chiffrer tes sauvegardes? Au final, je pense que je finis par comprendre (et il est même possible que j'essaye gopass) mais c'est un peu comme regarder lire le tome 2 d'un livre sans avoir lu le tome 1.
Et c'est quoi le problème que tu cherches à résoudre? J'ai l'impression que c'est une histoire de backups et de gestionnaire de mot de passes mais cela reste vague.
Non! Ce code est incorrect car il ne traite pas correctement le cas a==b.
Dans ce cas particulier, la ligne people[a], people[b] = pays(people[a], people[b], base essaye d'affecter 2 valeurs différentes au même élément de tableau. C'est impossible et cela fausse le résultat final.
Une correction simple consiste à remplacer la ligne
On peut aussi procéder par l'intuition. On commence par enlever les 2 zéros de fin car . On cherche donc la racine carrée de 18769. Dans ce genre de problèmes, le résultat est souvent entier donc faisons l'hypothèse que la racine carrée est un nombre entier à 3 chiffres. Le 1er chiffre est forcément 1 car . Pour obtenir 9 dans les unités, le 3ieme chiffre doit être un 3 (3*3=9) ou un 7 (7*7=49). Pour le 2ieme chiffre, on cherche x pour que 1x*1x soit légèrement inférieur à 187 : 12*12=144, 13*13=169 et 14*14=196 (trop grand). Les 2 candidats sont donc 133 et 137 et il suffit alors de les vérifier.
Que nenni! C'est une formulation un peu archaïque, mais ici le terme 'pièce' fait référence aux '3 pièces de vin' mentionnées dans la première phrase de l'énoncé.
Amusant. C'est exactement mon projet 'bidouille' pour cet été. J'ai installé un Raspberry Pi avec une caméra et du deep learning pour reconnaître la chèvre et calculer la surface déjà broutée. À 50%, le rPi fait exploser la chèvre par Bluetooth.
En effet. Voici ma solution complète. Les notations sont différentes et je compte en centimes mais c'est équivalent.
Donc sauf erreur de ma part :
x,y,z = 3 volumes
a,b,c = 3 prix par litre (en centimes)
L'énoncé s'exprime avec 6 equations
y=z+10
z=x+5
a=x/2
b=a+5
c=b+5
ax+by+cz = 78225
On cherche x.
On va remplacer a, b, c, y et z dans la dernière équation pour ne laisser que des x.
# remplace c par b+5
a*x+b*y+(b+5)*z = 78225
# remplace b par a+5
a*x+(a+5)*y+(a+5+5)*z = 78225
# remplace z par x+5
a*x+(a+5)*y+(a+5+5)*(x+5) = 78225
# remplace y par z+10 = x+5+10 = x+15
a*x+(a+5)*(x+15)+(a+5+5)*(x+5) = 78225
# remplace a par x/2
(x/2)*x+(x/2+5)*(x+15)+(x/2+5+5)*(x+5) = 78225
# multiplie par 2
x*x+(x+10)*(x+15)+(x+20)*(x+5) = 156450
x*x + x*x + 25*x + 150 + x*x + 25*x + 100 = 156450
3x^2 + 50x - 156200 = 0
C'est une équation du second degré donc facile à résoudre avec la méthode habituelle.
Le discriminant est 50*50 + 4*3*156200 = 1876900
Sans calculatrice, la difficulté consiste à trouver que sa racine carré est 1370 mais j'imagine que les élèves de 1898 connaissaient des technique pour cela.
La solution est x=220
Il y a aussi x=-710/3 mais un volume négatif est évidemment invalide.
Même après avoir corrigé le cas a==b, le montant final devrait être très légèrement différent. Rien de grave. C'est du aux erreurs d'arrondis sur les calculs en virgule flottantes.
Il ne devrait pas y avoir d'appauvrissement car la même somme est ajoutée et retranchée à chaque étape. Le bug se produit dans l'affectation people[a], people[b] = pays(people[a], people[b], base) quand a==b. Dans ce cas spécial, tu affectes 2 valeurs différentes dans la même variable et une seule est prise en compte. Dans ce cas précis, c'est la deuxième, donc la valeur de customer qui est utilisée et, comme c'est la plus petite, cela réduit donc le montant total. Il faut donc t'assurer que a et b sont différents.
Je remarque aussi que tu as inversé seller et customer dans le return de pays.
Il me semble que tu n'as pas besoin de choisir aléatoirement le sens du payement et donc de dupliquer ton code. Par exemple, décide que c'est toujours 'a' qui paye 'b'. Ta sélection aléatoire de 'a' et 'b' doit être suffisante.
Le problème des petits chaînes est la première chose qui été m'est venu à l'esprit en lisant le journal. On peut aussi imaginer que certaines implémentations puissent «optimiser» en ajustant l'adresse de début pour certaines opérations ; par exemple s.erase(0,1). En fait, je doute qu'il y ai quoi que ce soit dans le standard qui permette de faire la moindre hypothèse sur l'alignement des caractères.
Si ton code est en C++17, le plus simple est probablement de créer une nouvelle classe basée sur std::string_view.
Elle est disponible en TTF mais à la base il s'agit d'une fonte bitmap. En terme de qualité visuelle, Unifont est plutôt minable mais son vrai intérêt réside dans le fait qu'elle fournit la quasi-totalité du Unicode Basic Multilingual Plane (BMP) donc l'intervalle U+0000..U+FFFF. Il y a aussi 2 extensions unicode_upper.ttf et unicode_csur.ttf pour les caractères supérieurs à U+10000.
Installer Unicode est donc une façon simple de s'assurer que le système possède au moins une fonte capable d'afficher chaque caractère (par exemple, pour les programmes utilisant fontconfig). Pour améliorer la qualité, on pourra ensuite installer une famille de fontes avec une bonne couverture unicode ; par exemple Noto https://en.wikipedia.org/wiki/Noto_fonts#Coverage
Une source intéressante de fontes est le projet Nerd Fonts (https://www.nerdfonts.com/). Pour résumer, ils proposent une cinquantaine de fontes populaires étendues avec plusieurs milliers de caractères spéciaux. C'est open-source donc les outils permettant de 'patcher' les fontes sont aussi disponibles.
[^] # Re: Heuristique
Posté par SChauveau . En réponse au journal PDF, mais que fait la police. Évalué à 3.
pdflatex intègre les fontes utilisées dans le document à l'exception des 14 fontes de base définies par le standard. Pour celles ci, voir l'option
pdftexDownloadBase14
dans le fichierupdmap.cfg
.[^] # Re: pdffonts
Posté par SChauveau . En réponse au journal PDF, mais que fait la police. Évalué à 10.
Et une fois que l'on a identifié la fonte posant problème (donc Monospace21BT avec Roman), on peut alors rajouter un alias dans
/etc/fonts/conf.d
ou localement dans~/.config/fontconfig/conf.d/
# pdffonts
Posté par SChauveau . En réponse au journal PDF, mais que fait la police. Évalué à 10.
Pour info, pdffonts est un des outils de manipulation des PDF fournit par poppler-utils (Debian). L'option -subst permet d'obtenir facilement les substitutions pour les fontes 'not-embedded'. Par exemple
[^] # Re: Humm....
Posté par SChauveau . En réponse au journal PDF, mais que fait la police. Évalué à 10.
Après quelques tests, il me semble que le problème vient du paramêtre
qual="all"
dans le test du spacing. Cela fonctionne correctement en l'enlevant ou en remplaçantall
parany
(la valeur par défaut).En théorie,
qual=all
permet de comparer la propriété à plusieurs valeurs. Cela n'a pas vraiment de sens pour un entier donc j'imagine que le cas n'a été ni programmé ni testé correctement dans Fontconfig.# Humm....
Posté par SChauveau . En réponse au journal PDF, mais que fait la police. Évalué à 7. Dernière modification le 23 août 2021 à 14:10.
Es tu certain que cela fonctionne comme tu le penses?
Ce qui m'embête c'est ça :
Avec ton fichier de config, j'ai donc l'impression que toutes les polices inconnues deviennent monospace. Je n'ai pas trouvé de PDF où cela se produit mais en cherchant un peu j'ai trouvé ce post daté de quelques mois et décrivant le même problème.
https://unix.stackexchange.com/questions/651692/fontconfig-set-every-font-with-spacing-100-as-monospace
[^] # Re: it iz not bicose you are
Posté par SChauveau . En réponse au journal Make your Pass (sanitaire) Fun Again. Évalué à 0.
C'est un nom propre comme Galaxy S21, Apple, ou Toyota Corolla Hybrid.
Et ceux qui ne sont pas content peuvent aller manifester devant les bureaux de Toyota France (20 Bd de la République, 92420 Vaucresson) pour exiger le rajout d'un 'e' à 'Hybrid'.
[^] # Re: Heuuu...
Posté par SChauveau . En réponse au journal [Rexp] Fini la bricole à base de ruban adhésif et de post-its. Évalué à 3.
Non. Je veux dire que ce que tu cherches à faire n'est pas clair. Toi tu le sais mais tu ne le dit pas explicitement.
Après avoir parcouru ton journal plusieurs fois, j'imagine que la réponse se trouve dans ce petit bout de phrase : «Par ((très) mauvaise) habitude, je faisais mes sauvegardes à coup de tar». J'imagine que l'on peut en déduire que ton but est de mettre en place un vrai système de sauvegarde. Cela semble se confirmer par la partie «Gestion des Backups» mais soudain on voit arriver la «Gestion des mots de passe» qui semble sortir de nulle part. S'agit t'il de tes mots de passes web, git ou alors des mots de passes gpg utilisés pour chiffrer tes sauvegardes? Au final, je pense que je finis par comprendre (et il est même possible que j'essaye gopass) mais c'est un peu comme regarder lire le tome 2 d'un livre sans avoir lu le tome 1.
[^] # Re: Heuuu...
Posté par SChauveau . En réponse au journal [Rexp] Fini la bricole à base de ruban adhésif et de post-its. Évalué à 4.
Non. Je veux dire que ce que tu cherches à faire n'est pas clair. Toi tu le sais mais tu ne le dit pas explicitement.
Après avoir parcouru ton journal plusieurs fois, j'imagine que la réponse se trouve dans ce petit bout de phrase : «Par ((très) mauvaise) habitude, je faisais mes sauvegardes à coup de tar». J'imagine que l'on peut en déduire que ton but est de mettre en place un vrai système de sauvegarde. Cela semble se confirmer par la partie «Gestion des Backups» mais soudain on voit arriver la «Gestion des mots de passe» qui semble sortir de nulle part. S'agit t'il de tes mots de passes web, git ou alors des mots de passes gpg utilisés pour chiffrer tes sauvegardes? Au final, je pense que je finis par comprendre (et il est même possible que j'essaye gopass) mais c'est un peu comme regarder lire le tome 2 d'un livre sans avoir lu le tome 1.
# Heuuu...
Posté par SChauveau . En réponse au journal [Rexp] Fini la bricole à base de ruban adhésif et de post-its. Évalué à 7.
Et c'est quoi le problème que tu cherches à résoudre? J'ai l'impression que c'est une histoire de backups et de gestionnaire de mot de passes mais cela reste vague.
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 4.
Et aussi il faudrait utiliser l'écriture inclusive « Un·e particulier.ière fait venir trois pièces de vin … »
[^] # Re: Code ?
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 2.
Non! Ce code est incorrect car il ne traite pas correctement le cas a==b.
Dans ce cas particulier, la ligne
people[a], people[b] = pays(people[a], people[b], base
essaye d'affecter 2 valeurs différentes au même élément de tableau. C'est impossible et cela fausse le résultat final.Une correction simple consiste à remplacer la ligne
par
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 2.
Je crois qu'il faisait plutôt allusion à ce genre de règle : https://fr.wikipedia.org/wiki/R%C3%A8gle_%C3%A0_calcul
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 3.
Archaïque était probablement un peu fort. Disons que c'est une expression peu courante car aujourd'hui quasiment personne n’achète de tonneaux.
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 4.
On peut aussi procéder par l'intuition. On commence par enlever les 2 zéros de fin car . On cherche donc la racine carrée de 18769. Dans ce genre de problèmes, le résultat est souvent entier donc faisons l'hypothèse que la racine carrée est un nombre entier à 3 chiffres. Le 1er chiffre est forcément 1 car . Pour obtenir 9 dans les unités, le 3ieme chiffre doit être un 3 (3*3=9) ou un 7 (7*7=49). Pour le 2ieme chiffre, on cherche x pour que 1x*1x soit légèrement inférieur à 187 : 12*12=144, 13*13=169 et 14*14=196 (trop grand). Les 2 candidats sont donc 133 et 137 et il suffit alors de les vérifier.
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 2.
Que nenni! C'est une formulation un peu archaïque, mais ici le terme 'pièce' fait référence aux '3 pièces de vin' mentionnées dans la première phrase de l'énoncé.
[^] # Re: Je préfère les énoncés simples mais hyper compliqués à résoudre
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 10.
Amusant. C'est exactement mon projet 'bidouille' pour cet été. J'ai installé un Raspberry Pi avec une caméra et du deep learning pour reconnaître la chèvre et calculer la surface déjà broutée. À 50%, le rPi fait exploser la chèvre par Bluetooth.
[^] # Re: Eléments pour la résolution du premier problème
Posté par SChauveau . En réponse au journal Deux petits problèmes de math niveau lycée.. Évalué à 5.
En effet. Voici ma solution complète. Les notations sont différentes et je compte en centimes mais c'est équivalent.
Donc sauf erreur de ma part :
[^] # Re: Python
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 1.
Même après avoir corrigé le cas a==b, le montant final devrait être très légèrement différent. Rien de grave. C'est du aux erreurs d'arrondis sur les calculs en virgule flottantes.
[^] # Re: Python
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 1.
Il ne devrait pas y avoir d'appauvrissement car la même somme est ajoutée et retranchée à chaque étape. Le bug se produit dans l'affectation
people[a], people[b] = pays(people[a], people[b], base)
quand a==b. Dans ce cas spécial, tu affectes 2 valeurs différentes dans la même variable et une seule est prise en compte. Dans ce cas précis, c'est la deuxième, donc la valeur de customer qui est utilisée et, comme c'est la plus petite, cela réduit donc le montant total. Il faut donc t'assurer que a et b sont différents.Je remarque aussi que tu as inversé seller et customer dans le return de pays.
[^] # Re: Python
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 1.
Je ne suis pas très python mais ne devrait t'il pas y avoir une virgule après
seller
dans ledef pays
?[^] # Re: Python
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 1.
Ce n'est pas un truc spécifique à emacs pour indiquer l'encodage des fichiers?
https://www.gnu.org/software/emacs/manual/html_node/emacs/Specify-Coding.html
J'ai toujours considéré que python (et les autre outils) ignoraient totalement ces commentaires spéciaux.
Il me semble qu'un emacs moderne devrait déjà être en UTF-8 par défaut (sauf si spécifié autrement dans la config d'emacs).
[^] # Re: Python
Posté par SChauveau . En réponse au journal Un article de "Pour la science" m'ayant amené à coder pour une petite vérification perso.... Évalué à 7.
Il me semble que tu n'as pas besoin de choisir aléatoirement le sens du payement et donc de dupliquer ton code. Par exemple, décide que c'est toujours 'a' qui paye 'b'. Ta sélection aléatoire de 'a' et 'b' doit être suffisante.
[^] # Re: short strings
Posté par SChauveau . En réponse au journal Alignement chaotic neutre. Évalué à 2. Dernière modification le 11 juillet 2021 à 16:53.
Le problème des petits chaînes est la première chose qui été m'est venu à l'esprit en lisant le journal. On peut aussi imaginer que certaines implémentations puissent «optimiser» en ajustant l'adresse de début pour certaines opérations ; par exemple
s.erase(0,1)
. En fait, je doute qu'il y ai quoi que ce soit dans le standard qui permette de faire la moindre hypothèse sur l'alignement des caractères.Si ton code est en C++17, le plus simple est probablement de créer une nouvelle classe basée sur
std::string_view
.[^] # Re: Nerd
Posté par SChauveau . En réponse au journal Police partout, justification où on veut. Évalué à 7.
Une autre fonte qu'il pourrait être intéressant de mentionner est GNU Unifont.
http://unifoundry.com/unifont/
Elle est disponible en TTF mais à la base il s'agit d'une fonte bitmap. En terme de qualité visuelle, Unifont est plutôt minable mais son vrai intérêt réside dans le fait qu'elle fournit la quasi-totalité du Unicode Basic Multilingual Plane (BMP) donc l'intervalle U+0000..U+FFFF. Il y a aussi 2 extensions unicode_upper.ttf et unicode_csur.ttf pour les caractères supérieurs à U+10000.
Installer Unicode est donc une façon simple de s'assurer que le système possède au moins une fonte capable d'afficher chaque caractère (par exemple, pour les programmes utilisant fontconfig). Pour améliorer la qualité, on pourra ensuite installer une famille de fontes avec une bonne couverture unicode ; par exemple Noto https://en.wikipedia.org/wiki/Noto_fonts#Coverage
# Nerd
Posté par SChauveau . En réponse au journal Police partout, justification où on veut. Évalué à 10.
Une source intéressante de fontes est le projet Nerd Fonts (https://www.nerdfonts.com/). Pour résumer, ils proposent une cinquantaine de fontes populaires étendues avec plusieurs milliers de caractères spéciaux. C'est open-source donc les outils permettant de 'patcher' les fontes sont aussi disponibles.