How to preserve line breaks when generating python docs using sphinx

PythonPython Sphinx

Python Problem Overview


I am using Sphinx for generating docs for a python project. The output html is not preserving the line breaks which are present in the docstring. Example:

Code

def testMethod(arg1,arg2):
	"""
	This is a test method

	Arguments:
	arg1: arg1 description
	arg2: arg2 description

	Returns:
	None
	"""
	print "I am a test method"

Sphinx O/P:

TestModule.testMethod(arg1, arg2)

This is a test method

Arguments: arg1: arg1 description arg2: arg2 description

Returns: None

Any idea how to fix it ?

Python Solutions


Solution 1 - Python

In general in restructured text use

| Vertical bars
| like this

to keep line breaks

Solution 2 - Python

If you add the following to your main .rst file:

.. |br| raw:: html

   <br />

Then in your markup you can add in |br| to create linebreaks just for HTML.

I want to break this line here: |br| after the break.

From: http://docutils.sourceforge.net/FAQ.html#how-to-indicate-a-line-break-or-a-significant-newline

Solution 3 - Python

This answer comes late, but maybe it'll still be useful to others.

You could use reStructuredText in your docstrings. This would look something like

:param arg1: arg1 description
:type arg1: str
:param arg2: arg2 description
:type arg2: str

From the looks of your example however it seems you're using the Google Style for docstrings (http://google-styleguide.googlecode.com/svn/trunk/pyguide.html?showone=Comments#Comments).

Sphinx does not natively support those. There is however an extension named napoleon that parses Google and Numpy style docstrings at https://pypi.python.org/pypi/sphinxcontrib-napoleon.

To use the extension you have to append 'sphinxcontrib.napoleon' to the extension-list in your Sphinx conf.py (usually doc/source/conf.py), so it becomes something like

extensions = [                                                                  
'sphinx.ext.autodoc',                                                       
'sphinxcontrib.napoleon',                                                   
'sphinx.ext.doctest',                                                                                                             
]

Solution 4 - Python

In your case you can write:

def testMethod(arg1,arg2):
  """
  This is a test method

  | Arguments:
  | arg1: arg1 description
  | arg2: arg2 description

  | Returns:
  | None
  """
  print "I am a test method"

Solution 5 - Python

In my particular case, I was trying to get autodoc to read a doc string (""" my doc string """). I ended up using \n everywhere I needed to add a line break:

This is the first line\n
and this is the second line\n

Solution 6 - Python

See if you have enabled Support for NumPy and Google style docstrings extension in your conf.py file:

extensions = ['sphinx.ext.autodoc', 'sphinx.ext.napoleon']

Solution 7 - Python

Make sure that your CSS stylesheet has padding or margins on the p element so that the paragraphs that Sphinx creates are visible.

In many cases, rendering issues can be fixed more easily by tweaking the stylesheet than trying to control exactly what Sphinx generates.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSaurabh SaxenaView Question on Stackoverflow
Solution 1 - PythonOwenView Answer on Stackoverflow
Solution 2 - PythongeographikaView Answer on Stackoverflow
Solution 3 - PythonkarlsonView Answer on Stackoverflow
Solution 4 - PythonFrancescoView Answer on Stackoverflow
Solution 5 - PythonAdam HammoudaView Answer on Stackoverflow
Solution 6 - PythonReza BehzadpourView Answer on Stackoverflow
Solution 7 - PythonRoger DahlView Answer on Stackoverflow