<h2><a name="p-14454-comment-ajouter-de-nouvelles-polices-aux-paramtres-de-votre-console-powershell-ou-cmd-1" class="anchor" href="#p-14454-comment-ajouter-de-nouvelles-polices-aux-paramtres-de-votre-console-powershell-ou-cmd-1" aria-label="Heading link"></a>Comment ajouter de nouvelles polices aux paramètres de votre console <code>Powershell</code> (ou <code>CMD</code>) ?</h2>
<p>La première chose à savoir est que, malheureusement (!) :</p>
<blockquote></blockquote>
<p><strong>Seules les polices remplissant certains critères peuvent être installées dans la console !</strong></p>
<p>(Voir : <a href="https://web.archive.org/web/20160527080735/https://support.microsoft.com/en-us/kb/247815">ici</a>, <a href="https://superuser.com/questions/390933/how-to-add-a-font-to-the-cmd-window-choices-in-windows-7-64-bit">ici</a> et <a href="https://superuser.com/questions/920440/how-to-add-additional-fonts-to-the-windows-console-windows">ici</a>.)</p>
<p><strong>Les critères de police + explication</strong></p>
<p><em>(Le statut actuel de ceci est inconnu.)</em></p>
<p>Pour qu’une police soit supportée dans la console, elle doit :</p>
<ul>
<li>
<p>La police doit être une police à <strong>pas fixe</strong>.</p>
</li>
<li>
<p>La police ne peut pas être en italique.</p>
</li>
<li>
<p>Si c’est une police TrueType, elle doit être <strong><code>FF_MODERN</code></strong>.</p>
</li>
<li>
<p>Si ce n’est pas une police TrueType, elle doit contenir le <strong><code>OEM_CHARSET</code></strong>.</p>
</li>
<li>
<p>La police ne peut pas avoir un espace <strong><code>A</code> ou <code>C</code> négatif</strong>.</p>
</li>
</ul>
<p><strong>Que signifie tout cela ?</strong><br>
La plupart de ces métriques sont définies <a href="https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/ns-wingdi-taglogfonta">ici</a>, qui décrit la structure suivante décrivant une police en C++ :</p>
<pre><code class="lang-auto">typedef struct tagLOGFONTA {
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
CHAR lfFaceName[LF_FACESIZE];
} LOGFONTA, *PLOGFONTA, *NPLOGFONTA, *LPLOGFONTA;
</code></pre>
<ul>
<li></li>
</ul>
<p><em>La police doit être à pas fixe.</em> Le pas et la famille de la police sont décrits par le champ <code>lfPitchAndFamily</code>. Les deux bits de poids faible spécifient le pas de la police et peuvent être l’une des valeurs suivantes :</p>
<ul>
<li>
<p><code>DEFAULT_PITCH</code></p>
</li>
<li>
<p><code>FIXED_PITCH</code></p>
</li>
<li>
<p><code>VARIABLE_PITCH</code></p>
</li>
<li></li>
</ul>
<p><em>La police ne peut pas être en italique.</em> En d’autres termes, le champ <code>lfItalic</code> doit être défini à false.</p>
<ul>
<li></li>
</ul>
<p><em>Si c’est une police TrueType, le champ</em> <code>lfPitchAndFamily</code> <em>doit contenir le code pour la famille <strong><code>FF_MODERN</code></strong></em>, dans les bits 4 à 7. <code>FF_MODERN</code> décrit les polices avec une largeur de trait constante (c’est-à-dire les polices à chasse fixe), avec ou sans empattements. Les polices <em>à chasse fixe</em> sont généralement modernes. <em>Pica, Elite</em> et <em>CourierNew</em> en sont des exemples.</p>
<ul>
<li></li>
</ul>
<p><em>Si ce n’est pas une police TrueType, son jeu de caractères doit inclure <strong><code>OEM_CHARSET</code></strong>,</em> tel que défini par le champ <code>lfCharSet</code> dans la structure <code>tagLOGFONTA</code>. C’est-à-dire que la police doit être plus que simplement à chasse fixe. Elle doit également supporter tous les caractères de la page de codes OEM, les 437 caractères “OEM” du jeu de caractères <code>IBM437 (OEM United States)</code> tel que décrit <a href="https://en.wikipedia.org/wiki/Code_page_437">ici</a>.</p>
<ul>
<li></li>
</ul>
<p><em>La police ne peut pas avoir un espace <code>A</code> ou <code>C</code> négatif.</em> La largeur d’un caractère est décrite par une <a href="https://docs.microsoft.com/en-us/windows/desktop/api/wingdi/ns-wingdi-_abc">structure ABC</a>. L’espacement <code>B</code> est la largeur du caractère. L’espacement <code>A</code> est l’espace à laisser à <em>gauche</em> du caractère, et l’espacement <code>C</code> est la marge à laisser à <em>droite</em>.</p>
<p>Tout caractère avec une marge négative à gauche ou à droite est <a href="https://blogs.msdn.microsoft.com/oldnewthing/20070516-00/?p=26843">surdimensionné</a> par rapport à la grille/trame désignée. Par exemple, une police avec un <code>W</code> surdimensionné a besoin de plus d’espace que la largeur de caractère de X pixels désignée pour dessiner correctement le caractère. Évidemment, les polices avec des caractères surdimensionnés ne sont pas à largeur fixe.</p>
<p>Cependant, une police connue pour fonctionner et qui a été suggérée car elle supporte beaucoup de glyphes utiles et de caractères mathématiques, est <a href="https://dejavu-fonts.github.io/">DejaVu</a>. Malheureusement, elle ne fait pas partie de la <a href="https://docs.microsoft.com/en-us/typography/font-list/index">sélection de polices standard</a> de Windows et doit être installée manuellement.</p>
<p>Si la police dont vous avez besoin n’a pas déjà un fichier de police <em>TrueType</em> (<strong><code>.ttf</code></strong>) ou <em>OpenType</em> (<strong><code>.otf</code></strong>), vous devrez convertir les fichiers SFD en TTF (ou OTF). Pour ce faire, vous pouvez utiliser <a href="https://github.com/fontforge/fontforge/releases">FontForge</a> pour importer le SFD puis générer le TTF.</p>
<h2><a name="p-14454-tapes-pour-installer-un-fichier-ttf-avec-fontforge-2" class="anchor" href="#p-14454-tapes-pour-installer-un-fichier-ttf-avec-fontforge-2" aria-label="Heading link"></a>Étapes pour installer un fichier TTF avec <em>FontForge</em></h2>
<ul>
<li>
<p>Installer <em>FontForge</em> (ci-après “FF”)</p>
</li>
<li>
<p>Exécuter FF en tant qu’administrateur</p>
</li>
<li>
<p>Télécharger le(s) fichier(s) de police SFD (par exemple : <a href="https://github.com/CoryGH/dejavu-fonts/blob/master/src/DejaVuSansMono.sfd">DejaVuSansMono.sfd</a>.)</p>
</li>
<li>
<p>Ouvrir le fichier avec : <code>File > Open</code> et cliquer sur OK.</p>
</li>
<li>
<p>Générer un TTF avec : <code>File > Generate Fonts...</code>, puis</p>
</li>
<li>
<p>Sélectionner <strong><code>True Type</code></strong> dans le menu déroulant, puis</p>
</li>
<li>
<p>Décocher l’option <code>Validate Before Saving</code> et cliquer sur <strong><code>Generate</code></strong>.</p>
</li>
<li>
<p>Glisser le fichier <code>*.ttf</code> résultant dans le <em>Panneau de configuration</em> des Polices situé à :</p>
</li>
</ul>
<p>(<code>Panneau de configuration\Apparence et personnalisation\Polices</code>) ou via :<br>
<code>WIN+R</code> et tapez : <code>%windir%\fonts</code>.</p>
<p>Terminé. La nouvelle police est maintenant immédiatement disponible dans votre registre.</p>
<h2><a name="p-14454-charger-lales-nouvelles-polices-dans-le-registre-de-la-console-3" class="anchor" href="#p-14454-charger-lales-nouvelles-polices-dans-le-registre-de-la-console-3" aria-label="Heading link"></a>Charger la/les nouvelle(s) police(s) dans le registre de la Console</h2>
<p>Ouvrez une console Powershell en tant qu’<code>Administrateur</code> pour cela.</p>
<pre><code class="lang-auto"># All your available fonts are located here:
$T1key = 'HKLM:\Software\Microsoft\Windows NT\CurrentVersion\Fonts'
But your Console fonts are located here:
$T2key = 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont'
Check the correct name:
Get-ItemProperty -Path $T1key | grep "DejaVu"
DejaVu Sans Mono (TrueType) : DejaVuSansMono.ttf
Note the correct spacing of the name and ignore the "(TrueType)" part
Check what's already there:
Get-ItemProperty -Path $T2key
To add more fonts, just add the new name like this:
- Add another 0 (zero) to the -Name parameter, for each new font
So since there is already an item with two zeros, so we need 3 and 4 zeros...
#Set-ItemProperty -Path $key -Name '000' -Value 'Arial' # Doesn't work!
#Set-ItemProperty -Path $key -Name '0000' -Value 'Calibri' # Doesn't work!
Set-ItemProperty -Path $key -Name '00000' -Value 'DejaVu Sans Mono'
</code></pre>
<p>Cependant, <strong>vous ne verrez pas les nouveaux éléments de police tant que</strong> :</p>
<ul>
<li>
<p>le registre n’a pas été rechargé en mémoire, donc la seule façon est soit de :</p>
</li>
<li>
<p>redémarrer l’ordinateur, ou</p>
</li>
<li>
<p>redémarrer <code>l'Explorateur Windows</code>.</p>
</li>
<li>
<p>Redémarrer votre console Powershell</p>
</li>
<li>
<p>Déposer un rapport de bug au <a href="https://github.com/PowerShell/PowerShell">dépôt</a> Windows Powershell / <a href="https://github.com/Microsoft/console">dépôt Console</a> et leur demander de :</p>
</li>
</ul>
<p><strong>supporter des polices appropriées avec des glyphes Unicode corrects.</strong></p>
<p>Profitez des nombreux nouveaux glyphes corrects !</p>
<p>Par exemple, essayez le <a href="https://www.compart.com/en/unicode/U+2585"> PH39 </a> :</p>
<p><code>[char]0x2585 # (U+2585)</code></p>
<p>Addendum :</p>
<ul>
<li>
<p><a href="https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts">Ici</a> se trouve une longue liste de polices qui ont plus de chances de fonctionner dans la console.</p>
</li>
<li>
<p><a href="https://stackoverflow.com/questions/49476326/displaying-unicode-in-powershell">https://stackoverflow.com/questions/49476326/displaying-unicode-in-powershell</a></p>
</li>
<li>
<p><a href="https://social.technet.microsoft.com/Forums/scriptcenter/en-US/c42a0300-1803-475d-9438-d39e6672cc69/unicode-characters-in-powershell">https://social.technet.microsoft.com/Forums/scriptcenter/en-US/c42a0300-1803-475d-9438-d39e6672cc69/unicode-characters-in-powershell</a></p>
</li>
<li>
<p><a href="https://github.com/happysysadm/UnicodeInfo">UnicodeInfo</a> - Module Powershell pour interroger la base de données Unicode</p>
</li>
<li></li>
</ul>
<p><a href="https://github.com/Jaykul/WindowsConsoleFonts">WindowsConsoleFonts</a> - Un module PS pour travailler avec les polices de console dans Windows qui vous permet d’installer facilement toute (?) police.</p>
<ul>
<li></li>
</ul>
<p>Voir également comment <a href="https://superuser.com/questions/490922/merging-two-fonts">fusionner deux polices</a>.</p>
<ul>
<li></li>
</ul>
<p>Un article informatif de Microsoft sur leur <a href="https://docs.microsoft.com/en-us/globalization/input/font-technology">technologie de polices</a> et comment le <code>Font Linking</code> fonctionne.</p>
<ul>
<li></li>
</ul>
<p>Le <code>Google Noto Project</code> (Police) <a href="https://github.com/googlei18n/nototools">Noto Tools</a> pour le script Python <a href="https://github.com/googlei18n/nototools/blob/master/nototools/merge_fonts.py">merge_fonts.py</a>.</p>
<ul>
<li></li>
</ul>
<p>L’un des critères mentionne avoir une <em><code>largeur de trait constante</code></em>, cela signifie que la largeur du stylo (pseudo-horizontal) est constante comme montré <a href="http://fontforge.github.io/en-US/documentation/interface/elementmenu/">ici</a> :</p>
<blockquote></blockquote>
<p>La boîte de dialogue Expand Stroke vous donne le contrôle sur divers aspects du<br>
processus d’expansion. Premièrement, vous pouvez spécifier trois types de plumes :</p>
<ul>
<li>
<p>Une plume ronde, qui est circulaire par défaut mais peut être transformée en ellipse</p>
</li>
<li>
<p>Une plume rectangulaire, qui est carrée par défaut mais peut être transformée en formes de plume calligraphique plus traditionnelles</p>
</li>
<li>
<p>Une plume polygonale — vous pouvez dessiner presque n’importe quel polygone convexe.</p>
</li>
</ul>
<p>Pour les plumes circulaires et calligraphiques, vous pouvez choisir une largeur de trait, comment<br>
les extrémités d’un chemin ouvert doivent être dessinées, et comment le chemin devrait apparaître<br>
quand deux splines (ou lignes) se rejoignent sans avoir la même pente (c.-à-d.<br>
à un point d’angle).</p>