用 ; 分隔的值的对齐

用 ; 分隔的值的对齐

我正在尝试对齐表中的某些值,并用;

\documentclass[12pt]{article}
\usepackage[portuguese]{babel}
\usepackage{graphicx}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\usepackage{subfig}
\usepackage[flushleft]{threeparttable}
\usepackage{booktabs}
\usepackage[nodisplayskipstretch]{setspace}
\usepackage{amssymb}
\usepackage{setspace}
\usepackage[section]{placeins}
\usepackage{dcolumn}
\usepackage{siunitx,booktabs}
\usepackage{url}
\usepackage{float}
\usepackage{subcaption}
\usepackage{tabularx}
\usepackage{adjustbox}
\usepackage{rotating}
\usepackage{lipsum}
\usepackage{amsmath}
\usepackage{geometry}
\usepackage[tableposition=top]{caption}
\usepackage{babel}
\usepackage[style=authoryear]{biblatex}
\geometry{
a4paper,
total={140mm,190mm},
}
\usepackage[T1]{fontenc}

\newcolumntype{d}[1]{D{.}{.}{#1}}

\begin{document} 


\FloatBarrier
\begin{table}[!htb]
\centering

\caption{Credible intervals}
\begin{adjustbox}{max width=\textwidth}
\begin{tabular}{lccc}
\hline
\multicolumn{4}{l}{Credible Intervals [Lower Limit ; Upper Limit]}  \\

\hline
Parameter & Model 1 & Model 2 & Model 3 \\
\hline
$\beta_0$ &[-1,315 ;-1,037 ]& [-1,275 ; -0,960] & [-1,317 ; -1,025]\\
$\beta_1$ &[-0,240  ; -0,083]& [-0,217 ; -0,084] &[-0,239 ; -0,084]\\
$\beta_2$ & [0,053  ; 0,268 ]& [0,072 ; 0,256]& [0,046 ; 0,256]\\
$\beta_3$ &[-0,016 ; 0,168] & [0,003 ; 0,188 ]& [-0,019 ; 0,160]\\
$\delta_0$ &[-4,031 ; -2,744] & [-3,988 ; -2,350] & [-0,724 ; 0,633]\\
$\delta_1$ & [-0,486 ;0,591]& [-0,526 ; 0,643] & [-0,793 ;  0,311]\\
$\delta_2$ & [0,402 ; 1,744] & [-0,215 ; 1,618]& [-1,701 ; -0,284]\\
$\delta_3$ & [-0,844 ; 0,220] & [-2,114 ; 0,106] & [-0,152 ; 0,967]\\
$\alpha$ &  & [0,005 ; 0,313] & \\
\hline
\end{tabular}
\end{adjustbox}
\end{table}
\FloatBarrier

\end{document}

输出如下,我该如何改善括号之间的值的对齐? 在此处输入图片描述

答案1

一些技巧可以使表格投入使用siunitx而不需要对输入进行大量的修改。

主要技巧:将分号改为&; 次要技巧:将四列改为七列。只有最后一行需要特殊处理,以避免中间出现分号。

\documentclass[12pt]{article}
\usepackage{subcaption}
\usepackage{booktabs,array,siunitx}

\begin{document} 


\begin{table}[!htbp]
\centering

\caption{Credible intervals}

% some tricks
\let\semicolon=;
\catcode`;=4

\sisetup{
  table-format=-1.3,
  table-align-text-pre = true,
  table-align-text-post = false,
}

\begin{tabular}{
 l 
 *{3}{
      S[table-space-text-pre={[}]
      @{\semicolon\,}
      S[table-space-text-post={]}]
     }
}
\toprule
\multicolumn{7}{c}{Credible Intervals [Lower Limit\semicolon\,Upper Limit]}  \\
\midrule
Parameter &
 \multicolumn{2}{c}{Model 1} &
 \multicolumn{2}{c}{Model 2} &
 \multicolumn{2}{c}{Model 3} \\
\midrule
$\beta_0$ &[-1,315 ;-1,037 ]& [-1,275 ; -0,960] & [-1,317 ; -1,025]\\
$\beta_1$ &[-0,240  ; -0,083]& [-0,217 ; -0,084] &[-0,239 ; -0,084]\\
$\beta_2$ & [0,053  ; 0,268 ]& [0,072 ; 0,256]& [0,046 ; 0,256]\\
$\beta_3$ &[-0,016 ; 0,168] & [0,003 ; 0,188 ]& [-0,019 ; 0,160]\\
$\delta_0$ &[-4,031 ; -2,744] & [-3,988 ; -2,350] & [-0,724 ; 0,633]\\
$\delta_1$ & [-0,486 ;0,591]& [-0,526 ; 0,643] & [-0,793 ;  0,311]\\
$\delta_2$ & [0,402 ; 1,744] & [-0,215 ; 1,618]& [-1,701 ; -0,284]\\
$\delta_3$ & [-0,844 ; 0,220] & [-2,114 ; 0,106] & [-0,152 ; 0,967]\\
$\alpha$ & \multicolumn{2}{c}{} & [0,005 ; 0,313] & \multicolumn{2}{c}{} \\
\bottomrule
\end{tabular}
\end{table}

\end{document}

在此处输入图片描述

答案2

如果您希望保留当前输入,请使用以下方式进行按摩collcell将确保所有范围的宽度相等:

在此处输入图片描述

\documentclass{article}

\usepackage{booktabs,collcell,siunitx}

\def\splitlbub[#1,#2;#3,#4]\relax{\def\lbi{#1}\def\lbm{#2}\def\ubi{#3}\def\ubm{#4}}
\newcommand{\workcell}[1]{%
  \sbox0{\hbox{#1}}%
  \ifdim\wd0>0pt\relax
    \splitlbub#1\relax
    $[\ifnum\lbi\lbm<0\else\phantom{-}\fi
     \num{\lbi,\lbm};
     \ifnum\ubi\ubm<0\else\phantom{-}\fi
     \num{\ubi,\ubm}]$
  \fi
}
\newcolumntype{W}{ >{\collectcell\workcell}c<{\endcollectcell} }

\begin{document}

\begin{table}
  \centering
  \caption{Credible intervals}

  \medskip

  \begin{tabular}{ l *{3}{ W } }
    \multicolumn{4}{l}{Credible Intervals [Lower Limit ; Upper Limit]} \\
    \toprule
    Parameter & \multicolumn{1}{c}{Model 1} & \multicolumn{1}{c}{Model 2} & \multicolumn{1}{c}{Model 3} \\
    \midrule
    $\beta_0$  & [-1,315 ; -1,037] & [-1,275 ; -0,960] & [-1,317 ; -1,025] \\
    $\beta_1$  & [-0,240 ; -0,083] & [-0,217 ; -0,084] & [-0,239 ; -0,084] \\
    $\beta_2$  & [ 0,053 ;  0,268] & [ 0,072 ;  0,256] & [ 0,046 ;  0,256] \\
    $\beta_3$  & [-0,016 ;  0,168] & [ 0,003 ;  0,188] & [-0,019 ;  0,160] \\
    $\delta_0$ & [-4,031 ; -2,744] & [-3,988 ; -2,350] & [-0,724 ;  0,633] \\
    $\delta_1$ & [-0,486 ;  0,591] & [-0,526 ;  0,643] & [-0,793 ;  0,311] \\
    $\delta_2$ & [ 0,402 ;  1,744] & [-0,215 ;  1,618] & [-1,701 ; -0,284] \\
    $\delta_3$ & [-0,844 ;  0,220] & [-2,114 ;  0,106] & [-0,152 ;  0,967] \\
    $\alpha$   &                   & [ 0,005 ;  0,313] &                   \\
    \bottomrule
  \end{tabular}
\end{table}

\end{document}

\splitlbub拆分施工[lbi,lbm;ubi,ubm]分为四个部分,同时\workcell使用这四个部分来决定下限或上限是负数/正数,并\phantom在需要时插入减号。

根据您的区域设置,\num可以打印,.作为小数分隔符。例如,添加

\sisetup{
  output-decimal-marker = {,}
}

你的序言将保持,为小数点标记。


代码库稍微小一点\workcell可以实现相同的输出:

\usepackage{booktabs,collcell,siunitx,eqparbox}

\def\splitlbub[#1;#2]\relax{\def\lb{#1}\def\ub{#2}}
\newcommand{\workcell}[1]{%
  \sbox0{\hbox{#1}}%
  \ifdim\wd0>0pt\relax
    \splitlbub#1\relax
    $[\eqmakebox[bnd][r]{$\num{\lb}$};\eqmakebox[bnd][r]{$\num{\ub}$}]$
  \fi
}

它用eqparbox因此,每次改变表的内容时都至少需要进行两次编译。

相关内容