Entrando no Ritmo da Tipografia Gráfica com {ragg} e {hrbragg} (também conhecido como It’s {ragg} -time}

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

[ad_1]

[This article was first published on R – rud.is, and kindly contributed to R-bloggers]. (Você pode relatar problemas sobre o conteúdo desta página aqui)


Quer compartilhar seu conteúdo em R-bloggers? clique aqui se você tiver um blog, ou aqui se não tiver.

Piadas horríveis à parte, espero que todos tenham visto as notícias, no início desta semana, de @ thomasp85 sobre a evolução das capacidades tipográficas modernas no ecossistema R. Thomas (e alguns coortes) tem trabalhado em {systemfonts}, {ragg} e {texthaping} por um bom tempo, e o – digamos tidyglyphs ecossistema – está superpronto para o horário nobre.

Thomas coberto uma grande quantidade de solo em sua postagem, então, por favor, dedique algum tempo para digerir isso antes de continuar.

Voltar? 👍🏽

Embora seja possível gerenciar as necessidades tipográficas com as ferramentas de fundição fornecidas por meio da tríade de pacotes de renderização de fontes, seria difícil dizer que o seguinte é “divertido”, ou mesmo uma codificação verdadeiramente gerenciável:

library(systemfonts)

register_variant(
  name = "some-unique-prefix Inter some-style-01",
  weight = "normal",
  features = font_feature(
    poss = 1, ibly = 1, many = 1, 
    four = 1, char = 1, open = 1,
    type = 1, code = 1, spec = 1
  )
)

# remember that name

register_variant(
  name = "some-unique-prefix Inter some-style-02",
  weight = "normal",
  features = font_feature(
    poss = 1, ibly = 1, many = 1, 
    four = 1, char = 1, open = 1,
    type = 1, code = 1, spec = 1
  )
)

# remember that name 

# add a dozen more lines ...

ggplot() +
   geom_text(family = "oops-i-just-misspelled-the-family-name-*again*", ...) 

Recebemos o poder de nivelar nossa tipografia de gráfico, mas é uma espécie de tipografia literal (aqueles que colocam blocos de tipo em uma impressora) e podemos tornar nossas vidas totalmente mais fáceis e gráficos mais bonitos com a ajuda de um novo pacote – {hrbragg} https://git.rud.is/hrbrmstr/hrbragg – que é uma espécie de ponte entre {ragg}, {systemfonts}, {texthaping} e um pacote surpreendentemente popular meu: {hrbrthemes}. {hrbragg} é separado de {hrbrthemes} uma vez que este novo ecossistema tipográfico é bastante restrito a {ragg} dispositivos gráficos (para o momento, como Thomas aludiu outro dia), e os novos temas fornecidos em {hrbragg} estão um pouco acima daqueles em seu pacote irmão.

Gerenciamento de recursos

No coração de {systemfonts} está a capacidade de ajustar os recursos da fonte e dobrá-los de acordo com sua vontade. Este post um tanto antigo mostra por que esses ajustes existem e investiga (mas não também profundamente) em seus detalhes, até os códigos de quatro letras que são usados ​​para representar e trabalhar com um determinado recurso. Mas o que faz calt significar? E o que é isso tnum camarada que você verá muito em R-land nos próximos meses? Enquanto um poderia deixe o conforto do RStudio, VS Code ou vim para visitar um dos links de referência no pacote de Thomas ou {hrbragg}, incluí a cópia mais recente de tag-codefull-tag-nameshort-tab-description em {hrbragg } como um quadro de dados utilizável para que você possa tratá-lo como os dados que são!

library(systemfonts) # access to and tweaking OTFs!
library(textshaping) # lets us treat type as data
library(ragg)        # because it'll be lonely w/o the other two
library(hrbragg)     # remotes::install_git("https://git.rud.is/hrbrmstr/hrbragg.git")
library(tidyverse)   # nice printing, {ggplot2}, and b/c we'll do some font data wrangling

data("feature_dict")

feature_dict
## # A tibble: 122 x 3
##    tag   long_name                   description                                                                                             
##                                                                                                                               
##  1 aalt  Access All Alternates       Special feature: used to present user with choice all alternate forms of the character                  
##  2 abvf  Above-base Forms            Replaces the above-base part of a vowel sign. For Khmer and similar scripts.                            
##  3 abvm  Above-base Mark Positioning Positions a mark glyph above a base glyph.                                                              
##  4 abvs  Above-base Substitutions    Ligates a consonant with an above-mark.                                                                 
##  5 afrc  Alternative Fractions       Converts figures separated by slash with alternative stacked fraction form                              
##  6 akhn  Akhand                      Hindi for unbreakable.  Ligates consonant+halant+consonant, usually only for k-ss and j-ny combinations.
##  7 blwf  Below-base Forms            Replaces halant+consonant combination with a subscript form.                                            
##  8 blwm  Below-base Mark Positioning Positions a mark glyph below a base glyph                                                               
##  9 blws  Below-base Substitutions    Ligates a consonant with a below-mark.                                                                  
## 10 c2pc  Capitals to Petite Caps     Substitutes capital letters with petite caps                                                            
## # … with 112 more rows

