mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Add LaTeXTranslator.escape(); TeX escape helper method
This commit is contained in:
@@ -32,7 +32,7 @@ from sphinx.util import split_into, logging
|
||||
from sphinx.util.docutils import SphinxTranslator
|
||||
from sphinx.util.nodes import clean_astext, get_prev_node
|
||||
from sphinx.util.template import LaTeXRenderer
|
||||
from sphinx.util.texescape import tex_escape_map, tex_replace_map
|
||||
from sphinx.util.texescape import escape, tex_replace_map
|
||||
|
||||
try:
|
||||
from docutils.utils.roman import toRoman
|
||||
@@ -499,6 +499,9 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
self.compact_list = 0
|
||||
self.first_param = 0
|
||||
|
||||
# escape helper
|
||||
self.escape = escape
|
||||
|
||||
# sort out some elements
|
||||
self.elements = self.builder.context.copy()
|
||||
|
||||
@@ -757,8 +760,7 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
for i, (letter, entries) in enumerate(content):
|
||||
if i > 0:
|
||||
ret.append('\\indexspace\n')
|
||||
ret.append('\\bigletter{%s}\n' %
|
||||
str(letter).translate(tex_escape_map))
|
||||
ret.append('\\bigletter{%s}\n' % self.escape(letter))
|
||||
for entry in entries:
|
||||
if not entry[3]:
|
||||
continue
|
||||
@@ -913,14 +915,13 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
if not self.elements['title']:
|
||||
# text needs to be escaped since it is inserted into
|
||||
# the output literally
|
||||
self.elements['title'] = node.astext().translate(tex_escape_map)
|
||||
self.elements['title'] = self.escape(node.astext())
|
||||
self.this_is_the_title = 0
|
||||
raise nodes.SkipNode
|
||||
else:
|
||||
short = ''
|
||||
if node.traverse(nodes.image):
|
||||
short = ('[%s]' %
|
||||
' '.join(clean_astext(node).split()).translate(tex_escape_map))
|
||||
short = ('[%s]' % self.escape(' '.join(clean_astext(node).split())))
|
||||
|
||||
try:
|
||||
self.body.append(r'\%s%s{' % (self.sectionnames[self.sectionlevel], short))
|
||||
@@ -1954,8 +1955,7 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
else:
|
||||
id = node.get('refuri', '')[1:].replace('#', ':')
|
||||
|
||||
title = node.get('title', '%s')
|
||||
title = str(title).translate(tex_escape_map).replace('\\%s', '%s')
|
||||
title = self.escape(node.get('title', '%s')).replace('\\%s', '%s')
|
||||
if '\\{name\\}' in title or '\\{number\\}' in title:
|
||||
# new style format (cf. "Fig.%{number}")
|
||||
title = title.replace('\\{name\\}', '{name}').replace('\\{number\\}', '{number}')
|
||||
@@ -2403,7 +2403,7 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
|
||||
def encode(self, text):
|
||||
# type: (str) -> str
|
||||
text = str(text).translate(tex_escape_map)
|
||||
text = self.escape(text)
|
||||
if self.literal_whitespace:
|
||||
# Insert a blank before the newline, to avoid
|
||||
# ! LaTeX Error: There's no line here to end.
|
||||
@@ -2614,33 +2614,31 @@ class LaTeXTranslator(SphinxTranslator):
|
||||
ret = [] # type: List[str]
|
||||
figure = self.builder.config.numfig_format['figure'].split('%s', 1)
|
||||
if len(figure) == 1:
|
||||
ret.append('\\def\\fnum@figure{%s}\n' %
|
||||
str(figure[0]).strip().translate(tex_escape_map))
|
||||
ret.append('\\def\\fnum@figure{%s}\n' % self.escape(figure[0]).strip())
|
||||
else:
|
||||
definition = escape_abbr(str(figure[0]).translate(tex_escape_map))
|
||||
definition = escape_abbr(self.escape(figure[0]))
|
||||
ret.append(self.babel_renewcommand('\\figurename', definition))
|
||||
ret.append('\\makeatletter\n')
|
||||
ret.append('\\def\\fnum@figure{\\figurename\\thefigure{}%s}\n' %
|
||||
str(figure[1]).translate(tex_escape_map))
|
||||
self.escape(figure[1]))
|
||||
ret.append('\\makeatother\n')
|
||||
|
||||
table = self.builder.config.numfig_format['table'].split('%s', 1)
|
||||
if len(table) == 1:
|
||||
ret.append('\\def\\fnum@table{%s}\n' %
|
||||
str(table[0]).strip().translate(tex_escape_map))
|
||||
ret.append('\\def\\fnum@table{%s}\n' % self.escape(table[0]).strip())
|
||||
else:
|
||||
definition = escape_abbr(str(table[0]).translate(tex_escape_map))
|
||||
definition = escape_abbr(self.escape(table[0]))
|
||||
ret.append(self.babel_renewcommand('\\tablename', definition))
|
||||
ret.append('\\makeatletter\n')
|
||||
ret.append('\\def\\fnum@table{\\tablename\\thetable{}%s}\n' %
|
||||
str(table[1]).translate(tex_escape_map))
|
||||
self.escape(table[1]))
|
||||
ret.append('\\makeatother\n')
|
||||
|
||||
codeblock = self.builder.config.numfig_format['code-block'].split('%s', 1)
|
||||
if len(codeblock) == 1:
|
||||
pass # FIXME
|
||||
else:
|
||||
definition = str(codeblock[0]).strip().translate(tex_escape_map)
|
||||
definition = self.escape(codeblock[0]).strip()
|
||||
ret.append(self.babel_renewcommand('\\literalblockname', definition))
|
||||
if codeblock[1]:
|
||||
pass # FIXME
|
||||
|
||||
Reference in New Issue
Block a user