Wie kann man Firefox dazu bringen, MS TrueType-Schriftarten für Helvetica, Times usw. zu verwenden?

8499
Jonik

Ich verwende (Windows) TrueType-Schriftarten auf meiner Ubuntu-Workstation ( Details ) und bin meistens zufrieden mit dem Aussehen der Schriftarten, sowohl in Desktop-Apps als auch im Web (mit Firefox).

Auf einigen Webseiten, wie dieser, sind Schriften jedoch völlig überflüssig:

Bildschirmfoto

Ich habe den Grund gefunden, Helveticaim CSS für diese Site zu sein:

font-family: Helvetica,Arial,Tahoma,sans-serif; 

Wenn ich mit Firebug Helvetica aus dieser Liste entferne, wird Arial verwendet und es sieht wieder ganz schick aus:

Alt-Text

Meine Frage ist, wie man Webseiten, die Helvetica (oder Times oder andere Schriftarten) verwenden, automatisch schön aussehen lässt. Mit anderen Worten, wie lassen sich Times- und Helvetica-Schriftfamilien den Serifen- und Sans-Serifen-Standardwerten zuordnen (was in meinem Fall Times New Roman bzw. Arial wäre)?

Ich bin an einer Lösung interessiert, bei der Firefox die MS TrueType-Schriftarten in diesem Szenario verwendet, unabhängig davon, ob Ubuntu-Schriftart-Konfigurationen oder benutzerdefinierte CSS-Regeln in Firefox angepasst werden (oder etwas anderes, über das ich derzeit keine Ahnung habe).

Update : Ich habe das Problem nun vollständig gelöst - diese Antwort beschreibt, was ich tun musste.

7
Warten Sie, es gibt eine Verbesserung? Josh Hunt vor 15 Jahren 0
Ja auf jeden Fall. Aber ich denke, die Art der Schriftarten, die die Leute bevorzugen, variiert von Person zu Person. Vergleichen Sie z. B. die beiden Screenshots in http://superuser.com/questions/19824/better-ubuntu-fonts Jonik vor 15 Jahren 0
Entschuldigung, ich war nur wieder ein selbstgefälliger Mac-Benutzer. http://imgur.com/dYFBQ.png Josh Hunt vor 15 Jahren 0
Wow, bei beiden Screenshots konnte ich nicht sicher sagen, ob es sich tatsächlich um Helvetica oder Arial handelt, obwohl das Kleinbuchstabe A dies zu bestätigen scheint ... Ich habe in den genannten Details gelesen, dass Sie Antialiasing für kleine Schriftarten nicht mögen Größen, damit ich nicht anfangen kann. ;-) Arjan vor 15 Jahren 0
Nur damit Sie wissen, das ist die Postscript-Schrift "Nimbus Sans L", die dort schlecht gerastert wird. sgm vor 14 Jahren 0
Die Helvetica mit Bitmap sieht viel besser aus: http://yfrog.com/hqsampp sgm vor 14 Jahren 0
@sgm, in meinem Auge sieht die Schrift im Screenshot immer noch ziemlich schlecht aus, verglichen mit Arial :) Aber wer auch immer, ich glaube, ich habe eine Lösung (siehe Kommentare zu meiner Antwort), und ich werde das überprüfen, wenn ich wieder da bin meine Arbeitsmaschine Jonik vor 14 Jahren 0
Ja, ich bin damit einverstanden, dass es immer noch etwas schmutzig ist und ein paar Optimierungen vertragen könnte. sgm vor 14 Jahren 0

5 Antworten auf die Frage

6
Jonik

Edit : Ich habe diese Antwort komplett überarbeitet, nachdem ich von einem Kollegen bahnbrechende Ratschläge erhalten hatte.

Folgendes habe ich eingefügt /etc/fonts/local.conf(im <fontconfig>Element):

<!-- Replace Helvetica with Arial --> <match target="pattern"> <test qual="any" name="family"> <string>Helvetica</string> </test> <edit name="family" mode="assign" binding="strong"> <string>Arial</string> </edit> </match>  

