FAQ do Sphinx

Essa é a lista de Perguntas Frequentes sobre Sphinx. Sinta-se livre para sugerir novas entradas!

Como eu faço…

… para criar arquivos PDF sem LaTeX?

rinohtype fornece um construtor de PDF que pode ser usado como um substituto drop-in para o construtor de LaTeX.

… obter seções numeradas?

Elas são automáticas na saída LaTeX; para HTML, use a opção :numbered: para a diretiva toctree onde é desejado o início da numeração.

… configurar a aparência dos arquivos HTML?

Use temas, veja HTML Theming.

… adicionar inclusões ou substituições globais?

Adicione-as no valor de configuração rst_prolog ou rst_epilog.

… exibir toda uma árvore de TOC na barra lateral?

Use o chamável toctree em um modelo de layout personalizado, provavelmente no bloco sidebartoc.

… escrever minha própria extensão?

Veja Tutoriais de extensão.

… converter de meus documentos existentes usando a marcação MoinMoin?

A maneira mais fácil é converter para xhtml e, em seguida, converter xhtml para reST. Você ainda precisará marcar classes e coisas assim, mas os títulos e exemplos de código vêm de forma limpa.

Para muitas outras extensões e outras contribuições, consulte o repositório sphinx-contrib.

Usar Sphinx com…

Read the Docs

Read the Docs é um serviço de hospedagem de documentação baseado no Sphinx. Eles hospedarão a documentação do sphinx, junto com o suporte de uma série de outros recursos, incluindo suporte de versão, geração de PDF e muito mais. O guia Primeiros passos é um bom lugar para começar.

Epydoc

Existe uma extensão de terceiros que fornece um papel de api que faz referência aos documentos da API do Epydoc para um determinado identificador.

Doxygen

Michael Jones está desenvolvendo uma ponte reST/Sphinx para doxygen chamada breathe.

SCons

Glenn Hutchings escreveu um script de construção de SCons para construir a documentação do Sphinx; está hospedado aqui: https://bitbucket-archive.softwareheritage.org/projects/zo/zondo/sphinx-scons.html

PyPI

Jannis Leidel escreveu um comando setuptools que carrega automaticamente a documentação Sphinx para a área de documentação do pacote PyPI em https://pythonhosted.org/.

GitHub Pages

Adicione sphinx.ext.githubpages ao seu projeto. Ele permite que você publique seu documento nas páginas do GitHub. Ele gera arquivos auxiliares para GitHub Pages na construção de documentos HTML automaticamente.

MediaWiki

Veja sphinx-wiki, um projeto de Kevin Dunn.

Google Analytics

Você pode usar um modelo layout.html personalizado, como este:

{% extends "!layout.html" %}

{%- block extrahead %}
{{ super() }}
<script>
  var _gaq = _gaq || [];
  _gaq.push(['_setAccount', 'XXX account number XXX']);
  _gaq.push(['_trackPageview']);
</script>
{% endblock %}

{% block footer %}
{{ super() }}
<div class="footer">This page uses <a href="https://analytics.google.com/">
Google Analytics</a> to collect statistics. You can disable it by blocking
the JavaScript coming from www.google-analytics.com.
<script>
  (function() {
    var ga = document.createElement('script');
    ga.src = ('https:' == document.location.protocol ?
              'https://ssl' : 'https://www') + '.google-analytics.com/ga.js';
    ga.setAttribute('async', 'true');
    document.documentElement.firstChild.appendChild(ga);
  })();
</script>
</div>
{% endblock %}
Pesquisa Google

Para substituir a função de pesquisa integrada do Sphinx pela Pesquisa Google, proceda da seguinte forma:

  1. Acesse https://cse.google.com/cse/all para criar o trecho de código de Pesquisa Google.

  2. Copie o trecho de código e cole-o em _templates/searchbox.html em seu projeto Sphinx:

    <div>
       <h3>{{ _('Quick search') }}</h3>
       <script>
          (function() {
             var cx = '......';
             var gcse = document.createElement('script');
             gcse.async = true;
             gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
             var s = document.getElementsByTagName('script')[0];
             s.parentNode.insertBefore(gcse, s);
          })();
       </script>
      <gcse:search></gcse:search>
    </div>
    
  3. Adicione searchbox.html ao valor de configuração html_sidebars.

Sphinx vs. Docutils

De forma resumida, docutils converte reStructuredText em vários formatos de saída. O Sphinx se baseia no docutils para permitir a construção de corpos de documentação com referência cruzada e indexados.

docutils é um sistema de processamento de texto para converter documentação de texto simples em outros formatos mais ricos. Conforme observado na documentação do docutils, docutils usa leitores para ler um documento, analisadores para analisar formatos de texto simples em uma representação de árvore interna composta de diferentes tipos de nós e escritores para gerar este árvore em vários formatos de documento. docutils fornece analisadores para um formato de texto simples – reStructuredText – embora outros analisadores fora da árvore tenham sido implementados incluindo o analisador Markdown do Sphinx. Por outro lado, ele fornece escritores para muitos formatos diferentes, incluindo HTML, LaTeX, páginas man, Open Document Format e XML.

