将文本限制在无换行符的框内

将文本限制在无换行符的框内

这:

\fbox{\makebox[3cm][l]{long text long text long text long text}}

结果是:

\fbox 文本太长

我希望它正好停在框的末尾。不换行。这样就看不到“太多”的文本了。

答案1

\documentclass{article}
\usepackage[fit,breakall]{truncate}
\begin{document}

\fbox{\truncate[]{3cm}{long text long text long text long text}}
\end{document}

阅读文档以了解选项。

答案2

这是一个使用在规定长度内尽可能多的文本的解决方案;*-form 只框住适合的文本,而正常形式无论如何都会使用规定的长度。

\documentclass{article}
\usepackage{xparse}

\NewDocumentCommand{\restrict}{smm}{% #2 is a length, #3 is the text
  \setbox0=\vbox{\hsize=#2\relax\raggedright#3\par
    \setbox2=\lastbox\unskip\unpenalty
    \loop
      \setbox4=\box2
      \setbox2=\lastbox\unskip\unpenalty
    \unless\ifvoid2
    \repeat
    \global\setbox1=\box4
  }% end of the \vbox
  \fbox{\IfBooleanTF{#1}{\unhbox}{\box}1}%
}

\begin{document}

\restrict{3cm}{A long text that should be cut at 3cm at most}

\restrict*{3cm}{A long text that should be cut at 3cm at most}

\restrict{3cm}{A long text that is cut at 3cm at most}

\restrict*{3cm}{A long text that is cut at 3cm at most}

\end{document}

这个想法是,以规定的长度作为线宽来撰写一个段落,然后拆除生成的框,直到得到最终排版的第一行。

在此处输入图片描述

答案3

我的解决方案与 egreg 的解决方案类似,但不需要,\loop因为我们只有两行内部段落。行由设置\parshape。第一行具有给定宽度,第二行(如果存在)具有\maxdimen宽度。

\def\restrict#1#2{\setbox0=\vbox{\parshape 2 0pt #1 0pt \maxdimen
   \rightskip=0pt plus1fil\noindent#2\par
   \setbox0=\lastbox \unskip\unpenalty \global\setbox2=\lastbox}%
   \ifvoid2 #2\else \leavevmode\unhbox2 \unskip \fi
}
test: \restrict{3cm}{A long text that should be cut at 3cm at most}

限制文字周围的边框不在这里明确打印。您可以使用其他工具来完成。

相关内容