Você também pode usar help("opentype_typographic_features") para ver uma página de ajuda do R com as mesmas informações. Essa página também possui links de recursos externos, um dos quais é um manual detalhado de cada recurso com casos de uso (no caso mesmo a breve descrição não é tão útil quanto poderia ser).

Leia Também  Previsão de resultados de pneumonia: modelagem via API DataRobot

Antes que se possa pensar em usar o metal puro register_variant(..., font_feature(...)) duo, é preciso saber quais são as características que uma família de tipo particular suporta. Podemos recuperar os códigos de recurso com textshaping::get_font_features() e procure-os neste quadro de dados para obter uma visão rápida:

# old school subsetting ftw!
feature_dict[feature_dict$tag %in% textshaping::get_font_features("Inter")[[1]],]
## # A tibble: 19 x 3
##    tag   long_name                   description                                                                                                                 
##                                                                                                                                                   
##  1 aalt  Access All Alternates       Special feature: used to present user with choice all alternate forms of the character                                      
##  2 calt  Contextual Alternates       Applies a second substitution feature based on a match of a character pattern within a context of surrounding patterns      
##  3 case  Case Sensitive Forms        Replace characters, especially punctuation, with forms better suited for all-capital text, cf. titl                         
##  4 ccmp  Glyph Composition/Decompos… Either calls a ligature replacement on a sequence of characters or replaces a character with a sequence of glyphs. Provides…
##  5 cpsp  Capital Spacing             Adjusts spacing between letters in all-capitals text                                                                        
##  6 dlig  Discretionary Ligatures     Ligatures to be applied at the user's discretion                                                                            
##  7 dnom  Denominator                 Converts to appropriate fraction denominator form, invoked by frac                                                          
##  8 frac  Fractions                   Converts figures separated by slash with diagonal fraction                                                                  
##  9 kern  Kerning                     Fine horizontal positioning of one glyph to the next, based on the shapes of the glyphs                                     
## 10 locl  Localized Forms             Substitutes character with the preferred form based on script language                                                      
## 11 mark  Mark Positioning            Fine positioning of a mark glyph to a base character                                                                        
## 12 numr  Numerator                   Converts to appropriate fraction numerator form, invoked by frac                                                            
## 13 ordn  Ordinals                    Replaces characters with ordinal forms for use after numbers                                                                
## 14 pnum  Proportional Figures        Replaces numerals with glyphs of proportional width, often also onum                                                        
## 15 salt  Stylistic Alternates        Either replaces with, or displays list of, stylistic alternatives for a character                                           
## 16 subs  Subscript                   Replaces character with subscript version, cf. numr                                                                         
## 17 sups  Superscript                 Replaces character with superscript version, cf. dnom                                                                       
## 18 tnum  Tabular Figures             Replaces numerals with glyphs of uniform width, often also lnum                                                             
## 19 zero  Slashed Zero                Replaces 0 figure with slashed 0        

A maioria deles não será muito útil (ainda), mas existem três recursos principais que acredito ser necessário ao escolher uma fonte para um gráfico:

  • Um dos *ligs (porque as ligaduras.) são tão legais, lindas e úteis)
  • tnum para números tabulares (essencial na exibição do valor do eixo e mais)
  • kern para um espaçamento suave entre letras ou kerning

Como acabei de criar uma regra, vamos ver quantas fontes tenho que suportam a regra:

