1

In the code below, how to go about aligning the headers and numbers as follows:

enter image description here

Here is the code:

\documentclass{book}
\usepackage[top=3cm,bottom=3cm,left=3.2cm,right=3.2cm,headsep=10pt,a4paper]{geometry}
\usepackage{pgfplotstable, booktabs}
\pgfplotsset{compat=newest}
\usepackage{supertabular}
\usepackage{amsmath}
\usepackage{array}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhf{}

\usepackage{filecontents}
\begin{filecontents}{detJ.dat}
  Move  Det_J
     1 -0.0786172
     2 -0.0786075
     3 -0.0785986
     4 -0.0785908
     5 -0.0785838
     6 -0.0785778
     7 -0.0785729
     8 -0.0785688
     9 -0.0785659
    10 -0.0785639
    11 -0.0785630
    12 -0.0785631
    13 -0.0785644
    14 -0.0785667
    15 -0.0785702
    16 -0.0785747
    17 -0.0785804
    18 -0.0785873
    19 -0.0785954
    20 -0.0786046
    21 -0.0786150
    22 -0.0786267
    23 -0.0786395
    24 -0.0786537
    25 -0.0786690
    26 -0.0786857
    27 -0.0787036
    28 -0.0787228
    29 -0.0787433
    30 -0.0787651
    31 -0.0787883
    32 -0.0788128
    33 -0.0788386
    34 -0.0788658
    35 -0.0788944
    36 -0.0789243
    37 -0.0789557
    38 -0.0789884
    39 -0.0790226
    40 -0.0790581
    41 -0.0790951
    42 -0.0791335
    43 -0.0791734
    44 -0.0792147
    45 -0.0792575
    46 -0.0793017
    47 -0.0793474
    48 -0.0793946
    49 -0.0794433
    50 -0.0794934
    51 -0.0795451
    52 -0.0795983
    53 -0.0796529
    54 -0.0797091
    55 -0.0797668
    56 -0.0798260
    57 -0.0798868
    58 -0.0799490
    59 -0.0800129
    60 -0.0800782
    61 -0.0801451
    62 -0.0802135
    63 -0.0802835
    64 -0.0803550
    65 -0.0804280
    66 -0.0805026
    67 -0.0805788
    68 -0.0806565
    69 -0.0807358
    70 -0.0808166
    71 -0.0808989
    72 -0.0809829
    73 -0.0810683
    74 -0.0811553
    75 -0.0812439
    76 -0.0813340
    77 -0.0814256
    78 -0.0815188
    79 -0.0816135
    80 -0.0817098
    81 -0.0818076
    82 -0.0819069
    83 -0.0820077
    84 -0.0821100
    85 -0.0822139
    86 -0.0823193
    87 -0.0824261
    88 -0.0825345
    89 -0.0826443
    90 -0.0827557
    91 -0.0828685
    92 -0.0829828
    93 -0.0830985
    94 -0.0832157
    95 -0.0833343
    96 -0.0834544
    97 -0.0835759
    98 -0.0836988
    99 -0.0838231
   100 -0.0839488
   101 -0.0840759
\end{filecontents}

\begin{document}
\twocolumn

%%% Code from Dr. Christian ------ for not using headers.----------------------
\pgfkeysifdefined{/pgfplots/table/output empty row/.@cmd}{
    % upcoming releases offer this more convenient option:
    \pgfplotstableset{
        empty header/.style={
          every head row/.style={output empty row},
          outfile=pgfplotstable.example1.out.tex,
        }
    }
}{
    % versions up to and including 1.5.1 need this:
    \pgfplotstableset{
        empty header/.style={
            typeset cell/.append code={%
                \ifnum\pgfplotstablerow=-1 %
                    \pgfkeyssetvalue{/pgfplots/table/@cell content}{}%
                \fi
            }
        }
    }
}

