我有一个比较特殊的问题。我想创建一个固定宽度的表格列(例如通过使用列类型)。但列中的单词真的很长(!),主要包含数字、括号和加号。如果需要换行,我希望 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
可以放在一行中。您可能希望列比这更窄,但至少保留中间的列间距(通过@{}
上面的方法删除)