Выравнивание столбцов в таблице режима Org с японскими шрифтами

12

Как я могу смешать японский и английский в одной и той же таблице оргструктуры (в которой используются шрифты фиксированной ширины)? Что-то вроде:

| мммммм | |
| は ど う デ シ ウ | |
| フ ー フ | フ ー フ |

не будет выравнивать Emacs просто считает японские символы как единое целое, хотя на самом деле они больше на 10% больше.

Можно ли установить ширину столбца в пикселях? Я знаю, что <10> установит ширину, но это не помогает, так как это считается в терминах букв фиксированной ширины.

Проблема в основном в том, как emacs выравнивает столбцы (используя ширину шрифта).

Quora Feans
источник
Вы пытались выровнять таблицы, C-c C-cпока вы находитесь в камере? Я просто вставил ваш пример в буфер режима орг, нажал C-c C-c, и все выровнялось хорошо.
elethan
Вероятно, это то, что нужно добавить в org-mode. Этого можно достичь, используя :align-toсвойство display, описанное в gnu.org/software/emacs/manual/html_node/elisp/… .
Legoscia
@elethan: да, некоторые примеры работают с определенной комбинацией западных шрифтов, размера лица и некоторого японского текста. Emacs пытается выровнять примеры, как указано выше, и иногда это получается правильно. Однако это всего лишь вопрос удачи. В общем, Emacs слеп для этого.
Quora Feans
Вам не нужен моноширинный шрифт для этого? В этом случае stackoverflow.com/q/3758139/4050592 должен помочь, если у вас есть моноширинный японский шрифт, который вы можете использовать.
Эндрю Суонн

Ответы:

5

Это зависит от шрифтов, которые вы используете. И я не думаю, что у Elisp есть возможность выравнивания на уровне пикселей.

Org вычисляет ширину строки с помощью string-widthвместо length. string-widthвозвращает 1 для символов ASCII и половинной ширины CJK или 2 для символов полной ширины. Оцените следующий код покажет вам, что:

(string-width "m")
1
(string-width "ハ")
1
(string-width "は")
2

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

Механизм отображения Emacs получает информацию о шрифтах из базовой ОС. Чтобы упростить сложную задачу, допустим, что в вашей конфигурации mширина равна 5 пикселям, а "は" - 10. В этом случае они будут идеально выровнены, поскольку предположение режима Org ("は" в два раза больше ширины " m ") соответствует фактическим пикселям на вашем экране.

Вместо этого, если ваша конфигурация шрифтов имеет 7 пикселей для «m» и 10 пикселей для «は», все не будет совпадать. И нет ничего, что может сделать ни Org Mode, ни Display Engine. Они сделали то, что они сказали, по вашей конфигурации, чтобы сделать.

Ясуши Сёдзи
источник