TableForm с выравниванием TableHeadings по левому краю, но содержимое таблицы по правому краю
TableForm
с TableHeadings
Опция - это быстрый и простой способ отображения классической таблицы в Mathematica FrontEnd. Единственная проблема заключается в том, что такая таблица часто отображается с заголовками, выровненными по левому краю, а содержимое таблицы - по правому краю. Можно ли заставить TableForm
вести себя таким образом? А если нет, то как лучше всего сделать аналог TableForm
что ведет себя таким образом?
3 ответа
Похоже, что один из способов сделать это:
RawBoxes[ToBoxes[
TableForm[RandomReal[{-10, 10}, {3, 3}],
TableHeadings -> {{"First left header", "Second left header",
"Trird left header"}, {"First top header", "Second top header",
"Third top header"}}]] /. (ColumnAlignments -> _) ->
ColumnAlignments -> {Left, Right}]
Такое поведение можно сделать постоянным, используя трюк Виллегаса-Гейли:
Unprotect[TableForm];
TableForm[args___] /; ! TrueQ@$inTableForm :=
Block[{$inTableForm = True},
RawBoxes[ToBoxes[TableForm[args]] /. (ColumnAlignments -> _) ->
ColumnAlignments -> {Left, Right}]]
Protect[TableForm];
Сейчас
TableForm[RandomReal[{-10, 10}, {3, 3}],
TableHeadings -> {{"First left header", "Second left header",
"Third left header"}, {"First top header", "Second top header",
"Third top header"}}]
дает:
Другой способ - определить альтернативную функцию. myTableForm
:
myTableForm[args___] :=
RawBoxes[ToBoxes[TableForm[args]] /. (ColumnAlignments -> _) ->
ColumnAlignments -> {Left, {Right}}]
Ты можешь использовать Grid
а также Alignment
, Вот один из способов:
a = Map[Mod[RandomInteger[2*^9], 10^#] &, RandomInteger[{1, 6}, {4, 7}], {2}];
b = Item[#, Alignment -> Left] & /@
{"One", "Two", "Three", "Four", "Five", "Six", "Seven"};
Grid[a~Prepend~b, Alignment -> Right]
Вот еще один:
headings = {"One", "Two", "Three", "Four", "Five", "Six", "Seven"};
Grid[a ~Prepend~ headings,
Dividers -> {None, {2 -> True}},
Alignment -> {Right, Automatic, {{1, 1}, {1, -1}} -> Left}
]
Вы можете получить гораздо больше контроля, используя Grid или GridBox, если TableForm не делает то, что вам нравится.