(fam % 
  get_font_features() %>% 
  set_names(fam) %>% 
  keep(~sum(c(
    any(grepl("kern", .)), 
    any(grepl("tnum", .)),
    any(grepl(".lig|liga", .)) 
    )) == 3
  ) %>% 
  names() %>% 
  sort()
##  [1] "Barlow"                 "Goldman Sans"           "Goldman Sans Condensed" "Grantha Sangam MN"     
##  [5] "Inter"                  "Kohinoor Devanagari"    "Mukta Mahee"            "Museo Slab"            
##  [9] "Neufile Grotesk"        "Roboto"                 "Roboto Black"           "Roboto Condensed"      
## [13] "Roboto Light"           "Roboto Medium"          "Roboto Thin"            "Tamil Sangam MN"       
## [17] "Trattatello"           

Eu tenho mais, mas eles estão em um Mac diferente 😎

Leia Também  Instalação do R 4.0 no Ubuntu 20.04 LTS e dicas para pacotes espaciais

.

{hrbragg} vem com Inter, Goldman Sans e Roboto Condensed, então vamos explorar um deles – Inter – e ver como podemos torná-lo útil, mas não tedioso. Os recursos suportados do Inter estão acima e aqui estão os membros da família:

system_fonts() %>% 
  filter(family == "Inter") %>% 
  select(name, family, style, weight, width, italic, monospace)
##  A tibble: 18 x 7
##    name                   family style              weight     width  italic monospace
##                                                    
##  1 Inter-ExtraLight       Inter  Extra Light        light      normal FALSE  FALSE    
##  2 Inter-MediumItalic     Inter  Medium Italic      medium     normal TRUE   FALSE    
##  3 Inter-ExtraLightItalic Inter  Extra Light Italic light      normal TRUE   FALSE    
##  4 Inter-Bold             Inter  Bold               bold       normal FALSE  FALSE    
##  5 Inter-ThinItalic       Inter  Thin Italic        ultralight normal TRUE   FALSE    
##  6 Inter-SemiBold         Inter  Semi Bold          semibold   normal FALSE  FALSE    
##  7 Inter-BoldItalic       Inter  Bold Italic        bold       normal TRUE   FALSE    
##  8 Inter-Italic           Inter  Italic             normal     normal TRUE   FALSE    
##  9 Inter-Medium           Inter  Medium             medium     normal FALSE  FALSE    
## 10 Inter-BlackItalic      Inter  Black Italic       heavy      normal TRUE   FALSE    
## 11 Inter-Light            Inter  Light              normal     normal FALSE  FALSE    
## 12 Inter-SemiBoldItalic   Inter  Semi Bold Italic   semibold   normal TRUE   FALSE    
## 13 Inter-Regular          Inter  Regular            normal     normal FALSE  FALSE    
## 14 Inter-ExtraBoldItalic  Inter  Extra Bold Italic  ultrabold  normal TRUE   FALSE    
## 15 Inter-LightItalic      Inter  Light Italic       normal     normal TRUE   FALSE    
## 16 Inter-Thin             Inter  Thin               ultralight normal FALSE  FALSE    
## 17 Inter-ExtraBold        Inter  Extra Bold         ultrabold  normal FALSE  FALSE    
## 18 Inter-Black            Inter  Black              heavy      normal FALSE  FALSE    

Ninguém. Quero dizer, ninguém deseja digitar dezoito + declarações de registro de variantes de fonte, e é por isso que {hrbragg} vem com reconfigure_font(). Basta fornecer o sobrenome, os recursos para os quais deseja suporte e ele cuidará do tédio para você:

reconfigure_font(
  prefix = "hrbragg-pkg",
  family = "Inter",
  width = "normal",
  ligatures = "discretionary",
  calt = 1, tnum = 1, case = 1,
  dlig = 1, ss01 = 1, kern = 1,
  zero = 0, salt = 0
) -> customized_inter

# I'll have a proper print method for this soon

str(customized_inter, 1)
## List of 17
##  $ ultralight_italic: chr "clever-prefix Inter Thin Italic"
##  $ ultralight       : chr "clever-prefix Inter Thin"
##  $ light            : chr "clever-prefix Inter Extra Light"
##  $ light_italic     : chr "clever-prefix Inter Extra Light Italic"
##  $ normal_italic    : chr "clever-prefix Inter Light Italic"
##  $ normal_light     : chr "clever-prefix Inter Light"
##  $ normal           : chr "clever-prefix Inter Regular"
##  $ medium_italic    : chr "clever-prefix Inter Medium Italic"
##  $ medium           : chr "clever-prefix Inter Medium"
##  $ semibold         : chr "clever-prefix Inter Semi Bold"
##  $ semibold_italic  : chr "clever-prefix Inter Semi Bold Italic"
##  $ bold             : chr "clever-prefix Inter Bold"
##  $ bold_italic      : chr "clever-prefix Inter Bold Italic"
##  $ ultrabold_italic : chr "clever-prefix Inter Extra Bold Italic"
##  $ ultrabold        : chr "clever-prefix Inter Extra Bold"
##  $ heavy_italic     : chr "clever-prefix Inter Black Italic"
##  $ heavy            : chr "clever-prefix Inter Black"
##  - attr(*, "family")= chr "Inter"

O reconfigure_font() função aplica as configurações de recursos a todos os membros da família, dá a cada um um nome com o prefixo declarado e fornece um valor de retorno que suporta autocompletar do nome em IDEs inteligentes e praticamente elimina a necessidade de digitar nomes de fonte longos e exclusivos, como este:

ggplot() +
  geom_text(
    aes(1, 2, label = "Welcome to a  Inter!"),
    size = 6, family = customized_inter$ultrabold
  ) +
  theme_void()

Observe que temos uma fonte adorável com ligaduras limpas sem muito trabalho! (Devo mencionar que se um prefixo não for especificado, um UUID é escolhido, já que não nos importamos mais com os nomes alongados).

Leia Também  Aspect Enterprise Solutions ganha quatro prêmios internacionais ACQ5 por sucesso comercial em commodities

Embora já tenhamos simplificado um pouco as coisas, podemos fazer ainda melhor.

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

Temas centrados em fontes

Assim como {hrbrthemes}, {hrbragg} vem com alguns temas centrados em fontes / tipográficas. Vamos nos concentrar naquele com o Inter para a postagem do blog. No momento, você precisa install_inter() (provavelmente você foi solicitado a fazer isso se já instalou o pacote). Este requisito irá desaparecer em breve, mas você vai querer usar o Inter em qualquer lugar de qualquer maneira, então eu o manterei instalado.

Feito isso, você está pronto para usar theme_inter().

O que você disse? Não precisamos criar uma variante de fonte primeiro?

Seria eu fazer isso com você? Nunca! {hrbragg} vem com um pré-configurado inter_pkg variante da fonte (que vou ajustar um pouco no fim de semana para alguns casos extremos) que combina bem com theme_inter(). Aqui está ele em ação com um velho amigo nosso:

ggplot() +
  geom_point(
    data = mtcars,
    aes(mpg, wt, color = factor(cyl))
  ) +
  geom_label(
    aes(
      x = 15, y = 5.48,
      label = " gg1

gg1 + theme_inter(grid = "XY", mode = "light") 

Kerning maravilhoso, uma flecha personalizada devido às fantásticas ligaduras integradas e aos números tabulares elegantes. Linda!

O que foi que você acabou de perguntar? O que há com isso mode = "light"?. Eu esqueci de mencionar que todos os temas {hrbragg} vêm com suporte para modo escuro embutido? Minhas mais sinceras desculpas. Escolhendo mode = "dark" irá usar um tema escuro (configurável) e usar mode = "rstudio" (se você for um usuário RStudio) fará com que os gráficos assumam a configuração do tema IDE de forma automática. Este é o modo escuro:

gg1 + theme_inter(grid = "XY", mode = "dark") 

Os pares fonte + tema funcionam automaticamente e reconfiguram todos os padrões estéticos do ggplot2 de acordo. Uma vez que isso faz uso intenso de update_geom_defaults() Eu incluí um (muito necessário) reset_ggplot2_defaults() para fazer as coisas voltarem ao normal quando você precisar.

Observe que você pode usar adaptive_color() para ajudar a habilitar a troca de cores no modo claro / escuro para seus próprios pares, e theme_background_color() ou theme_foreground_color para utilizar as cores padrão (reconfiguráveis) do tema anterior e do plano de fundo.

Experimente antes de comprar … usando uma determinada fonte

Não se pode saber com antecedência se uma fonte vai funcionar bem, e você pode querer ter uma ideia de como um determinado conjunto de variantes de família funciona para você. Para isso, tornei possível visualizar qualquer fonte que você reconfigurou com reconfigure_font() através da preview_variant(). Ele usa algum texto predefinido que exercita os principais recursos que delineei, mas você pode enviar o seu próprio para eles se quiser ver algo em particular. Vamos dar inter_pkg um look completo:

preview_variant(inter_pkg)

Podemos olhar para outra que criaremos agora (eu não sabia que essa fonte tinha números tabulares até que Thomas construiu todos esses brinquedos maravilhosos para brincar!):

reconfigure_font(
  family = "Trattatello",
  width = "normal",
  ligatures = "discretionary",
  calt = 1, tnum = 1, case = 1,
  dlig = 1, kern = 1,
  zero = 0, salt = 0
) -> trat

preview_variant(trat)

FIM

O pacote {hrbragg} não tem nem 24 horas ainda, então há mudanças importantes e muitas novas, heh, recursos ainda está por vir, mas por favor – como de costume – chute os pneus e poste perguntas, comentários, contribuições ou sugestões onde você estiver mais confortável (o pacote está na maioria dos sites de codificação social populares).



[ad_2]

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br