diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..2cc58044bd8d17b762265bf6c9464bb4ebff85c5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,25 @@
+*~
+.#*
+#*
+\#*\#
+.\#*
+*.aux
+*.log
+*.out
+*.orig
+*.toc
+*.lol
+*.Rout
+.Rprofile
+.Rhistory
+.Rproj.user
+Rplots.pdf
+cap*.html
+cap*.pdf
+cap*.tex
+cap*.md
+meupacote/*
+data-raw/*.txt
+*_cache/
+*_files/
+meupacote_*.tar.gz
diff --git a/_output.yaml b/_output.yaml
index de98ca5ef787ce8a0fc85a5092253a27d05ce9c2..ef5b2e0f6ef1303103bb199f76a6468c06dc84f0 100644
--- a/_output.yaml
+++ b/_output.yaml
@@ -16,3 +16,4 @@ html_document:
   fig_height: 6
   toc: true
   toc_dep: 3
+  fig_caption: yes
diff --git a/aux/baskara.Rmd b/aux/baskara.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..e10ebf370db851317c1f1e7f24de72033d043631
--- /dev/null
+++ b/aux/baskara.Rmd
@@ -0,0 +1,44 @@
+---
+title: "Raízes de Equação de Segundo Grau"
+author: "Ferando Mayer & Walmes Zeviani"
+date: "`Sys.time()`"
+output:
+  rmarkdown::html_vignette:
+    fig_width: 6
+    fig_height: 6
+    toc: true
+    toc_dep: 3
+vignette: >
+  %\VignetteIndexEntry{Teorema de Pitágoras}
+  %\VignetteEngine{knitr::rmarkdown}
+  %\VignetteEncoding{UTF-8}
+---
+
+```{r, include=FALSE, purl=FALSE, include=FALSE}
+## Carrega o pacote em desenvolvimento.
+library(devtools)
+load_all("../meupacote/")
+```
+
+Seja $f(x) = 3*x^2 - 1*x - 2$ uma parábola. Pela fórmula de Báskara
+podemos determinar as raízes dessa equação. A função `baskara()` retorna
+as raízes de uma função.
+
+```{r, eval=FALSE}
+## Carrega o pacote instalado.
+library(meupacote)
+```
+```{r}
+## Conteúdo disponível do pacote.
+ls("package:meupacote")
+
+## Calcula as raízes da função.
+r <- baskara(a = 3, b = -1, c = -2)
+r
+
+## Faz o gráfico.
+curve(3*x^2-1*x-2, from = -1, to = 1)
+abline(v = r, lty = 2)
+
+## Mostrar como usar o método plot() e coef().
+```
diff --git a/aux/cran_vignette_distribution.R b/aux/cran_vignette_distribution.R
new file mode 100644
index 0000000000000000000000000000000000000000..911929c6f7a3f05031ea0fcf91f2c8c08bb543f9
--- /dev/null
+++ b/aux/cran_vignette_distribution.R
@@ -0,0 +1,56 @@
+##======================================================================
+## Distribuição de vinhetas nos pacotes R oficiais.
+##
+##======================================================================
+
+##----------------------------------------------------------------------
+## Ler a home que lista todos os pacotes.
+
+library(XML)
+
+url <- "https://cran.r-project.org/web/packages/available_packages_by_name.html"
+rl <- readLines(con = url)
+h <- htmlTreeParse(file = rl, asText = TRUE, useInternalNodes = TRUE,
+                   encoding = "utf-8")
+
+## Frequência das tags/campos na página.
+summary(h)
+
+tb <- readHTMLTable(h, stringsAsFactors = FALSE)
+tb <- tb[[1]]
+str(tb)
+
+pkg <- tb[,1]
+pkg <- pkg[pkg!=""]
+length(pkg)
+
+##----------------------------------------------------------------------
+## Função que lê o index.html de um pacote e retorna o número de
+## vignettes.
+
+countVignettes <- function(pkg){
+    url <- sprintf(
+        fmt = "https://cran.r-project.org/web/packages/%s/index.html",
+        pkg)
+    rl <- readLines(con = url)
+    h <- htmlTreeParse(file = rl, asText = TRUE,
+                       useInternalNodes = TRUE,
+                       encoding = "utf-8")
+    htb <- xpathApply(doc = h,
+                      fun = xmlGetAttr, "href",
+                      path = "//td//a[@href]")
+    npkg <- sum(grepl(pattern = "^vignettes/", x = unlist(htb)))
+    cat(npkg, "\n")
+    return(npkg)
+}
+
+##----------------------------------------------------------------------
+## Aplicando para todos os pacotes.
+
+spkg <- sample(pkg, ceiling(0.05*length(pkg)))
+length(spkg)
+
+## x <- sapply(spkg, countVignettes)
+x <- sapply(pkg, countVignettes)
+
+##----------------------------------------------------------------------
diff --git a/cap01.Rmd b/cap01.Rmd
deleted file mode 100644
index de538627e15abceca9fb9dcc6175d1ee9ed53b81..0000000000000000000000000000000000000000
--- a/cap01.Rmd
+++ /dev/null
@@ -1,17 +0,0 @@
----
-title: "Pesquisa Reproduzível"
-author: "Fernando Mayer & Walmes Zeviani"
----
-
-```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-```
-
-****
-# Introdução #
-
diff --git a/cap05.Rmd b/cap05.Rmd
deleted file mode 100644
index 8ce2d6264f4dabcc14a297771a1e7cbbe6221ae6..0000000000000000000000000000000000000000
--- a/cap05.Rmd
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "Métodos e Funções Genéricas"
-author: "Fernando Mayer & Walmes Zeviani"
----
-
-```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-
-## Carrega as definições de sessão.
-source("config.R")
-rty <- "md"
-```
-
diff --git a/cap06.Rmd b/cap06.Rmd
deleted file mode 100644
index 3d21009f82ca66f692272269deb4a1e5065fbbc7..0000000000000000000000000000000000000000
--- a/cap06.Rmd
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "Vinhetas"
-author: "Fernando Mayer & Walmes Zeviani"
----
-
-```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-
-## Carrega as definições de sessão.
-source("config.R")
-rty <- "md"
-```
-
diff --git a/cap07.Rmd b/cap07.Rmd
deleted file mode 100644
index 33b07363f8be4fa4ba19353f9b845d1f0017f293..0000000000000000000000000000000000000000
--- a/cap07.Rmd
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: "Testes"
-author: "Fernando Mayer & Walmes Zeviani"
----
-
-```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-
-## Carrega as definições de sessão.
-source("config.R")
-rty <- "md"
-```
-
diff --git a/cap04.Rmd b/capAdiDados.Rmd
similarity index 51%
rename from cap04.Rmd
rename to capAdiDados.Rmd
index 9b2c9059eac6f2c589d2357e1145be6306c4b79b..6dc5235a55362833104845850df035aaba865fa2 100644
--- a/cap04.Rmd
+++ b/capAdiDados.Rmd
@@ -4,14 +4,7 @@ author: "Fernando Mayer & Walmes Zeviani"
 ---
 
 ```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-
-## Carrega as definições de sessão.
+source("knitr_setup.R")
 source("config.R")
 rty <- "md"
 ```
diff --git a/capCienRep.Rmd b/capCienRep.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..8b684c968678309e6ccf5b7eda5b5cd199cbcdb1
--- /dev/null
+++ b/capCienRep.Rmd
@@ -0,0 +1,13 @@
+---
+title: "Ciência Reproduzível"
+author: "Fernando Mayer & Walmes Zeviani"
+---
+
+```{r setup, include=FALSE}
+source("setup_knitr.R")
+source("config.R")
+```
+
+****
+# Introdução #
+
diff --git a/cap03.Rmd b/capCriaPac.Rmd
similarity index 99%
rename from cap03.Rmd
rename to capCriaPac.Rmd
index 2fdbfa22979e77a2189c160cc874705b99e55dae..c99a0dc926a24aece76f7ab7faf175a0904e8ceb 100644
--- a/cap03.Rmd
+++ b/capCriaPac.Rmd
@@ -4,14 +4,7 @@ author: "Fernando Mayer & Walmes Zeviani"
 ---
 
 ```{r setup, include=FALSE}
-library(knitr)
-
-opts_chunk$set(
-    dev.args=list(family = "Palatino"))
-
-options(width = 68)
-
-## Carrega as definições de sessão.
+source("setup_knitr.R")
 source("config.R")
 rty <- "md"
 ```
diff --git a/capFunMet.Rmd b/capFunMet.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..5ce4bb6de38ebd2c719b15e9cf9db5ca39237315
--- /dev/null
+++ b/capFunMet.Rmd
@@ -0,0 +1,10 @@
+---
+title: "Métodos e Funções Genéricas"
+author: "Fernando Mayer & Walmes Zeviani"
+---
+
+```{r setup, include=FALSE}
+source("setup_knitr.R")
+source("config.R")
+```
+
diff --git a/capTestes.Rmd b/capTestes.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..1ce1ca75824034f0599dc69a82123f63016ae96b
--- /dev/null
+++ b/capTestes.Rmd
@@ -0,0 +1,11 @@
+---
+title: "Testes"
+author: "Fernando Mayer & Walmes Zeviani"
+---
+
+```{r setup, include=FALSE}
+source("setup_knitr.R")
+source("config.R")
+```
+
+  * <http://kbroman.org/pkg_primer/pages/tests.html>
diff --git a/capVinheta.Rmd b/capVinheta.Rmd
new file mode 100644
index 0000000000000000000000000000000000000000..f4bb2c5b7bd3280c5867744b77a8a6e4977b09b0
--- /dev/null
+++ b/capVinheta.Rmd
@@ -0,0 +1,328 @@
+---
+title: "Vinhetas"
+author: "Fernando Mayer & Walmes Zeviani"
+---
+
+```{r setup, include=FALSE}
+## Carrega as definições de sessão.
+source("setup_knitr.R")
+source("config.R")
+
+## Tipo de output necessário para saber como gerar os captions.
+ishtml <- any(grepl(pattern = "^html_document",
+                    x = readLines("_output.yaml")))
+
+## Carrega as definições de sessão.
+source("config.R")
+rty <- "md"
+```
+
+A documentação de um pacote é indispensável para sua criação e
+distribuição. Tecnicamente falando, não tem como fazer um pacote R sem
+documentação para os objetos exportados. Por mais breve que seja, a
+documentação precisa existir para o pacote ser construído e, portanto, a
+documentação é uma exigência.
+
+Os usuários consultam a documentação quando sabem exatamente o que
+procurar. Exceto pela sessão *Exemplos*, a documentação não se destina a
+mostrar a conexão entre funções ou seu uso coordenado para solução de
+certos problemas. Isso porque as páginas de ajuda descrevem objetos
+individualmente, ou em grupos pequenos, fornecendo uma orientação
+específica e não uma visão geral e integrada.
+
+No primeiro contato com um pacote, por outro lado, o que o usuário
+deseja é de uma visão geral dele, uma espécie de trailer ou enredo. A
+documentação é teodiosa de ler para alguém que quer uma visão geral,
+pois ela é como uma descrição de cada personagem e não da forma como
+eles se envolvem.
+
+A palavra *vignette* admite traduções como vinheta, esboço e epsódio. No
+contexto de um pacote R, uma vinheta é uma documentação auxiliar do
+mesmo que descreve o uso coordenado das funções que contém (ou
+*datasets*) na solução de um problema ou sobre um tema. É usada para dar
+uma visão geral dos recusos do pacote.
+
+
+As vinhetas não são exigidas nos pacotes, embora seja a melhor forma de
+apresentá-lo. Certamente pela mesma razão, não existe restrição de
+tamanho nem forma e fica como responsabilidade dos autores usar do bom
+senso ao escrever uma vinheta e até mesmo quantas vinhetas ter. Se um
+pacote é multitemático ou se a solução para diferentes problemas são
+longas, é melhor ter vinhetas dedicadas a cada um.
+
+O que é marcante, no entanto, é que as vinhetas fazem mistura de prosa e
+código. Antes da versão 3.0.0 do R, as vinhetas eram documentos Sweave e
+nas versões mais recentes, vinhetas não Sweave foram permitidas.
+
+Sendo ou não documentos Sweave, nas as vinhetas são permitidos gráficos
+e outputs de resultados R, além de tabelas e equações. As vinhetas em
+HTML, consideradas a partir da versão 3.0.0, podem até mesmo ter vídeos,
+animações em gif, gráficos em JavaScript e OpenGL.
+
+Diante de todos esses recursos que uma vinheta contém e pelo excelente
+meio de divulgação do pacote que é, nesse capítulo serão descritos os
+passos para adicionar vinhetas ao pacote. Vamos considerar vinhetas em
+HTML e PDF escritas em RMarkDown e compiladas com o knitr.
+
+A documentação é impessoal e pontual, a vinheta não. O artigo é formal e
+demorado, a vinheta.  Usos: descrição geral; material suplementar;
+estudo de caso; detalhamento de algoritimos;
+
+# Consultar vinhetas #
+
+## Pacotes instalados ##
+
+Certamente alguns dos pacotes que você tem instalado no seu SO possuem
+vinheta. Se você está reproduzindo o código desse tutorial, então você
+tem o `devtools` e o `roxygen2`. Para acessar as vinhetas disponíveis
+você pode usar as opções ilustradas abaixo.
+
+```{r, eval=FALSE}
+## Exibe todas as vinhetas disponíveis no console.
+vignette()
+
+## Exibe as vinhetas de um único pacote no console.
+vignette(package = "roxygen2")
+
+## Abre uma vinheta pelo nome (essa é do pacote roxygen2).
+vignette(topic = "rd")
+vignette(topic = "rd", package = "roxygen2")
+
+## Exibe todas as vinhetas disponíveis no navegador.
+browseVignettes()
+
+## Exibe apenas as vinhetas de um pacote.
+browseVignettes(package = "roxygen2")
+```
+
+```{r, include=FALSE}
+cap <-
+"Distribuição do número de vinhetas por pacote nos pacotes oficiais do R
+disponíveis no CRAN."
+
+if (ishtml) {
+    cap <- fig$cap("vin", cap)
+}
+
+tb <- structure(
+    c(0.774686165394073, 0.171735473016695, 0.0535783615892326),
+    class = "table",
+    .Dim = 3L,
+    .Dimnames = structure(list(y = c("0", "1", ">1")),
+                          .Names = "y"))
+
+tbl <- structure(
+    list(px = c(5986L, 1327L, 235L, 85L, 34L, 29L, 11L, 4L, 3L, 4L, 2L,
+                1L, 0L, 1L, 0L, 0L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L,
+                0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L,
+                0L, 0L, 0L, 0L, 0L, 0L, 1L),
+         x = 0:45),
+    .Names = c("px", "x"),
+    row.names = c(NA, -46L),
+    class = "data.frame")
+
+totPack <- sum(tbl$px)
+totVin <- sum(tbl$px * tbl$x)
+m <- totVin / totPack
+
+```
+
+## Pacotes oficiais no CRAN ##
+
+Para os pacotes que são oficiais (que estão no CRAN), você pode
+consultar as vinhetas, bem a documentação, online. Os pacotes estão no
+endereço `https://cran.r-project.org/web/packages/<pacote>/index.html`,
+em que `<pacote>` é um nome. Nessas páginas existe uma seção com URLs
+para as vinhetas, quando disponíveis, logo abaixo da documentação em
+PDF.
+
+Nós fizemos um *web scraping* no site do CRAN e verificamos que 22.5%
+dos pacotes oficiais do R tem pelo menos uma vinheta, sendo que 17.2%
+tem apenas uma e 5.4% tem mais que uma, conforme a Figura
+`r fig$ref("vin")`.
+
+Existe um total de `r totVin` distribuídas em `r totPack` pacotes, o que
+dá uma média de `r round(m, 2)` vinhetas por pacote. Esse *web scrap*
+levou 150 minutos e foi feito no dia 04 de Janeiro de 2016.
+
+```{r, echo=FALSE, results="hide", fig.cap=cap}
+plot(px ~ x, data = tbl, type = "h", lwd = 4,
+     xlab = "Número de vinhetas no pacote",
+     ylab = "Número de pacotes")
+par(fig = c(0.15, 0.95, 0.15, 1), new = TRUE)
+pie(tb,
+    col = c("red", "orange", "yellow"),
+    labels = sprintf(fmt = "%s (%0.1f%s)",
+                     c(0, 1, ">1"), 100*tb, "%"))
+text(x = 0, y = 0.9, labels = "Frequência relativa", cex = 1.2)
+```
+
+Além dos pacotes oficiais existem pacotes em desenvolvimento no GitHub,
+por exemplo, cuja vinheta pode também estar disponível. Esse é o caso do
+pacote
+`r renderUrl("breedR","https://github.com/famuvie/breedR/tree/master/inst/doc",rty)`.
+
+Fica aqui aquela pergunta tipo Tostines: um pacote tem mais vinhetas
+por que é mais usado ou é mais usado por que tem mais vinhetas?
+
+# Criando a vinheta #
+
+Como ja esclarecemos, a vinheta sem dúvida ajuda você a conhecer as
+funcionalidades de um pacote e é a melhor forma de divulgá-lo. Um pacote
+pode ter várias vinhetas, cada uma exibindo um tema diferente de
+funcionalidades.
+
+Produzir a vinheta de um pacote é tão fácil quanto as demais partes
+dele. O pacote *devtools* também possui os recursos para trabalharmos
+com as vinhetas, desde a criação até a inclusão dela como componente do
+pacote, etapas que veremos a seguir.
+
+Antes disso, no entanto, vale comentar que as vinhetas são mais
+facilmente escritas se você considerar
+`r renderUrl("RMarkDown","http://rmarkdown.rstudio.com/",rty)`,
+embora isso não seja
+uma exigência. As vinhetas podem ser escritas em LaTex entrelaçado com
+R, queremos dizer, tanto da forma antiga com o
+`r renderUrl("Sweave","https://www.statistik.lmu.de/~leisch/Sweave/",rty)`
+ou da forma mais recente com o
+`r renderUrl("knitr","http://yihui.name/knitr/",rty)`.
+A vantagem de escrever em MarkDown é a velocidade, praticidade e poder
+obter vinhetas em HTML e PDF facilmente.
+
+STOP
+
+O Hadley mantem uma ampla documentação sobre 
+`r renderUrl("produção de vinhetas","http://r-pkgs.had.co.nz/vignettes.html",rty)`,
+com o qual nos baseamos para expor o que vem a seguir.
+
+O comando `use_vignette()` é quem cria a estrutura necessária para
+acomodar uma vinheta com os devidos cuidados. Ao executá-lo, é criado o
+diretório `vignettes/` com um arquivo `.Rmd` e, além disso, ele adiciona
+ao campo `Suggests` no `DESCRIPTION` os pacotes `knitr` e `rmarkdown`,
+necessários para gerar a vinheta. Não fosse a gentileza do pacote
+`devtools`, poderíamos esquecer dessa última etapa.
+
+```{r, eval=FALSE, include=FALSE}
+## DESCRIPTION antes do use_vignette().
+cat(readLines("./meupacote/DESCRIPTION"), sep = "\n")
+```
+```{r, eval=FALSE}
+library(devtools)
+
+## Cria a primeira vinheta do pacote.
+use_vignette("minhaVinheta1")
+```
+```{r, echo=FALSE}
+if (file.exists("./meupacote/vignettes/minhaVinheta1.Rmd")){
+    file.remove("./meupacote/vignettes/minhaVinheta1.Rmd")
+}
+library(devtools)
+use_vignette("minhaVinheta1", pkg = "./meupacote/")
+```
+```{r, echo=FALSE, comment=NA}
+## Mostra diretório e arquivos criados.
+cat(system("tree --charset=ascii ./meupacote/ | head -n -2",
+           intern = TRUE), sep = "\n")
+```
+```{r, echo=FALSE, comment=NA}
+## DESCRIPTION depois do use_vignette().
+cat(readLines("./meupacote/DESCRIPTION"), sep = "\n")
+```
+
+O arquivo `Rmd` é criado já com conteúdo para poder orientá-lo. No topo
+do arquivo tem uma parte de meta dados escrita em YAML (*yet another
+markup language*) que detalha as informações do documento e definem o
+processo de sua criação.
+
+```{r, echo=FALSE}
+## Mostra o YAML da vinheta original.
+cat(readLines("./meupacote/vignettes/minhaVinheta1.Rmd")[1:10],
+    sep = "\n")
+
+## Nada entrou no .Rbuildignore.
+## cat(readLines("./meupacote/.Rbuildignore"), sep = "\n")
+```
+
+TODO As entradas com % no YAML são ignoradas pelo LaTex e processadas
+pelo R para gerar links na home da documentação (suponho).  A vantagem
+do HTML é que uma index pode dar acesso às várias vinhetas de um
+pacote. Torna fácil para o usuário iniciante.
+
+```
+## Meta dados de uma vinheta.
+% \VignetteIndexEntry{}      ## Título no index.html
+% \VignetteDepends{}         ## Pacotes do qual depende
+% \VignetteKeyword{palavra1} ## Palavras-chave.
+% \VignetteKeyword{palavra2}
+```
+
+Edite à vontade esse arquivo fazendo a melhor propaganda possível do seu
+pacote. Tome cuidado com os pacotes que a sua vinheta vai usar. É comum
+as vinhetas chamarem pacotes para fazer gráficos, como o `lattice`,
+`ggplot2` e `plotrix`. É indicado que eles estejam nos campos do seu
+`DESCRIPTION`, se não no `Imports`, pelo menos no `Suggests`.
+
+## Vinhetas em HTML ##
+
+```{r, include=FALSE}
+file.copy(from = "aux/pitagoras.Rmd",
+          to = "meupacote/vignettes/pitagoras.Rmd",
+          overwrite = TRUE)
+```
+```{r, echo=FALSE, comment=NA}
+## Mostra a vinheta mínima.
+cat(readLines("./meupacote/vignettes/pitagoras.Rmd"),
+    sep = "\n")
+```
+
+Para produzir a vinheta, use o comando `build_vignettes()`. Ele vai
+gerar as vinhetas de cada arquivo e levá-las para outro diretório, como
+pode ser visto abaixo. Caso você não tenha um dos seguintes pacotes:
+`evaluate`, `formatR`, `highr`, `knitr`, `mime`, `stringi`; será
+necessário instalá-los.
+
+```{r, eval=FALSE}
+build_vignettes()
+```
+```{r, eval=FALSE, echo=FALSE, comment=NA, highlight=FALSE}
+## FIXME: Não existe como sair desse erro! De usar o output do
+## build_vignettes().
+x <- capture.output(build_vignettes("./meupacote/"))
+cat(x, sep = "\n")
+
+sink("aux.txt")
+build_vignettes("./meupacote/")
+sink()
+```
+```
+Building meupacote vignettes
+Moving pitagoras.html, pitagoras.R to inst/doc/
+Copying pitagoras.Rmd to inst/doc/
+```
+
+TODO Incluir a vinheta do `pitagoras()` ou outra funcionalidade com
+output em PDF.
+
+Por fim, basta executar `check()` e `build()` mais uma vez para incluir
+as vinhetas no `.tar.gz` do seu pacote.
+
+## Vinhetas em PDF
+
+TODO Demonstrar um dataset e uma função.
+
+As vinhetas ficam no `inst/doc/` quando o pacote é instalado. Os fontes
+ficam em `vignettes/`
+
+Elas ficam no diretório `vignettes/`. São parte do sistema de
+ajuda/documentação do pacote.
+
+`R CMD check` ou `devtools::check()` avalia as vinhetas, extrai o código
+e avalia sua execussão sequêncial, chunk por chunk.
+
+`R CMD build` vai criar o PDF ou HTML da vinheta e colocar no
+`inst/doc/`, para isso vai rodar a engine declarada (knitr ou Sweave,
+rmarkdown, enfim).
+
+A partir da versão 3.0.0, o R admite vignettes engines diferentes do
+Sweave. No caso, permite usar o **knitr** para gerar PDF e HTML.
+
diff --git a/config.R b/config.R
index 9331a536b4bdbdf08445fd452b4cafe6bb41a85d..ec574b1711820a763132685c8889380b6b3134cd 100644
--- a/config.R
+++ b/config.R
@@ -12,3 +12,18 @@ renderUrl <- function(text, url, output){
 ## renderUrl("Walmes Zeviani", "http://www.leg.ufpr.br/~walmes")
 ## renderUrl("Walmes Zeviani", "http://www.leg.ufpr.br/~walmes",
 ##           output="tex")
+
+## http://stackoverflow.com/questions/13848137/figure-captions-references-using-knitr-and-markdown-to-html
+fig <- local({
+    i <- 0
+    ref <- list()
+    list(
+        cap = function(refName, text) {
+        i <<- i + 1
+        ref[[refName]] <<- i
+        paste("Figura ", i, ": ", text, sep = "")
+    },
+    ref = function(refName) {
+        ref[[refName]]
+    })
+})
diff --git a/setup_knitr.R b/setup_knitr.R
new file mode 100644
index 0000000000000000000000000000000000000000..0d6df0004100baa24043414636ead606343f8c48
--- /dev/null
+++ b/setup_knitr.R
@@ -0,0 +1,8 @@
+library(knitr)
+
+opts_chunk$set(
+    dev.args=list(family = "Palatino"))
+
+opts_knit$set(eval.after = "fig.cap")
+
+options(width = 68)
diff --git a/style.css b/style.css
index 0ab316dcb0e536325becd16f5582a4c3a4eae7b6..c7dc32207e90c5cf052a326fdb57b2147a42d2cf 100644
--- a/style.css
+++ b/style.css
@@ -21,6 +21,16 @@ tt, code, pre {
 /* h4.author {} */
 /* code { font-size: 16px; } */
 
+p {
+    /* margin: 0px 0px 10px; */
+    text-indent: 1em;
+    text-align: justify;
+}
+
+pre {
+    word-break: keep-all;
+}
+
 pre code {
     font-size: 14px;
 }