\noindent
{\scriptsize
% define tab first header
\tablefirsthead{\multicolumn{1}{c}{Movement} & \multicolumn{3}{c}{DET J} \\[7pt] \toprule\\}
%define subsequent headers
\tablehead{\multicolumn{3}{c}%
    {{\bfseries Table \thetable\ \textit{(Continued)}}}\\
    \toprule
    %
    \multicolumn{1}{c}{Movement} & \multicolumn{3}{c}{DET J} \\[7pt]  \toprule\\}
%define tails
\tabletail{ \midrule \multicolumn{4}{r}{{Continued on next column}} \\ \bottomrule\\}
%define last tail
\tablelasttail{\midrule\multicolumn{4}{r}{{End of Table}} \\ \bottomrule\\}
%define caption
\tablecaption{This is a Table with Data}
\pgfplotstabletypeset[col sep=space,empty header,
columns={Move,Det_J},      % display specified columns
begin table=\begin{supertabular},
end table=\end{supertabular},
columns/Move/.style={column type={c},dec sep align,precision=0,fixed,fixed zerofill},
columns/Det_J/.style={column type={c},dec sep align,precision=4,fixed,fixed zerofill},
every head row/.append style={before row={%
    \label{tab:DataTable}
    }},
]{detJ.dat}
\onecolumn %restores one-column output
\end{document} 
2

I'm not sure what's the problem with supertabular, but I'd suggest a different approach: a single table built from the data and splitting the entries in three balanced columns.

\documentclass[a4paper]{book}
\usepackage{booktabs}
\usepackage{amsmath}
\usepackage{siunitx}
\usepackage{xparse}

\ExplSyntaxOn

\ior_new:N \g_joe_file_stream
\tl_new:N \l__joe_file_body_tl
\int_new:N \l__joe_file_rows_int

\NewDocumentCommand{\readfile}{smm}
{% * = keep header, #2 = file name, #3 = symbolic name
 \seq_clear_new:c { l_joe_file_#3_seq }
 \ior_open:Nn \g_joe_file_stream { #2 }
 \ior_map_inline:Nn \g_joe_file_stream
  {
   \seq_put_right:cn { l_joe_file_#3_seq } { ##1 }
  }
 \IfBooleanF{#1}{ \seq_pop_left:cN { l_joe_file_#3_seq } \l_tmpa_tl }
}
\NewDocumentCommand{\processdata}{mmmm}
 {% #1 = name in, #2 = name out, #3 = code in, #4 = code out
  \seq_clear_new:c { l_joe_file_#2_seq } % the output sequence
  \cs_set:Npn \__joe_file_process:w #3 { #4 }
  \seq_set_map:ccn { l_joe_file_#2_seq } { l_joe_file_#1_seq } { \__joe_file_process:w ##1 }
 }
\cs_generate_variant:Nn \seq_set_map:NNn { cc }

\NewDocumentCommand{\maketable}{mmmm}
 {% #1 = cols, #2 = table preamble, #3 = headers, #4 = data set
  \tl_clear:N \l__joe_file_body_tl
  \int_set:Nn \l__joe_file_rows_int
   {
    \int_div_truncate:nn { \seq_count:c { l_joe_file_#4_seq } + #1 - 1 } { #1 } % rounds
   }
  \int_step_inline:nnnn { 1 } { 1 } { \l__joe_file_rows_int }
   {
    \int_step_inline:nnnn { 0 } { 1 } { #1 - 1 }
     {
      \tl_put_right:Nx \l__joe_file_body_tl
       {
        \seq_item:cn { l_joe_file_#4_seq } { ##1 + ####1 * \l__joe_file_rows_int } &
       }
     }
    \tl_put_right:Nn \l__joe_file_body_tl { \\ }
   }
  \begin{tabular}{ *{#1}{#2} l@{} }
  \toprule
  \prg_replicate:nn { #1 } { #3 & } \\
  \midrule
  \tl_use:N \l__joe_file_body_tl
  \bottomrule
  \end{tabular}
 }

\ExplSyntaxOff 

\begin{document}

\begin{table}
\centering

\readfile{detJ.dat}{datain}
\processdata{datain}{dataout}{#1 #2}{#1 & #2}

\sisetup{group-digits=false}
\footnotesize

\maketable{3}{S[table-format=3.0]S[table-format=-1.7]}{{Movement}&{DetJ}}{dataout}

\end{table}

\end{document}

The \readfile command populates a sequence with the data from the file, here detJ.dat (the *-version would keep the header).

The \processdata command reformats the entries: here we know they are in the form <number><space><number> and I transform them into <number>&<number>. Then \maketable builds the required table (three column pairs).

enter image description here

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.