Repository: PlasmaPy/PlasmaPy

Issue:
Create a documentation-wide bibliography page
One possibility worth considering for PlasmaPy's online documentation would be to create a single page that would act as the bibliography for the documentation and package.  Here's a first attempt at a tradeoff analysis:

**Advantages**
* References would have a consistent reference code throughout the documentation.
* Anyone adding a reference would be able to find examples nearby rather than having to go to the doc guide or use their own style.
* Newly added references would be more likely to follow the pattern and style of existing references.
* References would be easier to maintain.
* Putting references in one place would make it more practical to include them in Zenodo records, which in turn would connect PlasmaPy records to other relevant records in portals like NASA ADS.

**Disadvantages**
* References would not show up in the docstring when using `help`
  * A naming convention that includes the author and year would reduce this disadvantage, i.e.  [[ZagerEvans2525]](https://www.youtube.com/watch?v=izQB2-Kmiic)
  * Someone would have to go online anyway to access the resource.
* Would be less convenient to find references that are only needed once.


Discussion:
I attempted having a `bibliography.rst` page in the docs in #1163, but decided to keep that PR separate from this issue.  It was really straightforward to get it to work, but I decided that adding a project-wide bibliography page should happen at the same time as the corresponding updates to the doc guide.  I don't want the doc guide to become out-of-date after just a few weeks!
I'll leave the one liner that greps for the references I came up with during the telecon here, as it seems relevant:

```bash
rg -A 6 References
```

`rg` being https://github.com/BurntSushi/ripgrep; `-A 6` tells it to print out 6 lines after the `References` line.
Some of the relevant documentation is from the reStructuredText standard:
 - [Citation References](https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#citation-references)
 - [Citations](https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#citations)

Here's also [a reference from the Sphinx docs on citations](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html?highlight=citations#citations).
Another reason why a documentation-wide bibliography page would be useful...  We have some references that are used repeatedly, like `[Boris1970]_` and `[BirdsallLangdon2004]_`. Putting them all in one place would help us with [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself).

Resolving patch:
diff --git a/docs/conf.py b/docs/conf.py
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -67,8 +67,13 @@
     "IPython.sphinxext.ipython_console_highlighting",
     "sphinx_changelog",
     "plasmapy_sphinx",
+    "sphinxcontrib.bibtex",
 ]
 
+bibtex_bibfiles = ["bibliography.bib"]
+bibtex_default_style = "plain"
+bibtex_reference_style = "author_year"
+
 # Intersphinx generates automatic links to the documentation of objects
 # in other packages. When mappings are removed or added, please update
 # the section in docs/doc_guide.rst on references to other packages.
diff --git a/plasmapy/dispersion/dispersionfunction.py b/plasmapy/dispersion/dispersionfunction.py
--- a/plasmapy/dispersion/dispersionfunction.py
+++ b/plasmapy/dispersion/dispersionfunction.py
@@ -52,19 +52,13 @@ def plasma_dispersion_func(
         Z(\zeta) = \pi^{-0.5} \int_{-\infty}^{+\infty}
         \frac{e^{-x^2}}{x-\zeta} dx
 
-    where the argument is a complex number [#]_.
+    where the argument is a complex number :cite:p:`fried:1961`.
 
     In plasma wave theory, the plasma dispersion function appears
     frequently when the background medium has a Maxwellian
     distribution function.  The argument of this function then refers
     to the ratio of a wave's phase velocity to a thermal velocity.
 
-    References
-    ----------
-    .. [#] Fried, Burton D. and Samuel D. Conte. 1961.
-       The Plasma Dispersion Function: The Hilbert Transformation of the
-       Gaussian. Academic Press (New York and London). ISBN 9781483261737
-
     Examples
     --------
     >>> plasma_dispersion_func(0)
@@ -141,13 +135,7 @@ def plasma_dispersion_func_deriv(
         Z'(\zeta) = \pi^{-1/2} \int_{-\infty}^{+\infty}
         \frac{e^{-x^2}}{(x-\zeta)^2} dx
 
-    where the argument is a complex number [#]_.
-
-    References
-    ----------
-    .. [#] Fried, Burton D. and Samuel D. Conte. 1961.
-       The Plasma Dispersion Function: The Hilbert Transformation of the
-       Gaussian. Academic Press (New York and London). ISBN 9781483261737
+    where the argument is a complex number :cite:p:`fried:1961`.
 
     Examples
     --------
diff --git a/plasmapy/formulary/parameters.py b/plasmapy/formulary/parameters.py
--- a/plasmapy/formulary/parameters.py
+++ b/plasmapy/formulary/parameters.py
@@ -222,7 +222,7 @@ def Alfven_speed(
     where :math:`B` is the magnetic field and :math:`ρ = n_i m_i + n_e m_e`
     is the total mass density (:math:`n_i` is the ion number density,
     :math:`n_e` is the electron number density, :math:`m_i` is the ion mass,
-    and :math:`m_e` is the electron mass).
+    and :math:`m_e` is the electron mass) :cite:p:`alfven:1942`.
 
     **Aliases:** `va_`
 
@@ -253,7 +253,7 @@ def Alfven_speed(
     Returns
     -------
     V_A : `~astropy.units.Quantity`
-        The Alfvén speed in units m s\ :sup:`-1`.
+        The Alfvén speed in units of m s\ :sup:`-1`.
 
     Raises
     ------
@@ -1927,9 +1927,10 @@ def Bohm_diffusion(T_e: u.K, B: u.T) -> u.m ** 2 / u.s:
 
     The Bohm diffusion coefficient was conjectured to follow Bohm model
     of the diffusion of plasma across a magnetic field and describe the
-    diffusion of early fusion energy machines. The rate predicted by
-    Bohm diffusion is much higher than classical diffusion, and if there
-    were no exceptions, magnetically confined fusion would be impractical.
+    diffusion of early fusion energy machines :cite:p:`bohm:1949`. The
+    rate predicted by Bohm diffusion is much higher than classical
+    diffusion, and if there were no exceptions, magnetically confined
+    fusion would be impractical.
 
     .. math::
 


Test patch:
diff --git a/docs/development/testing_guide.rst b/docs/development/testing_guide.rst
--- a/docs/development/testing_guide.rst
+++ b/docs/development/testing_guide.rst
@@ -31,10 +31,10 @@ the bottom of each pull request. Click on *Details* next to each test
 run to find the reason for any test failures.
 
 A |unit test| verifies a single unit of behavior, does it quickly, and
-does it in isolation from other tests [Khorikov2020]_. A typical
+does it in isolation from other tests :cite:p:`khorikov:2020`. A typical
 |unit test| is broken up into three parts: *arrange*, *act*, and
-*assert* [Osherove2013]_. An |integration test| verifies that multiple
-software components work together as intended.
+*assert* :cite:p:`osherove:2013`. An |integration test| verifies that
+multiple software components work together as intended.
 
 PlasmaPy's tests are set up using the pytest_ framework. The tests for
 a subpackage are located in its :file:`tests` subdirectory in files with
@@ -571,13 +571,14 @@ should be balanced with each other rather than absolute principles.
   sections of code before running tests, then we will have a much
   harder time isolating the section of code causing problems.
 
-* **Turn bugs into test cases** [Wilson2014]_. It is said that "every
-  every bug exists because of a missing test" [Bernstein2015]_. After
-  finding a bug, write a minimal failing test that reproduces that bug.
-  Then fix the bug to get the test to pass. Keeping the new test in the
-  test suite will prevent the same bug from being introduced again.
-  Because bugs tend to be clustered around each other, consider adding
-  tests related to the functionality affected by the bug.
+* **Turn bugs into test cases** :cite:p:`wilson:2014`. It is said that
+  "every every bug exists because of a missing test"
+  :cite:p:`bernstein:2015`. After finding a bug, write a minimal failing
+  test that reproduces that bug. Then fix the bug to get the test to
+  pass. Keeping the new test in the test suite will prevent the same bug
+  from being introduced again. Because bugs tend to be clustered around
+  each other, consider adding tests related to the functionality
+  affected by the bug.
 
 * **Make tests fast.** Tests are most valuable when they provide
   immediate feedback. A test suite that takes a long time to run
@@ -653,25 +654,7 @@ should be balanced with each other rather than absolute principles.
 
 * If the *act* phase of a |unit test| is more than a single line of
   code, consider revising the functionality being tested so that it can
-  be called in a single line of code [Khorikov2020]_.
-
-.. [Bernstein2015] D. S. Bernstein, `Beyond Legacy Code: Nine Practices
-   to Extend the Life (and Value) of Your Software
-   <https://pragprog.com/titles/dblegacy/beyond-legacy-code>`_
-   (Pragmatic Bookshelf, 2015, 1st ed.)
-
-.. [Khorikov2020] V. Khorikov, `Unit Testing Principles, Practices, and Patterns
-   <https://www.manning.com/books/unit-testing>`_ (Manning Press, 2020, 1st ed.)
-
-.. [Osherove2013] R. Osherove, `The Art of Unit Testing: With Examples in .NET
-   <https://www.manning.com/books/the-art-of-unit-testing-second-edition>`_
-   (Manning Press, 2013, 2nd ed.)
-
-.. [Wilson2014] G. Wilson, D. A. Aruliah, C. T. Brown, N. P. Chue Hong,
-   M. Davis, R. T. Guy, S. H. D. Haddock, K. D. Huff, I. M. Mitchell,
-   M. D. Plumbley, B. Waugh, E. P. White, P. Wilson, `Best practices for
-   scientific computing <https://doi.org/10.1371/journal.pbio.1001745>`_,
-   PLoS Biology, 12, 1, e1001745 (2014), doi: 10.1371/journal.pbio.1001745
+  be called in a single line of code :cite:p:`khorikov:2020`.
 
 .. |integration test| replace:: :term:`integration test`
 .. |unit test| replace:: :term:`unit test`