task: metadata: install: pip install -e .[complete]
patch: diff --git a/README.md b/README.md
index 0caa527..d56be5a 100644
--- a/README.md
+++ b/README.md
@@ -22,12 +22,6 @@ To install `pylhe` from PyPI you can just do
 python -m pip install pylhe
 ```
 
-and to get the required libraries to be able to visualize events install with the "viz" extra
-
-```
-python -m pip install pylhe[viz]
-```
-
 The visualization capabilities require external dependencies of [Graphviz](https://graphviz.org/) and LaTeX.
 
 ## Get started
diff --git a/setup.cfg b/setup.cfg
index 5359876..bced88f 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -33,9 +33,7 @@ packages = find:
 include_package_data = True
 python_requires = >=3.6
 install_requires =
-    networkx>=2.2
     graphviz>=0.12.0
-    tex2pix>=0.3
     particle>=0.16
     awkward>=1.2.0
     vector>=0.8.1
diff --git a/setup.py b/setup.py
index df20055..08a3fa4 100644
--- a/setup.py
+++ b/setup.py
@@ -2,18 +2,13 @@ from setuptools import setup
 
 extras_require = {}
 extras_require["lint"] = sorted({"flake8", "black"})
-# c.f. https://networkx.org/documentation/stable/install.html#optional-packages
-extras_require["viz"] = sorted({"pydot~=1.4", "dot2tex~=2.11"})
 extras_require["test"] = sorted(
-    set(
-        extras_require["viz"]
-        + [
-            "pytest~=6.0",
-            "pytest-cov>=2.5.1",
-            "scikit-hep-testdata>=0.3.1",
-            "pydocstyle",
-        ]
-    )
+    {
+        "pytest~=6.0",
+        "pytest-cov>=2.5.1",
+        "scikit-hep-testdata>=0.3.1",
+        "pydocstyle",
+    }
 )
 extras_require["develop"] = sorted(
     set(
diff --git a/src/pylhe/__init__.py b/src/pylhe/__init__.py
index a3ab03a..6b83fd6 100644
--- a/src/pylhe/__init__.py
+++ b/src/pylhe/__init__.py
@@ -1,11 +1,7 @@
 import gzip
-import os
-import subprocess
 import xml.etree.ElementTree as ET
 
 import graphviz
-import networkx as nx
-import tex2pix
 from particle import latex_to_html_name
 from particle.converters.bimap import DirectionalMaps
 
@@ -27,7 +23,6 @@ __all__ = [
     "read_num_events",
     "register_awkward",
     "to_awkward",
-    "visualize",
 ]
 
 
@@ -349,35 +344,3 @@ def read_num_events(filepath):
             element.tag == "event"
             for event, element in ET.iterparse(fileobj, events=["end"])
         )
-
-
-def visualize(event, outputname):
-    """
-    Create a PDF with a visualisation of the LHE event record as a directed graph
-    """
-
-    # retrieve mapping of PDG ID to particle name as LaTeX string
-    _PDGID2LaTeXNameMap, _ = DirectionalMaps(
-        "PDGID", "LATEXNAME", converters=(int, str)
-    )
-
-    g = nx.DiGraph()
-    for i, p in enumerate(event.particles):
-        g.add_node(i, attr_dict=p.__dict__)
-        try:
-            iid = int(p.id)
-            name = _PDGID2LaTeXNameMap[iid]
-            texlbl = f"${name}$"
-        except KeyError:
-            texlbl = str(int(p.id))
-        g.nodes[i].update(texlbl=texlbl)
-    for i, p in enumerate(event.particles):
-        for mom in p.mothers():
-            g.add_edge(event.particles.index(mom), i)
-    nx.nx_pydot.write_dot(g, "event.dot")
-
-    p = subprocess.Popen(["dot2tex", "event.dot"], stdout=subprocess.PIPE)
-    tex = p.stdout.read().decode()
-    tex2pix.Renderer(tex).mkpdf(outputname)
-    subprocess.check_call(["pdfcrop", outputname, outputname])
-    os.remove("event.dot")

problem_statement: Reconsider tex2pix dependency
`tex2pix` is a [core dependency of `pylhe`](https://github.com/scikit-hep/pylhe/blob/d9ce20436161ec174bde6555c7dd6e68f7f5e0ea/setup.cfg#L40-L43) but the [last release of `v0.3.1` was in 2016](https://pypi.org/project/tex2pix/0.3.1/#history), so it seems to be safely "unmaintained" at this point. The source code also doesn't seem to be publicly available on GitHub.

:wave: @agbuckley, as the author of `tex2pix` (thanks! :bow:), can you comment on if there is any plans to maintain `tex2pix` in the future? Or would you recommend that we look for an alternative that is more probable to be patched if there are issues that are found. I can imagine that you already have more than enough on your plate and being responsible for maintaining another codebase might very understandably not be high on the list. :)
repo: scikit-hep/pylhe
test_cmd: pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
test_patch: diff --git a/tests/test_api.py b/tests/test_api.py
index 1e3dab4..d3b288f 100644
--- a/tests/test_api.py
+++ b/tests/test_api.py
@@ -26,7 +26,6 @@ def test_top_level_api():
         "read_num_events",
         "register_awkward",
         "to_awkward",
-        "visualize",
     ]
 
 
diff --git a/tests/test_visualize.py b/tests/test_visualize.py
index c78fcf0..48336e4 100644
--- a/tests/test_visualize.py
+++ b/tests/test_visualize.py
@@ -5,18 +5,7 @@ import skhep_testdata
 import pylhe
 
 
-def test_visualize(tmpdir):
-    lhe_file = skhep_testdata.data_path("pylhe-testfile-pr29.lhe")
-    events = pylhe.read_lhe_with_attributes(lhe_file)
-
-    start_event = 1
-    stop_event = 2
-    filename = tmpdir.join(f"event{start_event}.pdf")
-    for event in itertools.islice(events, start_event, stop_event):
-        pylhe.visualize(event, filename)
-
-
-def test_LHEEvent_graph():
+def test_LHEEvent_graph_source():
     lhe_file = skhep_testdata.data_path("pylhe-testfile-pr29.lhe")
     events = pylhe.read_lhe_with_attributes(lhe_file)
 
@@ -26,3 +15,11 @@ def test_LHEEvent_graph():
     # pi unicode charecter is '&#x03c0;'
     assert event.graph.source.count("&#x03c0;") == 8
     assert "<td>p</td>" in event.graph.source
+
+
+def test_LHEEvent_graph_render():
+    lhe_file = skhep_testdata.data_path("pylhe-testfile-pr29.lhe")
+    events = pylhe.read_lhe_with_attributes(lhe_file)
+
+    event = next(itertools.islice(events, 1, 2))
+    event.graph.render(filename="test_event1", format="pdf", cleanup=True)