如何使长表自动适应列?

如何使长表自动适应列?

我想让所有列都longtable自动适应其文本宽度。有办法实现吗?目前,只有最后一列可以自动适应。我想我需要更改此行,\begin{longtable}[c]{|p{0.4cm}|p{3cm}|p{2.2cm}|p{1.9cm}|p{3.8cm}|}但我不知道如何配置它。

这是示例输出:
输出图像

这是我的代码:

\documentclass[12pt, a4paper, onecolumn, oneside, final]{report}
\makeatother

\usepackage{array}
\setlength\extrarowheight{4pt}

\usepackage{tabto}
\newenvironment{tabs}[1]
{\TabPositions{#1}}

\usepackage{longtable}  
\newcolumntype{R}[1]{>{\raggedleft\arraybackslash}p{#1}}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}

\usepackage[most]{tcolorbox}
\usepackage{amsfonts}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{caption}
\usepackage{colortbl}
\usepackage{enumitem}
\usepackage{etoolbox}
\usepackage{float}
\usepackage{fon tenc}
\usepackage{gensymb}
\usepackage{graphicx}
\usepackage{multicol}
\usepackage{multirow}
\usepackage{pdflscape}
\usepackage{pifont}
\usepackage{ragged2e}
\usepackage{rotating}

% Awal bagian penulisan laporan
\begin{document}
    \begingroup
    \setlength{\LTleft}{-20cm plus -1fill}
    \setlength{\LTright}{\LTleft}
    \begin{small}
        \begin{longtable}[c]{|p{0.4cm}|p{3cm}|p{2.2cm}|p{1.9cm}|p{3.8cm}|}
            \caption{Daftar \textit{method} yang digunakan dari pustaka TensorFlow}
            \label{lib:tensorflow}\\
            
            \hline
            \centering \textbf{No.} &
            \centering \textbf{\textit{Method}} &
            \centering \textbf{Masukan} &
            \centering \textbf{Keluaran} &
            \centering \textbf{Keterangan} \tabularnewline \hline
            \endfirsthead
            
            \multicolumn{5}{c}{\textbf{\tablename~\thetable} Daftar \textit{method} yang digunakan dari pustaka TensorFlow}\\
            \hline
            \centering \textbf{No.} &
            \centering \textbf{\textit{Method}} &
            \centering \textbf{Masukan} &
            \centering \textbf{Keluaran} &
            \centering \textbf{Keterangan} \tabularnewline \hline
            \endhead
            
            1
            & tf.test.gpu\_device\_name
            & -
            & device\_name: string
            & Mengembalikan nama perangkat GPU jika tersedia atau string kosong \\ 
            \hline
            
            2
            & device
            & device\_name: string
            & -
            & Menentukan perangkat untuk operasi yang dibuat / dijalankan dalam aplikasi \\ 
            \hline
        \end{longtable}
    \end{small}
    \endgroup
    
\end{document}

答案1

毫不奇怪,LaTeX 没有关于字符串device\_name尤其是tf.test.gpu\_device\_name如何换行的信息。我建议您 (a) 加宽第 3 列和第 4 列,以便device\_name:可以排版字符串而不需要换行;(b) 加载包seqsplit并使用宏在第 2 列\seqsplit换行tf.test.gpu\_device\_name

我还将通过 (a) 省略所有垂直规则和 (b) 使用更少的水平规则使表格看起来更加开放。

在此处输入图片描述

\documentclass[12pt, a4paper, oneside]{report}
%% I've chosen to simplify the preamble of the test document drastically
\usepackage[indonesian]{babel}
\usepackage{array} % for '\newcolumntype' and '\extrarowheight' macros
\setlength\extrarowheight{4pt}

\usepackage{longtable}
\usepackage[T1]{fontenc}
\usepackage{ragged2e} % for '\RaggedRight' macro

%% new instructions:
\newcolumntype{L}[1]{>{\RaggedRight}p{#1}} % allow hyphenation
\newlength\mylen 
\settowidth\mylen{device\_name:} % measure required width of rows 3 and 4
\usepackage{seqsplit} % for '\seqsplit' macro

\begin{document}
    \begingroup
    \setlength{\tabcolsep}{4pt} % default: 6pt
    \setlength{\LTcapwidth}{\textwidth}
    \small
    \begin{longtable}{@{} l L{3cm} L{\mylen} L{\mylen} L{3.9cm} @{}}

    %% headers and footers
    \caption{Daftar \textit{method} yang digunakan dari pustaka TensorFlow}
    \label{lib:tensorflow}\\
            
            \hline
            \textbf{No.} &
            \textbf{\textit{Method}} &
            \textbf{Masukan} &
            \textbf{Keluaran} &
            \textbf{Keterangan} \tabularnewline \hline
    \endfirsthead
            
            \multicolumn{5}{c}{\textbf{\tablename~\thetable} Daftar \textit{method} yang digunakan dari pustaka TensorFlow}\\
            \hline
            \textbf{No.} &
            \textbf{\textit{Method}} &
            \textbf{Masukan} &
            \textbf{Keluaran} &
            \textbf{Keterangan} \tabularnewline \hline
    \endhead

    \hline
    \endlastfoot
            
    %% body of table
            1
            & \seqsplit{tf.test.gpu\_device\_name}
            & --
            & device\_name: string
            & Mengembalikan nama perangkat GPU jika tersedia atau string kosong \\ 
            %\hline
            
            2
            & device
            & device\_name: string
            & --
            & Menentukan perangkat untuk operasi yang dibuat\slash dijalankan dalam aplikasi \\ 

        \end{longtable}
    \endgroup
\end{document}

答案2

如果您不想将第 2 列至第 4 列的内容拆分成多行,您可能需要考虑使用横向页面来显示表格。我还使用了booktabs表格中的水平线,以及而xltabular不是,longtable以确保表格的宽度与可用的文本宽度完全相同。

在此处输入图片描述

\documentclass[12pt, a4paper, oneside]{report}
\usepackage[indonesian]{babel}

\usepackage{xltabular}
\usepackage{booktabs}
\usepackage{pdflscape}


\begin{document}
    \begin{landscape}
    \setlength{\LTcapwidth}{\linewidth}
    \begin{xltabular}{\linewidth}{@{} l l l l X @{}}
    \caption{Daftar \textit{method} yang digunakan dari pustaka TensorFlow}
    \label{lib:tensorflow}\\
    
    \toprule
      \textbf{No.} &
      \textbf{\textit{Method}} &
      \textbf{Masukan} &
      \textbf{Keluaran} &
      \textbf{Keterangan} \\ \midrule
    \endfirsthead 
     
      \caption[]{Daftar \textit{method} yang digunakan dari pustaka TensorFlow} \\
    \toprule
      \textbf{No.} &
      \textbf{\textit{Method}} &
      \textbf{Masukan} &
      \textbf{Keluaran} &
      \textbf{Keterangan} \\ \midrule
    \endhead

    \bottomrule
    \endlastfoot
            
    1
    & tf.test.gpu\_device\_name
    & --
    & device\_name: string
    & Mengembalikan nama perangkat GPU jika tersedia atau string kosong \\ \addlinespace 
    
    2
    & device
    & device\_name: string
    & --
    & Menentukan perangkat untuk operasi yang dibuat\slash dijalankan dalam aplikasi \\ 

    \end{xltabular}
    \end{landscape}
\end{document}

相关内容