我需要格式化非常长的文本字符串。我希望能够指定它们的宽度,并让它们换行,带有或不带有一些特殊符号来表示换行。但问题是这些字符串不包含任何空格。以下是我想要的示例:
\foo{2in}
{17823941237490812347123904712389407123408917234890123748912034712985712389012351}
所以我想要得到一个包含这个长数字但跨越几行的 hbox,这样我就能得到一个 2 英寸宽的矩形。
有谁知道有可以做到这一点的包/技巧/宏吗?
答案1
您可以尝试序列分割包裹。
答案2
可能是这样的:
\def\breaknumberanywhere{\hskip0pt\futurelet\next\breaknumberi}
\def\breaknumberi{\ifcat\next9\expandafter\breaknumberii\fi}
\def\breaknumberii#1{#1\breaknumberanywhere}
\def\foo#1#2{\vtop{\hsize=#1\rightskip=0pt plus 1fil \leftskip=0pt
\noindent\breaknumberanywhere#2}}
Here is a long number:
\foo{2in}
{17823941237490812347123904712389407123408917234890123748912034712985712389012351}
\bye
(根据评论中的要求,编辑为最小工作示例。LaTeXifization 留给感兴趣的读者。我还进行了设置\leftskip
以使其\foo
更加健壮。)
答案3
Thorsten 告诉您要使用什么包;为了完整起见,我给出了一个可编译的示例:
\documentclass{article}
\usepackage{seqsplit}
\newcommand\foo[2]{%
\begin{minipage}{#1}
\seqsplit{#2}
\end{minipage}
}
\begin{document}
\foo{2in}
{17823941237490812347123904712389407123408917234890123748912034712985712389012351}
\end{document}
答案4
这是一篇非常古老的帖子。我添加了一个解决方案,认为这个答案可能对到达这里的任何人都有帮助:
\documentclass{article}
\begin{document}
\makeatletter
\def\foo#1#2{%
\parbox{#1}{\strut\@tfor\xx:=#2\do{%
\xx\linebreak[0]%
}\strut}%
}
\foo{2in}
{17823941237490812347123904712389407123408917234890123748912034712985712389012351}
\foo{3in}
{17823941237490812347123904712389407123408917234890123748912034712985712389012351}
\end{document}