ReStructuredText, Sphinx, Sagepedia

Cómo escribir documentación para python y Sage

ReStructuredText
Un lenguaje de marcado que permite generar documentación en varios formatos desde un mismo archivo fuente.
Sphinx
Un sistema diseñado para la documentación de python usando este lenguaje, además reconoce el código python y comprueba que el resultado obtenido produce el resultado esperado.
Sagepedia
Una propuesta que os hago para escribir documentación colaborativa para Sage, à la Wikipedia.

Estilo de texto

El código fuente se compila y produce un resultado (igual que en latex). Tenemos menos control que en latex pero el código es más fácil de leer.

Por ejemplo, este código:

*énfasis*, **énfasis fuerte (negrita)**, ``codigo``

produce este resultado:

énfasis, énfasis fuerte (negrita), codigo

Párrafos

Código

Un párrafo, sin importar los
saltos de línea

  Otro párrafo, éste indentado

Una línea de separación indica un nuevo párrafo.

Resultado

Un párrafo, sin importar los saltos de línea

Otro párrafo, éste indentado

Una línea de separación indica un nuevo párrafo.

Lista

Código

- Item 1
- Item 2

Resultado

  • Item 1
  • Item 2

Lista numerada

Código (tenemos que numerar la lista nosotras!)

1. Primer punto
2. Segundo punto

Resultado

  1. Primer punto
  2. Segundo punto

Definiciones

Código

Item 1
    descripción

Item 2
    descripción

Resultado

Item 1
descripción
Item 2
descripción

Sección literal

Código

Ejemplo::

    Una línea termina con :: y la siguiente línea está indentada.
    Se ignoran *asteristos* y demás formato.

La sección termina *cuando termina la indentación* (como en python!)

Resultado

Ejemplo:

Una línea termina con :: y la siguiente línea está indentada.
Se ignoran *asteriscos* y demás formato.

La sección termina cuando termina la indentación (como en python!)

Cabeceras de secciones

El título de cada sección va subrayado por caracteres iguales. Se reserva un carácter distinto para cada nivel de sección, subsección, etc.

Sección 1
,,,,,,,,,

Subsección 1.1
''''''''''''''

Sección 2
,,,,,,,,,

Sección 1

Subsección 1.1

Sección 2

Docutils

El paquete de python docutils permite compilar un mismo archivo rst a distintos formatos:

rst2html archivo.rst archivo.html
HTML
rst2tex archivo.rst archivo.tex
LaTeX
rst2s5 archivo.rst archivo-s5.html
S5 slides: presentación en html
rst2odt archivo.rst archivo.odt
OpenDocument

Sphinx

Ejemplos:

latex *inline*: :math:`e^\pi i=-1`

..MATH::

    \text{latex display} e^\pi i=-1

Ejemplo práctico con Sphinx

Tests unitarios

La sintaxis:

::

    sage: numero = 6
    sage: if numero%2==0:
    ...       print '%d es par'%numero
    6 es par

permite incluir código Sage, y el resultado que se produce al ejecutar ese código (si usamos sphinx en vez de docutils tenemos resaltado de sintaxis). Sphinx permite, además, comprobar el resultado. Una llamada a:

sage -t ~/sage/devel/sage/doc/es/ejota/ejota1.rst

informa de todas las diferencias entre el resultado esperado y el resultado obtenido al ejecutar el código.

SagePedia

Veámoslo en acción!

Reflexiones