Ähnlich für Times -> Times New Roman. (Siehe mein volles local.conf hier .) Der Schlüssel war, Bindung = "stark" für das <edit>Element zu verwenden. (Die Verwendung des Modus "assign_replace" anstelle von "Assign" bewirkt auch etwas Ähnliches, außer dass es zu aggressiv ist: auch Verdana wird durch Arial ersetzt).

Änderungen in der Schriftartenkonfiguration werden sofort wirksam. Neben dem Testen in Firefox können Sie überprüfen, ob es so funktioniert:

$ fc-match helvetica Arial.ttf: "Arial" "Normal" 

Wenn Sie Probleme, ist die beste Hilfe in der Nähe von : man fonts-conf. (Obwohl selbst mit der Dokumentation die Funktionsweise des Schriftzeichensystems für mich etwas kompliziert oder unhandlich erschien.) Sie können auch versuchen, zu "debuggen", was wirklich mit einem Befehl wie dem folgenden geschieht:

FC_DEBUG=4 fc-match helvetica 

Darüber hinaus FC_DEBUG=1024 fc-match helveticazeigt die Liste der Konfigurationsdateien, die die Schriftanpassung beeinflussen.

1
DisgruntledGoat

Ich hatte ein ähnliches Problem in Opera, die Lösung bestand darin, "Core X-Schriftarten" in der Konfiguration zu deaktivieren. Ich würde vorschlagen, zu prüfen, ob es eine ähnliche Option in Firefox gibt.

Andere Optionen:

  • Vergewissern Sie sich, dass Sie definitiv keine Schriftart namens "Helvetica" installiert haben. Ähnliches ist mir ein paar Mal passiert. Bei IIRC wurden die Problemzeichensätze in Ordnern 100dpiund 75dpiim Systemzeichensatzordner ( /usr/local/share/fontsich glaube) genannt. Ich habe diese Ordner einfach ganz von dort verschoben.
  • Überprüfen Sie die Standardwerte unter System> Voreinstellungen> Darstellung> Schriftarten .
  • Überprüfen Sie die Standardeinstellungen von Firefox unter Voreinstellungen> Inhalt .

Wenn Sie Änderungen an den Kernordnern vornehmen, müssen Sie den Schriftarten-Cache neu erstellen mit:

sudo fc-cache -f -v 
Ah, das habe ich vorher nicht gemerkt. Was meinen Sie mit dem Deaktivieren von Core X-Schriftarten * in der Konfig * - wo genau? Was ist auch System> Einstellungen> Schriftart? Das Gnome-Font-Konfigurationstool? Ich verwende KDE auf meinem Ubuntu, habe aber auch Gnome installiert. Wenn Sie die Befehlsnamen zum Starten angeben könnten, wäre dies am nützlichsten. Jonik vor 15 Jahren 0
In Opera ist dies "opera: config", in Firefox jedoch "about: config". Geben Sie dies in die Adressleiste ein. Möglicherweise wird eine Warnung über Drachen angezeigt; D, aber fahren Sie fort. Es gibt eine Filterbox - ich schlage vor, nach "Schrift" zu suchen und zu sehen, welche Optionen Sie erhalten. DisgruntledGoat vor 15 Jahren 0
Meine Antwort wurde korrigiert. Es ist * System> Preferences> Appearance> Fonts * unter Ubuntu. Stellen Sie sicher, dass jede der aufgelisteten Schriftarten (Anwendung / Dokument / etc) geeignet ist. Ich würde auch empfehlen, "Subpixel-Glättung" für den besten Look zu wählen. DisgruntledGoat vor 15 Jahren 0
+1 für den Font-Cache-Neuaufbau und die Subpixel-Glättung. Swoogan vor 13 Jahren 0
0
ukanth

Greasemonkey ist eine Lösung für Ihre Frage. Installieren Sie dieses Addon und Sie können die Webseiten anpassen und die Schriftarten ändern.

