固定宽度表格列中的自定义文字换行

固定宽度表格列中的自定义文字换行

我有一个比较特殊的问题。我想创建一个固定宽度的表格列(例如通过使用列类型)。但列中的单词真的很长(!),主要包含数字、括号和加号。如果需要换行,我希望 LaTeX 在符号和符号处以及符号处p{0.2\textwidth}执行换行。+()

预期行为是,将+(和用作。)它应该-不是插入连字符-,如果它要连字符一个单词,则只需使用+()作为新的连字符符号(或者只使用其中之一,如果对每个人都连字符太困难的话)。

这些单词是自动创建的,无法通过插入手动空格来控制换行,而且单词列表真的很长,因此手动进行所有这些换行将花费一年余下的时间......

为了使这个问题不太容易(/讽刺),当然它必须是一种特殊的、自定义的列类型(它应该将列集中在固定宽度上......希望我做对了......如果这绝对不可能,它也可以是固定宽度的左对齐列类型)

希望有人能帮助我摆脱困境。提前致谢。

\documentclass{article}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
\begin{tabular}{C{0.8\textwidth}C{0.2\textwidth}}
here is some stuff & itp(itp(itp(itp(itp(15+16)+23)+27)+itp(123+5))+itp(itp(itp(itp(98+3)+6)+27)+89)) \\
\end{tabular}
\end{document}

答案1

我会使用\raggedright,而不是\centering。您可以定义+()来发出惩罚,这样就可以休息了。

\documentclass{article}
\usepackage{array,calc}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1-2\tabcolsep}}
\newcolumntype{M}[1]{>{\raggedright\arraybackslash$\setupspecialmath}p{#1-2\tabcolsep}<{$}}

\newcommand{\setupspecialmath}{%
  \begingroup\lccode`~=`+
  \lowercase{\endgroup\def~}{\mathchar\pluscode\penalty0 }%
  \begingroup\lccode`~=`(
  \lowercase{\endgroup\def~}{\mathchar\oparcode\penalty0 }%
  \begingroup\lccode`~=`)
  \lowercase{\endgroup\def~}{\mathchar\cparcode\penalty0 }%
  \mathcode`+=\string"8000
  \mathcode`)=\string"8000
  \mathcode`(=\string"8000
  \rmmg}
\edef\pluscode{\the\mathcode`+ }
\edef\oparcode{\the\mathcode`( }
\edef\cparcode{\the\mathcode`) }

\AtBeginDocument{\sbox0{$\mathrm{\xdef\rmmg{\fam\the\fam}}$}}

\begin{document}

\noindent
\begin{tabular}{C{0.8\textwidth}M{0.2\textwidth}}
here is some stuff & 
itp(itp(itp(itp(itp(15+16)+23)+27)+itp(123+5))+itp(itp(itp(itp(98+3)+6)+27)+89)) \\
\end{tabular}
\end{document}

在此处输入图片描述

(为了清晰起见添加了边距,它们不是由上面的代码产生的。)

答案2

在此处输入图片描述

\documentclass{article}
\usepackage{array,url}
\makeatletter
\def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\>\do\]%
 \do\(\do\)\do\,\do\?\do\'\do+\do\=\do\#}%
\def\UrlBigBreaks{\do\:\do@url@hyp}%
\def\UrlNoBreaks{\do\[\do\{\do\<}%
\makeatother

\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
\noindent
\begin{tabular}{@{}C{0.8\textwidth}@{}C{0.2\textwidth}@{}}
here is some stuff & \url{itp(itp(itp(itp(itp(15+16)+23)+27)+itp(123+5))+itp(itp(itp(itp(98+3)+6)+27)+89))} \\
\end{tabular}
\end{document}

如果您不想使用\url它本身,或者想要不同的字体等,url包可以让您定义具有类似行为的命令。

注意:我还删除了段落缩进和列间距,以便宽度为 .8 和 .2 的列\textwidth可以放在一行中。您可能希望列比这更窄,但至少保留中间的列间距(通过@{}上面的方法删除)

相关内容