我创建了一个表,\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
定义的宏这里