![自动拆分长单词以适合表格列宽](https://linux22.com/image/480425/%E8%87%AA%E5%8A%A8%E6%8B%86%E5%88%86%E9%95%BF%E5%8D%95%E8%AF%8D%E4%BB%A5%E9%80%82%E5%90%88%E8%A1%A8%E6%A0%BC%E5%88%97%E5%AE%BD.png)
最好的方法是什么
- 设置列宽以适合列标题的最长单词?
- 如果单词太长,是否自动将其拆分以适合列边距?
梅威瑟:
\begin{tabular}{|c|c|c|}
\hline
Flu & Pneumonoultramicroscopicsilicovolcanoconiosis & Pseudopseudohypoparathyroidism\\
\hline
x & y & z\\
\hline&
\end{tabular}
有答案这里但它需要 lualatex。我对使用 XeLateX(这是我的必需品)的解决方案感兴趣,如果可能的话,还有 pdflatex。
- - 编辑
这更接近我需要的。缺点:tabulary 不以最长的单词作为最小宽度,而是以列单词作为最小宽度。解决方法:手动调整一些列:
\begin{tabulary}{\textwidth}{|V{2cm}|J|J|}
\hline
Flu & Pneumonoultramicroscopicsilicovolcanoconiosis & Pseudopseudohypoparathyroidism\\
\hline
x & y & z\\
\hline&
\end{tabulary}
答案1
最好的方法是什么
- 设置列宽以适合列标题的最长单词?
- 如果单词太长,是否自动将其拆分以适合列边距?
没有任何额外的包?使用长度名称并为名称设置一定长度。在列规范中使用名称,例如p{\mycolumnwidth}
。如果列需要一些约束(例如上限),假设0.4\textwidth
,您必须对其进行测试,如果超出上限,则减少长度。
我认为这需要针对每个单独的列进行,因此您可能需要单独的长度名称,这在更复杂的表中可能会相当繁琐。您最好放弃约束并应用其中一个可用的包。
无论如何,你可以做一些事情
\documentclass{article}
\usepackage{array}
\usepackage{showframe}
\renewcommand*{\ShowFrameLinethickness}{0.2pt}
\renewcommand*{\ShowFrameColor}{\color{blue}}
\newlength\cwleft
\newlength\cwright
\NewDocumentCommand\setlenvar{mmm}{%
% #1 - text
% #2 - max length (upper bound)
% #3 - length name
\settowidth{#3}{#1}
\IfValueT{#2}{\ifdim \the#3>#2 \setlength{#3}{#2}\fi}}
\newcolumntype{P}[1]{p{#1}}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
%%% Set a table for the longest word with contraints
\setlenvar{Pneumonoultramicroscopicsilicovolcanoconiosis}%
{0.4\textwidth}{\cwleft}
\setlenvar{Pseudopseudohypoparathyroidism}%
{0.3\textwidth}{\cwright}
\begin{table}[tbh]
\renewcommand{\arraystretch}{1.5}
\centering
\begin{tabular}{|c| C{\cwleft}| C{\cwright}|}
\hline
\multicolumn{1}{|l|}{\bf Name}
& \multicolumn{1}{P{\cwleft}|}{\bf Column left}
& \multicolumn{1}{P{\cwright}|}{\bf Column right} \\
\hline
Flu & Pneumonoultramicroscopic\-silicovolcanoconiosis & Pseudopseudohypo\-parathyroidism \\
x & y & z \\
A & Short text & Short text \\
\hline
\end{tabular}
\end{table}
%%% Set a table for the certain word constraints omitted
\setlenvar{Short text}{}{\cwleft}
\setlenvar{Short text}{}{\cwright}
\begin{table}[tbh]
\renewcommand{\arraystretch}{1.5}
\centering
\begin{tabular}{|c| C{\cwleft}| C{\cwright}|}
\hline
\multicolumn{1}{|l|}{\bf Name}
& \multicolumn{1}{P{\cwleft}|}{\bf Column left}
& \multicolumn{1}{P{\cwright}|}{\bf Column right} \\
\hline
Flu & Pneu\-mono\-ultra\-micro\-scopic\-sili\-covol\-cano\-coniosis & Pseudo\-pseudo\-hypo\-para\-thyro\-idism \\
x & y & z \\
A & Short text & Short \\
\hline
\end{tabular}
\end{table}
\end{document}