LaTeX: refactoring to avoid code duplication

This commit is contained in:
Jean-François B 2023-03-09 19:35:49 +01:00
parent d50ae3c1c9
commit 00640b19ad
4 changed files with 33 additions and 52 deletions

View File

@ -97,7 +97,7 @@
\spx@boxes@radius@topright \z@
\spx@boxes@radius@bottomright \z@
\spx@boxes@radius@bottomleft \z@
% legacy has no shadow
% legacy has no shadow (no need to set \ifspx@boxes@shadowinbbox)
\spx@boxes@withshadowfalse
\spx@boxes@insetshadowfalse
\spx@boxes@withshadowcolorfalse
@ -145,22 +145,12 @@
\vspace{\FrameHeightAdjust}
% copied/adapted from framed.sty's snugshade
% but now using in place of \fcolorbox the Sphinx sophisticated own
\def\FrameCommand##1{\hskip\@totalleftmargin
\ifspx@boxes@withshadow
\ifspx@boxes@insetshadow\else
\ifdim\spx@boxes@shadow@xoffset<\z@\hskip\spx@boxes@shadow@xoffset\relax
\fi
\fi
\fi
% "setup" macro MUST have been called before
\spx@boxes@fcolorbox{##1}%
\ifspx@boxes@withshadow
\ifspx@boxes@insetshadow\else
\ifdim\spx@boxes@shadow@xoffset>\z@\hskip-\spx@boxes@shadow@xoffset\relax
\fi
\fi
\fi
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth}%
\def\FrameCommand##1{%
\hskip\@totalleftmargin
% "setup" macro MUST have been called before
\spx@boxes@fcolorbox{##1}%
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
}%
\savenotes
% use a minipage if we are already inside a framed environment
\ifspx@inframed

View File

@ -124,20 +124,8 @@
% framing "adapt" to an indented context.
\hskip\@totalleftmargin
\hskip-\spx@boxes@border@left\hskip-\spx@boxes@padding@left
\ifspx@boxes@withshadow
\ifspx@boxes@insetshadow\else
\ifdim\spx@boxes@shadow@xoffset<\z@\hskip\spx@boxes@shadow@xoffset
\fi
\fi
\fi
\spx@verb@fcolorbox {#1}{#2}{#3}%
\hskip-\spx@boxes@padding@right\hskip-\spx@boxes@border@right
\ifspx@boxes@withshadow
\ifspx@boxes@insetshadow\else
\ifdim\spx@boxes@shadow@xoffset>\z@\hskip-\spx@boxes@shadow@xoffset
\fi
\fi
\fi
\hskip-\linewidth \hskip-\@totalleftmargin \hskip\columnwidth
}%
\long\def\spx@verb@fcolorbox #1#2#3{%

View File

@ -29,22 +29,8 @@
\long\def\spx@ShadowFBox#1{%
\leavevmode
\setbox\z@\hbox{#1}%
\ifspx@topic@withshadow
\ifspx@topic@insetshadow\else
\ifdim\spx@topic@shadow@xoffset<\z@\hskip\spx@topic@shadow@xoffset\relax
\fi
\fi
\fi
% \spx@shadowbox@boxes@fcolorbox@setup MUST have been called before
\spx@boxes@fcolorbox{\box\z@}%
\ifspx@topic@withshadow
\ifspx@topic@insetshadow\else
% A strangely unnoticed 5.1.0 breakage of the legacy placement of the
% shadow was caused by a lacking minus sign here, fixed at 6.1.2
\ifdim\spx@topic@shadow@xoffset>\z@\hskip-\spx@topic@shadow@xoffset\relax
\fi
\fi
\fi
% \spx@shadowbox@boxes@fcolorbox@setup MUST have been called before
\spx@boxes@fcolorbox{\box\z@}%
}
% Use framed.sty \MakeFramed/\endMakeFramed to allow page breaks for topic

View File

@ -50,11 +50,12 @@
% Internal registers, conditionals, colors to be configured by each caller
% via a preliminary "setup" call
%
\newif\ifspx@boxes@withshadow
\newif\ifspx@boxes@insetshadow
\newif\ifspx@boxes@withshadow
\newif\ifspx@boxes@insetshadow
\newif\ifspx@boxes@withbackgroundcolor
\newif\ifspx@boxes@withshadowcolor
\newif\ifspx@boxes@withbordercolor
\newif\ifspx@boxes@withshadowcolor
\newif\ifspx@boxes@withbordercolor
\newif\ifspx@boxes@shadowinbbox
%
\newdimen\spx@boxes@border
\newdimen\spx@boxes@border@top
@ -151,6 +152,13 @@
\else
\spx@boxes@withshadowcolorfalse
\fi
% Display elements pre, topic, warning et al. by default do not include
% shadow in box (legacy; and only topic actually uses a shadow per default)
% This may be refactored still more in future, but this 6.2.0 extra helped
% reduce workload from code-blocks (pre), contents (topic) and admonitions.
% As this conditional is a priori false and should only be changed locally
% (by \sphinxbox), this line is actually superfluous.
\spx@boxes@shadowinbboxfalse
\spx@boxes@fcolorbox@setup@b
}
\@ifpackageloaded{pict2e}
@ -189,6 +197,7 @@
{sphinxboxBorderColor}
{sphinxboxBgColor}
{sphinxboxShadowColor}%
\spx@boxes@shadowinbboxtrue% inline sphinx boxes include shadow in bbox
\setbox0\hbox\bgroup\aftergroup\spx@boxes@sphinxbox@a
\let\next=%
}
@ -208,7 +217,7 @@
% or \spx@boxes@fcolorbox@rounded depending on preliminary set-up.
% Let's give it some default fall-back:
% (but preliminary "setup" of \spx@boxes@fcolorbox@rectangle parameters
% is mandatory requirement for it to work)
% is mandatory requirement for it to work)
\def\spx@boxes@fcolorbox{\spx@boxes@fcolorbox@rectangle}
% Then:
@ -276,9 +285,11 @@
}
\def\spx@boxes@fcolorbox@externalshadow{%
% reserve space to shadow if on left
% reserve space to external shadow if on left
\ifspx@boxes@withshadow
\ifspx@boxes@shadowinbbox
\ifdim\spx@boxes@shadow@xoffset<\z@\kern-\spx@boxes@shadow@xoffset\fi
\fi
\fi
% BACKGROUND
% draw background and move back to reference point
@ -350,7 +361,9 @@
\box\spx@tempboxa
% include lateral shadow in total width
\ifspx@boxes@withshadow
\ifspx@boxes@shadowinbbox
\ifdim\spx@boxes@shadow@xoffset>\z@\kern\spx@boxes@shadow@xoffset\fi
\fi
\fi
\egroup
}
@ -520,9 +533,11 @@
\long\def\spx@boxes@fcolorbox@rounded #1{%
\hbox{%
\spx@boxes@fcolorbox@setuphook
% reserve space to shadow if on left
% reserve space to external shadow if on left
\ifspx@boxes@withshadow
\ifspx@boxes@shadowinbbox
\ifdim\spx@boxes@shadow@xoffset<\z@\kern-\spx@boxes@shadow@xoffset\fi
\fi
\fi
\vbox{%
% adjust vertical bbox
@ -601,7 +616,9 @@
}% end of \vbox
% include lateral shadow in total width
\ifspx@boxes@withshadow
\ifspx@boxes@shadowinbbox
\ifdim\spx@boxes@shadow@xoffset>\z@\kern\spx@boxes@shadow@xoffset\fi
\fi
\fi
}% end of \hbox
}%