CellDingbat低于Cell的第一行

时间:2011-09-28 21:00:58

标签: wolfram-mathematica mathematica-frontend

根据文档“Dingbats are placed to the left of the main contents of a cell, aligned with the first line of the contents.”但是当我评估时

CellPrint@Cell[BoxData["Text"], CellDingbat -> "CellDingbat"]
在我得到"Default"样式表的笔记本中

screenshot

可以看到CellDingbat的位置低于Cell的第一行。为什么会这样?有没有办法将CellDingbatCell的第一行对齐?

5 个答案:

答案 0 :(得分:4)

当单元格内容被包裹在BoxData中时,看起来dingbat和单元格内容的基线不会以相同的方式改变。在Sjoerd pointed out时,从单元格内容中删除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.]

答案 1 :(得分:3)

CellLabel而不是CellDingbat

标志通常是小图标,而不是文字。通过设计,它们位于细胞第一行内容的基线之下。在我看来,它们看起来很好。

如果您想要单元格的标签,而不是丁字符,请使用CellLabel

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

cell label

您可以通过CellMargins处理左对齐。

如果您更喜欢左侧的标签,请将单元格格式化为Output,但请注意对齐将取决于屏幕放大率,如以下3个示例所示:


magnify 1


times one and one half


times 2


答案 2 :(得分:2)

我注意到,如果您将BoxData替换为TextData(或删除BoxData,请保留“文字”)dingbat和单元格内容已对齐。

答案 3 :(得分:2)

如果您不希望CellDingbat采用标准的“输入”或“代码”单元格样式,那么正如Sjoerd所指出的那样,单元格的内容和dingbat会自动对齐。只有当您将单元格内容包装在BoxData中时,它才会变得不对齐。

如果您想要的单元格是“文本”或“部分”(等)单元格,那么只要单元格内容包含在TextData[...]中,您仍然可以使用格式化文本。例如

dingBaT

请注意,我已经启动了文本并以大写T结束了dingbat,以便对齐清晰。

如果您手工制作“输入”单元格以将其内容包装在TextData中(默认情况下不会发生),则代码将运行,但样式不太正确。间距错误,语法突出显示无效。比较以下

input

第一个打印的单元格有语法高亮,但单元格dingbat未对齐,而第二个打印的单元格没有语法高亮和间距差,但是dingbat完全对齐!


最后,我应该意识到像这样的解决方案会起作用,因为我已经使用单元格dingbats进行自动章节编号,并且从未遇到过对齐问题。例如,这是我上周工作的笔记本的大纲,其中包含我论文中章节的支持代码:
WZ
部分和子部分单元格在样式表中给出了dingbats,例如,
CellDingbat->TextData[{CounterBox["Section"], ". "}]

答案 4 :(得分:1)

指定CellBaseline是否有效?

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

而不是默认的CellBaseline -> Baseline