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  Protegendo e monitorando a implantação do ShinyProxy de aplicativos R Shiny

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  Advento de 2020, dia 28 - infraestrutura como código e como automatizar, criar scripts e implantar Azure Databricks com Powershell

.

{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  R Shiny dá vida aos seus dados

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