TableForm с выравниванием TableHeadings по левому краю, но содержимое таблицы по правому краю - PullRequest
4 голосов
/ 05 июня 2011

TableForm с опцией TableHeadings - это быстрый и простой способ отображения классической таблицы в Mathematica FrontEnd.Единственная проблема заключается в том, что такая таблица обычно отображается с заголовками, выровненными по левому краю, а содержимое таблицы - по правому краю.Можно ли заставить TableForm вести себя таким образом?Или если нет, то как лучше всего сделать аналог TableForm, который ведет себя таким образом?

Ответы [ 3 ]

3 голосов
/ 05 июня 2011

Вы можете использовать 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}
]

enter image description here

2 голосов
/ 06 июня 2011

Похоже, что один из способов сделать это:

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"}}]

дает:

Modified TableForm

Другой способ - определить альтернативную функцию myTableForm:

myTableForm[args___] := 
 RawBoxes[ToBoxes[TableForm[args]] /. (ColumnAlignments -> _) -> 
    ColumnAlignments -> {Left, {Right}}]
1 голос
/ 05 июня 2011

Вы можете получить гораздо больше контроля, используя Grid или GridBox, если TableForm не делает то, что вам нравится.

...