I was writing a specification document needing numbered paragraphs. I implemented it like this:
\reversemarginpar
\newcommand\countparagraphs{
\everypar{%
\addtocounter{paragraph}{1}%
\marginpar{\hfill\ttfamily\bfseries\arabic{paragraph} \textsection}%
}
}
\makeatletter
\@addtoreset{paragraph}{section}
\makeatother
\newcommand\CountedSection[1]{\section{#1}\countparagraphs}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.7\baselineskip}
This however gives odd page breaks. Specifically, the page breaks several paragraphs before the end of the page.
I determined that this was caused by the use of \marginpar{...} and replaced it with
\hspace{-4em}\makebox[3em][r]{...}\hspace{1em}
which solves the problem.
I would however like to know what really happened here. Why does \marginpar affect the page breaking?
Here's a MWE:
\documentclass[a4paper]{article}
\usepackage[margin=3cm]{geometry}
\newcommand\countparagraphs{\everypar{\marginpar{!}}}
\newcommand\CountedSection[1]{\section{#1}\countparagraphs}
\title{MWE}
\begin{document}
\maketitle
\tableofcontents
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.7\baselineskip}
\CountedSection{Lipsum 1}
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Praesent mollis ornare ullamcorper.
Nunc fringilla luctus justo auctor consequat.
Sed fringilla metus facilisis diam ultrices eleifend.
Sed eget leo nec neque lobortis hendrerit.
In fringilla dui vitae lectus vehicula a vehicula dui bibendum.
Nunc condimentum, nunc nec feugiat ornare, augue dolor lobortis arcu, id posuere neque orci at enim.
Sed vehicula, nibh a tristique imperdiet, ante erat vulputate nulla, in accumsan odio felis at odio.
Fusce orci lorem, sollicitudin sed imperdiet vitae, fermentum ut urna.
Etiam nec iaculis diam. Duis ante elit, imperdiet id ornare sit amet, porta porttitor nunc.
Nullam magna sem, imperdiet eget fermentum et, accumsan ut enim.
\CountedSection{Lipsum 2}
Vivamus consequat volutpat quam, eu sollicitudin ligula varius vitae.
Maecenas tortor mi, molestie at faucibus vitae, dapibus eget nibh. In hac habitasse platea dictumst.
Nulla molestie ipsum ac sapien interdum eu faucibus eros viverra.
Nulla eu odio nunc. Ut ut libero ut eros adipiscing luctus.
Nunc non nulla odio. Curabitur ac facilisis orci.
Curabitur vitae dui metus, et blandit magna. Donec sollicitudin sodales orci non mollis.
\CountedSection{Lipsum 3}
Morbi lacinia scelerisque odio, sollicitudin tempus erat mattis ut.
In elementum auctor rhoncus. In sit amet lorem a ligula rhoncus accumsan quis non magna.
Vivamus sit amet erat at magna ultricies vulputate. Nunc tortor neque, blandit eu elementum malesuada, iaculis a eros.
Fusce vulputate, elit et iaculis fringilla, orci dui congue justo, at cursus elit velit vitae felis. Duis lacinia aliquam quam, sed vulputate risus porttitor vitae.
Sed dictum lectus eget quam pharetra hendrerit pharetra nibh ultricies. Donec vitae diam purus, a consequat ligula. Donec imperdiet vulputate consequat.
Nunc eleifend dapibus eleifend.
Donec lobortis enim ac quam sagittis fermentum.
Cras vestibulum accumsan nisl, et molestie justo blandit eu. Nunc pretium, tellus sed rutrum euismod, erat quam lacinia est, in convallis nisi ipsum nec dolor. Cras non urna enim.
\CountedSection{Lipsum 4}
Quisque ornare, felis eu tincidunt lacinia, sapien turpis molestie nulla, sed vestibulum massa arcu nec metus.
Phasellus placerat interdum congue.
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nulla ac nibh nec diam rutrum placerat.
Vivamus in imperdiet nisi.
Donec nibh est, vehicula et molestie eu, lobortis in ante. Nullam aliquam orci et justo rhoncus porta.
Aliquam ac sodales purus.
\end{document}


\makeboxsolution is much safer and better. – 5gon12eder Jan 27 '12 at 21:45