我正在使用基于表格环境的命令来对齐语言学书籍中的单词对。在一些单词对之后,我使用它\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}