CellDingbat находится ниже первой строки ячейки - PullRequest
3 голосов
/ 29 сентября 2011

Согласно документации, « Дингбаты располагаются слева от основного содержимого ячейки, выровненные по первой строке содержимого. » Но когда я оцениваю

CellPrint@Cell[BoxData["Text"], CellDingbat -> "CellDingbat"]

в блокноте с таблицей стилей "Default", которую я получаю

screenshot

Видно, что CellDingbat расположен ниже, чем первая строка Cell. Почему это происходит? Есть ли способ выровнять CellDingbat по первой строке Cell?

Ответы [ 5 ]

4 голосов
/ 29 сентября 2011

Похоже, что базовая линия содержимого дингбата и ячейки не изменяется одинаково, когда содержимое ячейки заключено в BoxData. Как указал Sjoerd , удаление BoxData из содержимого ячейки приводит к выравниванию, но добавление BoxData к CellDingbat, похоже, ничего не меняет.

Базовая линия может быть смещена с помощью AdjustmentBox, и после некоторой игры, я обнаружил, что базовая линия вышла на CurrentValue["FontAxisOffset"]/CurrentValue["FontMWidth"]. Оба эти условия меняются с Magnification, но оказывается, что наблюдаемое смещение является постоянным значением, полученным при Magnification->1. В этом случае соотношение составляет 0.20833 == 5/24.

Я не уверен, действительно ли проблема связана с базовой линией и есть ли веская основная причина для поведения. Я также не уверен, почему требуемый сдвиг не зависит от увеличения Cell, Notebook или $ FrontEnd. Но, похоже, это работает, и я потратил достаточно времени, чтобы поиграть с этим!

Чтобы проверить, что все (в принципе) нормально, попробуйте

Do[CellPrint@Cell[BoxData["TxyT"], 
      CellDingbat -> BoxData[AdjustmentBox["TxyT", BoxBaselineShift -> -5/24]], 
      Magnification -> mag], {mag, 1, 5}]

dingbats

А также проверить, как

CellPrint@Cell[BoxData["TxyT"], 
   CellDingbat -> BoxData[AdjustmentBox["TxyT", BoxBaselineShift -> -5/24]], 
   Magnification -> Inherited]

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

SetOptions[EvaluationNotebook[], Magnification -> 4.]

и / или

SetOptions[$FrontEnd, Magnification -> 4.]
3 голосов
/ 29 сентября 2011

CellLabel вместо CellDingbat

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

Если вы хотите использовать ярлык для ячейки вместо Dingbat, используйте CellLabel:

CellPrint@Cell[BoxData["Text"], CellLabel -> "Example"]

cell label

Вы можете обрабатывать левое выравнивание с помощью CellMargins.

Если вы предпочитаете метку слева, отформатируйте ячейку как Output, но обратите внимание, что выравнивание будет зависеть отувеличение экрана, как показано в следующих 3 примерах:


magnify 1


times one and one half


times 2


2 голосов
/ 29 сентября 2011

Если вы не хотите, чтобы CellDingbat использовался в стандартном стиле ячеек «Вход» или «Код», то, как указано Sjoerd , содержимое ячейки и дингбат автоматически выравниваются.Только когда вы оборачиваете содержимое ячейки в BoxData, оно становится не выровненным.

Если необходимая ячейка является ячейкой «Текст» или «Раздел» (и т. Д.), Вы все равно можете иметь форматированный текстсодержимое ячейки содержится в TextData[...].Например,

dingBaT

Обратите внимание, что я начал текст и закончил дингбат с заглавной буквы T, чтобы выровнять выравнивание.

Если вывручную сделайте так, чтобы ваши ячейки «Input» были обернуты в TextData (что не происходит по умолчанию), тогда код будет работать, но стилизация не совсем правильная.Интервал неправильный и подсветка синтаксиса не активна.Сравните следующее

input

Первая напечатанная ячейка имеет подсветку синтаксиса, но дингбат ячейки не выровнен, в то время как вторая напечатанная ячейка не имеет подсветки синтаксиса и плохого расстояния, но дингбат отличновыровняли!


Наконец, я должен был понять, что подобное решение будет работать, потому что я использовал дингбаты ячеек для автоматической нумерации разделов целую вечность и никогда не имел проблем с выравниванием.Например, вот схема записной книжки, над которой я работал на прошлой неделе, которая содержит вспомогательный код для главы в моей диссертации:
WZ
В ячейках разделов и подразделов даны дингбаты в таблице стилей, например,
CellDingbat->TextData[{CounterBox["Section"], ". "}].

2 голосов
/ 29 сентября 2011

Я заметил, что если вы замените BoxData на TextData (или удалите BoxData, оставив "Текст"), дингбат и содержимое ячейки будут выровнены.

1 голос
/ 30 сентября 2011

Имеет ли значение CellBaseline какое-либо влияние?

Как и в

CellPrint[
 Cell[BoxData["Text"], CellDingbat -> "CellDingbat", 
  CellBaseline -> Bottom]]

вместо значения по умолчанию CellBaseline -> Baseline

...