Merge pull request #8812 from jfbu/latex_url_as_footnotes_in_signatures

Latex url as footnotes in signatures
This commit is contained in:
Takeshi KOMIYA 2021-02-02 22:58:37 +09:00 committed by GitHub
commit 000ed29ff7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 45 additions and 6 deletions

View File

@ -119,6 +119,8 @@ Bugs fixed
:confval:`numfig` is not True :confval:`numfig` is not True
* #8442: LaTeX: some indexed terms are ignored when using xelatex engine * #8442: LaTeX: some indexed terms are ignored when using xelatex engine
(or pdflatex and :confval:`latex_use_xindy` set to True) with memoir class (or pdflatex and :confval:`latex_use_xindy` set to True) with memoir class
* #8750: LaTeX: URLs as footnotes fail to show in PDF if originating from
inside function type signatures
* #8780: LaTeX: long words in narrow columns may not be hyphenated * #8780: LaTeX: long words in narrow columns may not be hyphenated
* #8788: LaTeX: ``\titleformat`` last argument in sphinx.sty should be * #8788: LaTeX: ``\titleformat`` last argument in sphinx.sty should be
bracketed, not braced (and is anyhow not needed) bracketed, not braced (and is anyhow not needed)

View File

@ -1,9 +1,9 @@
\NeedsTeXFormat{LaTeX2e} \NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{footnotehyper-sphinx}% \ProvidesPackage{footnotehyper-sphinx}%
[2021/01/26 v1.1b hyperref aware footnote.sty for sphinx (JFB)] [2021/01/29 v1.1c hyperref aware footnote.sty for sphinx (JFB)]
%% %%
%% Package: footnotehyper-sphinx %% Package: footnotehyper-sphinx
%% Version: based on footnotehyper.sty 2021/01/26 v1.1b %% Version: based on footnotehyper.sty 2021/01/29 v1.1c
%% as available at https://www.ctan.org/pkg/footnotehyper %% as available at https://www.ctan.org/pkg/footnotehyper
%% License: the one applying to Sphinx %% License: the one applying to Sphinx
%% %%
@ -20,6 +20,7 @@
\DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}% \DeclareOption*{\PackageWarning{footnotehyper-sphinx}{Option `\CurrentOption' is unknown}}%
\ProcessOptions\relax \ProcessOptions\relax
\newbox\FNH@notes \newbox\FNH@notes
\newtoks\FNH@toks % 1.1c
\newdimen\FNH@width \newdimen\FNH@width
\let\FNH@colwidth\columnwidth \let\FNH@colwidth\columnwidth
\newif\ifFNH@savingnotes \newif\ifFNH@savingnotes
@ -27,6 +28,7 @@
\let\FNH@latex@footnote \footnote \let\FNH@latex@footnote \footnote
\let\FNH@latex@footnotetext\footnotetext \let\FNH@latex@footnotetext\footnotetext
\let\FNH@H@@footnotetext \@footnotetext \let\FNH@H@@footnotetext \@footnotetext
\let\FNH@H@@mpfootnotetext \@mpfootnotetext
\newenvironment{savenotes} \newenvironment{savenotes}
{\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}% {\FNH@savenotes\ignorespaces}{\FNH@spewnotes\ignorespacesafterend}%
\let\spewnotes \FNH@spewnotes \let\spewnotes \FNH@spewnotes
@ -37,6 +39,7 @@
\@ifpackageloaded{hyperref} \@ifpackageloaded{hyperref}
{\ifHy@hyperfootnotes {\ifHy@hyperfootnotes
\let\FNH@H@@footnotetext\H@@footnotetext \let\FNH@H@@footnotetext\H@@footnotetext
\let\FNH@H@@mpfootnotetext\H@@mpfootnotetext
\else \else
\let\FNH@hyper@fntext\FNH@nohyp@fntext \let\FNH@hyper@fntext\FNH@nohyp@fntext
\fi}% \fi}%
@ -111,14 +114,33 @@
\fi \fi
}% }%
\def\FNH@spewnotes {% \def\FNH@spewnotes {%
\endgroup \if@endpe\ifx\par\@@par\FNH@toks{}\else
\FNH@toks\expandafter{\expandafter
\def\expandafter\par\expandafter{\par}\@endpetrue}%
\expandafter\expandafter\expandafter
\FNH@toks
\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\FNH@toks
\expandafter\def\expandafter\@par\expandafter{\@par}}%
\expandafter\expandafter\expandafter
\FNH@toks
\expandafter\expandafter\expandafter
{\expandafter\the\expandafter\FNH@toks
\expandafter\everypar\expandafter{\the\everypar}}\fi
\else\FNH@toks{}\fi
\expandafter
\endgroup\the\FNH@toks
\ifFNH@savingnotes\else \ifFNH@savingnotes\else
\ifvoid\FNH@notes\else \ifvoid\FNH@notes\else
\begingroup \begingroup
\let\@makefntext\@empty \let\@makefntext\@empty
\let\@finalstrut\@gobble \let\@finalstrut\@gobble
\let\rule\@gobbletwo \let\rule\@gobbletwo
\FNH@H@@footnotetext{\unvbox\FNH@notes}% \ifx\@footnotetext\@mpfootnotetext
\expandafter\FNH@H@@mpfootnotetext
\else
\expandafter\FNH@H@@footnotetext
\fi{\unvbox\FNH@notes}%
\endgroup \endgroup
\fi \fi
\fi \fi

View File

@ -704,12 +704,18 @@ class LaTeXTranslator(SphinxTranslator):
self.body.append(self.context.pop()) self.body.append(self.context.pop())
def visit_desc(self, node: Element) -> None: def visit_desc(self, node: Element) -> None:
self.body.append('\n\n\\begin{fulllineitems}\n') if self.config.latex_show_urls == 'footnote':
self.body.append('\n\n\\begin{savenotes}\\begin{fulllineitems}\n')
else:
self.body.append('\n\n\\begin{fulllineitems}\n')
if self.table: if self.table:
self.table.has_problematic = True self.table.has_problematic = True
def depart_desc(self, node: Element) -> None: def depart_desc(self, node: Element) -> None:
self.body.append('\n\\end{fulllineitems}\n\n') if self.config.latex_show_urls == 'footnote':
self.body.append('\n\\end{fulllineitems}\\end{savenotes}\n\n')
else:
self.body.append('\n\\end{fulllineitems}\n\n')
def _visit_signature_line(self, node: Element) -> None: def _visit_signature_line(self, node: Element) -> None:
for child in node: for child in node:

View File

@ -169,3 +169,9 @@ Footnote in term [#]_
def bar(x,y): def bar(x,y):
return x+y return x+y
The section with an object description
======================================
.. py:function:: dummy(N)
:noindex:

View File

@ -829,6 +829,7 @@ def test_latex_show_urls_is_inline(app, status, warning):
assert '\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result assert '\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result
assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}' assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}'
'{sphinx\\sphinxhyphen{}dev@googlegroups.com}') in result '{sphinx\\sphinxhyphen{}dev@googlegroups.com}') in result
assert '\\begin{savenotes}\\begin{fulllineitems}' not in result
@pytest.mark.sphinx( @pytest.mark.sphinx(
@ -883,6 +884,7 @@ def test_latex_show_urls_is_footnote(app, status, warning):
assert ('\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result) assert ('\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result)
assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}' assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}'
'{sphinx\\sphinxhyphen{}dev@googlegroups.com}\n') in result '{sphinx\\sphinxhyphen{}dev@googlegroups.com}\n') in result
assert '\\begin{savenotes}\\begin{fulllineitems}' in result
@pytest.mark.sphinx( @pytest.mark.sphinx(
@ -926,6 +928,7 @@ def test_latex_show_urls_is_no(app, status, warning):
assert ('\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result) assert ('\\sphinxurl{https://github.com/sphinx-doc/sphinx}\n' in result)
assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}' assert ('\\sphinxhref{mailto:sphinx-dev@googlegroups.com}'
'{sphinx\\sphinxhyphen{}dev@googlegroups.com}\n') in result '{sphinx\\sphinxhyphen{}dev@googlegroups.com}\n') in result
assert '\\begin{savenotes}\\begin{fulllineitems}' not in result
@pytest.mark.sphinx( @pytest.mark.sphinx(