From d89a50ca05285050528f8fd0292deddd16c9e3e8 Mon Sep 17 00:00:00 2001
From: clinssen <c.linssen@fz-juelich.de>
Date: Tue, 30 Mar 2021 10:34:36 +0200
Subject: [PATCH] Fix typography and rendering issues in documentation

Co-authored-by: C.A.P. Linssen <charl@turingbirds.com>
---
 doc/concepts/decor.rst                       | 16 ++++++++--------
 doc/concepts/labels.rst                      |  4 ++--
 doc/concepts/mechanisms.rst                  |  2 +-
 doc/concepts/morphology.rst                  | 12 ++++++------
 doc/contrib/pr.rst                           |  2 +-
 doc/fileformat/asc.rst                       |  2 +-
 doc/fileformat/neuroml.rst                   |  8 ++++----
 doc/fileformat/swc.rst                       |  8 ++++----
 doc/math/model/appendix.tex                  |  6 +++---
 doc/math/model/formulation.tex               | 10 +++++-----
 doc/tutorial/index.rst                       |  2 +-
 doc/tutorial/network_ring.rst                |  6 +++---
 doc/tutorial/single_cell_detailed.rst        | 10 +++++-----
 doc/tutorial/single_cell_detailed_recipe.rst | 10 +++++-----
 doc/tutorial/single_cell_recipe.rst          | 12 ++++++------
 15 files changed, 55 insertions(+), 55 deletions(-)

diff --git a/doc/concepts/decor.rst b/doc/concepts/decor.rst
index 2177775d..2851e931 100644
--- a/doc/concepts/decor.rst
+++ b/doc/concepts/decor.rst
@@ -26,10 +26,10 @@ The choice of region or locset is reflected in the two broad classes of dynamics
   * :ref:`Stimuli <cablecell-stimuli>`.
   * :ref:`Probes <cablecell-probes>`.
 
-Decorations are described by a **decor** object in Arbor.
-Provides facility for
-* setting properties defined over the whole cell
-* descriptions of dynamics applied to regions and locsets
+Decorations are described by a **decor** object in Arbor. It provides facilities for
+
+  * setting properties defined over the whole cell;
+  * descriptions of dynamics applied to regions and locsets.
 
 .. _cablecell-paint:
 
@@ -177,9 +177,9 @@ can't be overridden at cell or region level.
    :widths: 15, 10, 10
 
    **Ion**,     **name**, **Valence**
-   *Calcium*,   ca,       1
+   *Calcium*,   ca,       2
    *Potassium*,  k,       1
-   *Sodium*,    na,       2
+   *Sodium*,    na,       1
 
 Each ion species has the following properties:
 
@@ -198,7 +198,7 @@ If no reversal potential mechanism is specified for an ion species, the initial
 reversal potential values are maintained for the course of a simulation.
 Otherwise, the mechanism does the work.
 
-but it is subject to some strict restrictions.
+Reversal potential mechanisms are density mechanisms subject to some strict restrictions.
 Specifically, a reversal potential mechanism described in NMODL:
 
 * May not maintain any STATE variables.
@@ -215,7 +215,7 @@ and ionic state.
     mechanism only, that calculates reversal potentials according to concentrations
     that the other mechanisms use and modify.
 
-If a reversal potential mechanism that writes to multiple ions,
+If a reversal potential mechanism writes to multiple ions,
 it must be given for either no ions, or all of the ions it writes.
 
 Arbor's default catalogue includes a *nernst* reversal potential, which is
diff --git a/doc/concepts/labels.rst b/doc/concepts/labels.rst
index cd6a394f..eae960b7 100644
--- a/doc/concepts/labels.rst
+++ b/doc/concepts/labels.rst
@@ -575,7 +575,7 @@ Thingification
 
 When a region or locset expression is applied to a cell morphology, it is represented
 as a list of unbranched :term:`cables <cable>` or a set of :term:`locations <mlocation>` on the morphology.
-This process is called ``thingify`` in arbor, because it turns the abstract description
+This process is called ``thingify`` in Arbor, because it turns the abstract description
 of a :term:`region` or a :term:`locset` into an actual 'thing' when it is applied to a real morphology.
 
 .. note::
