mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Make LaTeX obey numfig_secnum_depth for figures, tables, code-blocks
Notes: - also fixes #4314 - although numbering of figures, tables and code-blocks will be same as in html, due to issue #4318 the numbering of enclosing sectioning units themselves may go deeper in html than PDF via latex. But this commit makes sure numbering goes to minimal depth needed by numfig_secnum_depth
This commit is contained in:
parent
ff7e44a511
commit
7ea4fa535a
@ -341,20 +341,19 @@ General configuration
|
|||||||
starting at ``1``.
|
starting at ``1``.
|
||||||
- if ``1`` (default) numbers will be ``x.1``, ``x.2``, ... with ``x``
|
- if ``1`` (default) numbers will be ``x.1``, ``x.2``, ... with ``x``
|
||||||
the section number (top level sectioning; no ``x.`` if no section).
|
the section number (top level sectioning; no ``x.`` if no section).
|
||||||
This naturally applies only if section numbering has been activated via
|
This naturally applies only if section numbering has been activated via
|
||||||
the ``:numbered:`` option of the :rst:dir:`toctree` directive.
|
the ``:numbered:`` option of the :rst:dir:`toctree` directive.
|
||||||
- ``2`` means that numbers will be ``x.y.1``, ``x.y.2``, ... if located in
|
- ``2`` means that numbers will be ``x.y.1``, ``x.y.2``, ... if located in
|
||||||
a sub-section (but still ``x.1``, ``x.2``, ... if located directly under a
|
a sub-section (but still ``x.1``, ``x.2``, ... if located directly under a
|
||||||
section and ``1``, ``2``, ... if not in any top level section.)
|
section and ``1``, ``2``, ... if not in any top level section.)
|
||||||
- etc...
|
- etc...
|
||||||
|
|
||||||
.. note::
|
|
||||||
|
|
||||||
The LaTeX builder currently ignores this configuration setting. It will
|
|
||||||
obey it at Sphinx 1.7.
|
|
||||||
|
|
||||||
.. versionadded:: 1.3
|
.. versionadded:: 1.3
|
||||||
|
|
||||||
|
.. versionchanged:: 1.7
|
||||||
|
The LaTeX builder obeys this setting (if :confval:`numfig` is set to
|
||||||
|
``True``).
|
||||||
|
|
||||||
.. confval:: tls_verify
|
.. confval:: tls_verify
|
||||||
|
|
||||||
If true, Sphinx verifies server certifications. Default is ``True``.
|
If true, Sphinx verifies server certifications. Default is ``True``.
|
||||||
|
@ -183,7 +183,7 @@
|
|||||||
% control caption around literal-block
|
% control caption around literal-block
|
||||||
\RequirePackage{capt-of}
|
\RequirePackage{capt-of}
|
||||||
\RequirePackage{needspace}
|
\RequirePackage{needspace}
|
||||||
|
\RequirePackage{remreset}% provides \@removefromreset
|
||||||
% to make pdf with correct encoded bookmarks in Japanese
|
% to make pdf with correct encoded bookmarks in Japanese
|
||||||
% this should precede the hyperref package
|
% this should precede the hyperref package
|
||||||
\ifx\kanjiskip\@undefined
|
\ifx\kanjiskip\@undefined
|
||||||
@ -247,7 +247,9 @@
|
|||||||
\fi
|
\fi
|
||||||
|
|
||||||
\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0}
|
\DeclareStringOption[0]{maxlistdepth}% \newcommand*\spx@opt@maxlistdepth{0}
|
||||||
|
\DeclareStringOption[-1]{numfigreset}
|
||||||
|
\DeclareBoolOption[false]{nonumfigreset}
|
||||||
|
% \DeclareBoolOption[false]{usespart}% not used
|
||||||
% dimensions, we declare the \dimen registers here.
|
% dimensions, we declare the \dimen registers here.
|
||||||
\newdimen\sphinxverbatimsep
|
\newdimen\sphinxverbatimsep
|
||||||
\newdimen\sphinxverbatimborder
|
\newdimen\sphinxverbatimborder
|
||||||
@ -349,6 +351,8 @@
|
|||||||
\ProcessKeyvalOptions*
|
\ProcessKeyvalOptions*
|
||||||
% don't allow use of maxlistdepth via \sphinxsetup.
|
% don't allow use of maxlistdepth via \sphinxsetup.
|
||||||
\DisableKeyvalOption{sphinx}{maxlistdepth}
|
\DisableKeyvalOption{sphinx}{maxlistdepth}
|
||||||
|
\DisableKeyvalOption{sphinx}{numfigreset}
|
||||||
|
\DisableKeyvalOption{sphinx}{nonumfigreset}
|
||||||
% user interface: options can be changed midway in a document!
|
% user interface: options can be changed midway in a document!
|
||||||
\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}}
|
\newcommand\sphinxsetup[1]{\setkeys{sphinx}{#1}}
|
||||||
|
|
||||||
@ -657,6 +661,7 @@
|
|||||||
{\abovecaptionskip\smallskipamount
|
{\abovecaptionskip\smallskipamount
|
||||||
\belowcaptionskip\smallskipamount}
|
\belowcaptionskip\smallskipamount}
|
||||||
|
|
||||||
|
|
||||||
%% FOOTNOTES
|
%% FOOTNOTES
|
||||||
%
|
%
|
||||||
% Support large numbered footnotes in minipage
|
% Support large numbered footnotes in minipage
|
||||||
@ -665,6 +670,87 @@
|
|||||||
\def\thempfootnote{\arabic{mpfootnote}}
|
\def\thempfootnote{\arabic{mpfootnote}}
|
||||||
|
|
||||||
|
|
||||||
|
%% NUMBERING OF FIGURES, TABLES, AND LITERAL BLOCKS
|
||||||
|
\ltx@ifundefined{c@chapter}
|
||||||
|
{\newcounter{literalblock}}%
|
||||||
|
{\newcounter{literalblock}[chapter]%
|
||||||
|
\def\theliteralblock{\ifnum\c@chapter>\z@\arabic{chapter}.\fi
|
||||||
|
\arabic{literalblock}}%
|
||||||
|
}%
|
||||||
|
\ifspx@opt@nonumfigreset
|
||||||
|
\ltx@ifundefined{c@chapter}{}{%
|
||||||
|
\@removefromreset{figure}{chapter}%
|
||||||
|
\@removefromreset{table}{chapter}%
|
||||||
|
\@removefromreset{literalblock}{chapter}%
|
||||||
|
}%
|
||||||
|
\def\thefigure{\arabic{figure}}%
|
||||||
|
\def\thetable {\arabic{table}}%
|
||||||
|
\def\theliteralblock{\arabic{literalblock}}%
|
||||||
|
%\let\theHliteralblock\theliteralblock
|
||||||
|
\else
|
||||||
|
\let\spx@preAthefigure\@empty
|
||||||
|
\let\spx@preBthefigure\@empty
|
||||||
|
% \ifspx@opt@usespart % <-- LaTeX writer could pass such a 'usespart' boolean
|
||||||
|
% % as sphinx.sty package option
|
||||||
|
% If document uses \part, (triggered in Sphinx by latex_toplevel_sectioning)
|
||||||
|
% LaTeX core per default does not reset chapter or section
|
||||||
|
% counters at each part.
|
||||||
|
% But if we modify this, we need to redefine \thechapter, \thesection to
|
||||||
|
% include the part number and this will cause problems in table of contents
|
||||||
|
% because of too wide numbering. Simplest is to do nothing.
|
||||||
|
% \fi
|
||||||
|
\ifnum\spx@opt@numfigreset>0
|
||||||
|
\ltx@ifundefined{c@chapter}
|
||||||
|
{}
|
||||||
|
{\g@addto@macro\spx@preAthefigure{\ifnum\c@chapter>\z@\arabic{chapter}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}}%
|
||||||
|
\fi
|
||||||
|
\ifnum\spx@opt@numfigreset>1
|
||||||
|
\@addtoreset{figure}{section}%
|
||||||
|
\@addtoreset{table}{section}%
|
||||||
|
\@addtoreset{literalblock}{section}%
|
||||||
|
\g@addto@macro\spx@preAthefigure{\ifnum\c@section>\z@\arabic{section}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}%
|
||||||
|
\fi
|
||||||
|
\ifnum\spx@opt@numfigreset>2
|
||||||
|
\@addtoreset{figure}{subsection}%
|
||||||
|
\@addtoreset{table}{subsection}%
|
||||||
|
\@addtoreset{literalblock}{subsection}%
|
||||||
|
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsection>\z@\arabic{subsection}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}%
|
||||||
|
\fi
|
||||||
|
\ifnum\spx@opt@numfigreset>3
|
||||||
|
\@addtoreset{figure}{subsubsection}%
|
||||||
|
\@addtoreset{table}{subsubsection}%
|
||||||
|
\@addtoreset{literalblock}{subsubsection}%
|
||||||
|
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsubsection>\z@\arabic{subsubsection}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}%
|
||||||
|
\fi
|
||||||
|
\ifnum\spx@opt@numfigreset>4
|
||||||
|
\@addtoreset{figure}{paragraph}%
|
||||||
|
\@addtoreset{table}{paragraph}%
|
||||||
|
\@addtoreset{literalblock}{paragraph}%
|
||||||
|
\g@addto@macro\spx@preAthefigure{\ifnum\c@subparagraph>\z@\arabic{subparagraph}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}%
|
||||||
|
\fi
|
||||||
|
\ifnum\spx@opt@numfigreset>5
|
||||||
|
\@addtoreset{figure}{subparagraph}%
|
||||||
|
\@addtoreset{table}{subparagraph}%
|
||||||
|
\@addtoreset{literalblock}{subparagraph}%
|
||||||
|
\g@addto@macro\spx@preAthefigure{\ifnum\c@subsubparagraph>\z@\arabic{subsubparagraph}.}%
|
||||||
|
\g@addto@macro\spx@preBthefigure{\fi}%
|
||||||
|
\fi
|
||||||
|
\expandafter\g@addto@macro
|
||||||
|
\expandafter\spx@preAthefigure\expandafter{\spx@preBthefigure}%
|
||||||
|
\let\thefigure\spx@preAthefigure
|
||||||
|
\let\thetable\spx@preAthefigure
|
||||||
|
\let\theliteralblock\spx@preAthefigure
|
||||||
|
\g@addto@macro\thefigure{\arabic{figure}}%
|
||||||
|
\g@addto@macro\thetable{\arabic{table}}%
|
||||||
|
\g@addto@macro\theliteralblock{\arabic{literalblock}}%
|
||||||
|
\fi
|
||||||
|
|
||||||
|
|
||||||
%% LITERAL BLOCKS
|
%% LITERAL BLOCKS
|
||||||
%
|
%
|
||||||
% Based on use of "fancyvrb.sty"'s Verbatim.
|
% Based on use of "fancyvrb.sty"'s Verbatim.
|
||||||
@ -680,15 +766,6 @@
|
|||||||
\let\endOriginalVerbatim\endVerbatim
|
\let\endOriginalVerbatim\endVerbatim
|
||||||
|
|
||||||
% for captions of literal blocks
|
% for captions of literal blocks
|
||||||
% also define `\theH...` macros for hyperref
|
|
||||||
\newcounter{literalblock}
|
|
||||||
\ltx@ifundefined{c@chapter}
|
|
||||||
{\@addtoreset{literalblock}{section}
|
|
||||||
\def\theliteralblock {\ifnum\c@section>\z@ \thesection.\fi\arabic{literalblock}}
|
|
||||||
\def\theHliteralblock {\theHsection.\arabic{literalblock}}}
|
|
||||||
{\@addtoreset{literalblock}{chapter}
|
|
||||||
\def\theliteralblock {\ifnum\c@chapter>\z@ \thechapter.\fi\arabic{literalblock}}
|
|
||||||
\def\theHliteralblock {\theHchapter.\arabic{literalblock}}}
|
|
||||||
% at start of caption title
|
% at start of caption title
|
||||||
\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock}
|
\newcommand*{\fnum@literalblock}{\literalblockname\nobreakspace\theliteralblock}
|
||||||
% this will be overwritten in document preamble by Babel translation
|
% this will be overwritten in document preamble by Babel translation
|
||||||
|
@ -48,7 +48,6 @@ BEGIN_DOC = r'''
|
|||||||
|
|
||||||
|
|
||||||
URI_SCHEMES = ('mailto:', 'http:', 'https:', 'ftp:')
|
URI_SCHEMES = ('mailto:', 'http:', 'https:', 'ftp:')
|
||||||
SECNUMDEPTH = 3
|
|
||||||
LATEXSECTIONNAMES = ["part", "chapter", "section", "subsection",
|
LATEXSECTIONNAMES = ["part", "chapter", "section", "subsection",
|
||||||
"subsubsection", "paragraph", "subparagraph"]
|
"subsubsection", "paragraph", "subparagraph"]
|
||||||
|
|
||||||
@ -504,6 +503,8 @@ def rstdim_to_latexdim(width_str):
|
|||||||
|
|
||||||
class LaTeXTranslator(nodes.NodeVisitor):
|
class LaTeXTranslator(nodes.NodeVisitor):
|
||||||
|
|
||||||
|
secnumdepth = 2 # legacy sphinxhowto.cls uses this, whereas article.cls
|
||||||
|
# default is originally 3. For book/report, 2 is already LaTeX default.
|
||||||
ignore_missing_images = False
|
ignore_missing_images = False
|
||||||
|
|
||||||
# sphinx specific document classes
|
# sphinx specific document classes
|
||||||
@ -581,6 +582,24 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
else:
|
else:
|
||||||
self.elements['date'] = format_date(builder.config.today_fmt or _('%b %d, %Y'), # type: ignore # NOQA
|
self.elements['date'] = format_date(builder.config.today_fmt or _('%b %d, %Y'), # type: ignore # NOQA
|
||||||
language=builder.config.language)
|
language=builder.config.language)
|
||||||
|
|
||||||
|
if builder.config.numfig:
|
||||||
|
self.numfig_secnum_depth = builder.config.numfig_secnum_depth
|
||||||
|
if self.numfig_secnum_depth > 0: # default is 1
|
||||||
|
# numfig_secnum_depth as passed to sphinx.sty indices same names as in
|
||||||
|
# LATEXSECTIONNAMES but with -1 for part, 0 for chapter, 1 for section...
|
||||||
|
if len(self.sectionnames) < 7 and self.top_sectionlevel > 0:
|
||||||
|
self.numfig_secnum_depth += self.top_sectionlevel
|
||||||
|
else:
|
||||||
|
self.numfig_secnum_depth += self.top_sectionlevel - 1
|
||||||
|
if self.numfig_secnum_depth >= len(self.sectionnames):
|
||||||
|
self.numfig_secnum_depth = len(self.sectionnames) - 1
|
||||||
|
# if passed key value is < 1 LaTeX will act as if 0; see sphinx.sty
|
||||||
|
self.elements['sphinxpkgoptions'] += \
|
||||||
|
(',numfigreset=%s' % self.numfig_secnum_depth)
|
||||||
|
else:
|
||||||
|
self.elements['sphinxpkgoptions'] += ',nonumfigreset'
|
||||||
|
|
||||||
if builder.config.latex_logo:
|
if builder.config.latex_logo:
|
||||||
# no need for \\noindent here, used in flushright
|
# no need for \\noindent here, used in flushright
|
||||||
self.elements['logo'] = '\\sphinxincludegraphics{%s}\\par' % \
|
self.elements['logo'] = '\\sphinxincludegraphics{%s}\\par' % \
|
||||||
@ -637,6 +656,8 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
return '\\usepackage{%s}' % (packagename,)
|
return '\\usepackage{%s}' % (packagename,)
|
||||||
usepackages = (declare_package(*p) for p in builder.usepackages)
|
usepackages = (declare_package(*p) for p in builder.usepackages)
|
||||||
self.elements['usepackages'] += "\n".join(usepackages)
|
self.elements['usepackages'] += "\n".join(usepackages)
|
||||||
|
|
||||||
|
minsecnumdepth = self.secnumdepth # 2 from legacy sphinx manual/howto
|
||||||
if document.get('tocdepth'):
|
if document.get('tocdepth'):
|
||||||
# reduce tocdepth if `part` or `chapter` is used for top_sectionlevel
|
# reduce tocdepth if `part` or `chapter` is used for top_sectionlevel
|
||||||
# tocdepth = -1: show only parts
|
# tocdepth = -1: show only parts
|
||||||
@ -653,9 +674,14 @@ class LaTeXTranslator(nodes.NodeVisitor):
|
|||||||
tocdepth = 5
|
tocdepth = 5
|
||||||
|
|
||||||
self.elements['tocdepth'] = '\\setcounter{tocdepth}{%d}' % tocdepth
|
self.elements['tocdepth'] = '\\setcounter{tocdepth}{%d}' % tocdepth
|
||||||
if tocdepth >= SECNUMDEPTH:
|
minsecnumdepth = max(minsecnumdepth, tocdepth)
|
||||||
# Increase secnumdepth if tocdepth is deeper than default SECNUMDEPTH
|
|
||||||
self.elements['secnumdepth'] = '\\setcounter{secnumdepth}{%d}' % tocdepth
|
if builder.config.numfig and (builder.config.numfig_secnum_depth > 0):
|
||||||
|
minsecnumdepth = max(minsecnumdepth, self.numfig_secnum_depth - 1)
|
||||||
|
|
||||||
|
if minsecnumdepth > self.secnumdepth:
|
||||||
|
self.elements['secnumdepth'] = '\\setcounter{secnumdepth}{%d}' %\
|
||||||
|
minsecnumdepth
|
||||||
|
|
||||||
if getattr(document.settings, 'contentsname', None):
|
if getattr(document.settings, 'contentsname', None):
|
||||||
self.elements['contentsname'] = \
|
self.elements['contentsname'] = \
|
||||||
|
Loading…
Reference in New Issue
Block a user