Skip to content

Instantly share code, notes, and snippets.

@orj-takizawa
Last active September 7, 2020 08:23
Show Gist options
  • Save orj-takizawa/21956cc8b240904ccf4dd56d16cfff85 to your computer and use it in GitHub Desktop.
Save orj-takizawa/21956cc8b240904ccf4dd56d16cfff85 to your computer and use it in GitHub Desktop.
tk0miyaさんのこれ( https://gist.github.com/tk0miya/603f81c3e168831cca99537949357c7b )をSphinx 3.2.1でもうごくようにした
# TeX出力時の文書構造を変更する
from docutils import nodes
from sphinx.writers.latex import LaTeXTranslator
class AppendixLaTeXTranslator(LaTeXTranslator):
def __init__(self, document: nodes.document, builder: "LaTeXBuilder",
theme: "Theme" = None) -> None:
super().__init__(document, builder)
self.is_mainmatter = True
def visit_title(self, node):
if self.is_mainmatter is False:
for i, value in enumerate(self.sectionnames):
self.sectionnames[i] += "*"
super().visit_title(node)
if self.is_mainmatter is False:
for i, value in enumerate(self.sectionnames):
self.sectionnames[i] = value[:-1]
self.pushbody([])
def depart_title(self, node):
if self.is_mainmatter is False:
body = self.popbody()
self.body.extend(body)
super().depart_title(node)
if self.is_mainmatter is False:
sectionname = self.sectionnames[self.sectionlevel]
self.body.append(r'\addcontentsline{toc}{%s}{' % sectionname)
self.body.extend(body)
self.body.append(r'}')
def visit_compound(self, node):
if 'preface' in node['classes']:
self.body.append(r'\frontmatter')
self.is_mainmatter = False
if 'appendix' in node['classes']:
self.body.append(r'\appendix')
if 'postface' in node['classes']:
self.body.append(r'\backmatter')
self.is_mainmatter = False
def depart_compound(self, node):
if 'preface' in node['classes']:
self.is_mainmatter = True
self.body.append(r'\mainmatter')
if 'postface' in node['classes']:
self.is_mainmatter = True
def setup(app):
app.set_translator('latex', AppendixLaTeXTranslator)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment