We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Add better title for projections.rst?
The title of [projections.rst](https://github.com/SciTools/cartopy/blob/main/docs/source/reference/projections.rst) is currently "PlateCarree" - I think this is sub-optimal (I had trouble finding the overview...). I think the title should be Projections and all other titles moved one level down.

https://github.com/SciTools/cartopy/blob/main/docs/source/reference/projections.rst

![image](https://user-images.githubusercontent.com/10194086/149549647-690248ff-3d01-4858-a3a6-f1cd9759e71d.png)

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `docs/make_projection.py`
Content:
```
1 # Copyright Cartopy Contributors
2 #
3 # This file is part of Cartopy and is released under the LGPL license.
4 # See COPYING and COPYING.LESSER in the root of the repository for full
5 # licensing details.
6 
7 import os
8 import inspect
9 import textwrap
10 import numpy as np
11 import cartopy.crs as ccrs
12 
13 #: A dictionary to allow examples to use non-default parameters to the CRS
14 #: constructor.
15 SPECIFIC_PROJECTION_KWARGS = {
16     ccrs.RotatedPole: {'pole_longitude': 177.5, 'pole_latitude': 37.5},
17     ccrs.AzimuthalEquidistant: {'central_latitude': 90},
18     ccrs.NearsidePerspective: {
19         'central_longitude': -3.53, 'central_latitude': 50.72,
20         'satellite_height': 10.0e6},
21     ccrs.OSGB: {'approx': False},
22     ccrs.OSNI: {'approx': False},
23     ccrs.TransverseMercator: {'approx': False},
24 }
25 
26 
27 def plate_carree_plot():
28     import matplotlib.pyplot as plt
29     import cartopy.crs as ccrs
30 
31     nplots = 2
32 
33     fig = plt.figure(figsize=(6, 6))
34 
35     for i in range(0, nplots):
36         central_longitude = 0 if i == 0 else 180
37         ax = fig.add_subplot(
38             nplots, 1, i+1,
39             projection=ccrs.PlateCarree(central_longitude=central_longitude))
40         ax.coastlines(resolution='110m')
41         ax.gridlines()
42 
43 
44 def igh_plot():
45     import matplotlib.pyplot as plt
46     import cartopy.crs as ccrs
47 
48     fig = plt.figure(figsize=(6.9228, 6))
49 
50     ax1 = fig.add_subplot(2, 1, 1,
51                           projection=ccrs.InterruptedGoodeHomolosine(
52                               emphasis='land'))
53     ax1.coastlines(resolution='110m')
54     ax1.gridlines()
55 
56     ax2 = fig.add_subplot(2, 1, 2,
57                           projection=ccrs.InterruptedGoodeHomolosine(
58                               central_longitude=-160, emphasis='ocean'))
59     ax2.coastlines(resolution='110m')
60     ax2.gridlines()
61 
62 
63 def utm_plot():
64     import matplotlib.pyplot as plt
65     import cartopy.crs as ccrs
66 
67     nplots = 60
68 
69     fig = plt.figure(figsize=(10, 3))
70 
71     for i in range(0, nplots):
72         ax = fig.add_subplot(1, nplots, i+1,
73                              projection=ccrs.UTM(zone=i+1,
74                                                  southern_hemisphere=True))
75         ax.coastlines(resolution='110m')
76         ax.gridlines()
77 
78 
79 MULTI_PLOT_CASES = {
80     ccrs.PlateCarree: plate_carree_plot,
81     ccrs.InterruptedGoodeHomolosine: igh_plot,
82     ccrs.UTM: utm_plot,
83 }
84 
85 
86 COASTLINE_RESOLUTION = {ccrs.OSNI: '10m',
87                         ccrs.OSGB: '50m',
88                         ccrs.EuroPP: '50m'}
89 
90 
91 PRJ_SORT_ORDER = {'PlateCarree': 1,
92                   'Mercator': 2, 'Mollweide': 2, 'Robinson': 2,
93                   'TransverseMercator': 2, 'LambertCylindrical': 2,
94                   'LambertConformal': 2, 'EquidistantConic': 2,
95                   'Stereographic': 2, 'Miller': 2,
96                   'Orthographic': 2, 'UTM': 2, 'AlbersEqualArea': 2,
97                   'AzimuthalEquidistant': 2, 'Sinusoidal': 2,
98                   'InterruptedGoodeHomolosine': 3, 'RotatedPole': 3,
99                   'OSGB': 4, 'EuroPP': 5,
100                   'Geostationary': 6, 'NearsidePerspective': 7,
101                   'EckertI': 8.1, 'EckertII': 8.2, 'EckertIII': 8.3,
102                   'EckertIV': 8.4, 'EckertV': 8.5, 'EckertVI': 8.6}
103 
104 
105 def find_projections():
106     for obj_name, o in vars(ccrs).copy().items():
107         if isinstance(o, type) and issubclass(o, ccrs.Projection) and \
108            not obj_name.startswith('_') and obj_name not in ['Projection']:
109 
110             yield o
111 
112 
113 def create_instance(prj_cls, instance_args):
114     name = prj_cls.__name__
115 
116     # Format instance arguments into strings
117     instance_params = ',\n                            '.join(
118         f'{k}={v}'
119         for k, v in sorted(instance_args.items()))
120 
121     if instance_params:
122         instance_params = '\n                            ' \
123                           + instance_params
124 
125     instance_creation_code = f'{name}({instance_params})'
126 
127     prj_inst = prj(**instance_args)
128 
129     return prj_inst, instance_creation_code
130 
131 
132 if __name__ == '__main__':
133     fname = os.path.join(os.path.dirname(__file__), 'source',
134                          'reference', 'projections.rst')
135     table = open(fname, 'w')
136 
137     notes = """
138         .. (comment): DO NOT EDIT this file.
139         .. It is auto-generated by running : cartopy/docs/make_projection.py
140         .. Please adjust by making changes there.
141         .. It is included in the repository only to aid detection of changes.
142 
143         .. _cartopy_projections:
144 
145         """
146     table.write(textwrap.dedent(notes))
147 
148     def prj_class_sorter(cls):
149         return (PRJ_SORT_ORDER.get(cls.__name__, 100),
150                 cls.__name__)
151 
152     for prj in sorted(find_projections(), key=prj_class_sorter):
153         name = prj.__name__
154 
155         table.write(name + '\n')
156         table.write('-' * len(name) + '\n\n')
157 
158         table.write('.. autoclass:: cartopy.crs.%s\n' % name)
159 
160         if prj not in MULTI_PLOT_CASES:
161             # Get instance arguments and number of plots
162             instance_args = SPECIFIC_PROJECTION_KWARGS.get(prj, {})
163 
164             prj_inst, instance_repr = create_instance(prj, instance_args)
165 
166             aspect = (np.diff(prj_inst.x_limits) /
167                       np.diff(prj_inst.y_limits))[0]
168 
169             width = 3 * aspect
170             width = f'{width:.4f}'.rstrip('0').rstrip('.')
171 
172             # Generate plotting code
173             code = textwrap.dedent("""
174             .. plot::
175 
176                 import matplotlib.pyplot as plt
177                 import cartopy.crs as ccrs
178 
179                 plt.figure(figsize=({width}, 3))
180                 ax = plt.axes(projection=ccrs.{proj_constructor})
181                 ax.coastlines(resolution={coastline_resolution!r})
182                 ax.gridlines()
183 
184 
185             """).format(width=width,
186                         proj_constructor=instance_repr,
187                         coastline_resolution=COASTLINE_RESOLUTION.get(prj,
188                                                                       '110m'))
189 
190         else:
191             func = MULTI_PLOT_CASES[prj]
192 
193             lines = inspect.getsourcelines(func)
194             func_code = "".join(lines[0][1:])
195 
196             code = textwrap.dedent("""
197             .. plot::
198 
199             {func_code}
200 
201             """).format(func_code=func_code)
202 
203         table.write(code)
204
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/docs/make_projection.py b/docs/make_projection.py
--- a/docs/make_projection.py
+++ b/docs/make_projection.py
@@ -134,7 +134,7 @@
                          'reference', 'projections.rst')
     table = open(fname, 'w')
 
-    notes = """
+    header = """
         .. (comment): DO NOT EDIT this file.
         .. It is auto-generated by running : cartopy/docs/make_projection.py
         .. Please adjust by making changes there.
@@ -142,8 +142,13 @@
 
         .. _cartopy_projections:
 
+        Cartopy projection list
+        =======================
+
+
         """
-    table.write(textwrap.dedent(notes))
+
+    table.write(textwrap.dedent(header))
 
     def prj_class_sorter(cls):
         return (PRJ_SORT_ORDER.get(cls.__name__, 100),

{"golden_diff": "diff --git a/docs/make_projection.py b/docs/make_projection.py\n--- a/docs/make_projection.py\n+++ b/docs/make_projection.py\n@@ -134,7 +134,7 @@\n                          'reference', 'projections.rst')\n     table = open(fname, 'w')\n \n-    notes = \"\"\"\n+    header = \"\"\"\n         .. (comment): DO NOT EDIT this file.\n         .. It is auto-generated by running : cartopy/docs/make_projection.py\n         .. Please adjust by making changes there.\n@@ -142,8 +142,13 @@\n \n         .. _cartopy_projections:\n \n+        Cartopy projection list\n+        =======================\n+\n+\n         \"\"\"\n-    table.write(textwrap.dedent(notes))\n+\n+    table.write(textwrap.dedent(header))\n \n     def prj_class_sorter(cls):\n         return (PRJ_SORT_ORDER.get(cls.__name__, 100),\n", "issue": "Add better title for projections.rst?\nThe title of [projections.rst](https://github.com/SciTools/cartopy/blob/main/docs/source/reference/projections.rst) is currently \"PlateCarree\" - I think this is sub-optimal (I had trouble finding the overview...). I think the title should be Projections and all other titles moved one level down.\r\n\r\nhttps://github.com/SciTools/cartopy/blob/main/docs/source/reference/projections.rst\r\n\r\n![image](https://user-images.githubusercontent.com/10194086/149549647-690248ff-3d01-4858-a3a6-f1cd9759e71d.png)\n", "before_files": [{"content": "# Copyright Cartopy Contributors\n#\n# This file is part of Cartopy and is released under the LGPL license.\n# See COPYING and COPYING.LESSER in the root of the repository for full\n# licensing details.\n\nimport os\nimport inspect\nimport textwrap\nimport numpy as np\nimport cartopy.crs as ccrs\n\n#: A dictionary to allow examples to use non-default parameters to the CRS\n#: constructor.\nSPECIFIC_PROJECTION_KWARGS = {\n    ccrs.RotatedPole: {'pole_longitude': 177.5, 'pole_latitude': 37.5},\n    ccrs.AzimuthalEquidistant: {'central_latitude': 90},\n    ccrs.NearsidePerspective: {\n        'central_longitude': -3.53, 'central_latitude': 50.72,\n        'satellite_height': 10.0e6},\n    ccrs.OSGB: {'approx': False},\n    ccrs.OSNI: {'approx': False},\n    ccrs.TransverseMercator: {'approx': False},\n}\n\n\ndef plate_carree_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    nplots = 2\n\n    fig = plt.figure(figsize=(6, 6))\n\n    for i in range(0, nplots):\n        central_longitude = 0 if i == 0 else 180\n        ax = fig.add_subplot(\n            nplots, 1, i+1,\n            projection=ccrs.PlateCarree(central_longitude=central_longitude))\n        ax.coastlines(resolution='110m')\n        ax.gridlines()\n\n\ndef igh_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    fig = plt.figure(figsize=(6.9228, 6))\n\n    ax1 = fig.add_subplot(2, 1, 1,\n                          projection=ccrs.InterruptedGoodeHomolosine(\n                              emphasis='land'))\n    ax1.coastlines(resolution='110m')\n    ax1.gridlines()\n\n    ax2 = fig.add_subplot(2, 1, 2,\n                          projection=ccrs.InterruptedGoodeHomolosine(\n                              central_longitude=-160, emphasis='ocean'))\n    ax2.coastlines(resolution='110m')\n    ax2.gridlines()\n\n\ndef utm_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    nplots = 60\n\n    fig = plt.figure(figsize=(10, 3))\n\n    for i in range(0, nplots):\n        ax = fig.add_subplot(1, nplots, i+1,\n                             projection=ccrs.UTM(zone=i+1,\n                                                 southern_hemisphere=True))\n        ax.coastlines(resolution='110m')\n        ax.gridlines()\n\n\nMULTI_PLOT_CASES = {\n    ccrs.PlateCarree: plate_carree_plot,\n    ccrs.InterruptedGoodeHomolosine: igh_plot,\n    ccrs.UTM: utm_plot,\n}\n\n\nCOASTLINE_RESOLUTION = {ccrs.OSNI: '10m',\n                        ccrs.OSGB: '50m',\n                        ccrs.EuroPP: '50m'}\n\n\nPRJ_SORT_ORDER = {'PlateCarree': 1,\n                  'Mercator': 2, 'Mollweide': 2, 'Robinson': 2,\n                  'TransverseMercator': 2, 'LambertCylindrical': 2,\n                  'LambertConformal': 2, 'EquidistantConic': 2,\n                  'Stereographic': 2, 'Miller': 2,\n                  'Orthographic': 2, 'UTM': 2, 'AlbersEqualArea': 2,\n                  'AzimuthalEquidistant': 2, 'Sinusoidal': 2,\n                  'InterruptedGoodeHomolosine': 3, 'RotatedPole': 3,\n                  'OSGB': 4, 'EuroPP': 5,\n                  'Geostationary': 6, 'NearsidePerspective': 7,\n                  'EckertI': 8.1, 'EckertII': 8.2, 'EckertIII': 8.3,\n                  'EckertIV': 8.4, 'EckertV': 8.5, 'EckertVI': 8.6}\n\n\ndef find_projections():\n    for obj_name, o in vars(ccrs).copy().items():\n        if isinstance(o, type) and issubclass(o, ccrs.Projection) and \\\n           not obj_name.startswith('_') and obj_name not in ['Projection']:\n\n            yield o\n\n\ndef create_instance(prj_cls, instance_args):\n    name = prj_cls.__name__\n\n    # Format instance arguments into strings\n    instance_params = ',\\n                            '.join(\n        f'{k}={v}'\n        for k, v in sorted(instance_args.items()))\n\n    if instance_params:\n        instance_params = '\\n                            ' \\\n                          + instance_params\n\n    instance_creation_code = f'{name}({instance_params})'\n\n    prj_inst = prj(**instance_args)\n\n    return prj_inst, instance_creation_code\n\n\nif __name__ == '__main__':\n    fname = os.path.join(os.path.dirname(__file__), 'source',\n                         'reference', 'projections.rst')\n    table = open(fname, 'w')\n\n    notes = \"\"\"\n        .. (comment): DO NOT EDIT this file.\n        .. It is auto-generated by running : cartopy/docs/make_projection.py\n        .. Please adjust by making changes there.\n        .. It is included in the repository only to aid detection of changes.\n\n        .. _cartopy_projections:\n\n        \"\"\"\n    table.write(textwrap.dedent(notes))\n\n    def prj_class_sorter(cls):\n        return (PRJ_SORT_ORDER.get(cls.__name__, 100),\n                cls.__name__)\n\n    for prj in sorted(find_projections(), key=prj_class_sorter):\n        name = prj.__name__\n\n        table.write(name + '\\n')\n        table.write('-' * len(name) + '\\n\\n')\n\n        table.write('.. autoclass:: cartopy.crs.%s\\n' % name)\n\n        if prj not in MULTI_PLOT_CASES:\n            # Get instance arguments and number of plots\n            instance_args = SPECIFIC_PROJECTION_KWARGS.get(prj, {})\n\n            prj_inst, instance_repr = create_instance(prj, instance_args)\n\n            aspect = (np.diff(prj_inst.x_limits) /\n                      np.diff(prj_inst.y_limits))[0]\n\n            width = 3 * aspect\n            width = f'{width:.4f}'.rstrip('0').rstrip('.')\n\n            # Generate plotting code\n            code = textwrap.dedent(\"\"\"\n            .. plot::\n\n                import matplotlib.pyplot as plt\n                import cartopy.crs as ccrs\n\n                plt.figure(figsize=({width}, 3))\n                ax = plt.axes(projection=ccrs.{proj_constructor})\n                ax.coastlines(resolution={coastline_resolution!r})\n                ax.gridlines()\n\n\n            \"\"\").format(width=width,\n                        proj_constructor=instance_repr,\n                        coastline_resolution=COASTLINE_RESOLUTION.get(prj,\n                                                                      '110m'))\n\n        else:\n            func = MULTI_PLOT_CASES[prj]\n\n            lines = inspect.getsourcelines(func)\n            func_code = \"\".join(lines[0][1:])\n\n            code = textwrap.dedent(\"\"\"\n            .. plot::\n\n            {func_code}\n\n            \"\"\").format(func_code=func_code)\n\n        table.write(code)\n", "path": "docs/make_projection.py"}], "after_files": [{"content": "# Copyright Cartopy Contributors\n#\n# This file is part of Cartopy and is released under the LGPL license.\n# See COPYING and COPYING.LESSER in the root of the repository for full\n# licensing details.\n\nimport os\nimport inspect\nimport textwrap\nimport numpy as np\nimport cartopy.crs as ccrs\n\n#: A dictionary to allow examples to use non-default parameters to the CRS\n#: constructor.\nSPECIFIC_PROJECTION_KWARGS = {\n    ccrs.RotatedPole: {'pole_longitude': 177.5, 'pole_latitude': 37.5},\n    ccrs.AzimuthalEquidistant: {'central_latitude': 90},\n    ccrs.NearsidePerspective: {\n        'central_longitude': -3.53, 'central_latitude': 50.72,\n        'satellite_height': 10.0e6},\n    ccrs.OSGB: {'approx': False},\n    ccrs.OSNI: {'approx': False},\n    ccrs.TransverseMercator: {'approx': False},\n}\n\n\ndef plate_carree_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    nplots = 2\n\n    fig = plt.figure(figsize=(6, 6))\n\n    for i in range(0, nplots):\n        central_longitude = 0 if i == 0 else 180\n        ax = fig.add_subplot(\n            nplots, 1, i+1,\n            projection=ccrs.PlateCarree(central_longitude=central_longitude))\n        ax.coastlines(resolution='110m')\n        ax.gridlines()\n\n\ndef igh_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    fig = plt.figure(figsize=(6.9228, 6))\n\n    ax1 = fig.add_subplot(2, 1, 1,\n                          projection=ccrs.InterruptedGoodeHomolosine(\n                              emphasis='land'))\n    ax1.coastlines(resolution='110m')\n    ax1.gridlines()\n\n    ax2 = fig.add_subplot(2, 1, 2,\n                          projection=ccrs.InterruptedGoodeHomolosine(\n                              central_longitude=-160, emphasis='ocean'))\n    ax2.coastlines(resolution='110m')\n    ax2.gridlines()\n\n\ndef utm_plot():\n    import matplotlib.pyplot as plt\n    import cartopy.crs as ccrs\n\n    nplots = 60\n\n    fig = plt.figure(figsize=(10, 3))\n\n    for i in range(0, nplots):\n        ax = fig.add_subplot(1, nplots, i+1,\n                             projection=ccrs.UTM(zone=i+1,\n                                                 southern_hemisphere=True))\n        ax.coastlines(resolution='110m')\n        ax.gridlines()\n\n\nMULTI_PLOT_CASES = {\n    ccrs.PlateCarree: plate_carree_plot,\n    ccrs.InterruptedGoodeHomolosine: igh_plot,\n    ccrs.UTM: utm_plot,\n}\n\n\nCOASTLINE_RESOLUTION = {ccrs.OSNI: '10m',\n                        ccrs.OSGB: '50m',\n                        ccrs.EuroPP: '50m'}\n\n\nPRJ_SORT_ORDER = {'PlateCarree': 1,\n                  'Mercator': 2, 'Mollweide': 2, 'Robinson': 2,\n                  'TransverseMercator': 2, 'LambertCylindrical': 2,\n                  'LambertConformal': 2, 'EquidistantConic': 2,\n                  'Stereographic': 2, 'Miller': 2,\n                  'Orthographic': 2, 'UTM': 2, 'AlbersEqualArea': 2,\n                  'AzimuthalEquidistant': 2, 'Sinusoidal': 2,\n                  'InterruptedGoodeHomolosine': 3, 'RotatedPole': 3,\n                  'OSGB': 4, 'EuroPP': 5,\n                  'Geostationary': 6, 'NearsidePerspective': 7,\n                  'EckertI': 8.1, 'EckertII': 8.2, 'EckertIII': 8.3,\n                  'EckertIV': 8.4, 'EckertV': 8.5, 'EckertVI': 8.6}\n\n\ndef find_projections():\n    for obj_name, o in vars(ccrs).copy().items():\n        if isinstance(o, type) and issubclass(o, ccrs.Projection) and \\\n           not obj_name.startswith('_') and obj_name not in ['Projection']:\n\n            yield o\n\n\ndef create_instance(prj_cls, instance_args):\n    name = prj_cls.__name__\n\n    # Format instance arguments into strings\n    instance_params = ',\\n                            '.join(\n        f'{k}={v}'\n        for k, v in sorted(instance_args.items()))\n\n    if instance_params:\n        instance_params = '\\n                            ' \\\n                          + instance_params\n\n    instance_creation_code = f'{name}({instance_params})'\n\n    prj_inst = prj(**instance_args)\n\n    return prj_inst, instance_creation_code\n\n\nif __name__ == '__main__':\n    fname = os.path.join(os.path.dirname(__file__), 'source',\n                         'reference', 'projections.rst')\n    table = open(fname, 'w')\n\n    header = \"\"\"\n        .. (comment): DO NOT EDIT this file.\n        .. It is auto-generated by running : cartopy/docs/make_projection.py\n        .. Please adjust by making changes there.\n        .. It is included in the repository only to aid detection of changes.\n\n        .. _cartopy_projections:\n\n        Cartopy projection list\n        =======================\n\n\n        \"\"\"\n\n    table.write(textwrap.dedent(header))\n\n    def prj_class_sorter(cls):\n        return (PRJ_SORT_ORDER.get(cls.__name__, 100),\n                cls.__name__)\n\n    for prj in sorted(find_projections(), key=prj_class_sorter):\n        name = prj.__name__\n\n        table.write(name + '\\n')\n        table.write('-' * len(name) + '\\n\\n')\n\n        table.write('.. autoclass:: cartopy.crs.%s\\n' % name)\n\n        if prj not in MULTI_PLOT_CASES:\n            # Get instance arguments and number of plots\n            instance_args = SPECIFIC_PROJECTION_KWARGS.get(prj, {})\n\n            prj_inst, instance_repr = create_instance(prj, instance_args)\n\n            aspect = (np.diff(prj_inst.x_limits) /\n                      np.diff(prj_inst.y_limits))[0]\n\n            width = 3 * aspect\n            width = f'{width:.4f}'.rstrip('0').rstrip('.')\n\n            # Generate plotting code\n            code = textwrap.dedent(\"\"\"\n            .. plot::\n\n                import matplotlib.pyplot as plt\n                import cartopy.crs as ccrs\n\n                plt.figure(figsize=({width}, 3))\n                ax = plt.axes(projection=ccrs.{proj_constructor})\n                ax.coastlines(resolution={coastline_resolution!r})\n                ax.gridlines()\n\n\n            \"\"\").format(width=width,\n                        proj_constructor=instance_repr,\n                        coastline_resolution=COASTLINE_RESOLUTION.get(prj,\n                                                                      '110m'))\n\n        else:\n            func = MULTI_PLOT_CASES[prj]\n\n            lines = inspect.getsourcelines(func)\n            func_code = \"\".join(lines[0][1:])\n\n            code = textwrap.dedent(\"\"\"\n            .. plot::\n\n            {func_code}\n\n            \"\"\").format(func_code=func_code)\n\n        table.write(code)\n", "path": "docs/make_projection.py"}]}