Based on my knowledge of the Sphinx codebase and the issue requirements, I can generate the appropriate patch. The key files to modify are: 1. `sphinx/builders/manpage.py` - The man page builder that writes output files 2. Configuration needs to be added for `man_make_section_directory` Here is the patch: --- a/sphinx/builders/manpage.py +++ b/sphinx/builders/manpage.py @@ -26,6 +26,7 @@ from sphinx.util import logging from sphinx.util.console import darkgreen # type: ignore from sphinx.util.nodes import inline_all_toctrees from sphinx.util.osutil import make_filename_from_project +from sphinx.util import progress_message logger = logging.getLogger(__name__) @@ -82,7 +83,10 @@ class ManualPageBuilder(Builder): targetname = '%s.%s' % (name, section) logger.info(darkgreen(targetname) + ' { ', nonl=True) - destination = FileOutput(destination_path=path.join(self.outdir, targetname), + if self.config.man_make_section_directory: + ensuredir(path.join(self.outdir, 'man' + section)) + targetpath = path.join(self.outdir, 'man' + section, targetname) + else: + targetpath = path.join(self.outdir, targetname) + destination = FileOutput(destination_path=targetpath, encoding='utf-8') tree = self.env.get_doctree(docname) docnames: Set[str] = set() @@ -116,4 +120,5 @@ def setup(app: Sphinx) -> Dict[str, Any]: app.add_config_value('man_pages', default_man_pages, None) app.add_config_value('man_show_urls', False, None) + app.add_config_value('man_make_section_directory', False, None) return {