当前SIGCHI 模板确实包含一些防止孤行的说明(\clubpenalty
和\widowpenalty
),但出于某种原因,这对我不起作用。我尝试增加惩罚,但这也没有阻止孤行。不加载包microtype
可以解决我拥有的一个文档的问题,但不能解决其他文档的问题。我整理了一个简短的示例文件,它为我生成了一个孤行(“第 1 节”部分标题在第一页,其余部分在第二页):
\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}
有人对该模板有经验吗?需要做哪些更改才能使其正常工作?
更新:\@startsection 有什么问题吗?
我四处搜寻了一下西格奇级提供了自己的版本\@startsection
。删除它会将示例文档中孤立的部分名称推到下一页。但是,由于这可能是一个相当剧烈的变化,我很好奇这种行为的具体原因是什么。我不熟悉那里使用的大多数命令,但也许其他人可以帮忙。
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
\addpenalty\@secpenalty\addvspace\@tempskipa
\fi
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}%
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}
标记 \@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
\addpenalty\@secpenalty
\addvspace\@tempskipa
%\fi
\parskip=0pt
\@ifstar
{\@ssect{#3}{#4}{#5}{#6}}
{\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}%
}
答案1
这个类文件可以追溯到 20 多年前,是为 LaTeX 2.09 编写的,后来进行了一些修补,以便在今天的 LaTeX 下运行。这是一个很好的例子
- 现在什么事都不该做 :-)
- LaTeX 仍然能够以某种方式处理非常旧的代码
如果有机会说服会议组织者让某人从头开始为他们重写该课程,我想这将是一件好事,因为里面有很多东西不应该按照现在的方式完成。
您的特定问题的原因确实在于\@startsection
代码的重新定义,但不在于您上面展示的部分(尽管那部分也可能有问题),而在于\@ssect
和的重新定义\@sect
。在那里,您每次都会发现这一行
\vskip -6pt % [jdf] less space between section as in the Word template
但是胶水默认会引入断点,所以一个立即的解决办法是在这些断点之前
\par\nobreak
\vskip -6pt % [jdf] less space between section as in the Word template
但这确实应该以不同的方式进行清理。整个间距设置\parskip
和\baselineskip
代码中的设置肯定不是应该做的,有更好的方法可以实现预期结果。即使这样做,也需要以不同的方式完成,如以下输入所示:
\section{Section 1} Plus something ...
这给你
! Missing number, treated as zero.
<to be read again>
s
l.29 \section{Section 1} Plus s
omething ...
? s
假设一个部分文本不太可能以字符开头Plus
,或者Minus
不能保证它不会以字符开头。原因是要\parskip
完成的任务如下:
\@xsect{#3}\parskip=6pt} % [jdf] paragraph skip shorter
在宏重新定义的末尾。这里的问题是 TeX 将继续为 寻找额外的复数或减号组件\parskip
。换句话说,\relax
缺少 a(至少)。