自动拆分长单词以适合表格列宽

自动拆分长单词以适合表格列宽

最好的方法是什么

  1. 设置列宽以适合列标题的最长单词?
  2. 如果单词太长,是否自动将其拆分以适合列边距?

梅威瑟:

\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

最好的方法是什么

  1. 设置列宽以适合列标题的最长单词?
  2. 如果单词太长,是否自动将其拆分以适合列边距?

没有任何额外的包?使用长度名称并为名称设置一定长度。在列规范中使用名称,例如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}

在此处输入图片描述

相关内容