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:
No site Pandoc, pegar a versão
pandoc---amd64.deb
mais recente (hoje épandoc-2.13-1-amd64.deb
).Usar o comando de instalação:
sudo dpkg -i pandoc-2.13-1-amd64.deb
.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.
- Folhas;
- Cadernos;
- Canetas;
- Borrachas.
a. Folhas;
b. Cadernos;
c. Canetas;
d. Borrachas.
- Folhas;
- Cadernos;
- Canetas;
- Borrachas.
i. Folhas;
ii. Cadernos;
iii. Canetas;
iv. Borrachas.
- Folhas;
- Cadernos;
- Canetas;
- Borrachas.
1. Folhas;
2. Cadernos;
3. Canetas;
4. Borrachas.
4.6 Link de site
Faça uma visita em nosso site: bycfisica.
[bycfisica](https://bycfisica.netlify.app/ "bycfisica").
Jeito rápido de fazer: https://bycfisica.netlify.app/
<https://bycfisica.netlify.app/>
Jeito últra-rápido de fazer: https://bycfisica.netlify.app/
https://bycfisica.netlify.app/
Se deseja que o usuário abra o link em uma nova guia, então é melhor usar elementos html: bycfisica
<a href="https://bycfisica.netlify.app/"
target="_blank">bycfisica</a>.
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)
```
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)
```
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.
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")
```
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.
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
Mais uma facilidade pacote R bookdown.↩︎