Need smaller than \tiny
Here are two separate suggestions: Rather than reduce the font size to a point (pun intended!) where the letters become well-nigh undecipherable just to make the array fit into the available textblock, you could (i) reduce the amount of inter-column white space and (ii) get rid of most (or even all) of the vertical lines that separate the columns of the array
. The two adjustment methods can be used simultaneously; using one doesn't preclude using the other. And, of course, they can be used in combination with a command that changes the font size (such as \scriptsize
and \tiny
) in effect for the array
.
If I read your example correctly, you have 13 text/data columns and hence 12 inter-column spaces. LaTeX uses the parameter macro
\arraycolsep
to store the value of (half of) the amount of inter-column white space for anarray
environment. The default value of this parameter in the standard document classes (such asarticle
,report
, andbook
) is a very generous5pt
. This may be an OK value for text typeset at a font size of10pt
to12pt
. Importantly, though, LaTeX does not shrink the value of this parameter automatically if you reduce the font size of the contents of the text/data columns. Hence, your table is going to look like it contains an awful lot of whitespace if the data/text are going to be set at5pt
(\tiny
) or7pt
(\scriptsize
).You may therefore want to try issuing the command
\setlength\arraycolsep{2pt}
in the preamble, for an immediate reduction of
36pt
(i.e.,0.5in
) of total array width. Nothing to sneeze at, right? Plus, you'll get a better-looking array because the intercolumn whitespace won't overwhelm the smallish data and text. With this adjustment in effect, you may find it's no longer necessary to reduce the font size to something as puny as\tiny
.A related measure you could take is eliminate the vertical whitespace that LaTeX inserts by default in front of the first column and after the final column. To do so, set up your array with
\begin{array}{@{}|c||c|c|c|c|c|c|c|c|c|c|c|c|@{}}
or (more succinctly) as\begin{array}{@{}|c||*{12}{c|}@{}}
: Note the addition of the two@{}
elements. (Incidentally, assuming that the first column contains information about the contents of the other 12 columns, I'd suggest that you left-justify rather than center the very first column; see below for an application of this idea.)You may also want to consider eliminating all, or at least almost all, of the 14 vertical lines in the array. Why? First, each vertical line takes up a
0.4pt
of space (unless you or one of the packages you've loaded have changed this value). Second, while a line width of0.4pt
may be appropriate if the contents of the text/data columns are set in font sizes of 10pt, 11pt, or 12pt, these vertical lines tend to look quite oppressive if the numbers are set in a diminutive size of7pt
or5pt
.Do ask yourself this: Do you really need all 14 vertical lines? In fact, do you need any vertical lines at all in order to make the array legible? If you chose to eliminate all 14 lines, by using the definition
\begin{array}{@{}l*{12}{c}@{}}
you'd immediately save
5.6pt
of total array width. Still nothing to sneeze at, right?If eliminating all vertical lines is too radical for your taste, do consider getting by with only the two outermost vertical lines and the one that separates the left-most column from the second column. I.e., you could set up the array as
\begin{array}{@{}|l|*{12}{c}|@{}}
With this setting, you'd (i) still save
4.4pt
in total array width and (ii) reduce the risk of overwhelming the contents of the array with all those heavy-looking lines.
David Carlisle already pointed to an answer showing how to specify arbitrary font sizes. As a complement, here's how to define a new font-switching command \miniscule
that will use a font size and baseline skip reduced by 1pt each compared to \tiny
for the class options 10pt
, 11pt
, and 12pt
.
Note that the name \miniscule
(but not the actual size/skip values) is taken from the memoir
class. Also note that you have to use a scalable font like Latin Modern to correctly display a font size of 4pt.
\documentclass[10pt]{article}
\usepackage{lmodern}
\makeatletter
\ifcase \@ptsize \relax% 10pt
\newcommand{\miniscule}{\@setfontsize\miniscule{4}{5}}% \tiny: 5/6
\or% 11pt
\newcommand{\miniscule}{\@setfontsize\miniscule{5}{6}}% \tiny: 6/7
\or% 12pt
\newcommand{\miniscule}{\@setfontsize\miniscule{5}{6}}% \tiny: 6/7
\fi
\makeatother
\usepackage{lipsum}
\begin{document}
\tiny
\lipsum[1]
\miniscule
\lipsum[1]
\end{document}