https://github.com/sphinx-doc/sphinx/pull/13131 --- sphinx-7.4.7/pyproject.toml.orig +++ sphinx-7.4.7/pyproject.toml @@ -70,6 +70,7 @@ "alabaster~=0.7.14", "imagesize>=1.3", "requests>=2.30.0", + "roman-numerals-py>=1.0.0", "packaging>=23.0", "importlib-metadata>=6.0; python_version < '3.10'", "tomli>=2; python_version < '3.11'", --- sphinx-7.4.7/sphinx/writers/latex.py.orig +++ sphinx-7.4.7/sphinx/writers/latex.py @@ -13,6 +13,7 @@ from typing import TYPE_CHECKING, Any, cast from docutils import nodes, writers +from roman_numerals import RomanNumeral from sphinx import addnodes, highlighting from sphinx.domains.std import StandardDomain @@ -25,12 +26,6 @@ from sphinx.util.template import LaTeXRenderer from sphinx.util.texescape import tex_replace_map -try: - from docutils.utils.roman import toRoman -except ImportError: - # In Debian/Ubuntu, roman package is provided as roman, not as docutils.utils.roman - from roman import toRoman # type: ignore[no-redef, import-not-found] - if TYPE_CHECKING: from docutils.nodes import Element, Node, Text @@ -1276,8 +1271,9 @@ else: return get_nested_level(node.parent) - enum = "enum%s" % toRoman(get_nested_level(node)).lower() - enumnext = "enum%s" % toRoman(get_nested_level(node) + 1).lower() + nested_level = get_nested_level(node) + enum = f'enum{RomanNumeral(nested_level).to_lowercase()}' + enumnext = f'enum{RomanNumeral(nested_level + 1).to_lowercase()}' style = ENUMERATE_LIST_STYLE.get(get_enumtype(node)) prefix = node.get('prefix', '') suffix = node.get('suffix', '.')