1

I have defined the following custom nub environment in my preamble:

\makeatletter
\newenvironment{nub}[1][\@nil]{%
    \def\tmp{#1}%
    \ifx\tmp\@nnil
        \subsection{}
    \else
        \subsection{#1.}
    \fi}
\makeatother

This works perfectly for my needs, except when a nub ends with an equation, or any other maths in display mode, because then it adds a bunch more vertical space before the next nub.

Here is a screenshot where you can see the extra spacing, before (6.4.4): enter image description here

I'm sure there must be some answer for this problem on the site already, but I couldn't find anything!

0

1 Answer 1

3

You're forgetting the “end part” in the definition of nub, which should be \ignorespacesafterend. With the code you show, \makeatother is taken instead.

\documentclass{book}
\usepackage{amsmath}

\makeatletter
\newenvironment{nub}[1][\@nil]{%
    \def\tmp{#1}%
    \ifx\tmp\@nnil
        \subsection{}
    \else
        \subsection{#1.}
    \fi}{\ignorespacesafterend}
\makeatother

\begin{document}

\setcounter{chapter}{6}\setcounter{section}{4}\setcounter{subsection}{2}

\begin{nub}
text text text text text text text text text text 
text text text text text text text text text text 
text text text text text text text text text text 
\begin{equation*}
F(x)=G(x)
\end{equation*}
\end{nub}

\begin{nub}[Lemma]
text text text text text text text text text text 
text text text text text text text text text text 
text text text text text text text text text text 
\end{nub}

\end{document}

enter image description here

A simpler definition with xparse:

\documentclass{book}
\usepackage{amsmath}
\usepackage{xparse}

\NewDocumentEnvironment{nub}{o}
 {\subsection{\IfValueT{#1}{#1.}}}
 {\ignorespacesafterend}

How I would implement it

\documentclass{book}
\usepackage{amsmath}
\usepackage{amsthm,xparse}

\newtheoremstyle{nub}
  {\topsep}     % ABOVESPACE
  {\topsep}     % BELOWSPACE
  {\normalfont} % BODYFONT
  {0pt}         % INDENT (empty value is the same as 0pt)
  {\bfseries}   % HEADFONT
  {}            % HEADPUNCT
  {5pt plus 1pt minus 1pt} % HEADSPACE
  {(\thmnumber{#2})\thmname{#1}} % CUSTOM-HEAD-SPEC

\theoremstyle{nub}
\newtheorem{nubinner}[subsection]{\nubname}
\newcommand{\nubname}{}

\NewDocumentEnvironment{nub}{o}
 {\IfValueT{#1}{\renewcommand{\nubname}{ #1.}}\begin{nubinner}}
 {\end{nubinner}}

\begin{document}

\setcounter{chapter}{6}\setcounter{section}{4}\setcounter{subsection}{2}

\begin{nub}
text text text text text text text text text text 
text text text text text text text text text text 
text text text text text text text text text text 
\begin{equation*}
F(x)=G(x)
\end{equation*}
\end{nub}

\begin{nub}[Lemma]
text text text text text text text text text text 
text text text text text text text text text text 
text text text text text text text text text text 
\end{nub}

\end{document}

enter image description here

6
  • just adding the \ignorespacesafterend fixed everything, thank you! is there any reason to use your second solution over this fix (besides the code looking much more understandable)?
    – Tim
    Commented Jun 4, 2019 at 21:25
  • 1
    @Tim The second solution, the one with \newtheorem, is not a hack. Yours is.
    – egreg
    Commented Jun 4, 2019 at 21:49
  • haha, fair enough, thanks!
    – Tim
    Commented Jun 4, 2019 at 22:07
  • for some reason the optional argument (e.g. Lemma) doesn't seem to do anything for me in your second solution...
    – Tim
    Commented Jun 5, 2019 at 15:43
  • @Tim Without seeing your general setup it’s difficult to make a diagnosis
    – egreg
    Commented Jun 5, 2019 at 16:02

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .