Hbox 溢出:空格处自动换行

Hbox 溢出:空格处自动换行

我有一个问题Overfull \hbox (13.62198pt too wide) in paragraph at lines 49--50。我读过类似的问题,所有的解决方案都是直接在文本中引入手动干预 - 例如使用换行符、来自另一个包的命令围绕有问题的文本等。如果您无法决定,我想在文档开头定义一些设置,例如在空格处换行。我想尽可能避免手动工作。

我有问题的文本行是:

\开始{逐项列举}
\item 探究语言 $\mathcal{L}$ 由 $\mathcal{C}_o=\{milk, curry, rice\}$,$\mathcal{R}_o=\{TastesHot, IsWhite, ContainsSpice, ContainsSugar\}$, $\mathcal{F}_o=\{\}$ 给出。
\item 设观察语言 $\mathcal{L}_o$ 为 $\mathcal{C}_o=\{milk, curry, rice\}$, $\mathcal{R}_o=\{TastesHot, IsWhite\}$, $\mathcal{F}_o=\{\}$
\item 设假设语言$\mathcal{L}_h$为$\mathcal{C}_h=\{milk, curry, rice\}$, $\mathcal{R}_h=\{TastesHot, IsWhite, ContainsSpice\}$, $\mathcal{F}_h=\{\}$。
\item $\mathcal{L}_h$-句子为 $\forall x. TastesHot(x) \implies ContainsSpice(x)$、$\forall x. IsWhite(x) \lor TastesHot(x)$。
\end{逐项列举}

文档开头的设置是:

\documentclass[a4paper,12pt,twoside]{报告}
\usepackage[左=2cm,右=2cm,上=2cm,下=3cm]{几何}
\usepackage{amsthm}
\usepackage{amsmath}

模板代码如下:

\pagestyle{空}

\setlength{\parskip}{2ex 加 0.5ex 减 0.2ex}
\setlength{\parindent}{0pt}

\makeatletter %避免“\@”产生的错误消息。使 Latex 将“@”视为字母

\linespread{1.5}
\def\提交日期#1{\gdef\@提交日期{#1}}

\def\maketitle{
  \开始{标题页}{
    %\linespread{1.5}
    \伦敦大学\\
    %\越线
    帝国理工学院
    %\越线
    计算系
    \R M
    \vskip 3in
    \大 \bf \@title \par
  }
  \vskip 0.3英寸
  \par
  {\大\@author}
  \vskip 2.9英寸
  \par
  提交部分内容以满足工程学硕士学位的要求
  \越线
  伦敦帝国理工学院计算机(人工智能)专业
  \越线
  \@提交日期
  \vfil
  \end{标题页}
}

\def\titlepage{
  \新一页
  \定心
  \linespread{1}
  \正常尺寸
  \vbox 改为 \vsize\bgroup\vbox 改为 9in\bgroup
}
\def\endtitlepage{
  \par
  \kern 0pt
  \egroup
  \vss
  \egroup
  \清除双页
}

\def\摘要{
  \开始{中心}{
    \large\bf 摘要}
  \结束{中心}
  \小的
  %\def\baselinestretch{1.5}
  \linespread{1.5}
  \正常尺寸
}
\def\endabstract{
  \par
}

\newenvironment{致谢}{
  \清除双页
  \开始{中心}{
    \large \bf 致谢}
  \结束{中心}
  \小的
  \linespread{1.5}
  \正常尺寸
}{\cleardoublepage}
\def\endacknowledgements{
  \par
}

\newenvironment{奉献精神}{
  \清除双页
  \开始{中心}{
    \large \bf 奉献}
  \结束{中心}
  \小的
  \linespread{1.5}
  \正常尺寸
}{\cleardoublepage}
\def\enddedication{
  \par
}

\def\preface{
    \pagenumbering{罗马}
    \pagestyle{普通}
    \doublespacing
}

\def\body{
    \清除双页    
    \pagestyle{uheadings}
    \目录
    \pagestyle{普通}
    \清除双页
    \pagestyle{uheadings}
    \表列表
    \pagestyle{普通}
    \清除双页
    \pagestyle{uheadings}
    \图列表
    \pagestyle{普通}
    \清除双页
    \pagestyle{uheadings}
    \pagenumbering{阿拉伯语}
    \doublespacing
}

\makeatother %避免“\@”产生的错误消息。使 Latex 将“@”视为字母

注意,这些有空格,我不明白为什么 Latex 会抱怨。我是 Latex 的新手,也许一个简单的设置就能解决我的问题。

答案1

您已经分离了不同的元素,在组成每种语言的不同方程式之间提供了空格,并将这些方程式分别编码为数学(即使前两个方程式之间的空格可能被无意中省略了)。不幸的是,这些空格并不位于最适合 tex 换行的位置。

最终目标是让所呈现的内容被人们理解。

该建议分为两部分。

首先,正如您所说,“牛奶、咖喱、米饭”这几个词是常量,因此应该使用文本字体,最好不要使用斜体,即使它们是数学表达式的一部分。正如您在原文中所编码的,它们被排版为变量相乘的字符串。这些可以编码为\mathrm{<word>},但这无助于换行。它也不会在逗号后留下空格,尽管在这种情况下,读者不会误解那里是否可见空格。

另一种处理方法是将它们识别为文本,并输入为,例如,

$\mathcal{C}_o=\{\text{milk, curry, rice}\}$

但这对换行也无帮助,因为在这种情况下,唯一“允许”的换行是在等号后面。

因此,建议的第二部分是利用这样一个事实:如果一行被打断,读者不太可能误解它的意思之内该常量字符串,并(暂时)终止左括号后的数学运算,并在结束括号后恢复它:

$\mathcal{C}_o=\{$milk, curry, rice$\}$

为了说明,对“所有数学”实例使用强制换行符,比较以下两行:

在此处输入图片描述

这是产生图像的输入:

\begin{itemize}
\item The language of enquiry $\mathcal{L}$ is given by
$\mathcal{C}_o=\{milk, curry, rice\}$,\\
$\mathcal{R}_o=\{TastesHot, IsWhite, ContainsSpice, ContainsSugar\}$,
$\mathcal{F}_o=\{\}$.
\item The language of enquiry $\mathcal{L}$ is given by
$\mathcal{C}_o=\{$milk, curry, rice$\}$,
$\mathcal{R}_o=\{$TastesHot, IsWhite, ContainsSpice, ContainsSugar$\}$,
$\mathcal{F}_o=\{\}$.
\end{itemize}

(顺便说一句,这并不是一个简单的例子。)

相关内容