[Tutorial] Formatação de ebooks v2.0 (Parte 1: Teoria)

Já se passaram dois anos desde a última versão desse tutorial, e eu aprendi alguns truques legais aqui e ali que talvez facilitassem a minha vida. Porém, atualizar aquele post seria complicado, uma vez que esse novo processo é completamente diferente. Assim, manterei o antigo como está e farei um novo.

(Lembrando que, se você não tiver saco pra fazer essas coisas, podemos negociar um preço pelo meu serviço. 😉 )

Antes de começar, contudo, você precisará de algumas coisas (ignore os links por enquanto):

  • seu livro, revisado e pronto para a publicação, preferencialmente separado em capítulos;
  • markdown e um editor pra ele (eu uso EmacsVim ou Sublime, em ordem de preferência);
  • pandoc;
  • kindlegen (pelo menos eles oferecem um conversor para aquele formato estranho que obrigam a usar…);
  • um terminal (prompt, se você usa Windows).

É sempre bom alertar que só vale a pena seguir esses passos com a versão final do livro em mãos (ou em bits). Esse não é um processo incremental que você simplesmente irá escrevendo e atualizando o ebook (mesmo que você já use markdown para escrevê-lo), mas o trabalho final de edição para colocá-lo na Amazon. Por que especificamente a Amazon? Porque é a única que eu sei como funciona. No final, você terá os formatos epub e mobi, então talvez esse tutorial não seja tão específico quanto eu imagino. Porém, divago.

Ah, e não se preocupe, vou ensinar aqui tudo que você precisa. Vamos do mais simples ao mais complicado, e no final eu junto as peças, ok?

E, antes que eu me esqueça, o que eu estou passando aqui é basicamente uma adaptação do que li nesse link. Tive outros materiais de referência, mas esse é, de longe, o melhor.

KindleGen

Se você foi apressado e saiu clicando nos links acima, viu que esse é um conversor de arquivos para o formato .mobi, utilizado pela Amazon (se não clicou, está sabendo agora). Caso você esteja se perguntando: sim, esse será nosso último passo (antes da publicação, claro), e, talvez por isso, o mais simples. O comando é bem direto:

kindlegen final.epub

Onde final.epub será o arquivo que geraremos com o pandoc. Mas estou adiantando as coisas um pouco. Quando chegarmos nessa etapa, já teremos o ebook completamente configurado e pronto para a publicação, apenas estando no formato errado. O comando criará o arquivo final.mobi, se tudo estiver correto; caso contrário, a saída do comando informará os erros que precisarão de correção.

Pandoc

Aqui as coisas começam a ficar interessantes. Esse programa é, basicamente, o deus das conversões de arquivos em texto. Se olhar no diagrama do site, notará que o pandoc notavelmente aceita muitos formatos: epub, docx, markdown (note especialmente esse), org, textfile, dentre alguns (muitos) outros.

Como se isso não fosse o suficiente, ele ainda tem alguns truques legais na manga. O comando dessa vez será um pouco maior:

