
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{longtable}
\title{Table Sample}
\author{Nimish Mistry}
\date{July 2017}
\begin{document}
\maketitle
\section{2 column table}
\begin{longtable}{|p{0.5\textwidth}|p{0.5\textwidth}|}
\hline
A & B \\
\hline
\end{longtable}
\section{3 column table}
\begin{longtable}{|p{0.33\textwidth}|p{0.33\textwidth}|p{0.33\textwidth}|}
\hline
A & B & C \\
\hline
\end{longtable}
\section{4 column table}
\begin{longtable}{|p{0.25\textwidth}|p{0.25\textwidth}|p{0.25\textwidth}|p{0.25\textwidth}|}
\hline
A & B & C & D \\
\hline
\end{longtable}
\section{4 column table}
\end{document}
Antwort1
Da Sie eine unterschiedliche Anzahl von Spalten und folglich eine unterschiedliche Anzahl von vertikalen Linien und \tabcolsep
Zwischenräumen haben, müssen Sie bei der Bestimmung der Spaltenbreite die Breite der vertikalen Linien und \tabcolsep
Zwischenräume berücksichtigen.
Versuche Folgendes:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array, longtable}% added array, as suggest David in hos comment below
\begin{document}
\begin{longtable}{|*{2}{p{\dimexpr0.5\textwidth-2\tabcolsep-1.5\arrayrulewidth\relax}|}} % calculation of column width
\hline
A & B \\
\hline
\end{longtable}
\begin{longtable}{|*{3}{p{\dimexpr0.333\textwidth-2\tabcolsep-1.33\arrayrulewidth\relax}|}}
\hline
A & B & C \\
\hline
\end{longtable}
\begin{longtable}{|*{4}{p{\dimexpr0.25\textwidth-2\tabcolsep-1.25\arrayrulewidth\relax}|}}
\hline
A & B & C & D \\
\hline
\end{longtable}
\end{document}
Bearbeiten: Die erste Lösung hat eine falsch berechnete Tabellenbreite (siehe Kommentar von David Carlisle unten). Unter Berücksichtigung dessen wird der obige Code entsprechend korrigiert. Als Beweis siehe Bild unten:
welches erzeugt wird durch:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{array,longtable}
%-------------------------------------- only for show page layout
\usepackage{showframe}
\renewcommand\ShowFrameLinethickness{0.15pt}
\renewcommand*\ShowFrameColor{\color{red}}
%---------------------------------------------------------------%
\setlength\arrayrulewidth{22pt}
\begin{document}
\begin{longtable}{|*{2}{p{\dimexpr0.5\textwidth-2\tabcolsep-1.5\arrayrulewidth)\relax}|}} % calculation of column width
\hline
A & B \\
\hline
\end{longtable}
\begin{longtable}{|*{3}{p{\dimexpr0.333\textwidth-2\tabcolsep-1.33\arrayrulewidth\relax}|}}
\hline
A & B & C \\
\hline
\end{longtable}
\begin{longtable}{|*{4}{p{\dimexpr0.25\textwidth-2\tabcolsep-1.25\arrayrulewidth\relax}|}}
\hline
A & B & C & D \\
\hline
\end{longtable}
\end{document}
Antwort2
Wenn Sie die Überschrift der Tabelle nicht am Anfang der nächsten Seiten wiederholen müssen (die Kernfunktion des Pakets) und wenn Sie nur kurze Texte in Tabellenzellen annehmen (keine mehrzeiligen Absätze), müssen Sie die Zellenbreiten nicht manuell berechnen. Sie können die primitive Konstruktion kombiniert durch in jeder Zelle longtable
verwenden .\hbox to\hsize
\hfil
\def\ta|{\hbox to\hsize \bgroup \vrule height12pt depth5pt \taA}
\def\taA{\futurelet\next\taB}
\def\taB{\ifx\next\relax\egroup \else \expandafter\taC \fi}
\def\taC#1|{\quad\rlap{#1}\hfil\vrule \taA}
\hrule
\ta |A|B|C|\relax
\hrule
\medskip
\hrule
\ta |A|B|\relax
\hrule
\medskip
\hrule
\ta |A|B|C|D|\relax
\hrule
\bye