Como fazer com que o Firefox use fontes MS TrueType para Helvetica, Times, etc?

8

Estou usando fontes TrueType (Windows) na minha estação de trabalho Ubuntu ( detalhes ) e estou muito feliz com a aparência das fontes, tanto em aplicativos de desktop quanto na Web (usando o Firefox).

No entanto, em algumas páginas da web, como esta , as fontes são uma porcaria:

captura de tela

Eu encontrei o motivo para estar Helveticano CSS desse site:

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

Quando, usando o Firebug, removo o Helvetica dessa lista, ele usa o Arial e fica com aspeto novamente:

texto alternativo

Minha pergunta é: como fazer com que as páginas da Web que usam Helvetica (ou Times ou outras fontes semelhantes) pareçam legais automaticamente? Em outras palavras, como mapear as famílias de fontes Times e Helvetica para os padrões serif e sans-serif (que no meu caso seriam Times New Roman e Arial, respectivamente)?

Estou interessado em qualquer solução que faça o Firefox usar as fontes MS TrueType neste cenário, não importa se é baseado em configurações de fontes do Ubuntu ou regras CSS personalizadas no Firefox (ou em algo que atualmente não tenho idéia).

Atualização : Agora, o problema foi totalmente resolvido - esta resposta descreve o que eu precisava fazer.

Jonik
fonte
Espere, há uma melhoria?
21139 Josh Hunt
Sim definitivamente. Mas acho que o tipo de fonte preferido pelas pessoas varia de uma pessoa para outra. Compare por exemplo, os dois screenshots em superuser.com/questions/19824/better-ubuntu-fonts
Jonik
Desculpe, eu estava apenas sendo um usuário orgulhoso do mac, mais uma vez. imgur.com/dYFBQ.png
Josh Hunt
Uau, com as duas capturas de tela, eu não sabia ao certo se realmente é Helvetica ou Arial, embora o A minúsculo pareça confirmar ... Li nos detalhes referenciados que você não gosta de antialiasing para fontes pequenas tamanhos, para não começar. ;-)
Arjan
Só para você saber, essa é a fonte postscript "Nimbus Sans L" sendo mal rasterizada lá.
Sfm

Respostas:

7

Edit : Eu atualizei completamente esta resposta depois de receber alguns conselhos inovadores de um colega.

Aqui está o que eu inseri /etc/fonts/local.conf(dentro do <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>    

Da mesma forma para Times -> Times New Roman. (Veja minha íntegra local.conf aqui .) A chave era usar binding = "strong" para o <edit>elemento. (Além disso, usar o modo "assign_replace" em vez de "assign" causa algo semelhante, exceto que é muito agressivo: também Verdana é substituído por Arial).

Alterações nas configurações de fonte são efetivas imediatamente. Além de testar no Firefox, você pode verificar se funciona assim:

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

Se você tiver problemas, a melhor ajuda está perto man fonts-conf. (Embora, mesmo com a documentação, o funcionamento do sistema de fontes parecesse um pouco complicado ou pesado para mim.) Você também pode tentar "depurar" o que realmente está acontecendo usando um comando como:

FC_DEBUG=4 fc-match helvetica

Além disso, FC_DEBUG=1024 fc-match helveticamostra a lista de arquivos de configuração que afetam a correspondência da fonte.

Jonik
fonte
1

Eu tive um problema semelhante no Opera, cuja solução era desativar o "Core X Fonts" na configuração. Eu sugiro ver se existe uma opção semelhante no Firefox.

Outras opções:

  • Verifique se você definitivamente não possui uma fonte chamada "Helvetica" instalada, coisas semelhantes aconteceram comigo algumas vezes. IIRC as fontes problemáticas estavam em pastas chamadas 100dpie 75dpina pasta de fontes do sistema ( /usr/local/share/fontseu acho). Acabei de mudar completamente essas pastas de lá.
  • Verifique os padrões em Sistema> Preferências> Aparência> Fontes .
  • Verifique os padrões do Firefox em Preferências> Conteúdo .

Se você fizer alterações nas pastas principais, precisará reconstruir o cache da fonte com:

sudo fc-cache -f -v
DisgruntledGoat
fonte
Ah, eu não percebi isso antes. O que você quer dizer com desativar as fontes do Core X na configuração - onde exatamente? Além disso, o que é Sistema> Preferências> Fonte? A ferramenta de configuração de fontes do Gnome? Estou usando o KDE no meu Ubuntu, mas também tenho o Gnome instalado. Se você pudesse dar os nomes dos comandos para iniciá-los, isso seria o mais útil.
Jonik
No Opera é, opera:configmas no Firefox é about:config. Digite isso na barra de endereço, você pode receber um aviso sobre dragões; D, mas continue. Há uma caixa de filtro - sugiro pesquisar por "fonte" e ver quais opções você obtém.
DiscruntledGoat
Corrigida minha resposta, é Sistema> Preferências> Aparência> Fontes no Ubuntu. Verifique se cada uma das fontes listadas (Aplicativo / Documento / etc) é apropriada. Também recomendo escolher "Suavização de subpixel" para obter a melhor aparência.
DiscruntledGoat
+1 para reconstruir o cache da fonte e suavizar o subpixel.
Swoogan
0

Greasemonkey será uma das soluções para sua pergunta. Instale este complemento e você pode personalizar as páginas da web e alterar as fontes.

e um exemplo de script que altera a fonte para 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;}');
ukanth
fonte
Hmm, eu acho que você tem o caminho errado: Quero despir quaisquer definições Helvetica ou Times (ou substituí-los por sans-serif e serif)
Jonik
Esse é um exemplo que mostra como alterar o tipo de letra para que você só precisa mudar o script para corresponder às suas necessidades
admintech
Certo ... bem, felizmente eu encontrei uma maneira mais simples - sem CSS hackery necessário: superuser.com/questions/54216/...
Jonik
0

