% \iffalse meta-comment %<*internal> \begingroup \input docstrip.tex \keepsilent \preamble ______________________________________________________ The WIDETABLE bundle Copyright (C) 2009-2018 Claudio Beccari All rights reserved License information appended \endpreamble \postamble Copyright 2009-2017 Claudio Beccari Distributable under the LaTeX Project Public License, version 1.3c or higher (your choice). The latest version of this license is at: http://www.latex-project.org/lppl.txt This work is "author-maintained" This work consists of this file widetable.dtx, a README file the manifest.txt file, and the derived files: widetable.sty and widetable.pdf. By running pdflatex on widetable.dtx the user gets the sty file and the English documentation file in PDF format. \endpostamble \askforoverwritefalse \generate{\file{widetable.sty}{\from{widetable.dtx}{package}}} \def\tmpa{plain} \ifx\tmpa\fmtname\endgroup\expandafter\bye\fi \endgroup % % % Copyright 2009--2018 Claudio Beccari % % This file is part of the widetable bundle % ------------------------------------------- % % It may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3c % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This file has the LPPL maintenance status "author-maintained". % % The list of all files belonging to the widetable bundle is % given in the file `manifest.txt'. % % The set of derived (unpacked) files belonging to the % distribution and covered by LPPL is created by the self % unpacking file widetable.dtx % which is the principal part of the distribution. % % \fi % \iffalse %<*driver> \ProvidesFile{widetable.dtx}% % %\ProvidesPackage{widetable}% %<*package> [2018-12-14 v.1.5 Package for typesetting specified width tables] % %<*driver> \documentclass{ltxdoc}\errorcontextlines=100 \hfuzz 10pt \def\prog#1{\textsf{\slshape#1}} \usepackage{multicol} \usepackage[utf8]{inputenc} \usepackage[T1]{fontenc} \usepackage{textcomp} \usepackage{lmodern} \usepackage[italian,english]{babel} \usepackage{widetable,tabularx, booktabs,ragged2e} % local definitions \let\originalmeta\meta \renewcommand\meta[1]{{\normalfont\originalmeta{#1}}} \renewcommand\marg[1]{\texttt{\{\meta{#1}\}}} \newcommand\Marg[1]{\texttt{\{#1\}}} \newcommand\opz[1]{\texttt{[\meta{#1}]}} \newcommand\Opz[1]{\texttt{[#1]}} \renewcommand\cs[1]{{\normalfont\ttfamily\char92#1}} \newcommand\Benv[1]{\texttt{\char92begin\{#1\}}} \newcommand\Eenv[1]{\texttt{\char92end\{#1\}}} \newcommand\eTeX{\raisebox{-0.5ex}{$\varepsilon$}\kern-0.1666em\TeX} % end local definitions \begin{document} \makeatletter \GetFileInfo{widetable.dtx}% \title{The \textsf{widetable} package} \date{Version number \fileversion; last revision \filedate.} \author{Claudio Beccari\thanks{\texttt{claudio dot beccari at gmail dot com}}} \maketitle \begin{multicols}{2} \tableofcontents \end{multicols} \DocInput{widetable.dtx} \end{document} % % \fi % \CheckSum{181} % \begin{abstract} % This package allows to typeset tables of specified width, % provided they fit in one page. Instead of introducing an % infinite stretching glue, which has an unsymmetrical effect % in standard \LaTeX, here the |\tabcolsep| dimension is % computed so as to have the table come out with the proper % width. % \end{abstract} % % \section{Legalese} % % This file is part of the |widetable| package. % % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.3 or later is part of all distributions of LaTeX % version 2003/12/01 or later. % % This work has the LPPL maintenance status ``maintained''. % % The Current Maintainer of this work is Claudio Beccari % % The list of all files belonging to the distribution is % given in the file `manifest.txt'. % % The list of derived (unpacked) files belonging to the distribution % and covered by the LPPL is defined by the unpacking scripts (with % extension .ins) which are part of the distribution. % %\section{Introduction} % It is well known that when the standard environment % |tabular*| is opened with a specified width, it is % necessary to introduce in the delimiter declaration % |@{...}| of (possibly) the first cell of the model row % a declaration such as % \begin{verbatim} % \extracolsep{\fill} % \end{verbatim} % in addition to other possible printable delimiters, such % as vertical lines, and other fixed spacing commands. The % effect is that the extra stretchable glue operates only % on the left of each cell \emph{after} (to the \emph{right} % of) the cell that received the declaration; the first cell % will never get larger in spite of the presence of this glue. % % Another package, |tabularX|, normally distributed by the % \LaTeX\,3 Team with every version of the \TeX\ system % distribution, allows to create expandable cells, % provided they contain only text. These expandable cells % are identified with the column identifier |X|; this % identifier defines a paragraph-like cell, the width of % which gets determined after some runs of the typesetter % on the same source tabular material, so as to find out the % correct width of the textual columns. % % The approach here is a little bit different: the cell % contents need not be textual and no cell width is determined % in one or more runs of the typesetter; instead the % inter column glue is determined so as to fill every cell % on both sides with the proper space. The macros contained % in this package are insensitive to the particular kind % of cell descriptors and to the presence of multiple % |\multicolumn| commands. It proved to work properly also % if the |array| package extensions are used. % Nevertheless if multiple |\multirow| commands in different % rows ``interlace'' the columns they work on, poor results % are obtained, and sometimes no result at all is obtained % except a warning message. % % On the other hand, as well as for |tabularX|, it needs to % typeset the table three times; the first two times with % standard values for the inter column glue |\tabcolsep|, in % order to find the exact parameters of the linear dependence % of the table width from the value of that glue; then executes % some computations so as to extrapolate the final correct % value of |\tabcolsep|, and on the third run it eventually % typesets the table with the specified width. % % The time increase needed for these three table typesettings % is in general rather negligible, nevertheless if a specific % document contained many dozens of such tables, the compilation % time might become perceivable. % % It might be noticed that in order to perform the necessary % computations a fractional division algorithm must be used; % since 2009 any \TeX\ installation uses the \eTeX\ extensions; % therefore fractional division is not any more an issue as % it was in previous versions of this package. % % \section{Normal use of \texttt{widetable}} % This package issues an error message in case the % environment includes other unhidden environment; this is % explained in the Implementation section. In plain words, % if a |widetable| environment is nested into another one, % the inner environment must be “hidden” within a group % (a pair of braces). % % Here it is assumed that the user typesets the table to its % natural width with |tabular|; should it appear too small, % and should it be typeset at a larger width, for example for % filling the total |\linewidth| available at that specific point, % then and only then the user changes the |tabular| environment % to |widetable|. Should the initial table be moderately larger % than the |\linewidth|, then it might be shrunk to |\linewidth| % with |widetable|, provided there are enough columns, and % therefore delimiters, to be reduced in size. Of course it's % impossible to typeset any table with any negative value % of |\tabcolsep|; or better, it is possible, but the result % in general is very messy. % % In other words |widetable| should be used as a second resort, % so as to correct some typesetting features not considered % aesthetically acceptable. % % The syntax for tusing the environment |widetable| is the % same as that of the |tabular*| environment; the only difference % is the name. Therefore one has to specify: % \begin{flushleft}\obeylines% % \Benv{widetable}\marg{width}\opz{alignment}\marg{column descriptors} % \meta{row of cells}\cs{\textbackslash} % \meta{row of cells}\cs{\textbackslash} % \texttt{...} % \meta{row of cells}\cs{\textbackslash} % \meta{row of cells}\cs{\textbackslash} % \Eenv{widetable} % \end{flushleft} % % \section{The method} % The principle on which this little package is based is the % following; suppose a certain table is typeset with an inter % column glue $t_0=0$ and that its width turns out to be $l_0$; % suppose the same tabular material is typeset again with an % inter column glue $t_1 >0$ so that the table table gets as % large as $l_1>l_0$. Then, if the table has to be as wide as % $l$ the inter column glue must equal the value % \[ % t = \frac{l - l_0}{l_1 - l_0}\cdot t_1 % \] % % Therefore we need to run the typesetting of the same tabular % material with the two values of the inter column glue set % to zero and to $t_1$, respectively, so as to find the widths % $l_0$ and $l_1$. Afterwards it has to determine the correct % final value $t$, and typeset once again the same tabular % material for the last time. % % Of course the first two runs must put their results into % suitable boxes so as to avoid shipping them to the output % file, while at the same time allowing to record the width % of the enclosing boxes. % % \section{The long division algorithm} % In previous versions of this package we provided a fractional length % division macro to perform such computations; the subtractions % and multiplication could be done with regular primitive % commands of the \TeX\ engine; but the fractional division % required a special long division algorithm. % % With the \eTeX\ extensions to the typesetting engine |pdftex| % (native in |xetex| and |luatex|, therefore available in % |XeLaTeX| and |LuaLaTeX|) there is no need to create any % long division macro, because such computation is already % provided in those engines as a primitive command. % % \section{Using the \eTeX\ facilities} % In facts the \eTeX\ extension provides the scaling operation: % given the length $L_1$ and two homogeneous quantities $X_1$ % and $X_2$ (where such quantities may be either two integer % numbers, or two dimensions), such scaling operation scales % $L_1$ to $L_2$ by computing %\[ % L_2 = L_1\cdot \frac{X_2}{X_1} %\] % The intermediate results are actually done with integer % arithmetics (internally length are coded as integer numbers of % scaled points) but are done in double words so as to avoid % underflow and overflows almost always. Some unusual situations % might exist where underflows or overflows may occur, but % they must be very unusual, and very unlikely to happen for % the calculations of this package. In case of overflow a % |\maxdimen| value is automatically obtained and computations % go on as possible, may be giving rise to other errors or % warnings, for example overfull lines. % % The use of the \eTeX\ extensions implies that this package % works correctly only with modern engines and kernel formats. % This is why the package starts with a statement where the % kernel format is required to be quite recent. % % \section{Usage} % As explained above, the normal usage of |widetable| requires the same % syntax as that of |tabular*| except that no explicit stretchable % glue has to be inserted in the column separators as it is necessary % to do with |tabular*|. Examine the table shown in table~\ref{tab:tab} that is typeset at its natural width. % \begin{table}\centering % \begin{tabular}{llr>{\raggedright}p{0.29\textwidth}} % \toprule % Name & role & age & activity \tabularnewline % \midrule % William John & father & 45 & employee \tabularnewline % Mary Elisabeth & mother & 42 & elementary school % teacher\tabularnewline % Joan Laura & daughter & 14 & junior high school % student\tabularnewline % Jack Johnathan & son & 8 & elementary school pupil % \tabularnewline % \bottomrule % \end{tabular} % \caption{A regular table typeset with \texttt{tabular} and its width is its natural one}\label{tab:tab} % \end{table} % % The same table can be built with |tabular*| as in table~\ref{tab:tab*}. % \begin{table}\centering % \begin{tabular*}{\textwidth}% % {@{\hskip\tabcolsep\extracolsep{\fill}}llr>{\raggedright}p{0.29\textwidth}} % \toprule % Name & role & age & activity \tabularnewline % \midrule % William John & father & 45 & employee \tabularnewline % Mary Elisabeth & mother & 42 & elementary school % teacher\tabularnewline % Joan Laura & daughter & 14 & junior high school % student\tabularnewline % Jack Johnathan & son & 8 & elementary school pupil % \tabularnewline % \bottomrule % \end{tabular*} % \caption{A table typeset with \texttt{tabular*} where the total % width has been set to \cs{textwidth}}\label{tab:tab*} % \end{table} % % As it can be seen, large inter column spaces are inserted right % at the left of the contents of every cell except the first one, % and the table appears too much spread out. % % The table can be built also with the environment |tabularx|, % defined by the |tabularx| package; see the result in % table~\ref{tab:tabx}. % \begin{table}\centering % \begin{tabularx}{\textwidth}{llr>{\raggedright}X} % \toprule % Name & role & age & activity \tabularnewline % \midrule % William John & father & 45 & employee \tabularnewline % Mary Elisabeth & mother & 42 & elementary school % teacher\tabularnewline % Joan Laura & daughter & 14 & junior high school % student\tabularnewline % Jack Johnathan & son & 8 & elementary school pupil % \tabularnewline % \bottomrule % \end{tabularx} % \caption{A table typeset with \texttt{tabularx} where the total width % has been set to \cs{textwidth}}\label{tab:tabx} % \end{table} % % As it is noticeable the whole space to enlarge the table has % been taken from the |X| column, and the table does not look right. % % Now we show the difference by using the |widetable| environment % in table~\ref{tab:tabwide}. % \begin{table}\centering % \begin{widetable}{\textwidth}{llr>{\raggedright}p{0.29\textwidth}} % \toprule % Name & role & age & activity \tabularnewline % \midrule % William John & father & 45 & employee \tabularnewline % Mary Elisabeth & mother & 42 & elementary school % teacher\tabularnewline % Joan Laura & daughter & 14 & junior high school % student\tabularnewline % Jack Johnathan & son & 8 & elementary school pupil % \tabularnewline % \bottomrule % \end{widetable} % \caption{A table typeset with \texttt{widetable} where the total width % has been set to \cs{textwidth}}\label{tab:tabwide} % \end{table} % % In table~\ref{tab:tabwide} the column specifications are the same % as those used in the code of table~\ref{tab:tab}, but only the % spaces separating the columns have been modified, not the column % types and widths. Of course one my object that the table spaces % are too wide and table~\ref{tab:tab} looks better. But if, for % example, in a certain document tables must span the whole width, % the the solution given in table~\ref{tab:tabwide} is the only one % acceptable among the four shown in these examples. It's up to the % user to chose among these four solutions in terms of the actual % table contents and the stylistic constraints the document must % fulfil. If the examples were typeset with the horizontal and % vertical rules that emphasise each cell (instead of using only % the |booktabs| horizontal rules) it would be more evident % how the various environments shape the cells and where they % insert the extra spacing so as to reach the desired width. % % \section{Warnings} % Normally |widetable| works well as described in the example % shown in table~\ref{tab:tabwide}. Nevertheless there are some % issues that may alter its smooth working. % % One such issue takes place when the specified table width % is shorter the the natural width. In this case the table is % typeset as in table~\ref{tab:tab} at its natural width, but % a warning is issued that explains why: it looks like this %\begin{verbatim} %Package widetable Warning: The natural width 225.19809pt of the tabular %(widetable) material is larger than the specified width 177.5pt. % %(widetable) %(widetable) The table is typeset with the default %(widetable) column spacing on input line 392. %\end{verbatim} % As usual the warning is contained into the |.aux| file. % % When a nested tabular environment is contained in |widetable| % is not hidden within a group of paired braces, the inner % environment is substituted with a framed box that contains % a message, and a more descriptive warning is included into % the |.aux| file. % % When some adjacent cells are grouped with the |\multicolumn| % command; the table might come out of the correct specified width % even if the spanned cells (in different rows) do not belong % to the same columns, but the table looks very ugly; we cannot % say that |widetable| is responsible of this ugliness, or if % the table is ill formed because of using such overlapping % spanned cells; the best suggestion is to never use such % “acrobatic” table compositions. % % \section{Acknowledgements} % I must deeply thank Enrico Gregorio for the revision of % this package macros and for his wise suggestions about % the correct programming style. If some glitch still % remains in the programming style, that is just my fault. % Deep thanks also go to Frank Mittelbach who spotted an error % and suggested some useful modifications; this new version % of the package and its documentation comes from Frank's % suggestions. % % \StopEventually{} % %\iffalse %<*package> %\fi % \section{Implementation} % % The package is already identified by the same statement used % for this |.dtx| file. The necessary \LaTeX\ kernel date must % be specified in order to be sure that the \eTeX\ extensions % are available. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[2018/01/01] % \end{macrocode} % % We suppose that the user might wish to use also the extensions % of the |array| package; in order to avoid possible option % clashes we defer loading this |array| package to the begin % document statement and we check if the user has already loaded % that package so as not to reload it. This task could be left % to the internal workings of the |\RequirePackage| macro, but % we prefer to do our checks with a more direct statement. % By so doing, this package already has available all the % facilities of the |array| package, in particular the % |\newcolumntype| command, the column types |m| and |b|, % and the various special codes to add commands at the beginning % and the end of all the cells of a given column. % \begin{macrocode} \AtBeginDocument{% \@ifpackageloaded{array}{}{\RequirePackage{array}}% } % \end{macrocode} % % Next we define a certain number of \TeX\ dimensions and counters; % these dimension and counter registers might be selected among the extra % registers available with the \eTeX\ extensions. In facts such extensions % allow to use registers identified by numbers higher than 255, % a limit of the good-old-\TeX; Enrico Gregorio in 2009 suggested % to avoid such kind of usage; heremarked that not all users % upgrade so often their \TeX\ system; OK, may be they have their % good reasons for not upgrading, and they have available the previous % versions of this package; may be they use a basic installation % of the \TeX\ system and add new packages when they need to use % them. Therefore we follow Enrico's suggestion and use some of the scratch registers always available to programmers. % \begin{macrocode} \dimendef\wt@Numer=2 \dimendef\wt@Denom=4 \countdef\wt@Num=2 \countdef\wt@Den=4 % \end{macrocode} % % We require the |xparse| package in order to define the % environment |widetable| with its extended commands. % \begin{macrocode} \RequirePackage{xparse} % \end{macrocode} % % We define a local scaling macro |\WT@scale| to execute the % scaling operation that is of interest to the |widetable| % package. We provide some tests so as to set some values % for very unusual situations. The four arguments are as such: % |#1|: length to be scaled; |#2|: numerator of the scaling % ratio; |#3|: denominator of the scaling ratio; |#4|: scaled % length. % \begin{macrocode} \newcommand\WT@scale[4]{\begingroup \wt@Num #2\relax \wt@Den #3\relax \ifnum#3=\z@ \@tempdima\ifnum#2<0-\fi\maxdimen \else \@tempdima\dimexpr#1*#2/#3\relax \fi \edef\x{\noexpand\endgroup\noexpand\setlength{#4}{\the\@tempdima}}% \x} % \end{macrocode} % % At this point it will be the |widetable| environment % responsibility to call |\WT@scale| with the proper arguments. % % Now we define the dimension register that is to contain the % desired table width. % \begin{macrocode} \newdimen\wt@width % \end{macrocode} % % We further define the start of the tabular typesetting % that will be useful in a while. Actually the table preamble % is being saved into a macro, so that when the \meta{width} % and the \meta{column descriptors} are given to the opening % environment statement, these saved quantities can be used % again and again. % % A new boolean, |wt@scartare|, is defined; this boolean % variable will be set true in order to detect if the % table body is is not well formed, with |\begin| and |\end| % statements that don't match, and the like; actually the % |widetable| environment can contain other environment, % even another |widetable| environment, but the external % one should not be upset by the internal ones. In order % to achieve this result, it is necessary that any % embedded environment is hidden int a group delimited by % a pair of matching braces. % \begin{macrocode} \newif\ifwt@scartare\wt@scartarefalse % \end{macrocode} % % The environment opening as well as the environment closing % are defined by means of low level commands. Due to the syntax % of the opening command that requires two compulsory % arguments, these are saved in the recently defined % dimension register and to a macro respectively; another % macro |\wt@getTable| is used to get the body of the table; % the |\end{widetable}| statement represents the ending % delimiter of the table contents. % % \begin{macrocode} \DeclareDocumentCommand\widetable{m O{c} m} {% OPENING WIDETABLE \def\@tempC{widetable}% \setlength{\wt@width}{#1}% \def\wt@preamble{#3}% \def\wt@starttabular{\tabular[#2]{#3}}% \wt@getTable}% % \end{macrocode} % % The closing statement will actually do the greatest part of % the job. First of all if the above mentioned boolean variable % is true, it skips everything and it does not set any table; % but if the boolean variable is false, the table body is well % formed and it can do the job as described in the previous % sections. It first sets |\tabcolsep| to zero and sets the % resulting table in box zero; the lower level |tabular| with % the information saved into |\wt@startabular| and the body of % the table contained into the token register zero. % % Then it sets |\tabcolsep| to 1\,cm (arbitrarily chosen) and % typesets again the table into box two. The width of box zero % is $l_0$ and that of box two is $l_1$; these are the lengths % needed by the equation that evaluates the final typesetting % intercolumn spacing. % The arbitrary constant of 1\,cm is $t_1$, and the specified % width $l$ is the dimension saved into |\wt@width|. The % subtractions are operated directly on the dimension % registers |\wt@width| (the numerator), and on the auxiliary % register |\@tempdimenb|; the |\WT@scale| command is executed % in order to get the scaling ratio and the final definitive % value of |\tabcolsep| is eventually computed. % The table is finally typeset without using boxes, while the % contents of box zero and two are restored upon exiting the % environment to any value they might have contained before % entering |widetable|. % \begin{macrocode} \def\endwidetable{% CLOSING WIDETABLE \ifwt@scartare \noindent\null \else \tabcolsep=\z@ \setbox\z@=\hbox{\wt@starttabular\the\toks@\endtabular}% \tabcolsep=6pt\relax \setbox\tw@=\hbox{\wt@starttabular\the\toks@\endtabular}% \ifdim\wt@width<\wd\z@ \@tempdimb=\dimexpr\wd\tw@-\wd\z@\relax \PackageWarning{widetable}{% The natural width \the\wd\z@ \space of the tabular\MessageBreak material is larger than the specified width \the\wt@width.\MessageBreak\MessageBreak The table is typeset with the default\MessageBreak column spacing}% \else \@tempdimb=\dimexpr\wt@width-\wd\z@\relax \fi \@tempdimc=\dimexpr\wd\tw@-\wd\z@\relax \WT@scale{\tabcolsep}{\@tempdimb}{\@tempdimc}{\tabcolsep}\relax \wt@starttabular\the\toks@\endtabular \fi \ignorespacesafterend } % \end{macrocode} % % Of course other actions must be performed before executing % the closing environment statement. We need a macro % |wt@finetabella| that is equivalent to the ending environment % statement. % \begin{macrocode} \def\wt@finetabella{\end{widetable}}% % \end{macrocode} % % We finally can define the most important macro that gets % the table body; it requires two delimited arguments: % in |#1| the table body and, after the |\end| command, % the closing environment name will be set in |#2|. % The environment name is assigned to the macro |\@tempB|, % which is checked against the correct name |widetable| % saved in macro |\@tempC| by the opening command. If the % names match, then the table body is assigned to the token % register zero, to be used later on by the typesetting macros. % But if the names don't match, then something went wrong % and a package message is issued to explain what happened % and how the program will manage the situation. % % Specifically the names may not match if a cell contained % another environment and its whole |\begin{...}...\end{...}| % was not closed within a pair of matched braces. If an % enclosed environment is hidden within a group, the delimited % argument macro |\wt@getTable| will ignore such embedded % environment, otherwise it will get a non matching name % and messy things might happen. Besides warning about this % fact, the body of the table, at least what has been read % by the macro, will be discarded and substituted with a box % containing a message; therefore a table will be typeset, % but not the desired one. The remaining part of the body % remains in the input stream and might cause, presumably, % strange errors, such as |&| characters used outside a % tabular or array environment. We must take care of this % so that the typesetting procedure does not crash. % \begin{macrocode} \def\wt@getTable#1\end#2{\def\@tempB{#2}% \ifx\@tempB\@tempC \toks@={#1}% \expandafter\wt@finetabella \else \PackageWarning{widetable}{% The table contains environment `\@tempB' % \MessageBreak not enclosed in braces. This is expressly forbidden!% \MessageBreak The table is not typeset and is substituted% \MessageBreak with a framed box}% \advance\wt@width-2\fboxsep \noindent\fbox{\parbox{\wt@width}{The table was not typeset because it contains a visible \texttt{\char`\\end} in one or more cells.}}\par \expandafter\wt@finishTable \fi } % \end{macrocode} % % In order to avoid a complete mess, we have to iteratively % gobble the rest of the input stream until a valid % |\end{widetable}| is encountered; actually the following % macro will do a nice job in general, but it is not % infallible if the input stream is really composed in a very % bad way. In facts it calls itself again and again, always % gobbling it arguments, until a valid terminating environment % name matches the name |widetable|. % \begin{macrocode} \def\wt@finishTable#1\end#2{% \def\@tempB{#2}% \ifx\@tempB\@tempC \wt@scartaretrue\expandafter\wt@finetabella \else \expandafter\wt@finishTable \fi } % \end{macrocode} % \section{Conclusion} % Tables should always have their natural width, but\dots\ % The default value of|\tabcolsep| is fixed by the document % class, it is not prescribed by a supreme law: therefore % what does it mean ``natural width''. Probably the one % determined by the class default value of |\tabcolsep| % so all tables have the same general look. % % Nevertheless sometimes a table is slightly wider than % the current measure; why not shrink the table by shrinking % |\tabcolsep| by the right amount in order to fit the % measure? The result might be a table where only the % inter column spaces are shrunk, not the whole table, fonts, % drawings, and figures included, a result easily obtainable % with a |\resizebox| command available through the % \textsf{graphicx.sty} package. Nobody forbids to follow % this technique, of course, but the |widetable| route might % yield a better result. % % The same is true when a natural width table is slightly % shorter than the measure; enlarging it by retouching % the |\tabcolsep| inter column space might be the right % solution in order to avoid a multitude of slightly % different indents or left margins. % % This package might be useful also for copying some macros % so as to avoid some programming in other packages; this % use is certainly permitted by the LaTeX Project % Public License, which sets the observance of very light % obligations. % \begin{macrocode} \endinput % \end{macrocode} %\iffalse % %\fi % % \Finale % \endinput