
Моя таблица состоит из двух групп строк. Первая группа содержит большие значения (X,XXX). Вторая группа содержит меньшие значения (0.XXX). Siunitx выравнивает все числа на основе положения десятичного маркера. Результат некрасивый: некоторые числа выровнены очень сильно по левому краю, а другие — очень сильно по правому краю.
Можно ли выровнять числа так, чтобы десятичные разделители (в малых значениях) были выровнены с разделителями тысяч (в больших значениях)?
Вот пример таблицы. Второй и третий столбцы показывают текущую ситуацию. Последние два столбца — пример того, как я хотел бы, чтобы выглядели данные (отредактировано с помощью Photoshop).
Если четкого решения не существует, то хакерское решение тоже будет кстати.
Я уже придумал способ изменить десятичный разделитель в таблице: если бы я мог использовать запятую в качестве десятичного разделителя для первой группы строк, все было бы хорошо. Однако я не смог заставить это работать (с моими скромными знаниями LaTeX).
Код, используемый для таблицы:
\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{group-separator={,},group-minimum-digits={3},output-decimal-marker={.}}
\begin{document}
\begin{tabular}{@{}p{2.3cm}SSp{0.3cm}SS@{}}
\toprule
& \multicolumn{2}{c}{Without Threshold Selector} && \multicolumn{2}{c}{With Threshold Selector}\\
\cmidrule{2-3} \cmidrule{5-6}
& \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}} && \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}}\\
\midrule
True positives & 2791 & 1831 && 3126 & 3547\\
False positives & 2924 & 995 && 3853 & 3483\\
True negatives & 36998 & 38927 && 36069 & 36439\\
False negatives & 2498 & 3458 && 2163 & 1742\\
\addlinespace
Sensitivity & 0.528 & 0.346 && 0.591 & 0.671\\
Precision & 0.488 & 0.648 && 0.448 & 0.505\\
\bottomrule
\end{tabular}
\end{document}
решение1
Хотя я бы не рекомендовал эту форму отображения, она, безусловно, выполнима. Вместо использования siunitx
я бы, вероятно, выбрал решение «низкого уровня», основанное в некоторой степени на том, как dcolumn
выполняется выравнивание. Стратегия здесь — гибридный подход. Во-первых, содержимое ячейки захватывается с помощью collcell
(что делает во многом то же самое, siunitx
что и на первом этапе). Предполагается, что собранный материал является либо десятичным, либо целым числом, и .
поэтому выполняется быстрая проверка. Для десятичных чисел допускается одна цифра заполнения в начале, и число набирается «как есть». Для целых чисел есть жестко запрограммированная проверка для добавления a, ,
и число выгружается в вывод. Выполнение всего в поле фиксированной ширины позволяет выполнить выравнивание:
\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{collcell}
\newlength\mylength
\AtBeginDocument{\settowidth\mylength{$12.345$}}
\newcolumntype{M}{>{\collectcell\multialign}l<{\endcollectcell}}
\makeatletter
\newcommand*\multialign[1]{%
\setbox0=\hbox to \mylength{%
\hfil
$
\in@{.}{#1}%
\ifin@
\settowidth\mylength{$0$}%
\hspace{\mylength}%
\expandafter\@firstofone
\else
\expandafter\multialignint
\fi
{#1}%
$%
}%
\hfil\box0\hfil
}
\newcommand*\multialignint[1]{%
\multialignintauxi#1\empty\empty\empty\empty\relax\stop
}
\newcommand*\multialignintauxi{}
\def\multialignintauxi#1#2#3#4#5#6\stop{%
\ifx#4\empty % Three or fewer digits
#1#2#3%
\else
\ifx#5\empty % Four digits
#1\mathord,#2#3#4%
\else % Five digits
#1#2\mathord,#3#4#5%
\fi
\fi
}
\makeatother
\begin{document}
\begin{tabular}{@{}p{2.3cm}MMp{0.3cm}MM@{}}
\toprule
& \multicolumn{2}{c}{Without Threshold Selector} && \multicolumn{2}{c}{With Threshold Selector}\\
\cmidrule{2-3} \cmidrule{5-6}
& \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}} && \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}}\\
\midrule
True positives & 2791 & 1831 && 3126 & 3547\\
False positives & 2924 & 995 && 3853 & 3483\\
True negatives & 36998 & 38927 && 36069 & 36439\\
False negatives & 2498 & 3458 && 2163 & 1742\\
\addlinespace
Sensitivity & 0.528 & 0.346 && 0.591 & 0.671\\
Precision & 0.488 & 0.648 && 0.448 & 0.505\\
\bottomrule
\end{tabular}
\end{document}