换行不包含空格的长行

换行不包含空格的长行

我需要格式化非常长的文本字符串。我希望能够指定它们的宽度,并让它们换行,带有或不带有一些特殊符号来表示换行。但问题是这些字符串不包含任何空格。以下是我想要的示例:

\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}

相关内容