Какой-нибудь короткий синтаксис для установки RowSpacing только для последней строки в сетке? - PullRequest
5 голосов
/ 31 декабря 2011

RowSpacings позволяет изменять интервалы между рядами в сетке.

Справка говорит:

RowSpacings->{Subscript[s, 12],Subscript[s, 23],...} can be used to specify 
different spacings between different rows. If there are more rows than 
entries in this list, then the last element of the list is used repeatedly 
for the remaining rows

Обратите внимание, где написано оставшиеся строки выше.

Я хочу, чтобы все начальные строки использовали некоторый интервал, но последний ряд должен использовать другой интервал.

Этот пример выполняет документированный путь (остальные строки)

n = 5;
data = Table[Random[], {n}, {n}];
Grid[data, Frame -> All, RowSpacings -> {6, 1}, Alignment -> Center]

enter image description here

Но я хотел сделать обратное, то есть установить последний ряд на что-то, а все ряды перед ним на другой. Единственный способ, которым я мог это сделать, - это долгий путь, то есть, записав все интервалы для всех строк до последнего:

n = 5;
data = Table[Random[], {n}, {n}];
Grid[data, Frame -> All, 
 RowSpacings -> {Sequence @@ Table[1, {n - 2}], 6},Alignment -> Center]

enter image description here

Выше просто еще один способ написать

Grid[data, Frame -> All, RowSpacings -> {1, 1, 1, 6}, Alignment -> Center]

Я тоже пробовал такие вещи, как

Grid[data, Frame -> All, RowSpacings -> {{1}, 6}, Alignment -> Center]
Grid[data, Frame -> All, RowSpacings -> {{1 ;; 3}, 6}, Alignment -> Center]

но они не работают. Я не смог найти короткий путь, как в первом примере выше.

Кто-нибудь знает хитрость, чтобы сказать RowSpacings, чтобы установить только последнюю строку на какое-то конкретное значение, а все строки до него - на какое-то другое, без использования вышеуказанного хака?

Это не так уж и сложно сделать, как я, я просто подумал, пропускаю ли я один из тех синтаксисов трюков в Mathematica, вот и все.

спасибо,

1 Ответ

7 голосов
/ 31 декабря 2011

Если у вас нет других причин использовать комбинацию RowSpacings + GridBox, использование опции Spacings для Grid

Grid[data, Spacings -> {Automatic, Dimensions[data][[1]] -> 6}, 
     Frame -> All, Alignment -> Center]

дает то, что вам нужно.

EDIT: более удобно, Grid[data, Spacings -> {Automatic, -2-> 6}, Frame -> All, Alignment -> Center], где -2 относится ко второму последнему элементу индексов строки, которые идут от 1 до 1+number of rows

EDIT 2: Используя GridBox, следующее производиттот же вывод:

GridBox[data, RowLines -> True, ColumnLines -> True, 
  GridFrame -> True, RowAlignments -> Center, 
  ColumnAlignments -> Center, 
  GridBoxSpacings -> {"RowsIndexed" -> {-2 -> 6}}] //DisplayForm
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...