# Orphans when using the SIGCHI LaTeX style

The current SIGCHI template does contain some instructions to prevent orphans (\clubpenalty and \widowpenalty) but for some reason that isn't working for me. I tried increasing the penalties but that didn't prevent orphans for me either. Not loading the microtype package solves this for one document I have but not for others. I've put together a short example file that produces an orphan ("Section 1" section heading on first page, rest of section on second one) for me:

    \documentclass{sigchi}

\special{papersize=8.5in,11in}
\setlength{\paperheight}{11in}
\setlength{\paperwidth}{8.5in}
\setlength{\pdfpageheight}{\paperheight}
\setlength{\pdfpagewidth}{\paperwidth}

\usepackage[english]{babel}
\usepackage{times}
\usepackage{lipsum}

\begin{document}

\title{The Title}
\author{Anonymous}
\maketitle

\begin{abstract}
\lipsum[1]
\end{abstract}

\section{Section 0}
\lipsum[2-8]

\section{Section 1}
\lipsum[8-12]

\end{document}


Does anybody have some experience with that template and what needs to be changed to get this to work?

# Update: \@startsection at fault?

I poked around a bit and the sigchi class provides its own version of \@startsection. Removing that pushes the orphaned section name in my example document to the next page. However, as this is potentially a rather drastic change, I'd be curious as to what specifically is the reason for that behavior. I'm not familiar with most of the commands used there, but maybe somebody else can help out.

LaTeX \@startsection:

    \def\@startsection#1#2#3#4#5#6{%
\if@noskipsec \leavevmode \fi
\par
\@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@
\@tempskipa -\@tempskipa \@afterindentfalse
\fi
\if@nobreak
\everypar{}%
\else
\fi
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}


Sigchi \@startsection:

    \let\@period=.
\def\@startsection#1#2#3#4#5#6{%
\if@noskipsec  %gkmt, 11 aug 99
\global\let\@period\@empty
\leavevmode
\global\let\@period.%
\fi
\par
\@tempskipa #4\relax
\@afterindenttrue
\ifdim \@tempskipa <\z@
\@tempskipa -\@tempskipa
\@afterindentfalse
\fi
%\if@nobreak  11 Jan 00 gkmt
%\everypar{}
%\else
%\fi
\parskip=0pt
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
}

-
The class has some apparent flaw, as no column/page break should happen between a section title and the following text. – egreg Sep 26 '12 at 22:08

This class file dates back more than 20 years and was written for LaTeX 2.09 and then patched somewhat to run under todays LaTeX. It is a rather good example of

• how should things not be done these days :-)
• the power of LaTeX to still be able to somehow deal with really old code

If there is any chance to convince the conference organizers to have somebody rewrite that class for them from scatch I guess it would be a Good Thing as there is a lot of stuff inside that shouldn't be done the way it is.

The reason for your particular issue is indeed in the redefinition of the \@startsection code but not in the part you showed above (though that may also have issues) but in the redefinitions of \@ssect and \@sect. In there you find each time the line

\vskip -6pt  % [jdf] less space between section as in the Word template


But a glue introduces a breakpoint by default and that is what you get so an immediate fix would be to precede these by

\par\nobreak
\vskip -6pt  % [jdf] less space between section as in the Word template


but this should really be cleaned up differently. The whole spacing setup setting \parskip and \baselineskip in the code is certainly not as it should be done there are much better ways to achieve the intended results. And even if done like this it would need to be done differently as can be seen by the following input:

\section{Section 1} Plus something ...


which gives you

! Missing number, treated as zero.
s
l.29     \section{Section 1} Plus s
omething ...
? s


Granted that a section text is unlikely to start with the characters Plus or Minus there is no guarantee it doesn't. Reason for this are the assignments to \parskip done like this:

\@xsect{#3}\parskip=6pt} % [jdf] paragraph skip shorter


at the end of the macro redefinitions. Problem here is that TeX will then continue to look for additional plur or minus components for \parskip. In other words a \relaxis missing (as a minimum).

-