summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-François B <2589111+jfbu@users.noreply.github.com>2021-12-11 20:42:04 +0100
committerGitHub <noreply@github.com>2021-12-11 20:42:04 +0100
commit20732a3665e1768958e874e54ff77a1a5bca2976 (patch)
treef669aaf08afb84ab6a268ee8ff5d1b1755eb903d
parentdbbf5ae95b3960ae96c38a55d02250c15eaa7dd4 (diff)
parent4c5aa2a2e5206ffec6a11c9cbe35e6217f6ec850 (diff)
downloadsphinx-git-20732a3665e1768958e874e54ff77a1a5bca2976.tar.gz
Merge pull request #9941 from jfbu/9940_pymultifunction_latex
Fix Multi-function declaration in Python domain has cramped vertical spacing in latexpdf output (#9940)
-rw-r--r--CHANGES2
-rw-r--r--sphinx/texinputs/sphinxlatexobjects.sty33
2 files changed, 26 insertions, 9 deletions
diff --git a/CHANGES b/CHANGES
index 461508bf3..87cb8c366 100644
--- a/CHANGES
+++ b/CHANGES
@@ -48,6 +48,8 @@ Bugs fixed
* #9925: LaTeX: prohibit also with ``'xelatex'`` line splitting at dashes of
inline and parsed literals
* #9944: LaTeX: extra vertical whitespace for some nested declarations
+* #9940: LaTeX: Multi-function declaration in Python domain has cramped
+ vertical spacing in latexpdf output
* #9390: texinfo: Do not emit labels inside footnotes
Testing
diff --git a/sphinx/texinputs/sphinxlatexobjects.sty b/sphinx/texinputs/sphinxlatexobjects.sty
index e00881e53..3deda5c94 100644
--- a/sphinx/texinputs/sphinxlatexobjects.sty
+++ b/sphinx/texinputs/sphinxlatexobjects.sty
@@ -1,7 +1,7 @@
%% MODULE RELEASE DATA AND OBJECT DESCRIPTIONS
%
% change this info string if making any custom modification
-\ProvidesFile{sphinxlatexobjects.sty}[2021/01/27 documentation environments]
+\ProvidesFile{sphinxlatexobjects.sty}[2021/12/05 documentation environments]
% Provides support for this output mark-up from Sphinx latex writer:
%
@@ -91,21 +91,36 @@
% \relax only ends its "dimen" part
\py@argswidth=\dimexpr\linewidth+\labelwidth\relax\relax
\item[{\parbox[t]{\py@argswidth}{\raggedright #1\strut}}]
-% contrarily to \pysiglinewithargsret, we do not do this:
-% \leavevmode\par\nobreak\vskip-\parskip\prevdepth\dp\strutbox
-% which would give exact vertical spacing if item parbox is multi-line,
-% as it affects negatively more common situation of \pysigline
-% used twice or more in a row for labels sharing common description,
-% due to bad interaction with the \phantomsection in the mark-up
+ \futurelet\sphinx@token\pysigline@preparevspace@i
}
\newcommand{\pysiglinewithargsret}[3]{%
\settowidth{\py@argswidth}{#1\sphinxcode{(}}%
\py@argswidth=\dimexpr\linewidth+\labelwidth-\py@argswidth\relax\relax
- \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}}]
+ \item[{#1\sphinxcode{(}\py@sigparams{#2}{#3}\strut}]
+ \futurelet\sphinx@token\pysigline@preparevspace@i
+}
+\def\pysigline@preparevspace@i{%
+ \ifx\sphinx@token\@sptoken
+ \expandafter\pysigline@preparevspace@again
+ \else\expandafter\pysigline@preparevspace@ii
+ \fi
+}
+\@firstofone{\def\pysigline@preparevspace@again} {\futurelet\sphinx@token\pysigline@preparevspace@i}
+\long\def\pysigline@preparevspace@ii#1{%
+ \ifx\sphinx@token\bgroup\expandafter\@firstoftwo
+ \else
+ \ifx\sphinx@token\phantomsection
+ \else
% this strange incantation is because at its root LaTeX in fact did not
% imagine a multi-line label, it is always wrapped in a horizontal box at core
% LaTeX level and we have to find tricks to get correct interline distances.
- \leavevmode\par\nobreak\vskip-\parskip\prevdepth\dp\strutbox}
+% It interacts badly with a follow-up \phantomsection hence the test above
+ \leavevmode\par\nobreak\vskip-\parskip\prevdepth\dp\strutbox
+ \fi
+ \expandafter\@secondoftwo
+ \fi
+ {{#1}}{#1}%
+}
\newcommand{\pysigstartmultiline}{%
\def\pysigstartmultiline{\vskip\smallskipamount\parskip\z@skip\itemsep\z@skip}%
\edef\pysigstopmultiline