Не забывать про минус в матрицах

Глюпый компег без подсказок не всегда может решить задачу оптического выравнивания.

Предоставляемые пакетом amsmath окружения *matrix реализованы через стандартное array с центральным выравниванием каждого столбца.

Когда я набрал первую табличку к примеру на симплекс-метод, я задумался: почему она странно выглядит? Дело было в омерзительно выглядящем отрицательном числе -3 в одном из столбцов. За счёт минуса цифра неприятно вывесилась через край.

Проблема: отрицательные числа неприятно
вывешиваются

(Обозначения сбоку для элементарных операций, выполняемых над матрицей, делаются с помощью пакета gauss).

Словом, всё выглядело так, как будто какая-то падла подошла сбоку и мочит со всей силы молотком, пытаясь выбить тройку из колонки.

Человечек херачит кувалдой по колонке,
выбивая цифру с минусом

Решения

Решить проблему можно по-разному.

Во-первых, минус (да и прочие графически слабые знаки) можно вывешивать в межколоночное пространство. Например, можно определить с помощью \llap команду, которая будет выводить минус слева от курсора:

\newcommand{\mm}{\llap{$-$}}

Тогда можно будет писать \mm3 вместо -3. Можно даже присвоить минусу активный код, чтобы не вводить постоянно \mm:

\def\m{-}
\catcode`\-=\active
\def\-{\llap{$\m$}}

Таким образом, минус будет вывешиваться за столбец целиком. Можно, кстати, попробовать вывесить его только на полширины, особенно, когда выше/ниже стоят более массивные числа.

Этот подход совершенно не может использоваться, когда проблемное число стоит в самом первом столбце (тут уже фантомы спешат на помощь).

Кроме того, можно просто все столбики выравнивать по правому краю. Это не всегда опрятно выглядит, когда в матрице есть строка с «заголовками» столбцов, а ещё могут получаться слишком большие белые дыры в матрице.

Почему всё так

С минусом та же хрень, что и со всякой прочей пунктуацией в тексте — он оптически слабее цифр, а потому его следует чуточку выставлять за дверь, чтобы он не нарушал общего ритма.

Комментарии:

jetxee, 10.03.2009

Концепт-арт падлы с молотком — классный! :)

Решения довольно интересные. Положил в закладки. А как-нибудь иначе решить нельзя?

Например, ввести корректирующий отрицательный пробел, и вставлять вручную?

\documentclass{article}
\newlength{\minuslen}
\settowidth{\minuslen}{$-$}
\newcommand{\backminus}{\hspace{-\minuslen}}
\begin{document}
\[
\begin{array}{cc}
1 & 2 \\
3 & \backminus -4 \\
\end{array}
\]
\end{document}
jetxee, 10.03.2009

Есть, кстати, близкая проблема. Автоматического выравнивания столбцов в таблице/матрице по десятичной точке.

Я пока не знаю решения.

Дмитрий Джус ← сам, 10.03.2009

Автоматического выравнивания столбцов в таблице/матрице по десятичной точке

Пакет dcolumn? Ещё Кнут писал про это в TeX Book на p. 241, только там не автоматически :)

jetxee, 31.03.2009

Спасибо. То, что надо.

Оставить комментарий:





9+9−x+5=16,

Бесконечно много решений? F5!

← Daily Digest Сорт оф апатия →