.. cssclass:: preface
.. cssclass:: appendix
preface and appendix for Sphinx |
# extension testbed | |
from docutils import nodes | |
from sphinx.writers.latex import LaTeXTranslator | |
class AppendixLaTeXTranslator(LaTeXTranslator): | |
def visit_title(self, node): | |
if isinstance(node.parent, nodes.section) and 'preface' in node.parent['classes']: | |
for i, value in enumerate(self.sectionnames): | |
self.sectionnames[i] += "*" | |
if isinstance(node.parent, nodes.section) and 'appendix' in node.parent['classes']: | |
self.body.append(r'\appendix') | |
super().visit_title(node) | |
if isinstance(node.parent, nodes.section) and 'preface' in node.parent['classes']: | |
for i, value in enumerate(self.sectionnames): | |
self.sectionnames[i] = value[:-1] | |
self.pushbody([]) | |
def depart_title(self, node): | |
if isinstance(node.parent, nodes.section) and 'preface' in node.parent['classes']: | |
body = self.popbody() | |
self.body.extend(body) | |
super().depart_title(node) | |
if isinstance(node.parent, nodes.section) and 'preface' in node.parent['classes']: | |
sectionname = self.sectionnames[self.sectionlevel] | |
self.body.append(r'\addcontentsline{toc}{%s}{' % sectionname) | |
self.body.extend(body) | |
self.body.append(r'}') | |
def setup(app): | |
app.set_translator('latex', AppendixLaTeXTranslator) |