Arte gráfica: o autor

Treino com Bookdown

Criação de livros com R e com Markdown

Introdução

Vamos tratar de peculiaridades e funcionalidades do pacote R bookdown.

Bookdown facilita a escrita de livros e artigos a partir de documentos R Markdown. Possui linguagem de marcação fácil de aprender. Figuras, equações, tabelas e citações funcionam para vários formatos de saída: HTML, PDF, EPUB e Word. Suporta uma ampla variedade de linguagens: R, C, C ++, Python, Fortran, scripts Shell. Pode ser publicado no GitHub, bookdown.org, ou em qualquer servidor da web. E o que vamos mais gostar: A renderização dispara figuras/tabelas com numeração automática.

As figuras/tabelas são numeradas como X.i, onde X é o número do capítulo e i é a posição da figura/tabela dentro do capítulo. Por exemplo, Fig. 5.3 significa a terceira figura do capítulo 5. O método para numerar e chamar as figuras/tabelas é o seguinte. Primeiro, atribua um nome ao link do código-fonte:

```{r LINK-DA-FIG}
Código-fonte da figura.
```

```{r LINK-DA-TAB}
Código-fonte da tabela.
```

Em seguida, chame a figura/tabela em qualquer lugar do texto:

Figura \@ref(fig:LINK-DA-FIG), Tabela \@ref(tab:LINK-DA-TAB).

Por detrás da renderização

O processo de renderização é totalmente automatizado. Quem controla é o pacote R rmarkdown. Inialmente, um documento R Markdown (.Rmd) é compilado para um documento Markdown (.md), através do pacote R knitr. Em seguida, o documento (.md) é compilado para outras formas de documentos (HTML/PDF), por meio do conversor de documentos Pandoc.

Ao instalar o pacote bookdown, os pacotes knitr e rmarkdown são instalados automaticamente. A única exceção é que Pandoc não é um pacore R – e não será instalado junto com a instalação de bookdown.

A instalação de Pandoc em Linux segue os seguintes passos:

  1. No site Pandoc, pegar a versão pandoc---amd64.deb mais recente (hoje é pandoc-2.13-1-amd64.deb).

  2. Usar o comando de instalação: sudo dpkg -i pandoc-2.13-1-amd64.deb.

  3. No terminal R, verificar a instalação: rmarkdown::pandoc_version().

[1] ‘2.13’

Nota 1: Sair do R e entrar novamente para fazer a verificação atualizada.

Nota 2: O site também mostra como instalar em Windows, macOS e Chrome OS.

Nota 3: RStudio inclui uma cópia de Pandoc, nesse caso, não é necessário fazer a instalação.

1 Sobre o livro

Vamos criar um livro com 10 capítulos.

Cada capítulo terá seu próprio arquivo R Markdown (.Rmd):

index.Rmd
01.Rmd
02.Rmd
03.Rmd
04.Rmd
05.Rmd
06.Rmd
07.Rmd
08.Rmd
09.Rmd
10.Rmd
capREF.Rmd

Logo abaixo é apresentado o início de cada arquivo (o título do capítulo).

# Introdução                               {-}
# Sobre o livro                            {#cap01}
# Instalação e Renderização                {#cap02}
# Arquivos de configuração                 {#cap03}
# Alguns elementos básicos                 {#cap04}
# Imagens                                  {#cap05}
# Código de programação                    {#cap06}
# Tabelas                                  {#cap07}
# Notas de rodapé e referências            {#cap08}
# Equações                                 {#cap09}
# Visualização de equações                 {#cap10}
# Referências                              {-}

Ao lado do título do capítulo foi acrescentado uma marcação. Ela é responsável por criar um link. Daí, toda vez que desejar chamar o capítulo 5, por exemplo, poderá fazer assim: \@ref(cap05).

Nota 1: Os links das figuras, tabelas e equações são um pouco diferentes:

\@ref(fig:LINK-DA-FIG)

\@ref(tab:LINK-DA-TAB)

\@ref(eq:LINK-DA-EQ) 

Nota 2: Se dois links tiverem o mesmo nome, haverá conflito, e o compilador vai “reclamar.”

Nota 3: Se houver o arquivo denominado index.Rmd, ele sempre será tratado como o primeiro arquivo da compilação do livro.

Nota 4: As referências são disparadas depois do último arquivo renderizado. Por isso é conveniente criar um arquivo específico somente para as referências. No caso deste livro, há o arquivo capREF.Rmd. O conteúdo deve possuir apenas o título, # Referências ou # Bibliografia, e a marcação para não ser numerado {-}.

2 Instalação e Renderização

A instalação e o carregamanto do pacote são realizados pelos comandos:

install.packages("bookdown")

library(bookdown)

Bookdown permite vários formatos de saída:

bookdown::render_book("index.Rmd", "bookdown::gitbook")

bookdown::render_book("index.Rmd", "bookdown::html_book")

bookdown::render_book("index.Rmd", "bookdown::html_document2")

bookdown::render_book("index.Rmd", "bookdown::pdf_book")

bookdown::render_book("index.Rmd", "bookdown::pdf_document2")

Como é de se esperar, depois da renderização, o conteúdo geral visto pelo leitor será o mesmo. Entretanto, a renderização html_document2 organiza o html em um só arquivo:

TreinoBookdown.html

Enquanto que a renderização html_book gera um arquivo html para cada capítulo do livro, e sava tudo no diretório public:

index.html
cap01.html
cap02.html
cap03.html
cap04.html
cap05.html
cap06.html 
cap07.html
cap08.html
cap09.html
cap10.html
capREF.md 

Ao invés de salva em public, uma alternativa produtiva, é manter cada livro em seu próprio diretório, conforme abaixo:

bookdown::render_book("index.Rmd", "bookdown::gitbook", output_dir="a_GitBook")

bookdown::render_book("index.Rmd", "bookdown::html_book", output_dir="b_BootStrap")

bookdown::render_book("index.Rmd", "bookdown::pdf_book", output_dir="c_LaTeX")

Por fim, é possível renderizar somente um dos capítulos do livro, por exemplo, o capítulo 5:

bookdown::preview_chapter("05.Rmd", "bookdown::gitbook", output_dir="a_GitBook")

bookdown::preview_chapter("05.Rmd", "bookdown::html_book", output_dir="b_BootStrap")

Nos próximos capítulos, vamos falar mais sobre os estilos de livros GitBook e BootStrap.

3 Arquivos de configuração

No diretório de trabalho, há necessidade de gravar os seguintes arquivos de configuração.

Arquivo index.Rmd:

---
title: "Treino com R Bookdown"
subtitle: "Estilos de livros"
author: "Cássio Sanguini Sergio"
date: "16/04/2021"
bibliography: [bibliography.bib]
biblio-style: apalike
link-citations: true
documentclass: book #PARA SAÍDA PDF
classoption: oneside
papersize: a4
geometry: margin = 1in
fontsize: 12pt
linestretch: 1.5
linkcolor: blue
lang: pt-BR
---

A variável $title$ é passada aos elementos <title> $title$ </title> e <h1 class="title"> $title$ </h1>.

A variável $subtitle$ é passada ao elemento <h3 class="subtitle"> $subtitle$ </h3>.

A variável $author$ é passada ao elemento <h4 class="author"> $author$ </h4>.

A variável $date$ é passada ao elemento <h4 class="date"> $date$ </h4>.

A variável $bibliography$ recebe o nome do arquivo onde estão as referências.

A variável $documentclass$ (book/article), e as demais, são utilizadas para rendelizar LaTeX/PDF.

Arquivo _bookdown.yml:

book_filename: "TreinoBookdown"
chapter_name: "Capítulo "
output_dir: public
rmd_files: ["index.Rmd","01.Rmd","02.Rmd","03.Rmd","04.Rmd","05.Rmd","06.Rmd","07.Rmd","08.Rmd","09.Rmd","10.Rmd","capREF.Rmd"]
clean: [packages.bib, bookdown.bbl]
new_session: yes
language:
  label:
    fig: 'Figura '
    tab: 'Tabela '
    eq: 'Equação '
    thm: 'Teorema '
    lem: 'Lema '
    def: 'Definição '
    cor: 'Corolário '
    prp: 'Proposição '
    ex: 'Exemplo '
    proof: 'Prova. '
    remark: 'Observação. '

Qualquer arquivo gerado pela renderização terá o nome TreinoBookdown. O título de cada capítulo vai começar com Capítulo. Todos os arquivos que formam o livro vão ser gravados no diretótio public (a não ser que seja especificado um outro nome, ver Capítulo 2). A sequência de arquivos renderizados será: index.Rmd" ... "10.Rmd. As legendas das figuras, tabelas (e outros itens) vão aparecer em português.

Arquivo _output.yml:

bookdown::gitbook:
  includes:
    in_header: Mathjax-GoogleFonts.html
  split_by: chapter
  css: styleGitBook.css
  highlight: default
  config:
    toc:
      collapse: subsection
      before: |
        <li><a href="./">TreinoBookdown</a></li>
      after: |
        <li><a href="https://bycfisica.netlify.app/" target="blank">CONHEÇA MEU SITE</a></li>

bookdown::html_book:
  includes:
    in_header: Mathjax-GoogleFonts.html
  split_by: chapter
  css: [styleBootstrap.css, toc.css]
  toc: TRUE
  toc_depth: 1
  theme: readable

bookdown::html_document2:
  includes:
    in_header: Mathjax-GoogleFonts.html
  css: styleBootstrap.css
  toc: FALSE
  number_sections: TRUE
  keep_md: TRUE

bookdown::pdf_book:
  includes:
    in_header: preamble.tex
  toc: TRUE
  latex_engine: xelatex
  citation_package: natbib

bookdown::pdf_document2:
  includes:
    in_header: preamble.tex
  toc: FALSE
  latex_engine: xelatex
  citation_package: natbib

As opções acima mostram que podemos renderizar um livro no formato HTML ( GitBook / Bootstrap) ou PDF ( LaTeX). Também podemos escolher por um simples documento ( HTML / PDF).

Arquivo Mathjax-GoogleFonts.html:

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  TeX: { equationNumbers: { autoNumber: "all" } }
});
</script>

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open Sans">

Na saída HTML, o script acima é colocado entre o elemento <head></head>. Ele é responsável pela contagem automática de expressões matemáticas LaTeX. A numeração é feita pela biblioteca MathJax. É importante dar um nome ao link da equação, conforme se vê logo abaixo. Depois, para chamar a equação, deve-se usar: \@ref(eq:LINK-DA-EQ).

\begin{equation}
Código-fonte da equação.
(\#eq:LINK-DA-EQ)
\end{equation}

Observem, também, que no mesmo arquivo foi adicionado um link para se buscar a fonte “Open Sans” do GoogleFonts.

Arquivo preamble.tex:

\usepackage{amsmath}
\usepackage[top=1in, bottom=1.25in, left=1.25in, right=1.25in]{geometry}
\usepackage[fontsize=12.5]{scrextend}
\linespread{1.25}

Os pacotes acima são colocados na abertura do código-fonte LaTeX, entre \documentclass{book} e \begin{document}. Assim, podemos configurar a saída LaTeX/PDF, deixando o documento final com a “cara que o usuário quer,” ou no padrão de uma revista (equivalente ao css da saída html).

3.1 Livros HTML

Os estilos de livros HTML são alterados por arquivos CSS.

Considere a renderização:

bookdown::render_book("index.Rmd", "bookdown::html_book")

Isso vai gerar um livro html no formato Bootstrap. Caso queira personalizar esse livro, poderá fazer alterações no arquivo styleBootstrap.css:

/* Altera o elemento <html></html> */
html {background-color: #F7F7F7;}

/* Altera o elemento <body></body> */
body {
  font-family      : "Open Sans", sans-serif;
  font-size        : 20px;
  line-height      : 1.6;
  color            : black;
  background-color : white;
  width            : 80%;
  margin-left      : auto;
  margin-right     : auto;
}

/* Altera o elemento <pre></pre>, que não possui classe */
pre:not([class]) {
  font-family      : monospace;
  font-size        : 0.7em;
  color            : black;
  background-color : #fafafa;                    /* cinza claro */
  border           : 2px solid #ddd;
  max-width        : 100%;
  padding          : 1.6em 1.6em;
  margin-bottom    : 1.6em;
  margin-bottom    : 1.6em;
  overflow         : auto;
}

/* Altera o bloco <pre><code></code></pre>, disparado por 3 backticks */
pre code {
  word-wrap: normal;
  white-space      : pre;
  background-color : #e6ffe6;                    /* verde claro */
}

/* Altera quando usa código-chunk em livros e documentos*/
pre.r {
  font-family      : monospace;
  font-size        : 14px;
  background-color : #ff7b25;                    /* laranja */
  overflow         : auto;
}

/* Altera quando usa código-chunk em livros (somente) */
pre.sourceCode, code.sourceCode {
  border           : 2px solid #4285F4;          /* azul google */
}

/* Altera o elemento <p><code></code></p> */
p code {
  font-family      : monospace;
  font-size        : 0.9em;
  color            : #3B5998;
  background-color : #F7F7F7;
}

/* Altera o elemento <div class="figure"></div>, utilizado em figuras */
div.figure {
  text-align: center;
  width: 100%;
}

/* Altera o elemento <p class="caption"></p>, utilizado em figuras */
p.caption {
  font-size        : 0.8em;
  color            : black;
  background-color : rgb(255, 204, 153);
  margin-top       : 1em;
  margin-bottom    : 1.6em;
}

/* Altera as equações */
.math {font-size: 18px;}

/* Altera as referências */
.csl-entry {font-size: 18px;}

/* Altera o elemento <blockquote></blockquote> */
blockquote {border-left: 10px solid coral;}

/* Altera os elementos  <h1></h1>  <h2></h2>  <h3></h3> */
h1, h2 , h3 {
  text-align       : left;
  color            : white;
  background-color : #E32934;
}

/* Altera o id="header" */
#header {background-color: #E32934;}

/* Altera os elementos <h1 class="title"></h1>      */
/*                       <h3 class="subtitle"></h3> */
/*                         <h4 class="author"></h4> */
/*                           <h4 class="date"></h4> */
h1.title, h3.subtitle, h4.author, h4.date {
  text-align       : center;
  color            : white;
  background-color : #E32934;
}

/* Altera o elemento <a></a>, utilizado em links */
a {
  font-size       : 1em;
  color           : blue;
  font-weight     : normal;
  text-decoration : underline blue;
}

/* Altera o elemento <a></a>, utilizado quando passa o mouse sobre os links */
a:hover {
  font-size       : 1em;
  color           : blue;
  font-weight     : bold;
  text-decoration : underline blue;
}

/* Altera o id="TOC", utilizado na tabela de conteúdo do livro*/
#TOC {
  color            : black;
  background-color : rgb(255, 204, 153);
}
#TOC > ul > li > a {
  color            : black;
  background-color : rgb(255, 204, 153);
}
#TOC ul ul li > a {
  color            : black;
  background-color : rgb(255, 204, 153);
}
#TOC > ul > li:hover > a {
  font-weight      : bold;
  color            : black;
  background-color : rgb(255, 204, 153);
}
#TOC ul ul li:hover > a {
  font-weight      : bold;
  color            : black;
  background-color : rgb(255, 204, 153);
}

/* Altera o elemento <caption></caption>, legenda da tabela */
caption{
  font-size        : 0.85em; 
  text-align       : center; 
  color            : #66757F; 
  background-color : #DFE3EE;
}

/* Altera os elementos  <thead></thead>  <tbody></tbody>, corpo da tabela */
thead, tbody {
  font-size: 0.80em;
}

/* Altera o elemento <th></th>, cabeçalho da tabela */
th{
  font-weight      : 700; 
  color            : white; 
  background-color : #66757F;
}