@@ -644,7 +644,7 @@ and a :ref:`decor <cablecell-decoration>`. The decorations can be painted or pla
 the regions or locsets defined in the label dictionary by referring to their labels.
 
 .. code-block:: python
-   :caption: Example of a lable dictionary in python:
+   :caption: Example of a label dictionary in python:
 
     arbor.label_dict({
       'soma': '(tag 1)',  # soma is every cable with tag 1 in the morphology.
diff --git a/doc/concepts/mechanisms.rst b/doc/concepts/mechanisms.rst
index 4e1d45a1..14c33b44 100644
--- a/doc/concepts/mechanisms.rst
+++ b/doc/concepts/mechanisms.rst
@@ -47,7 +47,7 @@ Catalogues provide an interface for querying mechanism metadata, which includes
 
 Arbor provides a default catalogue of mechanisms as well as two other catalogues containing the sets of common mechanisms
 used by the `Allen Institute <https://alleninstitute.org/>`_ and the `Blue Brain Project <https://portal.bluebrain.epfl.ch/>`_.
-(Find the NMODL decsriptions of the `default mechanisms <https://github.com/arbor-sim/arbor/tree/master/mechanisms/default>`_,
+(Find the NMODL descriptions of the `default mechanisms <https://github.com/arbor-sim/arbor/tree/master/mechanisms/default>`_,
 the `Allen institute mechanisms <https://github.com/arbor-sim/arbor/tree/master/mechanisms/allen>`_ and
 the `BBP mechanisms <https://github.com/arbor-sim/arbor/tree/master/mechanisms/bbp>`_ at the provided links.)
 
diff --git a/doc/concepts/morphology.rst b/doc/concepts/morphology.rst
index cf5b6758..8a51061d 100644
--- a/doc/concepts/morphology.rst
+++ b/doc/concepts/morphology.rst
@@ -53,7 +53,7 @@ proper definition for a morphology.
    **Field**,      **Type**,                           **Description**
    ``prox``,       :term:`mpoint`,   the centre and radius of the proximal end.
    ``dist``,       :term:`mpoint`,   the centre and radius of the distal end.
-   ``tag``,        integer,              ":term:`tag` meta-data, can be used to classify segments of the same kind (ex: soma, dendrite, but also arbitrary use-defined groups"
+   ``tag``,        integer,              ":term:`tag` meta-data, can be used to classify segments of the same kind (ex: soma, dendrite, but also arbitrary use-defined groups)"
 
 .. figure:: ../gen-images/term_segments.svg
   :width: 300
@@ -131,7 +131,7 @@ Segment trees
     and tools that iteratively construct cell morphologies (e.g. L-system generators, interactive cell-builders).
 
 Segment trees comprise a sequence of segments starting from
-at lease one :term:`root` segment, together with a parent-child adjacency relationship
+at least one :term:`root` segment, together with a parent-child adjacency relationship
 where a child segment is distal to its parent. Branches in the tree occur where a segment
 has more than one child. Furthermore, a segment can not have more than one parent.
 In this manner, neuron morphologies are modelled as a tree, where cables that
@@ -515,7 +515,7 @@ The simplest branching morphology is a cable that bifurcates into two branches,
 which we will call a *y-shaped cell*.
 In the example below, the first branch of the tree is a cable of length 10 μm with a
 a radius that tapers from 1 μm to 0.5 μm.
-The two child branches are attached to the end of the first branch, and taper from from 0.5 μ m
+The two child branches are attached to the end of the first branch, and taper from from 0.5 μm
 to 0.2 μm.
 
 Note that only the distal point is required to describe the child segments,
@@ -537,7 +537,7 @@ radius as the distal end of the parent.
 Example 4: Soma with branches
 """"""""""""""""""""""""""""""
 
-Now let's look at cell with a simple dendritic tree attached to a spherical soma.
+Now let's look at a cell with a simple dendritic tree attached to a spherical soma.
 The spherical soma of radius 3 μm is modelled with a cylinder with length and
 diameter equal to 6 μm, which has the same surface area as the sphere.
 
@@ -568,7 +568,7 @@ in the dendritic tree because the segments have parent child ordering and no for
     and no special treatment is given to the soma.
     There is no need to treat segments with different tags (e.g. tags that we might associate
     with soma, axon, basal dendrite and apical dendrite) when defining geometric primitives like
-    segments and branches, because they can later be referenced later using
+    segments and branches, because they can later be referenced using
     :ref:`region expressions <labels-expressions>`.
 
 Now we can attach another dendrite and an axon to the soma, to make a total of three cables
@@ -576,7 +576,7 @@ attached to the soma (two dendrites and an axon).
 The dendrites are attached to the distal end of the soma (segment 0), so they have the
 0 as their parent.
 The axon is attached to the proximal end of the soma, which is at the root of the tree,
-so it has :data:`mnpos` as its parent.
+so it has :py:data:`mnpos <arbor.mnpos>` as its parent.
 There are 7 branches generated from 10 segments, and soma segment is its own branch,
 because it has two children: the dendrites attached to its distal end.
 
diff --git a/doc/contrib/pr.rst b/doc/contrib/pr.rst
index 01d1d11e..a774b023 100644
--- a/doc/contrib/pr.rst
+++ b/doc/contrib/pr.rst
@@ -58,7 +58,7 @@ Each pull request is reviewed according to these guidelines:
    positive review.
 -  GitHub Actions CI must produce a favourable result on your PR.
 -  An Arbor team member will (squash) merge the PR with the PR change
-   summery as commit message.
+   summary as commit message.
 -  Consider using Gitpod to review larger PRs, see under checks on the Github PR page.
 
 .. _contribpr-merge:
diff --git a/doc/fileformat/asc.rst b/doc/fileformat/asc.rst
index 70d648f1..0fb79f35 100644
--- a/doc/fileformat/asc.rst
+++ b/doc/fileformat/asc.rst
@@ -46,7 +46,7 @@ Arbor supports description methods 1 and 2 following the `neuromporpho policies
 Currently multiple contours in method 3 are not supported, and if you need support make
 the request with an `issue <https://github.com/arbor-sim/arbor/issues>`_.
 
-In each case, the soma is modeled as a cylinder with diameter equal to it's length, centred
+In each case, the soma is modeled as a cylinder with diameter equal to its length, centred
 at the centre of the soma, and oriented along the y axis.
 
 For a **spherical** soma, the centre and diameter are that of the sphere. For
diff --git a/doc/fileformat/neuroml.rst b/doc/fileformat/neuroml.rst
index 9c3347af..7ae99f6d 100644
--- a/doc/fileformat/neuroml.rst
+++ b/doc/fileformat/neuroml.rst
@@ -5,10 +5,10 @@ NeuroML2
 
 Arbor offers limited support for models described in `NeuroML version 2 <https://neuroml.org/neuromlv2>`_.
 This is not built by default (see :ref:`NeuroML support <install-neuroml>` for instructions on how
-to build arbor with NeuroML).
+to build Arbor with NeuroML).
 
 Once support is enabled, Arbor is able to parse and check the validity of morphologies described in NeuroML files,
-and present the encoded data to the user.  This is more than a simple a `segment tree`.
+and present the encoded data to the user.  This is more than a simple `segment tree`.
 
 NeuroML can encode in the same file multiple top-level morphologies, as well as cells:
 
@@ -34,7 +34,7 @@ Example
    </cell>
    </neuroml>
 
-The above NeuroML description defines 2 top-level morphologies ``m1`` and ``m2`` (empty); a cell ``c1`` that uses
+The above NeuroML description defines two top-level morphologies ``m1`` and ``m2`` (empty); a cell ``c1`` that uses
 morphology ``m1``; and a cell ``c2`` that uses an internally defined (empty) morphology ``m3``.
 
 Arbor can query the cells and morphologies using their ids and return all the associated morphological data for each.
@@ -46,4 +46,4 @@ API
 ^^^
 
 * :ref:`Python <pyneuroml>`
-* :ref:`C++ <cppneuroml>`
\ No newline at end of file
+* :ref:`C++ <cppneuroml>`
diff --git a/doc/fileformat/swc.rst b/doc/fileformat/swc.rst
index b4d7048b..953cc4e3 100644
--- a/doc/fileformat/swc.rst
+++ b/doc/fileformat/swc.rst
@@ -14,7 +14,7 @@ an `x,y,z` location in space, a radius, a tag and a parent id. Arbor parses thes
 then generates a morphology according to one of three possible interpretations.
 
 The SWC file format specifications are not very detailed, which has lead different simulators to interpret
-SWC files in different ways, especially when it comes to the soma. Arbor has its own an interpretation that
+SWC files in different ways, especially when it comes to the soma. Arbor has its own interpretation that
 is powerful and simple to understand at the same time. However, we have also developed functions that will
 interpret SWC files similarly to how the NEURON simulator would, and how the Allen Institute would.
 
@@ -32,7 +32,7 @@ is interpreted as a fork point in the morphology, and acts as the proximal point
 
 Arbor interpretation
 """"""""""""""""""""
-In addition to the previously listed checks, the arbor interpretation explicitly disallows SWC files where the soma is
+In addition to the previously listed checks, the Arbor interpretation explicitly disallows SWC files where the soma is
 described by a single sample. It constructs the soma from 2 or more samples, forming 1 or more segments. A *segment* is
 always constructed between a sample and its parent. This means that there are no gaps in the resulting morphology.
 
@@ -74,7 +74,7 @@ and all samples are translated in space towards the origin.
 NEURON interpretation
 """""""""""""""""""""
 The NEURON interpretation was obtained by experimenting with the ``Import3d_SWC_read`` function. We came up with the
-following set of rules that govern NEURON's SWC behavior and enforced them in arbor's NEURON-complaint SWC
+following set of rules that govern NEURON's SWC behavior and enforce them in Arbor's NEURON-complaint SWC
 interpreter:
 
 * SWC files must contain a soma sample and it must to be the first sample.
@@ -95,4 +95,4 @@ API
 """
 
 * :ref:`Python <pyswc>`
-* :ref:`C++ <cppswc>`
\ No newline at end of file
+* :ref:`C++ <cppswc>`
diff --git a/doc/math/model/appendix.tex b/doc/math/model/appendix.tex
index 81a04377..2b7e211e 100644
--- a/doc/math/model/appendix.tex
+++ b/doc/math/model/appendix.tex
@@ -1,7 +1,7 @@
 %-----------------------------------
-\subsection{The conic frustrum}
+\subsection{The conic frustum}
 %-----------------------------------
-The derivation of the surface area of conic frustrum.
+The derivation of the surface area of conic frustum.
 The edge length $l$ is defined
 \begin{equation}
     l = \sqrt{(x_r - x_l)^2 + (a_r - a_l)^2} = \sqrt{\Delta x^2 + \Delta a^2}.
@@ -13,7 +13,7 @@ The lateral area of the surface is found by integrating along surface of rotatio
         &= 2\pi \int_{0}^{l} {a_{\ell} + \frac{s}{l}\left( a_r - a_\ell \right)} \deriv{s} \nonumber \\
         &= 2\pi \left[ a_{\ell}s + \frac{s^2}{2l}\left( a_r - a_\ell \right) \right]_0^l \nonumber \\
         &= \pi l \left( a_{\ell} + a_r \right) \nonumber \\
-        &= \pi \left( a_{\ell} + a_r \right) \sqrt{\Delta x^2 + \Delta a^2}. \label{eq:frustrum_area}
+        &= \pi \left( a_{\ell} + a_r \right) \sqrt{\Delta x^2 + \Delta a^2}. \label{eq:frustum_area}
 \end{align}
 
 There are two degenerate cases of interest. The first is the \emph{cylinder}, for which the radii at each end are euqal, i.e. $a_\ell = a_r = a$. In this case the lateral area of the surface is
diff --git a/doc/math/model/formulation.tex b/doc/math/model/formulation.tex
index 8db5184e..ca58f00b 100644
--- a/doc/math/model/formulation.tex
+++ b/doc/math/model/formulation.tex
@@ -93,7 +93,7 @@ The current, which is the conserved quantity in our conservation law, over the s
 This is derived from a thin film approximation to the cell membrane, whereby the membrane is treated as an infinitesimally thin interface between the intra and extra cellular regions.
 
 Note that some information is lost when going from a three-dimensional description of a neuron to a system of branching one-dimensional cable segments.
-If the cell is represented by cylinders or frustrums\footnote{a frustrum is a truncated cone, where the truncation plane is parallel to the base of the cone.}, the three-dimensional values for volume and surface area at branch points can't be retrieved from the one-dimensional description.
+If the cell is represented by cylinders or frustums\footnote{a frustum is a truncated cone, where the truncation plane is parallel to the base of the cone.}, the three-dimensional values for volume and surface area at branch points can't be retrieved from the one-dimensional description.
 
 \begin{figure}
     \begin{center}
@@ -201,14 +201,14 @@ The current terms are an average per unit area, therefore the total flux
 \end{equation}
 where $\sigma_i$ is the surface area the of the exterior of the cable segment, i.e. the surface corresponding to the cell membrane.
 
-Each cable segment is a conical frustrum, as illustrated in \fig{fig:segment}.
-The lateral surface area of a frustrum with height $\Delta x_i$ and radii of  is
+Each cable segment is a conical frustum, as illustrated in \fig{fig:segment}.
+The lateral surface area of a frustum with height $\Delta x_i$ and radii of  is
 The area of the external surface $\Gamma_{i}$ is
 \begin{equation}
     \sigma_i = \pi (a_{i,\ell} + a_{i,r}) \sqrt{\Delta x_i^2 + (a_{i,\ell} - a_{i,r})^2},
     \label{eq:cv_volume}
 \end{equation}
-where $a_{i,\ell}$ and $a_{i,r}$ are the radii of at the left and right end of the segment respectively (see~\eq{eq:frustrum_area} for derivation of this formula).
+where $a_{i,\ell}$ and $a_{i,r}$ are the radii of at the left and right end of the segment respectively (see~\eq{eq:frustum_area} for derivation of this formula).
 %-------------------------------------------------------------------------------
 \subsubsection{Putting it all together}
 %-------------------------------------------------------------------------------
@@ -228,7 +228,7 @@ is the area of the surface between two adjacent segments $i$ and $j$, and
     \sigma_{i}   = \pi(a_{i,\ell} + a_{i,r}) \sqrt{\Delta x_i^2 + (a_{i,\ell} - a_{i,r})^2},
     \label{eq:sigma_i}
 \end{equation}
-is the lateral area of the conical frustrum describing segment $i$.
+is the lateral area of the conical frustum describing segment $i$.
 
 %-------------------------------------------------------------------------------
 \subsubsection{Time Stepping}
diff --git a/doc/tutorial/index.rst b/doc/tutorial/index.rst
index d5cc95d8..ce94e4dd 100644
--- a/doc/tutorial/index.rst
+++ b/doc/tutorial/index.rst
@@ -11,7 +11,7 @@ Tutorials
     installed independently from Arbor.
 
     In an interactive Python interpreter, you can use ``help()`` on any class or function to get its
-    documentation. (Try, ``help(arbor.simulation``, for example).
+    documentation. (Try, ``help(arbor.simulation)``, for example).
 
 .. Todo::
     Add more in-depth tutorial-like pages building up examples here.
diff --git a/doc/tutorial/network_ring.rst b/doc/tutorial/network_ring.rst
index d0db20cf..8401e839 100644
--- a/doc/tutorial/network_ring.rst
+++ b/doc/tutorial/network_ring.rst
@@ -65,7 +65,7 @@ These locations will form the endpoints of the connections between the cells.
 After we've created a basic :py:class:`arbor.decor`, step **(3)** places a synapse with an exponential decay (``'expsyn'``) is on the ``'synapse_site'``.
 Note that mechanisms can be initialized with their name; ``'expsyn'`` is short for ``arbor.mechanism('expsyn')``.
 
-Step **(4)** places a spike detector at the ``'root'``. :py:class:`spike_detectors <spike_detector>` will send spikes into an
+Step **(4)** places a spike detector at the ``'root'``. :py:class:`spike_detectors <arbor.spike_detector>` will send spikes into an
 :class:`arbor.connection`, whereas the :ref:`expsyn mechanism <mechanisms_builtins>` can receive spikes from an
 :class:`arbor.connection`.
 
@@ -195,8 +195,8 @@ In addition to having the timestamps of spikes, we want to extract the voltage a
 Step **(14)** sets the probes (step **10**) to measure at a certain schedule. This is sometimes described as
 attaching a :term:`sampler` to a :term:`probe`. :py:func:`arbor.simulation.sample` expects a :term:`probe id` and the
 desired schedule (here: a recording frequency of 10 kHz). Note that the probe id is a separate index from those of
-:term:`connection` endpoints; probe ids correspond to the index of the list produced by :py:func:`arbor.recipe.
-probes` on cell ``gid``.
+:term:`connection` endpoints; probe ids correspond to the index of the list produced by
+:py:func:`arbor.recipe.probes` on cell ``gid``.
 
 :py:func:`arbor.simulation.sample` returns a handle to the :term:`samples <sample>` that will be recorded. We store
 these handles for later use.
diff --git a/doc/tutorial/single_cell_detailed.rst b/doc/tutorial/single_cell_detailed.rst
index 4655cd1b..ba0b0f8c 100644
--- a/doc/tutorial/single_cell_detailed.rst
+++ b/doc/tutorial/single_cell_detailed.rst
@@ -137,7 +137,7 @@ The label dictionary
 
 Next, we can define **region** and **location** expressions and give them labels.
 The regions and locations are defined using an Arbor-specific DSL, and the labels
-can be stored in a :class:`arbor.lable_dict`.
+can be stored in a :class:`arbor.label_dict`.
 
 .. Note::
 
@@ -157,7 +157,7 @@ defined as follows:
 
 .. code-block:: python
 
-    #Create a label dictionary
+    # Create a label dictionary
 
     labels = arbor.label_dict()
 
@@ -291,7 +291,7 @@ by the density mechanisms that we will be adding shortly.
 For both ions we set the default initial concentration and external concentration measures in mM;
 and we set the default initial reversal potential in mV. For the *na* ion, we additionally indicate
 the the progression on the reversal potential during the simulation will be dictated by the
-`nernst equation <https://en.wikipedia.org/wiki/Nernst_equation>`_.
+`Nernst equation <https://en.wikipedia.org/wiki/Nernst_equation>`_.
 
 It happens, however, that we want the temperature of the "custom" region defined in the label
 dictionary earlier to be colder, and the initial voltage of the "soma" region to be higher.
@@ -360,7 +360,7 @@ to be a single CV, and the rest of the morphology to be comprised of CVs with a
 The model
 *********
 
-We begin by constructing a :class:`arbor.single_cell_model` of the cell we just created.
+We begin by constructing an :class:`arbor.single_cell_model` of the cell we just created.
 
 .. code-block:: python
 
@@ -502,4 +502,4 @@ corresponding to each of the current clamps placed on the cell.
 
 The full code
 *************
-You can find the full code of the example at ``python/examples/single_cell_detailed.py``.
\ No newline at end of file
+You can find the full code of the example at ``python/examples/single_cell_detailed.py``.
diff --git a/doc/tutorial/single_cell_detailed_recipe.rst b/doc/tutorial/single_cell_detailed_recipe.rst
index 8f5b7791..f12580b0 100644
--- a/doc/tutorial/single_cell_detailed_recipe.rst
+++ b/doc/tutorial/single_cell_detailed_recipe.rst
@@ -194,7 +194,7 @@ Let's go through the recipe point by point.
 Step **(1)** creates a ``single_recipe`` class that inherits from :class:`arbor.recipe`. The base recipe
 implements all the methods defined above with default values except :meth:`arbor.recipe.num_cells`,
 :meth:`arbor.recipe.cell_kind` and :meth:`arbor.recipe.cell_description` which always have to be implemented
-by the user. The :meth:`arbor.recipe.gloabl_properties` also needs to be implemented for
+by the user. The :meth:`arbor.recipe.global_properties` also needs to be implemented for
 :class:`arbor.cell_kind.cable` cells. The inherited recipe can implement any number of additional methods and
 have any number of instance or class variables.
 
@@ -218,7 +218,7 @@ what we did in the :ref:`previous example <tutorialsinglecellswc-gprop>`. One la
    The mechanism catalogue needs to live in the recipe as an instance variable. Its lifetime needs to extend
    to the entire duration of the simulation.
 
-Step **(3)** overrides the :meth:`arbor.recipe.num_cells` method. It takes 0 arguments. We simply return 1,
+Step **(3)** overrides the :meth:`arbor.recipe.num_cells` method. It takes no arguments. We simply return 1,
 as we are only simulating one cell in this example.
 
 Step **(4)** overrides the :meth:`arbor.recipe.num_sources` method. It takes one argument: ``gid``.
@@ -284,7 +284,7 @@ previous section:
 The execution context
 *********************
 
-An :ref:`execution context <modelcontext>`_ describes the hardware resources on which the simulation will run.
+An :ref:`execution context <modelcontext>` describes the hardware resources on which the simulation will run.
 It contains the thread pool used to parallelise work on the local CPU, and optionally describes GPU resources
 and the MPI communicator for distributed simulations. In the previous
 examples, the :class:`arbor.single_cell_model` object created the execution context :class:`arbor.context`
@@ -354,7 +354,7 @@ Next, we instructed the simulation to sample ``probe_id`` at a frequency of 50 k
 The execution
 *************
 
-We can now run the simulation we just instantiated for a duration of 100ms with a time step of 0.025 ms.
+We can now run the simulation we just instantiated for a duration of 100 ms with a time step of 0.025 ms.
 
 .. code-block:: python
 
@@ -416,4 +416,4 @@ The following plot is generated. Identical to the plot of the previous example.
 The full code
 *************
 
-You can find the full code of the example at ``python/examples/single_cell_detailed_recipe.py``.
\ No newline at end of file
+You can find the full code of the example at ``python/examples/single_cell_detailed_recipe.py``.
diff --git a/doc/tutorial/single_cell_recipe.rst b/doc/tutorial/single_cell_recipe.rst
index 54ab8ae5..43a152f3 100644
--- a/doc/tutorial/single_cell_recipe.rst
+++ b/doc/tutorial/single_cell_recipe.rst
@@ -114,8 +114,8 @@ and descriptions.
 
 Step **(4.5)** returns the cell description passed in on class initialisation. If we
 were modelling multiple cells of different kinds, we would need to make sure that the
-cell returned by :meth:arbor.recipe.cell_description has the same cell kind as
-returned by :meth:arbor.recipe.cell_kind for every :gen:gid.
+cell returned by :meth:`arbor.recipe.cell_description` has the same cell kind as
+returned by :meth:`arbor.recipe.cell_kind` for every :gen:`gid`.
 
 Step **(4.6)** returns the probes passed in at class initialisation.
 
@@ -131,10 +131,10 @@ The context and domain decomposition
 :class:`arbor.single_cell_model` does not only take care of the recipe, it also takes
 care of defining how the simulation will be run. When you create and use your own
 recipe, you'll need to do this manually, in the form of defining a execution context
-and a domain decomposition. Fortunately, the default constructors of :class:`arbor.
-context` and :class:`arbor.partition_load_balance` are sufficient for this model, and
-is what :class:`arbor.single_cell_model` does under the hood! We'll leave the details
-of this subject for another tutorial.
+and a domain decomposition. Fortunately, the default constructors of
+:class:`arbor.context` and :class:`arbor.partition_load_balance` are sufficient for
+this model, and is what :class:`arbor.single_cell_model` does under the hood! We'll
+leave the details of this subject for another tutorial.
 
 .. code-block:: python
 
-- 
GitLab