und ein Beispielskript, das die Schriftart in Helvita ändert

// ==UserScript== // @name Google Reader Font in Helvetica and enlarged // @version 1.0 // @creator Joe // @description Changes the font family and size from Google Reader page // @namespace userscripts.org // @include https://www.google.com/reader/* // @include http://www.google.com/reader/*  // ==/UserScript==  function addGlobalStyle(css) { var head, style; head = document.getElementsByTagName('head')[0]; if (!head) { return; } style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = css; head.appendChild(style); }  addGlobalStyle('.entry-body'); addGlobalStyle('A.entry-title-link '); 
Hmm, ich glaube, Sie haben es falsch verstanden: Ich möchte die Definitionen der Helvetica oder Times ** abstreifen ** (oder sie durch serifenlose Serifen und Serifen ersetzen). Jonik vor 15 Jahren 0
Dies ist ein Beispiel, in dem er Ihnen zeigt, wie Sie die Schriftart ändern, sodass Sie das Skript nur an Ihre Anforderungen anpassen müssen admintech vor 15 Jahren 0
Richtig ... nun, zum Glück habe ich einen einfacheren Weg gefunden - keine CSS-Hacker nötig: http://superuser.com/questions/54216/how-to-get-firefox-to-use-ms-truetype-fonts-for- helvetica-times-etc / 54224 # 54224 Jonik vor 15 Jahren 0
0
alpha1

Frage mich nur, könnten Sie lokale Schriftarten und @font face css verwenden?

Hmm, nicht sicher, was genau du meinst, aber ich habe schon gefunden, was ich brauchte: http://superuser.com/questions/54216/how-to-get-firefox-to-use-ms-truetype-fonts-for-helvetica -times-etc / 54224 # 54224 Das ist eine sehr einfache, systemweite Lösung. Jonik vor 14 Jahren 0
@font stellen CSS gegenüber. Es war nur eine Idee, die mir in den Kopf fiel, ich könnte damit rumspielen. Sie können @ font-face verwenden, damit FF Schriftarten von Ihrer eigenen Website verwendet, und möglicherweise sogar lokal, indem Sie die Standard-FF-CSS ändern (google @ font-face, um mehr zu erfahren). alpha1 vor 14 Jahren 0
0
BANED4NOREASON

Sie müssen dem Skript auf beliebige Weise einen "Grant" hinzufügen ...

Greasemonkey 1.0 fügt einen speziellen Metadatenblock-Imperativ hinzu: @grant.

If a script does not specify any @grant values, Greasemonkey 1.0-1.9 will attempt to auto-detect the right settings. From GreaseMonkey 2.0, @grant none is assumed by default, if no other values are specified.[1] If a script specifies any values (or they were auto detected), then it will be provided with only those API methods that it declares. The valid values are unsafeWindow, and the names of those GM_ prefixed values that you wish your script to be granted access to. Otherwise the script will be granted no special API privileges, and thus run without the security constraints Greasemonkey scripts have traditionally had. If you want your script to operate in this mode, you should explicitly declare @grant none. 

Beispiele

Es ist üblich, dass Skripts (bei der letzten Zählung mehr als die Hälfte) überhaupt keine speziellen APIs verwenden. Wenn Sie explizit darum bitten, keine besonderen Berechtigungen zu erhalten, bedeutet dies, dass das Skript direkt auf der Inhaltsseite ausgeführt wird. Dies bedeutet keine Sicherheits-Sandbox und keine ihrer Einschränkungen. Der Zugriff auf Variablen auf der Seite funktioniert einfach, der Aufruf von Funktionen und das Lesen der Ergebnisse funktioniert ebenfalls. Dazu einfach:

// ==UserScript== // @name Grant None Example (can be omitted since GM 2.0) // @include http* // @grant none // ==/UserScript== console.log('This script grants no special privileges, so it runs without security limitations.'); 

