`\ignorespaces` 的一个版本,不会溢出行

`\ignorespaces` 的一个版本,不会溢出行

我正在使用基于表格环境的命令来对齐语言学书籍中的单词对。在一些单词对之后,我使用它\ignorespaces来抑制间距,但这会导致行溢出。有没有其他方法可以避免这种情况?

MWE 提供的命令显示了两个命令:\gloss将一个参数放在下一个参数上方,然后在下一个堆叠对之前插入一个空格;\glom在每个参数后插入一个连字符并吞噬以下空格。(这些是我实际使用的宏的玩具版本,但它们突出了这个问题。)

平均能量损失

\documentclass[12pt]{article}
\usepackage[a5paper,margin=25mm]{geometry}

\newcommand\glom[2]{\begin{tabular}[t]{@{}l@{}}\itshape#1-\\#2-\end{tabular}\ignorespaces}
\newcommand\gloss[2]{\begin{tabular}[t]{@{}l@{}}\itshape#1\\#2\end{tabular} }

\begin{document}

\noindent 
Compare the normal linebreak of this line with how%
\rlap{\raisebox{-40ex}[0pt][0pt]{\rule{.5pt}{43ex}}} 
\verb"\glom" overspills:
\medskip

\noindent
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\medskip

\noindent
What I'd like is an automatic line break: 
\medskip

\noindent
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}%
\linebreak
\glom{contre}{counter}
\gloss{essai}{attempt}
\medskip

\noindent
By itself, \verb"\gloss" respects linebreaks: \gloss{essai}{attempt}
\gloss{essai}{attempt}
\gloss{essai}{attempt}

\end{document} 

答案1

OP 要求我将我的评论写进答案中。最初,我建议在 之前立即添加\allowbreak的定义。这样做的效果是允许和之间换行,但并不能防止超出边距。此外,目前还不完全清楚 OP 是否真的希望允许和之间换行。\glom\ignorespaces\glom\gloss\glom\glom\gloss

tabular随后,问题变得很明显,在双倍宽度配置中使用确实限制了可用断点的数量。我随后通过评论提出的解决方案是将集合括在 中sloppypar。这似乎提供了正确的解决方案。先前的建议\allowbreak可以纳入或不纳入,由 OP 自行决定。

\documentclass[12pt]{article}
\usepackage[a5paper,margin=25mm]{geometry}

\newcommand\glom[2]{\begin{tabular}[t]{@{}l@{}}\itshape#1-\\#2-\end{tabular}\ignorespaces}
\newcommand\gloss[2]{\begin{tabular}[t]{@{}l@{}}\itshape#1\\#2\end{tabular} }

\begin{document}
\begin{sloppypar}
\noindent
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\end{sloppypar}
\end{document} 

在此处输入图片描述

答案2

您会遇到问题,因为项目太宽而换行点又太少,所以您应该使用flushleft

\documentclass[12pt]{article}
\usepackage[a5paper,margin=25mm]{geometry}

\newcommand\glom[2]{%
  \begin{tabular}[t]{@{}l@{}}\itshape#1-\\#2-\end{tabular}%
  \ignorespaces
}
\newcommand\gloss[2]{%
  \begin{tabular}[t]{@{}l@{}}\itshape#1\\#2\end{tabular}%
  \space\ignorespaces
}

\begin{document}

\noindent\makebox[0pt][l]{%
  \makebox[\textwidth][r]{\kern-0.4pt\smash{\vrule width 0.4pt depth 30ex height 2ex}}%
}%
Compare the normal linebreak of this line with how
\verb"\glom" overspills:
\begin{flushleft}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\glom{contre}{counter}
\gloss{essai}{attempt}
\end{flushleft}

\end{document} 

在此处输入图片描述

相关内容