我遇到过一种情况,我定义了一个自定义环境。环境总是以“属性 #”开头,然后是一些描述属性的文本。但是,由于 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
,包括以下空格。然后,我调用\ignorespaces
after\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}