1

The custom environment is created in the answer by Niel de Beaudrap here: Assessment table. However I can unfortunately cannot center the table in my tex file.

I have tried to use centering, \begin{center}, minipage and \hfill around the environment and also around tickzpicture but none of it worked.

My document type is report and I want to center this table. Could someone please help me out? Thanks!

Here is the compiled code.

\documentclass[12pt,a4paper]{report}

\usepackage{pbox,tikz}
\usetikzlibrary{matrix,calc,fit,intersections}

%%%%% Here starts the environment

\newlength\criterionwidth           % width for criterion table columns
\newlength\labelheight              % height for labels for assessment criteria
\newlength\labeldepth               % depth for labels for assessment criteria
\newlength\itemcolwidth             % width for the left-most column
\newlength\criterionlabelskip       % vert. skip between legend and first criterion label
\newlength\criterionlabelindent     % left indent for criterion labels from their columns
\newlength\assessmentdiagtopstretch % vert.dist. upwards to pull top of the diagonal
\newlength\assessmentdiagbotstretch % vert.dist. downwards to pull bottom of the diagonal
\newlength\remarkswidth             % absolute width of remarks column
\newlength\remarksxsep              % inner horiz. separation of remarks from column edge

\setlength\criterionwidth           {1.5em}
\setlength\labelheight              {3ex}
\setlength\labeldepth               {1ex}
\setlength\itemcolwidth             {3em}
\setlength\criterionlabelskip       {2ex}
\setlength\criterionlabelindent     {0ex}
\setlength\assessmentdiagtopstretch {7.5mm}
\setlength\assessmentdiagbotstretch {2mm}
\setlength\remarkswidth             {70mm} %reduced remarkswidth so that alignment can be seen better. 
\setlength\remarksxsep              {1em}

\newcommand\labeltypeface   {\itshape}      % face for description labels in the table
\newcommand\celltypesize    {\footnotesize} % size of evalutation cell contents
\newcommand\remarktypeface  {\small}        % size of remark cell contents



\makeatletter
\newcount\@RemarkCol            % Counter for position of the Remarks column
\newtoks\@CriterionNameToks     % Token list for labels of the criteria to asses
\@CriterionNameToks{}

