Come ottenere Firefox per utilizzare i font MS TrueType per Helvetica, Times, ecc.?


7

Sto usando i font TrueType (Windows) sulla mia workstation Ubuntu ( dettagli ), e sono per lo più felice di come appaiono i caratteri, sia nelle app desktop sia sul web (usando Firefox).

Tuttavia, su alcune pagine Web, come questo , i caratteri completamente succhiano:

screenshot

Ho trovato la ragione per essere Helvetica nel CSS per quel sito:

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

Quando, usando Firebug, rimuovo Helvetica da quella lista, usa Arial e sembra di nuovo tutto spiffy:

alt text

La mia domanda è: come fare in modo che le pagine Web che usano Helvetica (o Times, o altri tipi di carattere) sembrino belle automaticamente? In altre parole, come mappare le famiglie di font Times e Helvetica ai valori predefiniti serif e sans-serif (che nel mio caso sarebbero Times New Roman e Arial, rispettivamente)?

Sono interessato a qualsiasi soluzione che faccia in modo che Firefox utilizzi i font TrueType di MS in questo scenario, indipendentemente dal fatto che sia basato sulla modifica delle configurazioni dei font di Ubuntu o delle regole CSS personalizzate in Firefox (o qualcos'altro di cui attualmente non ho idea).

Aggiornare : Ora ho risolto il problema - questa risposta descrive cosa dovevo fare.


Aspetta, c'è un miglioramento?
Josh Hunt

Sì, sicuramente. Ma immagino che tipo di caratteri preferiscono le persone variano da una persona all'altra. Confronta per es. i due screenshot in superuser.com/questions/19824/better-ubuntu-fonts
Jonik

Scusate, ero solo un utente mac compiaciuto, ancora una volta. imgur.com/dYFBQ.png
Josh Hunt

Wow, con entrambe le catture dello schermo non sono sicuro che sia effettivamente Helvetica o Arial, anche se la minuscola A sembra confermarlo ... Ho letto nei dettagli di riferimento che non ti piace l'antialiasing per caratteri piccoli dimensioni, quindi non inizierò. ;-)
Arjan

Solo così sai, questo è il font postscript "Nimbus Sans L" che viene rasterizzato male lì.
sgm

Risposte:


6

modificare : Ho completamente aggiornato questa risposta dopo aver ricevuto alcuni consigli rivoluzionari da un collega.

Ecco cosa ho inserito /etc/fonts/local.conf (dentro il <fontconfig> elemento):

<!-- 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>    

Allo stesso modo per Times - & gt; Times New Roman. (Vedi il mio pieno local.conf Qui .) La chiave era da usare binding = "forte" per il <edit> elemento. (Inoltre, usare la modalità "assign_replace" invece di "assign" causa qualcosa di simile, eccetto che è troppo aggressivo: anche Verdana viene rimpiazzato con Arial).

Le modifiche alle configurazioni dei font sono immediatamente efficaci. Oltre a provare in Firefox, puoi verificare che funzioni in questo modo:

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

Se incontri dei problemi, il miglior aiuto è vicino: man fonts-conf. (Anche se anche con la documentazione, il funzionamento del sistema di font mi è sembrato alquanto complicato o poco pratico.) Puoi anche provare a "debugare" cosa sta realmente accadendo usando un comando come:

FC_DEBUG=4 fc-match helvetica

Inoltre, FC_DEBUG=1024 fc-match helvetica mostra l'elenco dei file di configurazione che influiscono sulla corrispondenza dei font.


1

Ho avuto un problema simile in Opera, la soluzione era disabilitare "Core X Fonts" nella configurazione. Suggerirei di vedere se esiste un'opzione simile in Firefox.

Altre opzioni:

  • Verifica che non sia installato un font chiamato "Helvetica", cose simili mi sono capitate poche volte. IIRC i caratteri del problema erano in cartelle chiamate 100dpi e 75dpi nella cartella dei font di sistema ( /usr/local/share/fonts Credo). Ho appena spostato completamente quelle cartelle da lì.
  • Controllare i valori predefiniti sotto Sistema & gt; Preferenze & gt; Aspetto & gt; Caratteri .
  • Controlla i valori predefiniti di Firefox sotto Preferenze & gt; Soddisfare .

Se apporti modifiche alle cartelle principali, dovrai ricostruire la cache dei font con:

sudo fc-cache -f -v

Ah, non me ne sono accorto prima. Cosa intendi disabilitando i font di Core X. nella configurazione - dove esattamente? Inoltre, cos'è System & gt; Preferenze & gt; Font? Lo strumento di configurazione del font Gnome? Sto usando KDE sul mio Ubuntu ma ho anche installato Gnome. Se potessi dare i nomi dei comandi per lanciarli, sarebbe il più utile.
Jonik

In Opera lo è opera:config ma in Firefox lo è about:config. Digita quello nella barra degli indirizzi, potresti ricevere un avvertimento sui draghi; D ma continua. C'è una casella filtro: ti suggerisco di cercare "font" e vedere quali opzioni ottieni.
DisgruntledGoat

Ho corretto la mia risposta, lo è Sistema & gt; Preferenze & gt; Aspetto & gt; Caratteri su Ubuntu. Assicurati che ognuno dei caratteri elencati (Applicazione / Documento / ecc.) Sia appropriato. Ti consiglio anche di scegliere "Subpixel smoothing" per il miglior look.
DisgruntledGoat

+1 per la ricostruzione della cache dei font e il livellamento subpixel.
Swoogan

0

Greasemonkey sarà una soluzione per la tua domanda. Installa questo add-on e puoi personalizzare le pagine web e cambiare i caratteri.

e uno script di esempio che cambia il font in Helvita

// ==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{font-family:Helvetica;font-size:110%;line-height:150%;}');
addGlobalStyle('A.entry-title-link {font-family:Helvetica;font-size: 20px;}');

Hmm, penso che tu abbia capito nel modo sbagliato: lo voglio rimuovere le definizioni di Helvetica o Times (o sostituirli con sans-serif e serif)
Jonik

Questo è un esempio che ti sta mostrando come cambiare il font in modo da avere solo bisogno di cambiare lo script in base alle tue esigenze
admintech

Giusto ... beh, per fortuna ho trovato un modo più semplice - non è necessario alcun hackery CSS: superuser.com/questions/54216/...
Jonik

0

Mi stavo solo chiedendo, potresti usare i font locali e @font face css?


Hmm, non sono sicuro di cosa intendi esattamente, ma ho già trovato quello di cui avevo bisogno: superuser.com/questions/54216/... Questa è una soluzione molto semplice, a livello di sistema.
Jonik

@font face CSS. Era solo un'idea che mi è venuta in mente, potrei giocarci intorno. puoi usare @ font-face per fare in modo che FF usi i caratteri dal tuo sito web, e magari anche locale modificando il css standard FF (google @ font-face per saperne di più)
alpha1

0

Devi aggiungere una "concessione" a quello script in qualsiasi modo ...

Greasemonkey 1.0 aggiunge un imperativo speciale per il blocco dei metadati: @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.

Esempi

È comune per gli script (oltre la metà dell'ultimo conteggio) di non utilizzare alcuna API speciale. Per tali script, chiedendo esplicitamente di non concedere privilegi speciali significa che lo script verrà eseguito direttamente nella pagina di contenuto. Ciò significa che non esiste sandbox di sicurezza e nessuna delle sue limitazioni, quindi l'accesso alle variabili nella pagina funziona, chiama le funzioni e legge i risultati anche solo funziona. Per farlo, semplicemente:

// ==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.');

Se usi una delle API di Greasemonkey, devi chiedere esplicitamente che sia concessa al tuo script:

// ==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 questo caso, lo script chiede di ottenere l'accesso ad entrambi GM_getValue e GM_setValueuno su ciascuno @grant linea. Specificare il nome di qualsiasi API Greasemonkey per ottenere l'accesso ad essa. (Tutti gli script ottengono sempre GM_info senza specificarlo esplicitamente.) Temporaneamente, ciò funzionerebbe anche:

// ==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);

Questo esempio funzionerà con Greasemonkey versione 1.0. Quando non ci sono linee @grant, Greasemonkey prova a rilevare quali API vengono utilizzate e si comporta come se fossero state specificate quelle @grant. Questo rilevamento potrebbe fallire in alcuni casi, specialmente quando eval() viene usato.

Tutti gli script scritti prima di @grant dovrebbero continuare a funzionare a causa di ciò, ma è necessario modificare gli script per specificare @grant al più presto, in modo che non si interrompano in futuro. Livello di compatibilità

Molte API Greasemonkey sono state duplicate da standard web come DOM Storage. Se ti aspetti che il tuo script funzioni solo su un singolo dominio, puoi utilizzare @grant none e la sua maggiore compatibilità senza inconvenienti immediatamente. Utilizza semplicemente una libreria @require per emulare le API di Greasemonkey con funzionalità browser standard attualmente disponibili:

// ==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);

Questo script funzionerà come nell'esempio precedente, tranne per il fatto che la concessione di Nessuno shim sta fornendo l'emulazione API con funzionalità browser standard. Quando il livello di compatibilità shim funziona abbastanza bene per il tuo script, questo è il meglio di entrambi i mondi. Scopo

In nessuno caso, lo script utente ha ancora il proprio ambito globale, distinto dall'ambito globale della pagina di contenuto. Ciò significa che un livello superiore var x = 1; non sarà visibile all'ambito del contenuto e quindi non interromperà la pagina (ad esempio se dipende da una variabile x che ha un valore diverso). Per scrivere valori per l'ambito del contenuto, fare window.x = 1;.

Se tu @require una versione di jQuery, sarà assegnata implicitamente a window.$ e window.jQuery. Se la pagina in cui si esegue dipende da una versione diversa di jQuery, ciò potrebbe interrompere la pagina. Per ovviare a questo problema, ovunque al livello più alto del tuo script fai:

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

Questo codice salverà un riferimento a jQuery (in questo, l'ambito globale dello script quando è in esecuzione nella modalità grant grant), rimuovendolo dalla finestra (l'ambito globale del contenuto) e ripristinando qualsiasi cosa originariamente archiviata.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.