我怎样才能在任何字符处设置禁忌断线?

我怎样才能在任何字符处设置禁忌断线?

我创建了一个表,\begin{tabu}其中的列包含很长的字符串,但无法换行,因为它们不是英文文本,而是编程语言标识符。如何让它们在除空格和连字符之外的其他字符(如冒号或下划线)处换行,甚至在任意字符处换行(如果不存在这些其他字符)。

我的问题的证明:

\documentclass{article}
\usepackage{tabu}
\begin{document}
\begin{tabu}{|X[l]|X[l]|X[l]|}
\hline
ThisIsAVeryLongStringWhichINeedToBreakAcrossMultipleLines & Yet:Another:Very:Long:String:Which:Must:Be:Broken:Up & break\_up\_this\_string\_too\_please \\
\hline
\end{tabu}
\end{document}

答案1

我找到了解决方案在 Stack Overflow 上

\makeatletter
\def\hyphenatestring#1{\xHyphen@te#1$\unskip}
\def\xHyphen@te{\@ifnextchar${\@gobble}{\sw@p{\hskip 0pt plus 1pt\xHyphen@te}}}
\def\sw@p#1#2{#2#1}
\makeatother

定义完上述内容后,如果我将文本换行到列中\hyphenatestring{,它将在任何字符处用连字符连接它们。

这并不是我想要的(我倾向于在某些字符处使用连字符,例如:,然后只有当这样做不起作用时才在任何位置使用连字符)。但是,现在这样就可以了。


更新上面的解决方案有一个问题 - 它会从字符串中删除空格。我找到了一个更好的解决方案,它不会这样做。它是 David Carlisle 的\foo定义的宏这里

相关内容