Wenn Sie eine von Greasemonkeys APIs verwenden, sollten Sie explizit darum bitten, dass Ihr Skript dafür vergeben wird:

// ==UserScript== // @name Grant Some Example // @include http* // @grant GM_getValue // @grant GM_setValue // ==/UserScript==  var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

In diesem Fall fordert das Skript den Zugriff auf beide GM_getValueund jeweils GM_setValueeinen in jeder @grantZeile. Geben Sie den Namen einer Greasemonkey-API an, der Zugriff darauf gewährt werden soll. (Alle Skripte werden immer GM_infoohne ausdrückliche Anforderung abgerufen.) Vorübergehend würde dies auch funktionieren:

// ==UserScript== // @name Grant Legacy Example // @include http* // ==/UserScript==  var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

Dieses Beispiel funktioniert in Greasemonkey Version 1.0. Wenn keine @ grant-Zeilen vorhanden sind, versucht Greasemonkey festzustellen, welche APIs verwendet werden, und verhält sich so, als wären diese @ grant-Zeilen angegeben worden. Diese Erkennung kann in bestimmten Fällen fehlschlagen, insbesondere wenn eval()verwendet wird.

Alle vor @grant geschriebenen Skripts sollten aus diesem Grund weiterhin funktionieren. Sie sollten Ihre Skripts jedoch so ändern, dass sie @grant so bald wie möglich angeben, damit sie in Zukunft nicht kaputt gehen. Kompatibilitätsebene

Viele der Greasemonkey-APIs wurden durch Webstandards wie DOM Storage dupliziert. Wenn Sie immer davon ausgehen, dass Ihr Skript nur in einer einzigen Domäne ausgeführt wird, können Sie @grant none verwenden und die Kompatibilität erhöhen, ohne dass dabei sofort Nachteile entstehen. Verwenden Sie einfach eine @require-Bibliothek, um Greasemonkey-APIs mit jetzt standardmäßigen Browserfunktionen zu emulieren:

// ==UserScript== // @name Grant None Example, With Shim // @include http://www.example.com/* // @grant none // @require https://gist.githubusercontent.com/arantius/3123124/raw/grant-none-shim.js // ==/UserScript==  var counter = GM_getValue('counter', 0); console.log('This script has been run ' + counter + ' times.'); GM_setValue('counter', ++counter); 

Dieses Skript funktioniert genauso wie das obige Beispiel, mit der Ausnahme, dass das Grant-None-Shim die API-Emulation mit Standardbrowserfunktionen bereitstellt. Wenn die Shim-Kompatibilitätsebene gut genug für Ihr Skript funktioniert, ist dies das Beste aus beiden Welten. Umfang

In diesem Fall hat das Benutzerskript immer noch einen eigenen globalen Gültigkeitsbereich, der sich vom globalen Gültigkeitsbereich der Inhaltsseite unterscheidet. Dies bedeutet, dass eine oberste Ebene var x = 1;für den Inhaltsbereich nicht sichtbar ist und somit die Seite nicht beschädigt wird (dh, wenn eine Variable x einen anderen Wert hat.) Um Werte in den Inhaltsbereich zu schreiben, tun Sie window.x = 1;.

Wenn Sie @requireeine Version von jQuery, wird es zuweisen implizit window.$und window.jQuery. Wenn die von Ihnen ausgeführte Seite von einer anderen Version von jQuery abhängt, kann dies die Seite beschädigen. Führen Sie auf der obersten Ebene Ihres Skripts Folgendes aus, um dieses Problem zu umgehen:

this.$ = this.jQuery = jQuery.noConflict(true); 

Dieser Code speichert einen jQuery-Verweis (in den globalen Gültigkeitsbereich des Skripts, wenn dieser im Grant-None-Modus ausgeführt wird), entfernt ihn jedoch aus dem Fenster (dem globalen Inhaltsbereich) und stellt alles wieder her, was dort ursprünglich gespeichert wurde.