.. 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) |