/* Altera o elemento <tr></tr>, linha 1 da tabela */
tr{
  border-top       : 1px solid #ccc; 
  background-color : #F7F7F7}

/* Altera o elemento <tr></tr>, linha 2 da tabela */
tr:nth-child(2n){
  background-color: #DFE3EE;
}

Agora, considere a renderização:

bookdown::render_book("index.Rmd", "bookdown::gitbook")

Isso vai gerar um livro html no formato GitBook. Esse formato coloca a tabela de conteúdo no lado esquerdo da página, o texto no lado direito e as laterais ativam a função de passar capítulos. A maneira de controlar o html é um pouco diferente, comparado com o livro anterior. Caso queira personalizar esse livro, poderá fazer alterações no arquivo styleGitBook.css:

/* Controla o elemento (profundo) <div class="book">                         */ 
/*                                  <div class="book-body">                  */ 
/*                                    <div class=="page-wrapper">            */ 
/*                                      <div class="page-inner">             */ 
/*                                        <section class="normal"></section> */
.book .book-body .page-wrapper .page-inner section.normal {
  font-family      : "Open Sans", sans-serif;
  font-size        : 20px;
  line-height      : 1.7;
  background-color : white;
}

/* Controla o elemento <p class="caption"></p>, usado em figuras */
.book .book-body .page-wrapper .page-inner section.normal p.caption {
  font-size        : 18px;
  color            : black;
  background-color : #CCD6DD;
  margin-top       : 10px;
  margin-bottom    : 20px;
}

/* Controla o elemento <pre></pre> */
.book .book-body .page-wrapper .page-inner section.normal pre {
  font-size   :16px;
  line-height :1.2;
}

/* Controla o elemento <blockquote></blockquote> */
.book .book-body .page-wrapper .page-inner section.normal blockquote {
  border-left: 15px solid #3B5998;
}

/* Controla o elemento <h1></h1>, numerado como (9) */
.book .book-body .page-wrapper .page-inner section.normal h1 {
 margin-top       : 40px;
 text-align       : left;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <h2></h2>, numerado como (9.1) */
.book .book-body .page-wrapper .page-inner section.normal h2 {
 margin-top       : 40px;
 text-align       : left;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <h3></h3>, numerado como (9.1.1) */
.book .book-body .page-wrapper .page-inner section.normal h3 {
 margin-top       : 40px;
 text-align       : left;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <h1 class="title"></h1> */
.book .book-body .page-wrapper .page-inner section.normal h1.title {
 font-size        : font-size:2em;
 text-align       : center;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <h2 class="subtitle"></h2> */
.book .book-body .page-wrapper .page-inner section.normal h2.subtitle {
 text-align       : center;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <p class="author"></p> */
.book .book-body .page-wrapper .page-inner section.normal p.author {
 text-align       : center;
 color            : white;
 background-color : #4285F4;
}

/* Controla o elemento <p class="date"></p> */
.book .book-body .page-wrapper .page-inner section.normal p.date {
 text-align       : center;
 color            : white;
 background-color : #4285F4;
}

/* Controla o id="header" */
#header {
 background-color: #4285F4;
}

/*Controla a tabela de conteúdo da lateral esquerda*/
.book.with-summary .book-header.fixed {left: 300px;}
.book.with-summary .book-body {left: 300px;}
.book .book-summary {width: 300px; position:absolute; top:0; left:-300px;}
.book .book-summary ul.summary li {font-weight:normal; background-color:#fafafa;}
.book .book-summary ul.summary li a {font-family:serif; font-size:14px;}
.book .book-summary ul.summary li a:hover {font-size:14px; color:#00A1F1; background:0 0; text-decoration:none;}
.book .book-summary ul.summary li.active > a {color:black; background:0 0; text-decoration:underline;}

/*Controla as Tabelas*/
.book .book-body .page-wrapper .page-inner section.normal table {
  display         : table; 
  width           : 100%; 
  border-collapse : collapse; 
  border-spacing  : 0; 
  overflow        : auto;
}

/* Controla a Linha-Cabeçalho */
.book .book-body .page-wrapper .page-inner section.normal table th {
  padding : 6px13px; 
  border  : 1px solid #ddd;
} 

/* Controla a Legenda */
.book .book-body .page-wrapper .page-inner section.normal caption {
  font-size        : 18px; 
  text-align       : center; 
  color            : black; 
  background-color : #DFE3EE;
}

/* Controla o bloco do cabeçalho e do corpo */
.book .book-body .page-wrapper .page-inner section.normal thead, tbody {
  font-size:16px;
}

/* Controla a Linha-Cabeçalho */
.book .book-body .page-wrapper .page-inner section.normal table th {
  font-weight      : 700; 
  color            : white; 
  background-color : #66757F;
}

/* Controla a Linha 1 */
.book .book-body .page-wrapper .page-inner section.normal table tr {
  background-color : #F7F7F7; 
  border-top       : 1px solid #ccc;
}

/* Controla a Linha 2 */
.book .book-body .page-wrapper .page-inner section.normal table tr:nth-child(2n) {
  background-color: #DFE3EE;
}

/* Controla os dados dentro das células */
.book .book-body .page-wrapper .page-inner section.normal table td { } 

/*Controla as Equações */
.math {
  font-size : 18px;
  color     : rgb(0,60,0);
}

/* Controla os Links */
.book .book-body .page-wrapper .page-inner section.normal a {
  color           : #4285F4; 
  text-decoration : underline;
}

/* Controla os Links: quando passa o mouse */
.book .book-body .page-wrapper .page-inner section.normal a:hover {
  font-weight: bold;
}

/* Controla os Links (barras verticais) */
.book .book-body a {
  background: white;
}

/* Controla os Links (barras verticais: quando passa o mouse) */
.book .book-body a:hover {
  background: #3B5998;
}

4 Alguns elementos básicos

4.1 Parágrafos

Há possibilidade de começar um novo parágrafo colocando mais que 2 espaços ao final da linha. Por exemplo, a marcação abaixo:

Terminando com 0 espaço.
Terminando com 1 espaço. 
Agora, terminando está linha com 2 espaços.  
"Fui jogado para baixo".

Resulta em:

Terminando com 0 espaço. Terminando com 1 espaço. Agora, terminando está linha com 2 espaços.
“Fui jogado para baixo.”

4.2 Letras italic e bold

Colocando ênfase.

Colocando forte.

Colocando os dois, ênfase e forte.

Colocando _ênfase_.

Colocando __forte__.

Colocando os dois, ___ênfase  e forte___.

4.3 Elementos pre e code

A marcação com 3 backticks dispara um bloco <pre><code> …disparo… </code></pre>, controlado por 2 seletores: pre:not([class]) {} e pre code {}. E a marcação com 1 backtick, dispara um parágrafo <p><code> …disparo… </code></p>, controlado pelo seletor p code {}.

A marcação entre backticks é um recurso útil e fácil de usar. Ela dispara na linha do texto (não em bloco). Por exemplo, Coloque isso em marcação backticks, é feito assim:

`Coloque isso em marcação backticks`.

Escrever entre 3 backticks dispara um bloco com bordas e cor de fundo, que tem a característica de preservar os espaços em branco.

Por exemplo:

```
Coloque isso entre     3     backticks.
```

Resulta em:

Coloque isso entre     3     backticks.

4.4 Barra blockquote

Um jacaré.

Dois jacarés.

Três jacarés.

> Um jacaré.

>> Dois jacarés.

>>> Três jacarés.

4.5 Lista com itens

  • Folhas;
  • Cadernos;
  • Canetas;
  • Borrachas.
* Folhas;
* Cadernos;
* Canetas;
* Borrachas.

  1. Folhas;
  2. Cadernos;
  3. Canetas;
  4. Borrachas.
a. Folhas;
b. Cadernos;
c. Canetas;
d. Borrachas.

  1. Folhas;
  2. Cadernos;
  3. Canetas;
  4. Borrachas.
i. Folhas;
ii. Cadernos;
iii. Canetas;
iv. Borrachas.

  1. Folhas;
  2. Cadernos;
  3. Canetas;
  4. Borrachas.
1. Folhas;
2. Cadernos;
3. Canetas;
4. Borrachas.

5 Figuras

Bookdown numera as figuras automaticamente (deve lembrar que a renderização com rmarkdown não faz isso). Ademais, as figuras podem ser lincadas. Primeiro, dá-se um nome ao código-fonte que gera a figura e, depois, usa-se esse mesmo nome ao chamar a figura no documento.

Abaixo há o código-fonte da Fig. 5.1 \@ref(fig:pets).

```{r pets, echo=F, message=F, warning=F, fig.cap="Nós au au au... mamos Bookdown.", out.width="60%", fig.align="center"}
knitr::include_graphics("img/my3dogs.png", error = FALSE)
```
Nós au au au... mamos Bookdown.

Figura 5.1: Nós au au au… mamos Bookdown.

Caso queira ver o código-fonte da página html, desloque o bloco do código-fonte da figura, 4 espaços para a direita, e modifique o nome do link. Veja o resultado:

```r
knitr::include_graphics("img/my3dogs.png", error = FALSE)
```

<div class="figure" style="text-align: center">
<img src="img/my3dogs.png" alt="Nós au au au... mamos Bookdown." width="60%" />
<p class="caption">(\#fig:pets2)Nós au au au... mamos Bookdown.</p>
</div>

6 Código de programação

Bookdown foi projetado para uma reprodutibilidade mais fácil, uma vez que o código de programação e as narrativas estão no mesmo documento. Abaixo temos o que é chamado de código-fonte “chunk.” Para realizar a tarefa, o pacote R knitr faz a compilação, primeiro, extraindo e executando o código que está dentro do “chunk” e, em seguida, disparando o resultado junto com o texto que se encontra no documento.

```{r f00, echo=F, message=F, warning=F, fig.cap="Uma parábola.", out.width="70%", fig.align="center"}
library(tidyverse)
x <- seq(-50,50)
y <- x^{2}
tb <- tibble(x,y)
p <- ggplot(tb, aes(x,y)) + geom_point(color="yellow") + theme_dark()
print(p)
```
Uma parábola.

Figura 6.1: Uma parábola.

Na Fig. 6.1, o valor no ponto x[17] é y[17]. (isso é blockquote)

Na Fig. 6.1, O valor no ponto -34 é 1156. (isso é resultado de “chunk,” disparado na linha do texto)

Na Fig. \@ref(fig:f00),
o valor no ponto `x[17]` é `y[17]`.
(isso é blockquote)

Na Fig. \@ref(fig:f00),
O  valor  no  ponto  ` r x[17] `  é  ` r y[17] `.
(isso é resultado de "chunk", disparado na linha do texto)

Pacotes R:

O código-fonte que gera a Fig. 6.1 faz uso do pacote R ggplot2. Esse pacote é carregado automaticamente quando se faz o carregamento do pacote R tidyverse.

───────────────── Attaching packages ─────────────────
─────────────────  tidyverse 1.2.1   ─────────────────
✔ ggplot2 3.2.0                      ✔ purrr   0.3.2
✔ tibble  2.1.3                      ✔ dplyr   0.8.3
✔ tidyr   0.8.3                      ✔ stringr 1.4.0
✔ readr   1.3.1                      ✔ forcats 0.4.0

Estilos HTML:

Ao usar um código-chunk, com a opção de disparo na página html, {r echo=T}, o controle no estilo de documentos difere do controle no estilo de livros (em um pequeno detalhe).

Caso 1. Renderização de um documento:

bookdown::render_book("index.Rmd", "bookdown::html_document2").

A página html utiliza 1 classe:

<pre class="r"><code> ...disparo... </code></pre>.

Caso 2. Renderização de um livro no estilo Bootstrap:

bookdown::render_book("index.Rmd", "bookdown::html_book").

Agora, a página html utiliza 2 classes:

<pre class="sourceCode r"><code class="sourceCode r"> ...disparo... </code></pre>.

Isso significa que o seletor .r { }, altera o “chunk” de documentos e também de livros Bootstrap. Enquanto que o seletor .sourceCode { }, altera somente o “chunk” de livros Bootstrap.

Yihui Xie escreveu:

Existem alguns argumentos de html_document () que foram codificados em gitbook () e você não pode alterá-los.

Por isso, acredito ser mais difícil alterar o “chunk” de livros GitBook. A solução apresentada aqui, também não funciona: todavia, funciona em livros Bootstrap.

7 Tabelas

Uma tabela feita com marcação Markdown.

| Cabeça 1    | Cabeça 2    | Cabeça 3    |
| :---------- | :---------: | ----------: |
| Linha 1     | célula      | célula com muitas palavras |
| Linha 2     | célula      | célula      |
| Linha 3     | célula que se estende por duas colunas ||
| Linha 4     | célula      | célula      |
Table: A legenda fica aqui.
A legenda fica aqui.
Cabeça 1 Cabeça 2 Cabeça 3
Linha 1 célula célula com muitas palavras
Linha 2 célula célula
Linha 3 célula que se estende por duas colunas
Linha 4 célula célula

Agora a mesma tabela entretanto com o pacote R kableExtra. Abaixo há o código-fonte da Tabela 7.1 \@ref(tab:t00).

```{r t00, echo=F, message=F, warning=F}
library(tidyverse)
library(kableExtra)
cab1 <- c("Linha 1","Linha 2","Linha 3","Linha 4")
cab2 <- c("célula","célula","célula","célula")
cab3 <- c("célula","célula","célula","célula")
tb <- tibble(cab1, cab2, cab3)
tb %>% rename(`Cabeça 1`=cab1, `Cabeça 2`=cab2, `Cabeça 3`=cab3) %>% 
kbl(booktabs=T, align = "lcc", caption="A legenda fica aqui.") %>% 
kable_styling(bootstrap_options="striped")
```
Tabela 7.1: A legenda fica aqui.
Cabeça 1 Cabeça 2 Cabeça 3
Linha 1 célula célula
Linha 2 célula célula
Linha 3 célula célula
Linha 4 célula célula

8 Notas de rodapé e referências

Aqui temos um exemplo de com se fazer um nota de rodapé.1

Aqui temos um exemplo de com se fazer um nota de rodapé. [^1]

[^1]: Mais uma facilidade pacote R bookdown.

Bookdown usa a mesma estrutura de documentos R Markdown para citar as referências. Veja alguns exemplos: (Mosca 1974), (Bransden 2000), (Dionisio 2007) e (Griffiths 2016).

Bookdown usa a mesma estrutura de documentos R Markdown para citar as referências.
Veja alguns exemplos: [@mosca1974], [@Bransden], [@PHD2007] e [@Griffiths].

Os detalhes das referências, como título, autor, revista, etc, além do nome do link, ficam armazenados no arquivo de referências bibliography.bib:

@Book{mosca1974,
title = {Magnetic Forces Doing Work?},
author = {Eugene P. Mosca},
year = {1974},
publisher = {American Journal of Physics, Volume 42, Pages 295-297}
}

@Book{Joachain,
title = {Quantum Mechanics},
author = {B.H. Bransden, C.J. Joachain},
publisher = {Pearson Education, ISBN 978-8131708392},
year = {2000},
edition = {2nd},
}

@Book{PHD2007,
title = {Esta Esquecida Força Eletromotriz de Movimento},
author = {Paulo Henrique Dionisio},
year = {2007},
publisher = {Revista Brasileira de Ensino de Física, Vol. 29}
}

@Book{Griffiths,
title = {Introduction to Quantum Mechanics},
author = {David J. Griffiths},
publisher = {Cambridge University Press, ISBN 978-1107179868},
year = {2016},
edition = {2nd},
}

9 Equações

Este e o próximo capítulo são exemplos de como fazer e visualizar equações. A íntegra do texto pode ser lida em mqcficica.

A função de onda da posição de um poço infinito pode ser escrita como superposição de autoestados do operador do momento:

\[\begin{equation} \psi_n(x)=\frac{1}{\sqrt{2\pi}} \int _ {-\infty}^{+\infty} \phi_n(k) \mathrm{e}^{\large ikx} \mathrm{d}k. \tag{9.1} \end{equation}\]

\begin{equation}
\psi_n(x)=\frac{1}{\sqrt{2\pi}} \int _ {-\infty}^{+\infty} \phi_n(k) \mathrm{e}^{\large ikx} \mathrm{d}k.
(\#eq:MAX1)
\end{equation}

O coeficiente da superposição é interpretado como função de onda do momento. Ele é determinado através da transformada de Fourier:

\[\begin{equation} \begin{aligned} \phi_n(k) &=\frac{1}{\sqrt{2\pi}} \int _ {-\infty}^{+\infty} \mathrm{e}^{\large -ikx} \psi_n(x) \mathrm{d}x \\ &=\frac{1}{\sqrt{2\pi}} \sqrt{\frac{2}{a}} \int _ {-\infty}^{+\infty} \mathrm{e}^{\large -ikx} \mathrm{sen} \left( \frac{n\pi}{a} x \right) \mathrm{d}x . \end{aligned} \tag{9.2} \end{equation}\]

\begin{equation}
\begin{aligned}
\phi_n(k)
&=\frac{1}{\sqrt{2\pi}} \int _ {-\infty}^{+\infty} \mathrm{e}^{\large -ikx} \psi_n(x) \mathrm{d}x \\
&=\frac{1}{\sqrt{2\pi}} \sqrt{\frac{2}{a}} \int _ {-\infty}^{+\infty}
\mathrm{e}^{\large -ikx} \mathrm{sen} \left( \frac{n\pi}{a} x \right) \mathrm{d}x .
\end{aligned}
(\#eq:MAX2)
\end{equation}

A dica para resolver a integral (9.2) \@ref(eq:MAX2) é fazer a seguinte substituição:

\[\begin{equation} \mathrm{sen} \left( \frac{n\pi}{a} x \right) = \frac{\mathrm{e}^{\large i \frac{n\pi}{a}x} -\mathrm{e}^{\large -i\frac{n\pi}{a}x} }{2i} . \tag{9.3} \end{equation}\]

\begin{equation}
\mathrm{sen} \left( \frac{n\pi}{a} x \right) =
\frac{\mathrm{e}^{\large i \frac{n\pi}{a}x} -\mathrm{e}^{\large -i\frac{n\pi}{a}x} }{2i} .
(\#eq:MAX3)
\end{equation}

Exige um pouco de trabalho, mas no final, a função de onda do momento é:

\[\begin{equation} \begin{aligned} \phi_n(k) &= \frac{1}{i} \sqrt{\frac{a}{4\pi}} \mathrm{e}^{\large -i \left( \frac{n\pi}{2} - \frac{ka}{2} \right) } \times \\ &\times \left( \frac{ \mathrm{sen} \left( \frac{n\pi}{2} - \frac{ka}{2} \right) }{\frac{n\pi}{2} - \frac{ka}{2}} +(-1)^{n+1} \frac{ \mathrm{sen} \left( \frac{n\pi}{2} + \frac{ka}{2} \right) }{\frac{n\pi}{2} + \frac{ka}{2}} \right). \end{aligned} \tag{9.4} \end{equation}\]

\begin{equation}
\begin{aligned}
\phi_n(k) 
&= \frac{1}{i} \sqrt{\frac{a}{4\pi}} \mathrm{e}^{\large -i \left( \frac{n\pi}{2} - \frac{ka}{2} \right) } \times \\
&\times
\left(
\frac{ \mathrm{sen} \left( \frac{n\pi}{2} - \frac{ka}{2} \right) }{\frac{n\pi}{2} - \frac{ka}{2}}
+(-1)^{n+1}
\frac{ \mathrm{sen} \left( \frac{n\pi}{2} + \frac{ka}{2} \right) }{\frac{n\pi}{2} + \frac{ka}{2}}
\right).
\end{aligned}
(\#eq:MAX4)
\end{equation}

10 Visualização de equações

No capítulo anterior [ 9 \@ref(cap09) ], deduzimos a função de onda do momento – ver a equação (9.4) \@ref(eq:MAX4). Agora podemos escrever a densidade de probabilidade do momento:

\[\begin{equation} \begin{aligned} |\phi_n(k)|^2 &= \frac{a}{4\pi} \times \\ &\times \left( \frac{ \mathrm{sen} \left( \frac{n\pi}{2} - \frac{ka}{2} \right) }{\frac{n\pi}{2} - \frac{ka}{2}} +(-1)^{n+1} \frac{ \mathrm{sen} \left( \frac{n\pi}{2} + \frac{ka}{2} \right) }{\frac{n\pi}{2} + \frac{ka}{2}} \right)^2. \end{aligned} \tag{10.1} \end{equation}\]

\begin{equation}
\begin{aligned}
|\phi_n(k)|^2 
&= \frac{a}{4\pi} \times \\
&\times
\left( 
\frac{ \mathrm{sen} \left( \frac{n\pi}{2} - \frac{ka}{2} \right) }{\frac{n\pi}{2} - \frac{ka}{2}}
+(-1)^{n+1}
\frac{ \mathrm{sen} \left( \frac{n\pi}{2} + \frac{ka}{2} \right) }{\frac{n\pi}{2} + \frac{ka}{2}}
\right)^2.
\end{aligned}
(\#eq:MAX5)
\end{equation}

Na equação (10.1) \@ref(eq:MAX5), os dados são a largura do poço infinito \((a)\) e o número quântico \((n)\). Então, para o caso de um elétron que se encontra confinado em \(a = 100\) Å, as densidades \(|\phi_1|^2\) até \(|\phi_4|^2\) são apresentadas na Fig. 10.1 \@ref(fig:DenProMomento). Ademais, a Tabela 10.1 \@ref(tab:DenProMomento) lista os valores dos números de onda em destaque na figura.

Densidade de probabilidade do momento: $a = 100$ Å; $n = 1$ até $4$.

Figura 10.1: Densidade de probabilidade do momento: \(a = 100\) Å; \(n = 1\) até \(4\).

Tabela 10.1: Números de onda \((\rm 10^8\ m^{-1})\).
número de onda valor
k1 3.141593
k2 6.283185
k3 9.424778
k4 12.566371
```{r DenProMomento, echo=F, message=F, warning=F, fig.cap="Densidade de probabilidade do momento: $a = 100$ Å; $n = 1$ até $4$.",out.width="75%",fig.align="center"}
library(tidyverse)
library(kableExtra)
#-----------------------------PREPARANDO AS VARIÁVEIS
a <- 100*10^(-2)
k <- seq(-25, 25, 0.01)
#----------------1
n  <- 1
k1 <- n * pi/a
R1 <- (a/2)*(k1 - k) 
R2 <- (a/2)*(k1 + k) 
F1 <- ( a/(4*pi) )*( sin(R1)/R1  + (-1)^(n+1)*sin(R2)/R2 )^2
#----------------2
n  <- 2
k2 <- n * pi/a
R1 <- (a/2)*(k2 - k) 
R2 <- (a/2)*(k2 + k) 
F2 <- ( a/(4*pi) )*( sin(R1)/R1  + (-1)^(n+1)*sin(R2)/R2 )^2
#----------------3
n  <- 3
k3 <- n * pi/a
R1 <- (a/2)*(k3 - k) 
R2 <- (a/2)*(k3 + k) 
F3 <- ( a/(4*pi) )*( sin(R1)/R1  + (-1)^(n+1)*sin(R2)/R2 )^2
#----------------4
n  <- 4
k4 <- n * pi/a
R1 <- (a/2)*(k4 - k) 
R2 <- (a/2)*(k4 + k) 
F4 <- ( a/(4*pi) )*( sin(R1)/R1  + (-1)^(n+1)*sin(R2)/R2 )^2
#-----------------------------FAZENDO O GRÁFICO
tb <- tibble(k, F1, F2, F3, F4)

p <- ggplot() + theme_bw() + theme(
axis.title.x=element_text(face="plain", color="black", size=18, family="mono"),
axis.title.y=element_text(face="plain", color="black", size=18, family="mono"),
axis.text.x =element_text(face="plain", color="black", size=16, family="mono"),
axis.text.y =element_text(face="plain", color="black", size=16, family="mono"),
panel.grid.major=element_blank(),
panel.grid.minor=element_blank() 
)+
xlab(bquote("k ("* 10^8 ~ m^-1  *")"))+
ylab(bquote("den-prob do momento ("* 10^-8 ~ m *")"))+
scale_x_continuous(breaks=seq(-25, 25, by=5))+
scale_y_continuous(breaks=seq(0, 0.15, by=0.02))+

geom_line(data=tb, mapping=aes(k,F1), color="black", size=1.5)+
geom_line(data=tb, mapping=aes(k,F2), color="red", size=1.5)+
geom_line(data=tb, mapping=aes(k,F3), color="green", size=1.5)+
geom_line(data=tb, mapping=aes(k,F4), color="blue", size=1.5)+

geom_vline(xintercept=k1, color="gray")+
geom_vline(xintercept=k2, color="gray")+
geom_vline(xintercept=k3, color="gray")+
geom_vline(xintercept=k4, color="gray")+

annotate("text", x=k1, y=0.13, label=bquote(" "* k[1] *" "), family="mono", size=7)+
annotate("text", x=k2, y=0.13, label=bquote(" "* k[2] *" "), family="mono", size=7)+
annotate("text", x=k3, y=0.13, label=bquote(" "* k[3] *" "), family="mono", size=7)+
annotate("text", x=k4, y=0.13, label=bquote(" "* k[4] *" "), family="mono", size=7)

print(p)
#-----------------------------FAZENDO A TABELA
coluna1 <- c("k1","k2","k3","k4")
coluna2 <- c(k1, k2, k3, k4)
tb2 <- tibble(coluna1, coluna2)

tb2 %>% rename(`número de onda`=coluna1, `valor`=coluna2) %>%
kbl(booktabs=T, align = "cc", caption="Números de onda $(\\rm 10^8\\ m^{-1})$.") %>%
kable_styling(bootstrap_options="striped")
```

Referências

Bransden, B. H. 2000. Quantum Mechanics. 2nd ed. Prentice Hall, ISBN 978-0582356917.
Dionisio, Paulo Henrique. 2007. Esta Esquecida Força Eletromotriz de Movimento. Revista Brasileira de Ensino de Física, Vol. 29.
Griffiths, David J. 2016. Introduction to Quantum Mechanics. 2nd ed. Cambridge University Press, ISBN 978-1107179868.
Mosca, Eugene P. 1974. Magnetic Forces Doing Work? American Journal of Physics, Volume 42, Pages 295-297.

  1. Mais uma facilidade pacote R bookdown.↩︎

Cássio Sanguini Sergio
Físico

Meus interesses de pesquisa incluem aglomerados e semicondutores.

Relacionados