【问题标题】:how to align comments in Mathematica notebook?如何对齐 Mathematica 笔记本中的注释?
【发布时间】:2023-04-05 21:26:01
【问题描述】:

我不知道以前是否有人问过这个问题。简单的格式化问题。 我注意到有时很难将 cmets (----) 相互对齐。一定是字体类型问题。如果我能让东西完全对齐,它在屏幕上看起来会好一点。这是一个例子:

(*                        *)
(*  L E F T    P A N E L  *)
(*                        *)

但在我面前的笔记本上实际上是这样的:

如果我将第二行中的 *) 向左移动一个空格,它将变成这样:

所以,不能让它对齐。我正在使用输入类型的单元格(标准单元格)。

我不能使用其他单元格类型,例如代码等。我想知道是否有人知道让这个对齐的技巧。

谢谢

编辑 1: 在样式表演示中显示输入单元格使用的字体

编辑 2: 使用 Alexey Popkov 下面显示的代码,修复了 cmets 的字体问题,现在它们很容易对齐。这是一个屏幕截图

编辑 3:

好吧,派对并没有持续多久。演示中不允许使用 SetOptions。太糟糕了,因为 Alexey 的解决方案效果很好,让 cmets 对齐并且看起来更好。

随便。真的没什么大不了的。可以忍受一些未对齐的 cmets :)

【问题讨论】:

  • 这很可能是因为您在输入单元格中使用了比例字体;至少在这里(在 OS X 上),如果我这样做,在固定宽度和比例显示/不显示之间更改字体。然而,奇怪的是,这里的默认值似乎是固定宽度。也许你的笔记本上发生了其他事情。您是否更改了默认样式表?
  • @acl,我正在使用标准的 WRI 演示样式表。没有改变任何东西。要使用这个样式表,执行:Style->Style sheet->Wolfram->Demo,你会看到它。单击示例(顶部),这将加载一个示例笔记本,可以将其用作模板。它里面有 Manipulate 单元格,我用它来输入代码。谢谢
  • 我刚刚用那个样式表试了一下,它在这里对齐得很好(OS X)。不知道还有什么建议。
  • @acl:使用 Linux 版本的 Mma,我得到了与 Nasser 相同的行为。我尝试为Input 单元格更改一些字体选项和properties ......但没有任何效果。这并不是说改变字体就没有好的解决方案...
  • @Nasser 我刚刚尝试过使用 Courier New。当我将字体大小设置为 14 时,它们不会对齐,而如果它是 12(我的默认值)它们会对齐......这一切都在 OS X 上再次出现

标签: wolfram-mathematica mathematica-frontend


【解决方案1】:

我以前从未真正担心过这一点,因为我只将内联 (* -- *) cmets 用于小型 cmets 或注释代码。如果我需要多行注释,我会将代码分成更小的部分并使用文本单元格。

也就是说,您可以尝试使用最右边的\[AlignmentMarker]s *):

1 + 2 + 3 +     (* First three  \[AlignmentMarker]*)
 4 + 5 + 6 +    (* Next three   \[AlignmentMarker]*)
 7 + 8 + 9      (* Last three   \[AlignmentMarker]*)

显示为


根据评论进行编辑:

如果您在代码之间有 cmets(左侧没有代码),则可以将其放入 GridBox(使用 Ctrl-Enter 和 Ctrl-, 创建)中,使用 (* ... *) 注释掉白色字体。

很难给出代码来实现上述...但是这里是 Box 形式:

Cell[BoxData[
 RowBox[{"Manipulate", "[", "\[IndentingNewLine]", 
  RowBox[{RowBox[{RowBox[{"a", " ", "=", " ", 
   RowBox[{"x", "+", "1"}]}], ";", "\[IndentingNewLine]", " ", 
    RowBox[{StyleBox["(*", FontColor->GrayLevel[1]], "", 
     GridBox[{{"(*", RowBox[{"Inter", "-", RowBox[{"code", Cell[""]}]}], "*)"},
              {"(*", "comments", "*)"}},
      GridBoxAlignment->{"Columns" -> {{Left}}, "ColumnsIndexed" -> {}, 
      "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}], " ", 
     StyleBox["*)", FontColor->GrayLevel[1]]}], "\[IndentingNewLine]", 
    RowBox[{"{", RowBox[{"a", ",", SuperscriptBox["a", "2"]}], "}"}]}], ",", 
   "\[IndentingNewLine]", 
   RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], 
  "]"}]], "Input"]

【讨论】:

  • +1 另一种解决方案是意识到三个月后你不会理解你的 Mma 代码,无论你写了多少 cmets :)
  • 谢谢。但是我忘了提到我不能拆分单元格并将文本单元格用于 cmets。对于演示,要使用的样式表只允许一个单元格用于 Manipulate[] 函数,并且不能拆分。我真的需要让 cmets 在顶部分开,而不是像你的例子那样在右边。对它下面的大代码块进行评论。谢谢
  • @Nasser:您可以将代码拆分为“初始化代码”,您可以在其中使用文本单元格。这可以使最终的Manipulate 足够简单,仅适用于小型 cmets...
【解决方案2】:

我在安装 Mathematica 7 时没有遇到这样的问题,因为它默认使用等宽字体“Courier New”用于样式为Input 的单元格。但是如果由于某种原因,默认情况下在您的安装中使用了非等宽字体,您可以在 Notebook 中重新定义 cmets 的样式以使用等宽字体:

SetOptions[EvaluationNotebook[], 
 AutoStyleOptions -> {"CommentStyle" -> {FontWeight -> Plain,
     FontColor -> GrayLevel[0.6`], ShowAutoStyles -> False, 
     ShowSyntaxStyles -> False, AutoNumberFormatting -> False, 
     FontFamily -> "Consolas"}}]

【讨论】:

  • 我添加了 EDIT 1,显示了使用的字体。我先选择了单元格,然后做了格式->字体并得到了结果的屏幕截图。那里确实写着“Courier New”?谢谢,。
  • @Nasser 当我评估我的答案中给出的代码,然后检查您使用的方法使用的字体时,我得到“Courier New”,尽管实际上“Consolas”是我亲眼看到的.所以这种方法是不可靠的。而是尝试仅选择评论的内容(没有(* 和*)),然后尝试检查字体。在这种情况下,我的代码得到了“Consolas”。
  • @acl "Monaco" 不是等宽字体。
  • @acl 很抱歉,“Monaco”可能是等宽的,但它没有安装在我的系统中,当我指定 FontFamily -> "Monaco" 时使用“Arial”代替它。在“Courier”和“Consolas”的情况下,一切都在我的系统上运行良好(Mathematica 7.0.1 for Windows)。当然,“Times”不是等宽字体。
  • @acl 一些用户已经反复指出,WRI 似乎将非 Windows 用户视为二等...
猜你喜欢
  • 2011-12-23
  • 2013-10-19
  • 2011-02-18
  • 2012-05-31
  • 2011-06-21
  • 2014-12-28
  • 2012-01-11
  • 2013-04-28
相关资源
最近更新 更多