docutils expõe todas as suas funcionalidades através de uma variedade de ferramentas front-end, como rst2html, rst2odt e rst2xml. Porém, crucialmente, todas essas ferramentas, e os próprios docutils, estão relacionados a documentos individuais. Eles não oferecem suporte a conceitos como referência cruzada, indexação de documentos ou a construção de uma hierarquia de documentos (normalmente manifestando-se em um índice analítico).

O Sphinx se baseia em docutils, aproveitando os leitores e analisadores de docutils e fornecendo seus próprios Construtores. Como resultado, o Sphinx envolve alguns dos escritores fornecidos pelos docutils. Isso permite que o Sphinx forneça muitos recursos que simplesmente não seriam possíveis com docutils, como os descritos acima.

Informações de epub

A lista a seguir fornece algumas dicas para a criação de arquivos epub:

  • Divida o texto em vários arquivos. Quanto mais longos são os arquivos HTML individuais, mais tempo leva para o leitor de e-books processá-los. Em casos extremos, a renderização pode levar até um minuto.

  • Tente minimizar a marcação. Isso também compensa no tempo de renderização.

  • Para alguns leitores, você pode usar fontes incorporadas ou externas usando a diretiva CSS @font-face. Isso é extremamente útil para listagens de código que geralmente são cortadas na margem direita. A fonte Courier padrão (ou variante) é bastante ampla e você só pode exibir até 60 caracteres em uma linha. Se você substituí-la por uma fonte mais estreita, pode obter mais caracteres em uma linha. Você pode até usar FontForge e criar variantes estreitas de alguma fonte livre. No meu caso, recebo até 70 caracteres em uma linha.

    Você pode ter que experimentar um pouco até obter resultados razoáveis.

  • Teste os epubs criados. Você pode usar várias alternativas. Os que conheço são Epubcheck, Calibre, FBreader (embora não renderize o CSS) e Bookworm. Para Bookworm, você pode baixar o código-fonte em https://code.google.com/archive/p/threepress e executar seu próprio servidor local.

  • Divs flutuantes grandes não são exibidos corretamente. Se eles cobrirem mais de uma página, o div será mostrado apenas na primeira página. Nesse caso, você pode copiar o epub.css do diretório sphinx/themes/epub/static/ para seu diretório local _static/ e remover as configurações de float.

  • Os arquivos inseridos fora da diretiva toctree devem ser incluídos manualmente. Isso às vezes se aplica a apêndices, por exemplo o glossário ou os índices. Você pode adicioná-los com a opção epub_post_files.

  • O tratamento da página de rosto do epub difere do procedimento do reStructuredText que resolve automaticamente os caminhos das imagens e as coloca no diretório _images. Para a página de rosto do epub, coloque a imagem no diretório html_static_path e faça referência a ela com seu caminho completo na opção de configuração epub_cover.

  • O comando kindlegen pode converter do arquivo resultante epub3 para o arquivo .mobi para Kindle. Você pode obter yourdoc.mobi em _build/epub após o seguinte comando:

    $ make epub
    $ kindlegen _build/epub/yourdoc.epub
    

    O comando kindlegen não aceita documentos que tenham títulos de seção em torno da diretiva toctree:

    Section Title
    =============
    
    .. toctree::
    
       subdocument
    
    Section After Toc Tree
    ======================
    

    kindlegen assume que todos os documentos estejam em ordem, mas o documento resultante tem uma ordem complicada para o kindlegen:

    ``parent.xhtml`` -> ``child.xhtml`` -> ``parent.xhtml``
    

    Se você receber o seguinte erro, corrija a estrutura do seu documento:

    Error(prcgen):E24011: TOC section scope is not included in the parent chapter:(title)
    Error(prcgen):E24001: The table of content could not be built.
    

Informações de Texinfo

Existem dois programas principais para ler arquivos Info, info e GNU Emacs. O programa info tem menos recursos, mas está disponível na maioria dos ambientes Unix e pode ser acessado rapidamente do terminal. O Emacs oferece melhor fonte e exibição de cores e suporta ampla personalização (é claro).

Notas

As notas a seguir podem ser úteis se você deseja criar arquivos Texinfo:

  • Cada seção corresponde a um node diferente no arquivo Info.

  • Dois pontos (:) não podem ser escapados apropriadamente em entradas de menu e refexs. Eles serão substituídos por ponto-e-vírgulas (;).

  • Links para arquivos Info externos podem ser criados usando o esquema URI oficial do info. Por exemplo:

    info:Texinfo#makeinfo_options