Apenas imaginando, você poderia usar fontes locais e o @font face css?

alpha1
fonte
Hmm, não sei o que exatamente você quer dizer, mas eu já encontrei o que precisava: superuser.com/questions/54216/… Essa é uma solução muito simples para todo o sistema.
Jonik
@font face CSS. Foi apenas uma idéia que surgiu na minha cabeça, eu poderia brincar com isso. você pode usar @ font-face para ter fontes de uso FF partir do seu próprio site, e talvez até mesmo local, modifing o css padrão FF (google @ font-face para saber mais)
alpha1
0

Você precisa adicionar um "Grant" a esse script de qualquer maneira ...

O Greasemonkey 1.0 adiciona um imperativo especial do bloco de metadados: @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.

Exemplos

É comum que os scripts (mais da metade na última contagem) não usem APIs especiais. Para esses scripts, solicitar explicitamente que não sejam concedidos privilégios especiais significa que o script será executado diretamente na página de conteúdo. Isso significa que não há área restrita de segurança e nenhuma de suas limitações; portanto, acessar variáveis ​​na página simplesmente funciona, chamar funções e ler seus resultados também funciona. Para fazer isso, basta:

// ==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 você usa uma das APIs de Greasemonkey, deve solicitar explicitamente que ela seja concedida ao seu 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);

Nesse caso, o script está solicitando acesso a ambos GM_getValuee GM_setValue, um em cada @grantlinha. Especifique o nome de qualquer API do Greasemonkey para obter acesso a ela. (Todos os scripts sempre são obtidos GM_infosem a solicitação específica.) Temporariamente, isso também funcionaria:

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

Este exemplo funcionará no Greasemonkey versão 1.0. Quando não há linhas @grant, o Greasemonkey tenta detectar quais APIs estão sendo usadas e age como se essas linhas @grant tivessem sido especificadas. Essa detecção pode falhar em certos casos, especialmente quando eval()é usado.

Todos os scripts escritos antes do @grant devem continuar a funcionar por causa disso, mas você deve alterar seus scripts para especificar o @grant o mais rápido possível, para que não sejam interrompidos no futuro. Camada de compatibilidade

Muitas das APIs do Greasemonkey foram duplicadas por padrões da Web como o DOM Storage. Se você espera que seu script funcione em um único domínio, use o @grant none e sua compatibilidade aumentada sem nenhum inconveniente imediatamente. Basta usar uma biblioteca @require para emular APIs do Greasemonkey com os recursos do navegador agora padrão:

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

Esse script funcionará da mesma forma que o exemplo acima, exceto que o sh concession none está fornecendo emulação de API com recursos padrão do navegador. Quando a camada de compatibilidade com o shim funciona bem o suficiente para o seu script, esse é o melhor dos dois mundos. Escopo

Na concessão de nenhum caso, o script do usuário ainda possui seu próprio escopo global, distinto do escopo global da página de conteúdo. Isso significa que um nível superior var x = 1;não será visível para o escopo do conteúdo e, portanto, não quebrará a página (ou seja, se depender de uma variável x ter um valor diferente.) Para escrever valores no escopo do conteúdo, faça window.x = 1;.

Se você @requirepossuir uma versão do jQuery, ela será atribuída implicitamente a window.$e window.jQuery. Se a página em que você executa depende de uma versão diferente do jQuery, isso pode danificá-la. Para contornar esse problema, em qualquer lugar no nível superior do seu script:

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

Esse código salvará uma referência do jQuery (nele, o escopo global do script ao ser executado no modo de concessão de nenhum), enquanto o remove da janela (o escopo global do conteúdo) e restaura qualquer coisa originalmente armazenada nele.

BANED4NOREASON
fonte