\newcommand\AddCriterion[2]{%   Macro to define a new criterion column / label
    \edef\@tempa{\the\@CriterionNameToks}%
    \ifx\empty\@tempa\@CriterionNameToks{{#1}/{#2}}\else
    \expandafter\@CriterionNameToks\expandafter{\the\@CriterionNameToks,{#1}/{#2}}
    \fi}

%%% Table Env Definition %%%

\newenvironment{selectionTable}[1]{%
    \@CriterionNameToks{}%92mm
    \@RemarkCol=2\relax
    #1%
    \begin{tikzpicture}
        \expandafter\def\expandafter\@CriterionNames\expandafter{\the\@CriterionNameToks}
        
        \node (CriterionLegend) [inner sep=1em] {\parbox{\paperwidth}{\CriterionLegend}};
        
        \coordinate (Criterion-first-anchor) at ($(CriterionLegend.south west) + (0,-\criterionlabelskip)$);
        \def\CriterionAnchor{Criterion-first-anchor}
        \foreach \A/\critLabel in \@CriterionNames {
            \global\advance\@RemarkCol by 1\relax
            \node [anchor=north west, text width=\criterionwidth, minimum height=\labelheight+\labeldepth, inner sep=0pt]
            (\A-anchor) at (\CriterionAnchor) {};
            \node [anchor=west, text height=\labelheight, text depth=\labeldepth]
            (\A-label) at  ($(\A-anchor.east) + (\criterionlabelindent,0)$)
            {\labeltypeface\critLabel};
            \xdef\CriterionAnchor{\A-anchor.south east}%
        }
        \node [anchor=north west, inner xsep=\remarksxsep, inner ysep=0pt, text height=\labelheight, text depth=\labeldepth,
        text width=\remarkswidth-2*\pgfkeysvalueof{/pgf/inner xsep}]
        (Remarks-title) at (\CriterionAnchor)
        {\labeltypeface\RemarksTitle};
        
        \node [anchor=south west, minimum height=\itemcolwidth,rotate=90]
        (ItemTitle) at (Remarks-title.north -| CriterionLegend.west)
        {\ItemTitle};
        \node [inner sep=0pt, fit=(ItemTitle)(ItemTitle |- CriterionLegend.north)]
        (ItemTitle) {};
        
        \def\CriterionAnchor{ItemTitle.west}
        \node [anchor=north west, text height=\labelheight, text depth=\labeldepth, inner ysep=0pt]
        (ItemHeading) at (ItemTitle.south west)  {\ItemHeading};
        
        \foreach \A/\critLabel in \@CriterionNames {%
            \node [inner sep=0pt, anchor=south, minimum width=\criterionwidth, text height=\labelheight, text depth=\labeldepth]
            (\A-heading) at (ItemHeading.south -| \A-anchor)  {\A};
        }
        \node [anchor=north west, rotate=90, minimum height=\criterionwidth, inner ysep=0pt]
        (AssessmentTitle) at (Remarks-title.south east)  {\AssessmentTitle};
        \node [inner sep=0pt, fit=(AssessmentTitle)] (AssessmentTitle)  {};
        \node [anchor=north east]
        (AssessmentLegend) at (CriterionLegend.north -| AssessmentTitle.east) 
        {\pbox{\paperwidth}{\AssessmentLegend}};
        
        \def\@GridFinalRow{0}
        
        \matrix [%
        anchor=north west, matrix of nodes,%
        nodes in empty cells,
        inner sep=0pt,
        nodes={%
            draw=white, inner sep=0pt,
            execute at begin node=\celltypesize$,
            execute at end node=$\xdef\@GridFinalRow{\pgfmatrixcurrentrow},\iffalse$ Fix some syntax hilighting problems\fi
            text height=3ex, text depth=1ex, minimum width=\criterionwidth},
        column 1/.style={%
            execute at begin node=\expandafter\@gobble\@gobble,
            execute at end node=\@gobble,
            nodes={minimum width=\itemcolwidth}},
        column \the\@RemarkCol/.style={%
            execute at begin node=\remarktypeface\expandafter\@gobble\@gobble,
            execute at end node=\@gobble,
            nodes={%
                minimum width=\remarkswidth,
                inner xsep=\remarksxsep,
                text width=\remarkswidth-2*\pgfkeysvalueof{/pgf/inner xsep}}}
        ] (Grid) at (ItemHeading.south west)
        \bgroup
    }{%
        \\ \egroup;
        
        \expandafter\ifnum\@GridFinalRow>0
        \foreach \row in {1,...,\@GridFinalRow} {%
            \draw (Grid-\row-1.south west) -- (Grid-\row-1.south west -| Grid.east);
        }
        \fi
        
        \draw (ItemTitle.north west)    -- (AssessmentLegend.north east)
        -- (AssessmentTitle.south east)
        -- (ItemHeading.south west) -- cycle;
        \draw (Grid.north east) -- (Grid.south east) -- (Grid.south west) -- (Grid.north west);                                                             
        \draw (CriterionLegend.north west) -- (Criterion-first-anchor);
        
        \draw [name path=AssessmentLegendBoundary]
        (AssessmentLegend.north west) -- ($(AssessmentLegend.south west) + (0mm,\assessmentdiagtopstretch)$)
        -- ($(AssessmentTitle.north west) + (0mm,-\assessmentdiagbotstretch)$)
        -- (AssessmentTitle.south west |- Grid.south);
        
        \path [name path=Remarks-north-boundary] (Remarks-title.north west) -- ($(Remarks-title.north east) + (\paperwidth,0mm)$);
        \path [name intersections={of=AssessmentLegendBoundary and Remarks-north-boundary, by={Remarks-north-east-boundary}}];
        \draw (Remarks-north-east-boundary) -- (Remarks-title.north west) -- (Remarks-title.north west |- Grid.south);
        
        \foreach \A/\critLabel in \@CriterionNames {%
            \path [name path=\A-north-boundary] (\A-anchor.north west) -- ($(\A-anchor.north east) + (\paperwidth,0mm)$);
            \path [name intersections={of=AssessmentLegendBoundary and \A-north-boundary, by={\A-north-east-boundary}}];
            \draw (\A-north-east-boundary) -- (\A-anchor.north west) -- (\A-anchor.north west |- Grid.south);
        }       
    \end{tikzpicture}%
}
\makeatother

%%% Customisation %%%

\newcommand\CriterionLegend{%
    %
    Assess solution alternatives according  \\
    to \underline{\MakeUppercase{selection criteria}}: \\[2ex]
    \begin{tabular}{@{(}c@{)\quad}l}
        $+$   &   Yes
        \\
        $-$ &   No
        \\
        ?   &   Lack of information
        \\
        ! & Check list of requirement
    \end{tabular}
    %
}

\newcommand\AssessmentLegend{%
    %
    \begin{tabular}{c@{\quad}l}
        \multicolumn{2}{c}{\MakeUppercase{Decision making}}
        \\
        \hline
        &   Mark the solution \\ & alertnatives:
        \\[2ex]
        ($+$)   &   Pursue solution further
        \\
        ($-$)   &   Solution eliminated
        \\
        (?)     & Acquire information \\& (reassess solution)
        \\
        (!)     &   check changes in list \\& of requirements
    \end{tabular}
    %
}

\begin{document}

\begin{center}
\begin{table}
    \caption{Selection list for different things according to pahl beitz}
    \centering \par
    \begin{selectionTable}{%
                \newcommand\ItemTitle       {Enter solution alternatives:}
                \newcommand\ItemHeading     {~Nr.}
                \newcommand\AssessmentTitle {Decision}
                \newcommand\RemarksTitle    {Comments (notes, reasons)}
                
                \AddCriterion   {A}{Vertrglichkeit gegeben}
                \AddCriterion   {B}{Forderungen der Anforderungsliste erf\"ult}
                \AddCriterion   {C}{Grundstzlich realisiebar}
                \AddCriterion   {D}{Aufwand zulassig}
                \AddCriterion   {E}{Unmittelbare Sicherheitstechnik gegeben}
                \AddCriterion   {F}{Im eigenen Bereich bevorzugt}
                
            }%
            1 & + & + & + & ? &   &     & Anzahl er Messstellen                     & ? \\
            2 & + & - &   &   &   &     & Unterbringung der Masse                   & - \\
            3 & - &   &   &   &   &     & Radioaktivit\"at                          & - \\
            4 & + & + & + & + &   & (+) & (Weiterentwicklung bisheriger L\"osungen) & + \\
            5 & + & + & + & + &   &     &                                           & + \\
            6 & - &   &   &   &   &     & Fl\"ussigkeit nicht Leitend               & - \\
            7 & + & + & + & + &   &     &                                           & + \\
            8 & + & + & + & + &   &     & s.Lv 7                                    & +
        \end{selectionTable}
    \end{table}
  \end{center}  
\end{document}
5
  • 1
    "the first answer mentioned here" is not really helpful. People can sort by newest, active, votes etc., the first answer for you won't necessarily be the first answer for somebody else. Please either directly link to the answer or add the name of the author. Dec 23, 2022 at 9:50
  • Thank you for the tip, edited the question accordingly. Dec 23, 2022 at 9:53
  • Can you show the code you already have so we don't have to stitch the pieces together? Dec 23, 2022 at 9:56
  • Please, add a minimal version of the code that doesn't work we can compile! If your table is in a group or an environment, such as minipage, you may have to add \par at the end in order for \centering or any sort of formatting to work. Your table might as well be too wide.
    – Celdor
    Dec 23, 2022 at 11:04
  • The outer center environment has to be removed. Anyway, there's something wrong in the code: it produces an oversized object and the more width I assign to \textwidth the more oversized the object becomes. With standard text width the overfull is 551pt; with A3 paper it becomes about 600pt. With A2 paper it's 700pt and so on.
    – egreg
    Dec 23, 2022 at 17:40

0

You must log in to answer this question.

Browse other questions tagged .