% \iffalse meta-comment % % File: tablestyles.sty % Version: 2014/06/27 v0.1 % Author: Matthias Pospiech % Email: % % Copyright (C) 2014 by Matthias Pospiech (matthias@pospiech.eu) % --------------------------------------------------------------------------- % 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 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Matthias Pospiech. % % This work consists of the files tablestyles.dtx and tablestyles.ins % and the derived filebase tablestyles.sty. % % % \fi % % \iffalse %<*driver> \ProvidesFile{tablestyles.dtx} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{tablestyles} %<*package> [2014/06/27 0.1 enhanced table commands for configurable table layout] % % %<*driver> \documentclass{ltxdoc} \usepackage{hypdoc} \RequirePackage[% loadHyperref=true, createIndexEntries=false, applyLayout=true] {doctools} % % \usepackage{tablestyles}[2014/06/27] \EnableCrossrefs \CodelineIndex \RecordChanges % %%% Additional packages \usepackage{soulutf8} \usepackage[table]{xcolor} \usepackage{enumitem} \usepackage{tabu} \usepackage{float} \usepackage{ltxtable} % \listfiles \begin{document} \DocInput{tablestyles.dtx} \PrintChanges \PrintIndex \end{document} % % \fi % % % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % % \changes{0.1}{2014/06/27}{Initial version.} % % \DoNotIndex{\newcommand,\newenvironment} % % \providecommand*{\url}{\texttt} % \GetFileInfo{tablestyles.dtx} % \title{The \textsf{tablestyles} package} % \author{Matthias Pospiech \\ \url{matthias.pospiech@gmx.de}} % \date{\fileversion~from \filedate} % % \maketitle % \begin{abstract}\noindent % LaTeX unfortunately does not include a good separation of text and style in % tables. This package tries to solve this problem by defining reusable table % commands and an interface to define a style for table. Furthermore the % package defines common used column styles and a bugfix command for lists in % tables. % \end{abstract} % \tableofcontents % % \section{Introduction} % % This package provides commands to be used inside a tabular environment, % which allow the user to define the style of a table once but apply it to % every table using the commands defined by this package. % The styles are divided into the head, subhead and the body of the table. % Further this package introduces new column types and enhancing the % typesetting of lists inside tables. % % \section{Usage} % % The usage is first described using a brief review of the possibilities % to change the layout of a table using the font size, font color, % line appearance and the background colors of special and % alternating cells. The latter is based on the xcolor/colortab package. % Subsequent the commands provided by the package are explained in detail % followed by a description of the creation of new styles. % % \subsection{Loading} % The package is loaded with % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode]% \usepackage{tablestyles} \end{lstlisting} % \iffalse % % \fi % \noindent It should be loaded after the xcolor package and before the % hyperref package. % % \subsection{Tutorial} % % The code listing~\ref{code:manualtable} shows a tabular with all commands % necessary to set up the style of the table displayed below % (table~\ref{tab:examplenostyle}). In this code the commands of this package % are \emph{not} used. The equivalent code with the commands of this package % is provided in the following code listing~\ref{code:tablewithstyle}. % \iffalse %<*example> % \fi \colorlet{colorbody}{white!100} \colorlet{colorsubhead}{gray!30} \colorlet{colorhead}{gray!25} \colorlet{colorrow}{gray!15.0} \begin{lstlisting}[style=lstDemoStyleLaTeXCode , basicstyle=\small\ttfamily, captionpos=b,caption={example code for a table with manual changes to the appereance.},label={code:manualtable}] \begin{table} % \small % fontsize \sffamily % font family = sans serif \centering % alignment of tabular \renewcommand{\arraystretch}{1.4} % larger cell height \rowcolors{1}{colorrow}{colorbody}% % \begin{tabular}{*{2}{p{0.45\textwidth}}} \hline \rowcolor{colorhead} \bfseries header & \bfseries header \\ \hline % content & content \\ content & content \\ content & content \\ content & content \\ content & content \\ % \rowcolor{colorsubhead} subhead & subhead \\ % content & content \\ content & content \\ \hline \end{tabular} \caption{table with bold header font} \end{table} \end{lstlisting} % \iffalse % % \fi % % \begin{table}[H] % % % \small % \sffamily % \centering % \renewcommand{\arraystretch}{1.4} % \rowcolors{1}{colorrow}{colorbody} % % \begin{tabular}{*{2}{p{0.45\textwidth}}} % \hline % \rowcolor{colorhead} % \bfseries header & % \bfseries header \\ % \hline % content & content \\ % content & content \\ % content & content \\ % content & content \\ % content & content \\ % \rowcolor{colorsubhead} % subhead & subhead \\ % content & content \\ % content & content \\ % \hline % \end{tabular} % % \caption{table with bold header font} % \label{tab:examplenostyle} % \end{table} % % The aim of this package is to generalize the generation of such tabular % styles. The code listing~\ref{code:tablewithstyle} demonstrates the usage, % with the result shown in table~\ref{tab:examplestyle}, % which is identical with the previous one (table~\ref{tab:examplenostyle}). % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example code for a table with style commands.}, label={code:tablewithstyle}] \begin{table} % \tablestyle[sansbold] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \theadstart \thead header & \thead header \\ \tbody % content & content \\ content & content \\ content & content \\ content & content \\ content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ % content & content \\ content & content \\ \tend \end{tabular} \caption{table with bold header font using the styles by this package} \end{table} \end{lstlisting} % \iffalse % % \fi % % \begin{table}[H] % % % \tablestyle[sansbold] % % \begin{tabular}{*{2}{p{0.45\textwidth}}} % \theadstart % \thead header & % \thead header \\ % \tbody % % % content & content \\ % content & content \\ % content & content \\ % content & content \\ % content & content \\ % % % \tsubheadstart % \tsubhead subhead & % \tsubhead subhead \\ % % % content & content \\ % content & content \\ % \tend % \end{tabular} % \caption{table with bold header font using the styles by this package} % \label{tab:examplestyle} % \end{table} % % The following sections show the possibilities of applying a style in general % and how to style a heading or subheading % % \subsubsection{applying styles} % % The command \DescribeMacro{\tablestyle}\cs{tablestyle}\oarg{style} is used % to choose the style of the table. It redefines all commands that apply % changes to font, colors, lines, etc. It is required before the tabular % environment to apply the changes to the complete table. % If not inserted the last chosen layout, or if never applied the standard % layout is used. % % To apply lines or any other elements at the top and bottom of a table the % commands \DescribeMacro{\tbegin}\cs{tbegin} at the beginning % \DescribeMacro{\tend}\cs{tend} at the end of the table are used. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={code example with table style applied.}, label={code:tablestylebasic}] \begin{table} % \tablestyle[stylename] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \tbegin % content & content \\ content & content \\ \tend \end{tabular} \end{table} \end{lstlisting} % \iffalse % % \fi % % \subsubsection{headings and subheadings} % % If a table starts with a header \cs{tbegin} is replaced by \cs{theadstart} % and the following main table content starts with % \DescribeMacro{\tbody}\cs{tbody} (as shown in the previous code % listing~\ref{code:tablestylebasic}). In general the commands % \DescribeMacro{\theadstart}\cs{theadstart} and % \DescribeMacro{\tsubheadstart}\cs{tsubheadstart} set up % the color of the heading row and print out a line by default. % \DescribeMacro{\theadend}\cs{theadend} and % \DescribeMacro{\tsubheadend}\cs{tsubheadend} can be used to print out a % line afterwards (or apply any other useful properties at the end), but are % empty by default. The properties of each cell in the heading are applied with % \DescribeMacro{\thead}\cs{thead} and \DescribeMacro{\tsubhead}\cs{tsubhead}. % Unfortunately the cell property command must be applied to each cell. The % code listing~\ref{code:headings} demonstrates the implementation of % heading and subheading. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={code for heading and subheading.}, label={code:headings}] \theadstart \thead header & \thead header \\ \theadend % not necessary in default styles \tbody % content & content \\ ... content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ \tsubheadend % not necessary in default styles % \end{lstlisting} % \iffalse % % \fi % % If a heading or subheading shall span all columns of a table this can be % achieved with the simplified commands % \DescribeMacro{\theadrow}\cs{theadrow}\marg{number of cells}\marg{text} % and the equivalent \DescribeMacro{\tsubheadrow}\cs{tsubheadrow}\marg{number % of cells}\marg{text}. % Note that these automatically insert a \cs{tabularnewline}. The first % parameter therefore must match the number of columns in the table. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example for multi column rows.}, label={code:headrows}] \theadstart \theadrow{2}{full width header} \tbody % content & content \\ % \tsubheadrow{2}{full width subheader} % % content & content \\ \end{lstlisting} % \iffalse % % \fi % % % \subsection{Setup of styles} % % Style are applied to the table with the following commands % \begin{itemize}[noitemsep] % \item \cs{tbegin} % \item \cs{tbody} % \item \cs{tend} % \item \cs{thead} % \item \cs{theadstart} % \item \cs{theadend} % \item \cs{tsubheadstart} % \item \cs{tsubheadend} % \item \cs{tsubhead} % \item \cs{theadrow} % \item \cs{tsubheadrow} % \end{itemize} % which were described in the previous section. To define the style the following % commands are used which define the font, the color, and other settings. % % % \subsubsection{fontsize} % Font sizes can be set up using \DescribeMacro{\setuptablefontsize} % \cs{setuptablefontsize}\marg{name}\marg{size definition} and be retrieved with % \DescribeMacro{\tablefontsize}\cs{tablefontsize}\marg{name}. Predefined are sizes % for \emph{body} and \emph{head} % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={configuration and selection of font sizes .}, label={code:fontsizes}] % definition \setuptablefontsize{body}{\small} ... % request size \tablefontsize{body} % outputs \small \end{lstlisting} % \iffalse % % \fi % % \subsubsection{colors} % Colors are defined and requested similar to font sizes, here with the % commands \DescribeMacro{\setuptablecolor} % \cs{setuptablecolor}\marg{color name}\marg{color definition} and % \DescribeMacro{\tablecolor}\cs{tablecolor}\marg{color name}. The color % definition % must be in the notation of xcolor. % Predefined are colors for \emph{body}, \emph{head}, \emph{subhead} and % \emph{row}. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={configuration and selection of colors.}, label={code:colors}] % definition \setuptablecolor{body}{white!100} ... % request color \tablecolor{body} % outputs white!100 \end{lstlisting} % \iffalse % % \fi % \subsubsection{alternating row colors} % % Alternating rows are implemented using the \cs{rowcolors} command of the % colortbl package (should be loaded by xcolor). % Here the colors \emph{body} and \emph{row} are alternated. They are % introduced using \DescribeMacro{\tablealtcolored}\cs{tablealtcolored} and % can be disabled (until the style of tables is reset using \cs{tablestyle}) % with \DescribeMacro{\disablealternatecolors}\cs{disablealternatecolors}. % The examples below show the effect. % % \iffalse %<*example> % \fi \begin{minipage}[t]{0.48\linewidth} \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={automatic alternating row colors.}, label={code:rowcolors}] \begin{table}[H] \tablestyle % using \tablealtcolored \begin{tabular}{*{2}{p{0.25\textwidth}}} \tbegin content & content \\ content & content \\ content & content \\ content & content \\ \tend \end{tabular} \end{table} \end{lstlisting} \end{minipage} \hfill \begin{minipage}[t]{0.48\linewidth} \begin{table}[H] \tablestyle \begin{tabular}{*{2}{p{0.25\textwidth}}} \tbegin content & content \\ content & content \\ content & content \\ content & content \\ \tend \end{tabular} \end{table} \end{minipage} \newline \begin{minipage}[t]{0.48\linewidth} \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={disabled alternating row colors.}, label={code:norowcolors}] \begin{table}[H] \tablestyle \disablealternatecolors \begin{tabular}{*{2}{p{0.25\textwidth}}} \tbegin content & content \\ content & content \\ content & content \\ content & content \\ \tend \end{tabular} \end{table} \end{lstlisting} \end{minipage} \hfill \begin{minipage}[t]{0.48\linewidth} \begin{table}[H] \tablestyle \disablealternatecolors \begin{tabular}{*{2}{p{0.25\textwidth}}} \tbegin content & content \\ content & content \\ content & content \\ content & content \\ \tend \end{tabular} \end{table} \end{minipage} \newline % \iffalse % % \fi % % \subsubsection{colored lines in tables} % % Horizontal lines are inserted with \cs{hline} and vertical lines with % \cs{vline}. These can be changed in color with % \lstinline!\arrayrulecolor{red}\hline! and \lstinline!\color{red}\vline!. % This package provides the commands % \DescribeMacro{\coloredhline}\cs{coloredhline}\marg{color} and % \DescribeMacro{\coloredvline}\cs{coloredvline}\marg{color} in order to % generalise the setting of line colors. % The code listing~\ref{code:coloredlines} shows an example of their usage. % Note that this example uses tabularx and makes use of the new columnstyle % `C'. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={disabled alternating row colors.}, label={code:coloredlines}] \colorlet{grayline}{gray!70} \definecolor{blueline}{rgb}{0,0.27,0.55} \begin{table} \tablestyle % Overwriting style, instead of defining a new one \renewcommand{\tbegin}{\coloredhline{blueline}} \renewcommand{\tbody}{\coloredhline{blueline}} \renewcommand{\tend}{\coloredhline{blueline}} \begin{tabularx}{0.8\textwidth}{% l!{\coloredvline{grayline}} CC!{\coloredvline{grayline}} CC!{\coloredvline{grayline}} C } \theadstart \thead header & \multicolumn{2}{>{\columncolor{\tablecolor{head}}\thead} c!{\coloredvline{grayline}}}{header} & \multicolumn{2}{>{\columncolor{\tablecolor{head}}\thead} c!{\coloredvline{grayline}}}{header} & \multicolumn{1}{>{\columncolor{\tablecolor{head}}\thead}c} {header} % \tabularnewline \tbody % description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80 \\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80 \\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80 \\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80 \\ \tend \end{tabularx} \end{table} \end{lstlisting} \colorlet{grayline}{gray!70} \definecolor{blueline}{rgb}{0,0.27,0.55} \begin{table}[H] \tablestyle \renewcommand{\tlinetop}{\coloredhline{blueline}} \renewcommand{\tlinemid}{\coloredhline{blueline}} \renewcommand{\tlinebottom}{\coloredhline{blueline}} \begin{tabularx}{0.8\textwidth}{% l!{\coloredvline{grayline}} ZZ!{\coloredvline{grayline}} ZZ!{\coloredvline{grayline}} Z } \theadstart header & \multicolumn{2}{>{\columncolor{\tablecolor{head}}\thead}c !{\coloredvline{grayline}}} {header} & \multicolumn{2}{>{\columncolor{\tablecolor{head}}\thead}c !{\coloredvline{grayline}}} {header} & \multicolumn{1}{>{\columncolor{\tablecolor{head}}\thead}c} {header} % \tabularnewline \tbody % description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80\\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80\\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80\\ description & 0,3 & 0,35 & 0,5 & 0,65 & 0,80\\ \tend \end{tabularx} \caption{table with colored vertical and horizontal lines} \label{tab:coloredlines} \end{table} % \iffalse % % \fi % % \subsubsection{Table styles} % % Complete styles are applied using % \DescribeMacro{\tablestyle}\cs{tablestyle}\oarg{style name} % and defined with \DescribeMacro{\setuptablestyle}\cs{setuptablestyle} % \marg{style name}\marg{style definition}. If no argument is given for the % command \cs{tablestyle} the style with name \emph{default} is used. % Within the definition of styles the command \DescribeMacro{\resettablestyle} % \cs{resettablestyle} has a special meaning. Its purpose is to reset a style % before the actual style definitions are applied. Any change to this command % has thus an influence to all styles using this command. % % The default style for example is defined by the code % listing~\ref{code:setupdefaultstyle}. % It sets up font sizes for body and head (used in \cs{head} and % \cs{subhead}), defines the font style using the sans serif font family, % redefines the \cs{arraystretch} and introduces alternating row colors with % \cs{tablealtcolored}. % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={definition of the default style.}, label={code:setupdefaultstyle}] \setuptablestyle{default}{% \resettablestyle \renewcommand{\arraystretch}{1.4} \centering \sffamily \upshape% \tablefontsize{body} \tablealtcolored% \renewcommand{\thead}{% \tablefontsize{head}% \ignorespaces% } \renewcommand{\tsubhead}{% \tablefontsize{head}% \ignorespaces% } } \end{lstlisting} % \iffalse % % \fi % % The package defines the styles % \begin{itemize}[noitemsep] % \item default (sans serif fonts, alternating row colors, % header with gray background color) % \item roman (as default style, but with roman fonts) % \item sansbold (as default style, but with bold heading font) % \item sansboldbw (as sansbold style, but with darker heading background) % \end{itemize} % % These styles are demonstrated by the following tables % \ref{tab:style:default} - \ref{tab:style:sansboldbw}. % % \iffalse %<*example> % \fi \begin{table}[H] % \tablestyle[default] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \theadstart \thead header & \thead header \\ \tbody % content & content \\ content & content \\ content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ % content & content \\ content & content \\ \tend \end{tabular} \caption{default style} \label{tab:style:default} \end{table} \begin{table}[H] % \tablestyle[roman] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \theadstart \thead header & \thead header \\ \tbody % content & content \\ content & content \\ content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ % content & content \\ content & content \\ \tend \end{tabular} \caption{roman style} \label{tab:style:roman} \end{table} \begin{table}[H] % \tablestyle[sansbold] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \theadstart \thead header & \thead header \\ \tbody % content & content \\ content & content \\ content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ % content & content \\ content & content \\ \tend \end{tabular} \caption{sansbold style} \label{tab:style:sansbold} \end{table} \begin{table}[H] % \tablestyle[sansboldbw] % \begin{tabular}{*{2}{p{0.45\textwidth}}} \theadstart% \thead header & \thead header \\ \tbody % content & content \\ content & content \\ content & content \\ % \tsubheadstart \tsubhead subhead & \tsubhead subhead \\ % content & content \\ content & content \\ \tend \end{tabular} \caption{sansboldbw style} \label{tab:style:sansboldbw} \end{table} % \iffalse % % \fi % % \subsection{Column type definitions} % \DescribeMacro{l}\DescribeMacro{c}\DescribeMacro{r}\DescribeMacro{p} % \LaTeX{} defines itself only the columntypes left (l), right(c) and center % (c). Unfortunatley these do not automatically wrap text in cells. % even if the text overrungs the width of the page. For fixed width columns % this can be solved using the p-columntype. These default % columntypes are shown in listing~\ref{code:ct:default} and table % \ref{tab:ct:standard}. However a combination of paragraph like columns and % non-justified alignment requires the definition of new column types, which % are shown hereafter. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example of default column types.}, label={code:ct:default}] \begin{table} \tablestyle % \begin{tabular}{|l|c|r|p{0.3\linewidth}|} \theadstart \thead \centering header l & \thead \centering header c & \thead \centering header r & \thead \centering header p \tabularnewline \tbody % left & center & right & text which is considerably longer than the width of the column \\ \tend \end{tabular} \caption{standard column types (lcrp)} \end{table} \end{lstlisting} % \iffalse % % \fi % % \begin{table}[H] % \tablestyle % \begin{tabular}{|l|c|r|p{0.3\linewidth}|} % \theadstart % \thead \centering header l & % \thead \centering header c & % \thead \centering header r & % \thead \centering header p \tabularnewline % \tbody % left & center & right & % text which is considerably longer than the width of the column \\ % \tend % \end{tabular} % \caption{standard column types (lcrp)} % \label{tab:ct:standard} % \end{table} % % \DescribeMacro{m}\DescribeMacro{b} % The array package provides further the column types middle (m) and bottom % (b), which act like the p-type, but provide a different vertical alignment % as demonstrated in listing~\ref{code:ct:pmb} and table \ref{tab:ct:pmb}. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example of paragraph column types.}, label={code:ct:pmb}] \begin{table} \tablestyle % \begin{tabular}{|p{0.3\linewidth}|m{0.3\linewidth}|b{0.3\linewidth}|} \theadstart \thead \centering header p & \thead \centering header m & \thead \centering header b \tabularnewline \tbody % text which is considerably longer than the width of the column & text which is considerably longer than the width of the column & text which is considerably longer than the width of the column \\ \tend \end{tabular} \caption{column types (pmb)} \end{table} \end{lstlisting} % \iffalse % % \fi % % \begin{table}[H] % \tablestyle % \begin{tabular}{|p{0.3\linewidth}|m{0.3\linewidth}|b{0.3\linewidth}|} % \theadstart % \thead \centering header p & % \thead \centering header m & % \thead \centering header b \tabularnewline % \tbody % % % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column \\ % \tend % \end{tabular} % \caption{column types (pmb)} % \label{tab:ct:pmb} % \end{table} % % \DescribeMacro{X}\DescribeMacro{Z}\DescribeMacro{Y} % The tabularx-package provides a further column type (X), which uses % automatically calculated column width. % This package defines additional column types bases on X for centered (Z) and % right (Y) aligned columns, shown % table~\ref{tab:ct:XCY}, which is using the column definition: % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example of tabularx type columns.}, label={code:ct:XZY}] \begin{table} \tablestyle \begin{tabularx}{\textwidth}{|X|Z|Y|} ... \end{lstlisting} % \iffalse % % \fi % % \begin{table}[H] % \tablestyle % \begin{tabularx}{\textwidth}{|X|Z|Y|} % \theadstart % \thead \centering header X & % \thead \centering header Z & % \thead \centering header Y \tabularnewline % \tbody % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column \\ % \tend % \end{tabularx} % \caption{column types (XZY)} % \label{tab:ct:XZY} % \end{table} % % % \DescribeMacro{L}\DescribeMacro{C}\DescribeMacro{R} % Furthermore, this package provides additional column types with fixed with % and left (L), centered (C) and right (R) aligned column, each derived from % the p-columntype. In the example (table~\ref{tab:ct:LZR}) the advantage of % using ragged text alignment (L) in tables over the justified alignment (p) % is clearly visible. % % \begin{table}[H] % \tablestyle % \begin{tabularx}{\textwidth}{|p{0.17\linewidth}|L{0.17\linewidth}|C{0.17\linewidth}|R{0.17\linewidth}|X|} % \theadstart % \thead \centering header p & % \thead \centering header L & % \thead \centering header C & % \thead \centering header R & % \thead \centering header X \tabularnewline % \tbody % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column & % text which is considerably longer than the width of the column \\ % \tend % \end{tabularx} % \caption{column types (LCR)} % \label{tab:ct:LCR} % \end{table} % % The column definition for table~\ref{tab:ct:LCR} is shown in % listing~\ref{code:ct:LCR}: % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example of new p-type columns.}, label={code:ct:LCR}] \begin{table} \tablestyle \begin{tabularx}{\textwidth}{|p{0.17\linewidth}|L{0.17\linewidth}|C{0.17\linewidth}|R{0.17\linewidth}|X|} ... \end{lstlisting} % \iffalse % % \fi % % Further column definitions can be defined similar to the definitions used % here. The implementation is demonstrated in % section~\ref{sec:impl:columntypes}. % % \subsection{Items in tables} % % % Itemized, enumerated or other list typically introduce a horizontal % indentation which should not appear within a tabular environment. Therefore % the command \DescribeMacro{\tableitemize}\cs{tableitemize} is introduced % to remove the indentation. % % % \begin{table}[H] % \tablestyle % \begin{tabularx}{1\textwidth}{|X|X|X|} % \theadstart % \thead \centering header X & % \thead \centering header items (X) & % \thead \centering header enums (X) \tabularnewline % \tbody % The \LaTeX{} document preparation system is a special version of Donald % Knuth's \TeX{} program. \TeX{} is a sophisticated program designed to % produce high-quality typesetting, especially for mathematical text. % & % \tableitemize % \begin{itemize} % \item The \LaTeX{} document preparation system is a special version of Donald % Knuth's \TeX{} program. % \item \TeX{} is a sophisticated program designed to produce high-quality typesetting, % \item especially for mathematical text. % \end{itemize} % & % \tableitemize % \begin{enumerate} % \item The \LaTeX{} document preparation system is a special version of Donald % Knuth's \TeX{} program. % \item \TeX{} is a sophisticated program designed to produce high-quality typesetting, % \item especially for mathematical text. % \end{enumerate} % \tabularnewline % \tend % \end{tabularx} % \caption{table item list using \texttt{tableitemize}} % \label{tab:tableitemize} %\end{table} % % In table~\ref{tab:tableitemize} this is realized by inserting the command % \cs{tableitemize} directly before the beginning of a list, % as shown in listing~\ref{code:tableitemize}. % % \iffalse %<*example> % \fi \begin{lstlisting}[style=lstDemoStyleLaTeXCode , captionpos=b,caption={example of tableitemize.}, label={code:tableitemize}] ... The ... & \tableitemize % <--- \begin{itemize} \item The ... \item \TeX{} is a ... \item especially ... \end{itemize} & \tableitemize % <--- \begin{enumerate} \item The ... \item \TeX{} is a ... \item especially ... \end{enumerate} \tabularnewline ... \end{lstlisting} % \iffalse % % \fi % % \StopEventually{} % \clearpage % \section{Implementation} % % \iffalse %<*tablestyles.sty> % \fi % % \subsection{Setup and packages} % % \begin{macrocode} \NeedsTeXFormat{LaTeX2e}[1994/12/01] \ProvidesPackage{tablestyles} [2011/10/01 v0.1 tablestyles] % \end{macrocode} % % The following packages are loaded by this package. array is required for % most of the tables anyway, xcolor with the option `table' is required for % the color definitions (table loads colortbl for all commands of colors in % tables. ragged2e is used for the new columntypes and etoolbox for the % implementation of the code. % % \begin{macrocode} \RequirePackage{array} \RequirePackage{etoolbox} %% check that xcolor is not loaded \@ifpackageloaded{xcolor}{% \ifcsdef{rowcolors}{}{% \PackageError{tablestyles}% {% \MessageBreak% Package 'xcolor' must be loaded with the option\MessageBreak% 'tables'. Otherwise the command rowcolors\MessageBreak% is not available. \MessageBreak% }{}% \endinput% }% }{% % xcolor not loaded \PassOptionsToPackage{table}{xcolor} \RequirePackage{xcolor} } \RequirePackage{ragged2e} \AtBeginDocument{% \@ifpackageloaded{tabularx}{}{ \PackageError{tablestyles}% {% \MessageBreak% Package 'tabularx' must be loaded, otherwise tablestyles will not work. }% }% end of ifpackageloaded }% end of AtBeginDocument % \end{macrocode} % % \subsection{Configuration commands} % % The heart of this package is the definition of the table styles, which are % very simply only saved as a command sequence. % An error are printed out if a style is requested, which has not been defined % before. % % \begin{macro}{\setuptablestyle} % \begin{macrocode} %% define table styles (save the code) \newcommand{\setuptablestyle}[2]{% \ifcsdef{tsty@style@#1} { \PackageWarning{tablestyles}{ \MessageBreak table style `#1' is already defined. }{} }{} \csdef{tsty@style@#1}{#2} } % \end{macrocode} % \end{macro} % % \begin{macro}{\tablestyle} % \begin{macrocode} %% apply table styles (use the code) \newcommand{\tablestyle}[1][default]{% \ifcsdef{tsty@style@#1}{}{ \PackageError{tablestyles}{ \MessageBreak table style `#1' is not defined. \endinput% }{} } \csuse{tsty@style@#1} } % \end{macrocode} % \end{macro} % % Font sizes are save in a special command sequence, so that they can be % reused, and identified using their names: % % \begin{macro}{\setuptablefontsize} % \begin{macrocode} %% save font size with name \newcommand{\setuptablefontsize}[2]{ \csdef{tsty@font@#1@size}{#2} } % \end{macrocode} % \end{macro} % % \begin{macro}{\tablefontsize} % \begin{macrocode} %% apply font size with name \newcommand{\tablefontsize}[1]{ \ifcsdef{tsty@font@#1@size}% {\csuse{tsty@font@#1@size}% }{ % not defined \PackageError{tablestyles}{ \MessageBreak table font size `#1' is not defined. \endinput% }{}% }% }% % \end{macrocode} % % The default values for the predefined sizes \emph{body} and \emph{head} are % set to \cs{small} since tables should % always be printed slightly smaller than the normal text. % % \begin{macrocode} %% define default font sizes \setuptablefontsize{body}{\small} \setuptablefontsize{head}{\small} % \end{macrocode} % \end{macro} % % The definition of colors is almost identical to the definition of font % sizes. This definition is restricted to the xcolor way of defining colors. % % \begin{macro}{\setuptablecolor} % \begin{macrocode} %% save color with name \newcommand{\setuptablecolor}[2]{% \colorlet{tsty@color@#1}{#2}% } % \end{macrocode} % \end{macro} % % \begin{macro}{\tablecolor} % \begin{macrocode} %% apply colorwith name \newcommand{\tablecolor}[1]{tsty@color@#1} % \end{macrocode} % \end{macro} % % The default colors are defined as % % \begin{macro}{\tsty@defaultcolors} % \begin{macrocode} %% default colors \newcommand{\tsty@defaultcolors}{ \setuptablecolor{body}{white!100} \setuptablecolor{row}{gray!10} \setuptablecolor{head}{gray!25} \setuptablecolor{subhead}{gray!30} } % \end{macrocode} % \end{macro} % % and exectuted afterwards. % % \begin{macrocode} %% exectuted default colors \tsty@defaultcolors % \end{macrocode} % % Alternating row colors are simplified with the command \cs{tablealtcolored}, % which reuses the \cs{rowcolors} and the table color definitions for % \emph{row} and \emph{body}. % % \begin{macro}{\tablealtcolored} % \begin{macrocode} %% shortcut for alternating rowcolors \newcommand\tablealtcolored{% \rowcolors{1}{\tablecolor{row}}{\tablecolor{body}}% } % \end{macrocode} % \end{macro} % % The alternating rows are disabled by changing the row color identical to the % body color. Since every tablestyle should load \cs{tsty@defaultcolors} this % is reset at every applied tablestyle. % % \begin{macro}{\disablealternatecolors} % \begin{macrocode} %% disable alternating rowcolors by changing the colors \newcommand{\disablealternatecolors}{% \setuptablecolor{row}{\tablecolor{body}}% } % \end{macrocode} % \end{macro} % % The \cs{coloredhline} uses the \cs{arrayrulecolor} of the colortlb-package. % % \begin{macro}{\coloredhline} % \begin{macrocode} %% colored horizontal lines (hlines) \providecommand{\coloredhline}[1]{% \arrayrulecolor{#1}\hline \arrayrulecolor{black} }% % \end{macrocode} % \end{macro} % % The \cs{coloredvline} applies the color to the \cs{vline} with a standard % \cs{color} command. % % \begin{macro}{\coloredvline} % \begin{macrocode} %% colored vertical lines (vlines) \providecommand{\coloredvline}[1]{% \color{#1}\vline }% % \end{macrocode} % \end{macro} % \subsection{Style applying commands} % % The lines for the top (above the header), middle (below the header) and % the bottom of the table (at the end) are defined with \cs{tlinetop}, % \cs{tlinemid} and \cs{tlinebottom} % % \begin{macro}{\tlinetop} % \begin{macrocode} %% commands for the style of the lines \newcommand{\tlinetop}{\coloredhline{black}} % \end{macrocode} % \end{macro} % \begin{macro}{\tlinemid} % \begin{macrocode} \newcommand{\tlinemid}{\coloredhline{black}} % \end{macrocode} % \end{macro} % \begin{macro}{\tlinebottom} % \begin{macrocode} \newcommand{\tlinebottom}{\coloredhline{black}} % \end{macrocode} % \end{macro} % % These are supposed to be inserted in the table with the commands % \cs{tbegin}, % \cs{tbody} and % \cs{tend}, which prints out the last line % and restores color, font and size. % % \begin{macro}{\tbegin} % \begin{macrocode} %% commands for the seperations (includes the lines) \newcommand{\tbegin}{\tlinetop} % \end{macrocode} % \end{macro} % \begin{macro}{tbody} % \begin{macrocode} \newcommand{\tbody}{\tlinemid} % \end{macrocode} % \end{macro} % \begin{macro}{\tend} % \begin{macrocode} \newcommand{\tend}{\tlinebottom} % \end{macrocode} % \end{macro} % % The predefined \cs{thead} includes only the % font size. The same applies for \cs{tsubhead} % \begin{macro}{\thead} % \begin{macrocode} %% default head style (only fontsize) \newcommand\thead{% \tablefontsize{head} } % \end{macrocode} % \end{macro} % % % \begin{macro}{\tsubhead} % \begin{macrocode} %% default subhead style (only fontsize) \newcommand{\tsubhead}{% \tablefontsize{head} } % \end{macrocode} % \end{macro} % % Both head and subhead have a start and an end command. By default the start % includes a hline and the rowcolor, whereas the end command does nothing. % % \begin{macro}{\theadstart} % \begin{macrocode} %% style of header start (line and row color) \newcommand\theadstart{% \tlinetop% \rowcolor{\tablecolor{head}}% } % \end{macrocode} % \end{macro} % % % \begin{macro}{\theadend} % \begin{macrocode} %% style of header end - empty \newcommand\theadend{} % \end{macrocode} % \end{macro} % % % \begin{macro}{\tsubheadstart} % \begin{macrocode} %% style of subheader start (row color) \newcommand{\tsubheadstart}{% \rowcolor{\tablecolor{subhead}} } % \end{macrocode} % \end{macro} % % % \begin{macro}{\tsubheadend} % \begin{macrocode} %% style of subheader end - empty \newcommand\tsubheadend{} % \end{macrocode} % \end{macro} % % The commands \cs{theadrow} and the equivalent \cs{tsubheadrow} define a % multicolumn row for the whole table width. % It should be used to have a full width spanning header. This command % includes the background color and the cell properties % using \cs{thead} and \cs{tsubhead}. % % \begin{macro}{\theadrow} % \begin{macrocode} %% shortcut for multi column row in header \newcommand{\theadrow}[2]{% \multicolumn{#1}{>{\columncolor{\tablecolor{head}}}l}{% \thead #2% }% \tabularnewline% }% % \end{macrocode} % \end{macro} % % \begin{macro}{\tsubheadrow} % \begin{macrocode} %% shortcut for multi column row in subheader \newcommand{\tsubheadrow}[2]{% \multicolumn{#1}{>{\columncolor{\tablecolor{subhead}}}l}{% \tsubhead #2% }% \tabularnewline% }% % \end{macrocode} % \end{macro} % % \subsection{Style definitions} % % The following \cs{resettablestyle} is meant to be used with in the % definition of a table style. It resets most commands to a default value % equivalent to what a table would look like without % any style applied. New styles should be built on this basis. The content of % this command can be changed. However it means that this changes are applied % to all styles of this package. % % \begin{macro}{\resettablestyle} % \begin{macrocode} %% reset to default styles \newcommand{\resettablestyle}{% \normalcolor\normalfont\normalsize% \renewcommand{\arraystretch}{1}% \rmfamily% \tsty@defaultcolors% \renewcommand{\tlinetop}{\coloredhline{black}} \renewcommand{\tlinemid}{\coloredhline{black}} \renewcommand{\tlinebottom}{\coloredhline{black}} \renewcommand{\theadstart}{\tlinetop\rowcolor{\tablecolor{head}}} \renewcommand{\tbegin}{\tlinetop} \renewcommand{\tbody}{\tlinemid} \renewcommand{\tend}{\tlinebottom} } % \end{macrocode} % \end{macro} % % \subsubsection{default} % % \begin{macrocode} %% style: default \setuptablestyle{default}{% \resettablestyle \renewcommand{\arraystretch}{1.4} \centering \sffamily \upshape% \tablefontsize{body} \tablealtcolored% \renewcommand{\thead}{% \tablefontsize{head}% \ignorespaces% } \renewcommand{\tsubhead}{% \tablefontsize{head}% \ignorespaces% } } % \end{macrocode} % % \subsubsection{roman} % This style differs from the default style only in the exchange of the % \cs{sffamily} with \cs{rmfamily}. % \begin{macrocode} %% style: roman \setuptablestyle{roman}{% \resettablestyle \renewcommand{\arraystretch}{1.4} \centering \rmfamily \upshape% \tablefontsize{body} \tablealtcolored% \renewcommand{\thead}{% \tablefontsize{head}% \ignorespaces% } \renewcommand{\tsubhead}{% \tablefontsize{head}% \ignorespaces% } } % \end{macrocode} % % \subsubsection{sansbold} % This style differs from the default style in the inclusion of \cs{bfseries} % in the heading commands. % % \begin{macrocode} %% style: sansbold \setuptablestyle{sansbold}{% \resettablestyle \renewcommand{\arraystretch}{1.4} \centering \sffamily \upshape% \tablefontsize{body} \tablealtcolored% \renewcommand{\thead}{% \tablefontsize{head}% \bfseries \upshape% \ignorespaces% } \renewcommand{\tsubhead}{% \tablefontsize{head}% \upshape% \ignorespaces% } } % \end{macrocode} % % \subsubsection{sansboldbw} % This style differs from the sansbold style in exchange of the table colors % with much darker heading colors % and a white heading font, which is printed slanted. % % \begin{macrocode} %% style: sansboldbw \setuptablestyle{sansboldbw}{% \resettablestyle \setuptablecolor{body}{white!100} \setuptablecolor{row}{gray!15} \setuptablecolor{head}{black!60} \setuptablecolor{subhead}{gray!40} % \end{macrocode} % % \begin{macrocode} \renewcommand{\arraystretch}{1.4} \centering \sffamily \upshape% \tablefontsize{body} \tablealtcolored% \renewcommand{\thead}{% \leavevmode\color{white} \tablefontsize{head}% \bfseries \slshape \ignorespaces% } \renewcommand{\tsubhead}{% \tablefontsize{head}% \bfseries \ignorespaces% } } % \end{macrocode} % % \subsection{Support for itemized lists in tables} % % \begin{macro}{\tsty@removeindentation} % \begin{macrocode} %% bugfix code for lists in tables \newcommand{\tsty@removeindentation}{% \leftmargini=\labelsep% \advance\leftmargini by \labelsep% } % \end{macrocode} % \end{macro} % % \begin{macro}{\tableitemize} % \begin{macrocode} \newcommand\tableitemize{ \@minipagetrue% \tsty@removeindentation } % \end{macrocode} % \end{macro} % % \subsection{New columntype definitions} %\label{sec:impl:columntypes} % % The \cs{arraybackslash} is required to restore the definition of % \lstinline!\\! after its redefinition. \cs{hspace}\{0pt\} is included to % allow hyphenation also of the first word. % % New columntype definitions: % % \begin{macrocode} %% New columntype definitions: %% centered (X): \newcolumntype{Z}{>{\centering\arraybackslash\hspace{0pt}}X} %% right (X): \newcolumntype{Y}{>{\RaggedLeft\arraybackslash\hspace{0pt}}X} %% left (X): \newcolumntype{W}{>{\RaggedRight\arraybackslash\hspace{0pt}}X} %% left (p): \newcolumntype{L}[1]{>{\RaggedRight\arraybackslash\hspace{0pt}}p{#1}} %% right (p): \newcolumntype{R}[1]{>{\RaggedLeft\arraybackslash\hspace{0pt}}p{#1}} %% centered (p): \newcolumntype{C}[1]{>{\Centering\arraybackslash\hspace{0pt}}p{#1}} % \end{macrocode} % % % \iffalse % % \fi % % \Finale \endinput