42.11 Высота строки

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

Высота содержимого строки — это максимальная высота любого символа или изображения на этой отображаемой строке, включая конечный перенос строки, если он есть. (Отображаемая строка, которая продолжается, не включает конечный перенос строки.) Это высота строки по умолчанию, если вы ничего не указываете для задания большей высоты. (В наиболее распространенном случае это равно высоте шрифта по умолчанию соответствующего кадра, см. Шрифт кадра.)

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

Перенос строки может иметь свойство текста или наложения line-height, которое контролирует общую высоту отображаемой строки, заканчивающейся этим переносом строки. Значение свойства может быть одной из нескольких форм:

t

Если значение свойства равно t, символ переноса строки не влияет на отображаемую высоту строки — высота определяется только видимым содержимым. Свойство line-spacing переноса строки, описанное ниже, также игнорируется в этом случае. Это полезно для размещения небольших изображений (или фрагментов изображений) без добавления пустых областей между изображениями.

(height total)

Если значение свойства представляет собой список в показанной форме, это добавляет дополнительное пространство ниже отображаемой строки. Сначала Emacs использует height как спецификатор высоты для контроля дополнительного пространства выше строки; затем он добавляет достаточно пространства ниже строки, чтобы общая высота строки достигла total. В этом случае любое значение свойства line-spacing для переноса строки игнорируется.

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

integer

Если спецификатор высоты — положительное целое число, значение высоты равно этому числу.

float

Если спецификатор высоты — число с плавающей запятой, float, числовое значение высоты равно float умножить на высоту строки по умолчанию для кадра.

(face . ratio)

Если спецификатор высоты — конс в показанной форме, числовая высота равна ratio умножить на высоту лица face. ratio может быть любым числовым типом или nil, что означает коэффициент 1. Если face равно t, оно относится к текущему лицу.

(nil . ratio)

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

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

Если вы не указываете свойство line-height, высота строки состоит из высоты содержимого плюс интервал между строками. Существует несколько способов указания интервала между строками для различных частей текста Emacs.

В графических терминалах вы можете указать интервал между строками для всех строк в кадре, используя параметр кадра line-spacing (см. Параметры макета). Однако, если значение по умолчанию line-spacing не равно nil, оно переопределяет параметр line-spacing кадра. Целое число указывает количество пикселей, добавляемых под строками. Число с плавающей запятой указывает интервал относительно высоты строки по умолчанию для кадра.

Вы можете указать интервал между строками для всех строк в буфере с помощью буфер-локальной переменной line-spacing. Целое число указывает количество пикселей, добавляемых под строками. Число с плавающей запятой указывает интервал относительно высоты строки по умолчанию для кадра. Это переопределяет интервалы между строками, указанные для кадра.

Наконец, перенос строки может иметь свойство текста или наложения line-spacing, которое может увеличить стандартный интервал между строками кадра и буфер-локальную переменную line-spacing: если его значение больше, чем значения по умолчанию для буфера или кадра, используется это большее значение для отображаемой строки, заканчивающейся этим переносом строки (если только перенос строки также не имеет свойство line-height, значение которого является одним из специальных значений, вызывающих игнорирование line-spacing, см. выше).

Одним или другим способом эти механизмы определяют значение Lisp для интервала каждой строки. Это спецификатор высоты, и он преобразуется в значение Lisp, как описано выше. Однако в этом случае числовое значение высоты указывает интервал между строками, а не высоту строки.

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