防止部分文本水平拉伸

防止部分文本水平拉伸

我遇到过一种情况,我定义了一个自定义环境。环境总是以“属性 #”开头,然后是一些描述属性的文本。但是,由于 pdfLaTeX 的自动格式化,有时数字会随着“属性 #”标题后面的文本一起被拉伸(请参阅下面的 MWE)。

\documentclass[letterpaper,12pt]{report}
\usepackage{amsmath}

\setlength{\parindent}{0pt}

% Creating a counter for the Property environment
\newcounter{ctrProperty}
% Defining a custom Property environment
\newenvironment{myProperty}{
   \refstepcounter{ctrProperty}
   \textbf{Property \thectrProperty}
   \itshape
}{\par}

\hyphenation{supercalifragilisticexpialidocious}

\begin{document}
\begin{myProperty}
A little bit of text.
\end{myProperty}

\begin{myProperty}
More text that causes a stretch because it ends in a word supercalifragilisticexpialidocious
\end{myProperty}
\end{document}

示例输出

如您所见,前一个属性中的 2 与 1 略有错位,而我更希望它们与其对应的“属性”之间的间距相同。如果“A”和“M”对齐,那就太好了,但也许最好将其作为一个单独的问题。

如何防止 LaTeX 拉伸标题?是否\nostretch{\textbf{Property \thectrProperty}}存在类似的命令?

答案1

在这里,我将加粗的属性标签放在 中以防止其拉伸\mbox包括以下空格。然后,我调用\ignorespacesafter\itshape来消除 LaTeX 在添加空格时所采取的额外自由。我确保环境定义的行以 结尾,%以抵御多余的、不需要的空格标记。

\documentclass[letterpaper,12pt]{report}
\usepackage{amsmath}

\setlength{\parindent}{0pt}

% Creating a counter for the Property environment
\newcounter{ctrProperty}
% Defining a custom Property environment
\newenvironment{myProperty}{%
   \refstepcounter{ctrProperty}%
   \mbox{\textbf{Property \thectrProperty} ~}%
   \itshape\ignorespaces%
}{\par}

\hyphenation{supercalifragilisticexpialidocious}

\begin{document}
\begin{myProperty}
A little bit of text.
\end{myProperty}

\begin{myProperty}
 \sloppy More text that causes a stretch because it ends in a word supercalifragilisticexpialidocious
\end{myProperty}
\end{document}

在此处输入图片描述

对于不同的方法,正如我在评论中提到的,人们可以选择在 中排版文本\raggedright

答案2

您插入的简单空间会被 TeX 解释为普通空间,即它具有一定程度的可拉伸性和可收缩性(与其自然宽度一起)。您可以尝试手动插入一定量hspace;我选择了,0.4em但您可以选择最适合您的一种,即:

\documentclass[letterpaper,12pt]{report}
\usepackage{amsmath}

\setlength{\parindent}{0pt}

% Creating a counter for the Property environment
\newcounter{ctrProperty}
% Defining a custom Property environment
\newenvironment{myProperty}{%
   \refstepcounter{ctrProperty}%
   \textbf{Property\hspace{.4em}\thectrProperty }\itshape%
}{\par}

\hyphenation{supercalifragilisticexpialidocious}

\begin{document}
\begin{myProperty}
A little bit of text.
\end{myProperty}

\begin{myProperty}
More text that causes a bit of a stretch because it ends in a word supercalifragilisticexpialidocious
\end{myProperty}
\end{document}

在此处输入图片描述

感谢@egreg 消除了一些虚假的空间

答案3

您可能会考虑使用enumitem枚举环境来实现这一点,对吧?这样您就可以保证标签有适当的间距。并且项目主体从同一行开始(问题中的“A”和“M”)。

\documentclass[letterpaper,12pt]{report}
\usepackage[showframe]{geometry} % not required in main file
\usepackage{enumitem}
\setlength{\parindent}{0pt}
\hyphenation{supercalifragilisticexpialidocious}

\newlist{myProperty}{enumerate}{1}
\setlist[myProperty]{before=\itshape,label=Property \arabic*, font=\normalfont\textbf, noitemsep, wide, resume}

\begin{document}
\begin{myProperty}
    \item A little bit of text.
    \item More text that no longer causes a stretch because it ends in a word supercalifragilisticexpialidocious
\end{myProperty}

Then some intermediate text.

\begin{myProperty}
    \item A little bit of text.
    \item More text that no longer causes a stretch because it ends in a word supercalifragilisticexpialidocious
\end{myProperty}

\end{document}

在此处输入图片描述

答案4

从语义上讲,将环境定义为定理环境似乎更自然,Property具有相关的定理样式,这很容易用 来定义thmtools。对于拉伸问题,为 LaTeX 不知道如何连字的长单词定义连字点:

\documentclass[letterpaper,12pt]{report}
\usepackage{amsmath}

\setlength{\parindent}{0pt}
\usepackage{lipsum}
\usepackage{amsthm, thmtools}
\declaretheoremstyle[%
spaceabove=0pt,
spacebelow=0pt,
headfont=\bfseries,
bodyfont=\itshape,
headpunct=,
postheadspace=0.6em]{myplain}

\declaretheorem[style=myplain]{Property}

\hyphenation{super-cali-fragi-listic-expiali-docious}

\begin{document}

\lipsum[11]
\begin{Property}
  A little bit of text.
\end{Property}
\lipsum[11]
\begin{Property}
  More text that causes a stretch because it ends in a word supercalifragilisticexpialidocious
\end{Property}
\lipsum[11]

\end{document} 

在此处输入图片描述

相关内容