Wolfram mathematica CellDingbat在牢房的第一行下面

Wolfram mathematica CellDingbat在牢房的第一行下面,wolfram-mathematica,mathematica-frontend,Wolfram Mathematica,Mathematica Frontend,根据文档,“但是当我评估 CellPrint@Cell[BoxData["Text"], CellDingbat -> "CellDingbat"] 在带有“Default”样式表的笔记本中 您可以看到单元格的位置低于单元格的第一行。为什么会发生这种情况?有没有办法将单元格BAT与单元格的第一行对齐?我注意到,如果您将BoxData替换为TextData(或删除BoxData,留下“Text”)dingbat和单元格内容对齐。当单元格内容包装在BoxData中时,dingbat和单元格

根据文档,“但是当我评估

CellPrint@Cell[BoxData["Text"], CellDingbat -> "CellDingbat"]
在带有
“Default”
样式表的笔记本中


您可以看到
单元格的位置低于
单元格的第一行。为什么会发生这种情况?有没有办法将
单元格BAT
单元格的第一行对齐?

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

当单元格内容包装在
BoxData
中时,dingbat和单元格内容的基线似乎不会以相同的方式发生变化。同样,从单元格内容中删除
BoxData
会使事情排列整齐,但将
BoxData
添加到
CellDingbat
似乎不会改变任何事情

使用
调整框
可以移动基线,在玩了一段时间后,我发现基线超出了
CurrentValue[“FontAxisOffset”]/CurrentValue[“FontMWidth”]
。 这两个术语都会随着
放大率的变化而变化,但实际观察到的偏移量是
放大率->1
时获得的常量值。在这种情况下,比率为
0.20833==5/24

我不确定问题是否真的出在基线上,也不确定这种行为是否有很好的潜在原因。我也不确定为什么所需的转换不取决于电池、笔记本或前端的放大率。但它似乎起作用了,我已经花了足够的时间玩它了

因此,要测试一切(基本上)正常,请尝试

并测试如何

CellPrint@Cell[BoxData["TxyT"], 
   CellDingbat -> BoxData[AdjustmentBox["TxyT", BoxBaselineShift -> -5/24]], 
   Magnification -> Inherited]
查找包含笔记本和前端的各种放大倍数,例如

SetOptions[EvaluationNotebook[], Magnification -> 4.]
和/或

SetOptions[$FrontEnd, Magnification -> 4.]
CellLabel代替CellDingbat 丁蝙蝠通常是小图标,而不是文本。根据设计,它们位于单元格第一行内容的基线之下。在我看来,他们那样看起来很好

如果要为单元格添加标签,请使用
CellLabel

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

您可以通过
单元格边距
处理左对齐

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






如果您不希望标准“输入”或“编码”单元格样式上的
单元格丁巴
,则正如所指出的,单元格的内容和丁巴会自动对齐。只有当您将单元格内容包装在
BoxData
中时,它们才会变得不对齐

如果所需的单元格是“文本”或“节”(etc)单元格,则只要单元格内容包含在
TextData[…]
中,您仍然可以使用格式化文本。比如说

请注意,我以大写字母
T
开始文本,并以大写字母结束丁巴特,以便对齐清晰

如果您手工将“输入”单元格的内容包装在
TextData
(默认情况下不会发生)中,那么代码将运行,但样式不太正确。间距错误,语法高亮显示未激活。比较下列各项

第一个打印单元格有语法高亮显示,但单元格dingbat未对齐,而第二个打印单元格没有语法高亮显示,间距很小,但dingbat完全对齐


最后,我应该意识到这样的解决方案是可行的,因为多年来我一直在使用cell dingbats进行自动分区编号,从未出现过对齐问题。例如,这是我上周正在编写的笔记本的大纲,其中包含我论文中某一章节的支持代码:

节和子节单元格在样式表中给出了一个标记,例如,

CellDingbat->TextData[{CounterBox[“Section”],““}]
指定
cellbreeline
是否有效


不幸的是,我需要的不是默认的
cellbreeline->Baseline->4/24
,而是
BoxData
来格式化
Cell
内容。在我的机器上(Windows XP下的Mathematica 7.0.1)
BoxBaselineShift->4/24
给出了屏幕截图上显示的正确位置。此值可能与版本和操作系统有关。它还取决于使用的字体:为
CellDingbat
BoxData
指定不同的字体会再次中断对齐:
Do[CellPrint@Cell[BoxData[“TxyT”],CellDingbat->BoxData[AdjustmentBox[StyleBox[“TxyT”,FontFamily->“Times”],BoxBaselineShift->-4/24]],放大->杂志],{mag,1,5}]
:。@Alexey:好的,我正在linux中运行Mma 8.0.1。在您的计算机上,
CurrentValue[“FontAxisOffset”]/CurrentValue[“FontMWidth”]
比率是否不同?这也会随着字体的变化而变化,因此您可能应该使用
BoxBaselineShift->Dynamic[-CurrentValue[“FontAxisOffset”]/CurrentValue[“FontMWidth”]
,或者使用
CurrentValue[“FontAxisOffset”]/CurrentValue[“FontMWidth”]的obj参数进行类似操作
给出25/99,但当我更改放大率时,此值会更改。
选项[$FrontEnd,放大]
设置为
{mability->1.5}
BoxBaselineShift->Dynamic[-CurrentValue[“FontAxisOffset”]/CurrentValue[“FontMWidth”]
没有给出正确的位置。@Alexey:该死……我希望无论系统和设置如何,这个比例都是正确的。我猜我的猜测(和希望)不好!对不起…Alexey:为什么你需要将
BoxData
包装在你的单元格内容上?你实际上是将
CellDingbat
放在“输入”类型的单元格上,还是放在格式化的“文本”或“节”类型的c上
CellPrint@Cell[BoxData["Text"], CellLabel -> "Example"]
CellPrint[
 Cell[BoxData["Text"], CellDingbat -> "CellDingbat", 
  CellBaseline -> Bottom]]