pandoc title.txt ./*.markdown --toc --toc-depth=3 --epub-cover-image=cover.jpg --epub-metadata=meta.xml --epub-stylesheet=sty.css -o final.epub

Parece complicado, mas é bem simples, ainda que use várias opções. Vamos ver o que cada opção faz:

  • --toc: criar a tabela de conteúdo (Table of Contents) no início do epub. Até onde eu sei, o pandoc faz isso por padrão, mas não custa nada garantir, né?
  • --toc-depth: até que nível da ToC ele deve descrever. Por exemplo, se a primeira header for utilizada para dividir o livro em atos, a segunda em capítulos e a terceira em subcapítulos, talvez você queira listar apenas as duas primeiras ou talvez você prefira listar todas. É nessa opção que você controla isso.
  • --epub-cover-image=cover.jpg: assumindo que “cover.jpg” seja o nome da imagem que contém a capa do seu livro, essa opção diz ao pandoc para incluí-la no epub gerado.
  • --epub-metadata=meta.xml: assumindo que “meta.xml” seja o arquivo que contém metadados a serem adicionados ao epub (autor, título, copyright, idioma, data, etc.), o pandoc os adiciona ao epub (lembrando que, se a data não for fornecida, ele usará o dia atual). Tags válidas podem ser encontradas aqui.
  • --epub-stylesheet=sty.css: assumindo que “sty.css” seja o nome do arquivo, o pandoc ira realizar as modificações desejadas ao CSS padrão do epub.

Talvez a opção menos obrigatória seja --epub-stylesheet, uma vez que serve apenas para modificar o CSS padrão. Um exemplo do arquivo meta.xml pode ser encontrado aqui, convertido do original no link citado lá em cima.

Com isso tudo fora do caminho, falta explicar o que os “dois” arquivos são.

Primeiramente, o mais simples: title.txt. Tão simples que contém apenas duas linhas: a primeira diz o nome do ebook, e a segunda diz o nome do autor, ambas precedidas de um percent (%). Esse arquivo dirá ao pandoc para adicionar ao epub os metadados de nome e autor, bem como criar a página de título do livro. (Alguém aí com uma tradução boa de title page? Porque eu realmente não sei qual o termo em português…)

O segundo arquivo-que-não-é-um-arquivo é o que concentrará a maior parte do nosso trabalho: ./*.markdown diz ao terminal para substituir isso por uma lista com todos os nomes de arquivos na pasta atual (./) que terminem com a extensão .markdown. Mais detalhes na parte relacionada ao terminal, por hora só entenda que esses são os capítulos convertidos em um formato especial e devidamente separados e numerados.

A numeração é especialmente importante, pois os arquivos são adicionados ao .epub na ordem em que forem passados ao pandoc. Claro, você pode simplesmente ignorar isso e ir digitando arquivo a arquivo, ou usar algum outro truque de shell que conheça. Estou só apresentando as coisas da forma mais simples possível aqui.

Caso prefira, nada contra utilizar apenas um arquivo para o livro completo. Eu, particularmente, organizo as coisas por capítulos, por isso estou escrevendo dessa forma.

Markdown

Pensei um bom tempo em colocar o terminal na frente, mas acho que ele é bem mais complicado do que o markdown simplesmente pelo fato que muitas pessoas nunca o usaram na vida.

Uma descrição completa dessa linguagem (com ou sem aspas? Eu sinceramente não sei…) pode ser encontrada no link da lista lá de cima, mas você provavelmente não precisará de tudo aquilo. Então vamos ao resumo da história.

Pra começar, markdown é uma linguagem de marcação de texto (estou de olho em você, HTML) muito simplificada e simples de usar. E também, para escrever em markdown você vai ter que abandonar o Word e procurar um editor de texto puro ou um editor de código. Para Windows, o mais simples de usar seria o Notepad++; para qualquer outro OS, Sublime talvez seja o melhor para você. Claro que Emacs e Vim são ótimos, mas, se for apenas usá-los para essa conversão final dos seus textos, talvez não valha o esforço de aprendê-los. Caso ainda queira, existem (muitos) ótimos tutoriais online. Nada que uma rápida pesquisa sobre “tutoriais vim” ou “tutoriais emacs” no google não ache.

Voltando ao markdown.

O que eu quero dizer com uma linguagem de marcação de texto? Bem, digamos que você queira destacar uma passagem com itálico (por favor, por favor, não use negrito para destaque). No Word (ou afins), você usaria um atalho de teclado ou clicaria num botão que, magicamente, transformatia o texto logo na sua frente, certo? Aqui as coisas são um pouco diferentes. Não existem botões mágicos, pra começar. No meio do texto, você deve, explicitamente, dizer onde começa e termina o itálico, rodeando a região com underlines (_) ou asteriscos (*). Para separar parágrafos, basta colocar uma linha em branco entre eles.

Vamos ao resumo das opções mais usadas:

  • itálico: cercar com um underline ou um asterisco. Ex.: _palavra ou região_ ou *palavra ou região* irá gerar “palavra ou região“.
  • negrito: cercar com dois underlines ou dois asteriscos. Ex.: __palavra ou região__ ou **palavra ou região** irá gerar “palavra ou região“.
  • itálico e negrito: cercar com três underlines ou três asteriscos. Ex.: ___palavra ou região___ ou ***palavra ou região*** irá gerar “palavra ou região“.

Caso você queira inserir um underline ou um asterisco, basta colocar uma barra na frente: \_palavra ou região gerará “_palavra ou região”. O mesmo vale para problemas com listas ordenadas. Falando nelas, você pode criar listas facilmente. No primeiro caso, você obterá algo assim:

        1. primeiro item
        2. segundo item

No segundo, algo como:

        • primeiro item
        • segundo item

Note que, no segundo caso, podem ser usados três símbolos distintos para a marcação: -, + ou *. Na lista numerada, contudo, é obrigatória a numeração manual (ressalvas no parágrafo seguinte). Caso um número seguido de um ponto for confundido com o início de uma lista numerada, basta substituir o ponto por \.. Isso impedirá a identificação do elemento como um item numerado e imprimirá o ponto normalmente.

A numeração manual a que me refiro não significa que você deva numerar manualmente “1.", “2.", “3.", etc., mas sim, preceder o ponto de um número qualquer. Uma lista criada por “1.“, “1.” e “1.” produzirá o mesmo efeito de uma criada com os identificadores “1.“, “2.” e “3.” (ou mesmo com eles em diferentes ordens).

Para a identificação dos capítulos, usaremos algo análogo aos estilos do Word (ao menos acho que se chamam assim): headers. Se você entende HTML, sim, é exatamante a mesma coisa com uma sintaxe diferente. Se você não entende, é basicamente o análogo a usar os estilos de Capítulo 1, 2, etc. do Word para facilitar a geração da ToC e para identificar os capítulos.

A sintaxe é bem simples:

# Nome do Capítulo

O número de #s no início da linha indica qual o nível essa entrada corresponderá na ToC. Por exemplo, caso um único # seja usado para dividir o livro em partes, dois #s identificariam um capítulo, três, um subcapítulo, e assim por diante. Visualmente:

Headers escritos em markdownSeria equivalente a:

Representação equivalente da imagem anterior em níveis na ToCAlguns truques mais complicados podem ser obtidos seguindo o link anterior. Nada que está ali é complicado de fazer, e a tradução de markdown para HTML ajuda a entender algumas sutilezas.

Ah, e falando em HTML: se você quiser, pode incluir pedaços dele no meio do markdown (digamos… para centralizar o texto, algo que não dá pra fazer normalmente) sem problemas.

Terminal/Prompt

Bem, então vamos lá. Eu não quero fazer isso. Você não quer fazer isso. Mas nós temos que fazer isso.

Pra tirar o medo logo de cara: terminal não é o mal encarnado no seu computador. Sim, na maioria dos casos você pode viver feliz sem ele (mesmo se você for programador e mesmo se você usa Linux), e sim, muitas pessoas odeiam digitar comandos simplesmente porque preferem clicar em menus e botões do que escrever.

Eu, obviamente, não sou uma delas.

Para nosso propósito, não precisaremos ir muito a fundo no assunto. apenas alguns comandos e dicas já são mais do que suficientes, especialmente conhecendo os dois comandos já citados anteriormente. Sinta-se livre para pular qualquer parte que julgue desnecessária, e lembre-se que essa não é uma lista completa de comandos.

Para começar e se livrar de muitos comandos e digitações logo de cara: como abrir o terminal. Nunca tive um Mac, então não sei se esses truques possuem algum equivalente na maçã, mas, no Windows, se você clicar com o botão direito numa pasta (ou dentro dela) enquanto segura a tecla shift, algumas opções adicionais aparecerão no menu, inclusive algo como “abrir prompt aqui”. Essa opção abre o prompt de comando na pasta selecionada, e poupa o trabalho de trocar os diretórios manualmente até chegar lá. No Linux, essa opção costuma ser mostrada diretamente no menu, dependendo do seu file manager (gerenciador de arquivos). Sei que uso o Nemo e nele aparece.

Em seguida, temos algo chamado autocomplete. Ao digitar algo, contextualmente, o terminal pode adivinhar o resto do comando que você quer digitar. Para isso, no meio do comando, aperte a tecla tab. No Windows, pelo que me recordo, ele completará sempre que possível, e subsequentes tabs farão o prompt completar as demais opções.

No Linux, caso o primeiro tab não complete o comando, o terminal está dizendo que: ou não há o que completar ou há mais de uma opção disponível. O segundo tab dirá ao bash para mostrar uma lista de opções. Basta continuar escrevendo para tentar completar o comando. No zsh, em contrapartida, após mostrar as opções, subsequentes tabs levam ele a circular pelas opções disponíveis.

Outros comandos úteis para nosso propósito atual são:

  • cd: abreviatura de change directory, serve para mudar o diretório (ou pasta, o que preferir chamar) atual; aceita caminhos absolutos ou relativos. Note que, para ir para a pasta superior à atual, refira a ela como .. (ou seja, cd ..).
  • pwd: exclusivo do Linux, imprime o caminho atual e significa print working directory. No Windows, o equivalente seria o comando cd sem argumentos.
  • mkdir: abreviatura para make directory, ele cria uma pasta sem entrar nela. Simples assim.
  • ls ou dir: mostrar o conteúdo da pasta atual ou de alguma outra pasta, o primeiro sendo o comando do Linux e o segundo do Windows. Ambos possuem várias opções de ordenação.
  • rmdir: apagar um diretório. Note que ele deve estar vazio antes de usar o comando.
  • copy ou cp: o primeiro sendo exclusivo do Windows e o segundo do Linux, copia um arquivo para outro.
  • del ou rm: apagar um arquivo (não funciona para pastas).
  • mv ou move: mover um arquivo para outro caminho. Também utilizado para renomear arquivos ou pastas.

Note que qualquer comando que precise ser executato também em subdiretórios (como, por exemplo, apagar todo o conteúdo de uma pasta, mesmo que tenha outras pastas dentro dessa) geralmente possui a chave /s no Windows ou -r no Linux. Consulte a manpage (man nome_do_comando) do comando no Linux (ou a help page (help nome_do_comando) no caso do Windows) para mais informações. Ou procure no Google, costuma achar fácil esse tipo de coisa.

Notas com relação à instalação no Windows

Não sei o pandoc, mas o kindlegen vem com o executável pronto para uso. Contudo, a não ser que você coloque-o diretamente dentro do C:, você precisará digitar manualmente o caminho inteiro até o executável para rodá-lo. Uma forma de evitar isso é editar a variável de ambiente PATH para incluir a pasta que contém o kindlegen. Infelizmente, não sei como fazer isso desde o Windows 8, então é mais fácil você pesquisar no Google. Não deve ser complicado.

No caso do Linux, basta acrescentar um alias no arquivo de configuração de seu shell (.bashrc para o bash, .zshrc para o zsh) com o caminho até o executável. Se você não sabe, um alias é escrito como:

alias kindlegen="/home/usuario/caminho/para/o/arquivo/baixado/kindlegen"

Claro que você pode “editar” o PATH no Linux, mas eu acho essa uma solução mais elegante. Ainda assim, caso queria usar o PATH, acrescente algo do tipo:

export PATH="/home/usuario/caminho/para/o/arquivo/baixado:$PATH"

Fase prática

Ufa, finalmente nos livramos disso. E demorou mais do que eu esperava. E talvez ainda tenha faltado algo.

Resta agora por a mão na massa e juntar essas peças para formatar um ebook. Esse post, contudo, já está longo demais para o meu gosto e a parte prática terá muitas imagens. Então vou terminar esse post aqui e começar a escrever um exemplo prático. Talvez saia ainda hoje.

Aguarde um momento, senhor.

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s