как выровнять комментарии в блокноте Mathematica?

Я не знаю, спрашивали ли об этом раньше или нет. Простая проблема с форматированием. Я заметил, что иногда трудно выровнять комментарии (----) друг над другом. Должна быть проблема с типом шрифта. Просто на экране это выглядит немного лучше, если я могу заставить вещи выровняться точно друг над другом. Вот пример:

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

Но на самом деле в блокноте передо мной это выглядит так:

введите здесь описание изображения

Если я передвину *) во второй строке на один пробел влево, это будет выглядеть так:

введите здесь описание изображения

Так и не получается выровнять. Я использую ячейку типа Input (стандартная ячейка).

Я не могу использовать другой тип ячейки, такой как код или что-то подобное. Мне было интересно, знает ли кто-нибудь трюк, чтобы заставить это выровняться.

Благодарность

РЕДАКТИРОВАТЬ 1: Отображение шрифта, используемого входной ячейкой в ​​таблице стилей Демонстрация

введите здесь описание изображения

РЕДАКТИРОВАТЬ 2: Используя код, показанный Алексеем Попковым ниже, исправлена ​​проблема со шрифтом для комментариев, и теперь они легко выравниваются. Вот снимок экрана введите здесь описание изображения

РЕДАКТИРОВАТЬ 3:

Что ж, вечеринка длилась недолго. Использование SetOptions не разрешено в демоверсии. Жаль, потому что решение Алексея сработало хорошо, комментарии выровнены и выглядят лучше.

Так или иначе. На самом деле это не так уж и важно. можно жить с немного несогласованными комментариями :)

введите здесь описание изображения


person Nasser    schedule 15.06.2011    source источник
comment
это, скорее всего, потому, что вы используете пропорциональный шрифт для входных ячеек; по крайней мере здесь (в OS X), если я сделаю то же самое, изменение шрифтов между фиксированной шириной и пропорциональными показывает/не показывает это. любопытно, однако, что по умолчанию здесь используется фиксированная ширина. возможно, что-то еще происходит в ваших записных книжках. Вы изменили таблицу стилей по умолчанию?   -  person acl    schedule 15.06.2011
comment
@acl, я использую стандартную демонстрационную таблицу стилей WRI. Ничего не менял. Чтобы использовать эту таблицу стилей, выполните: Стиль->Таблица стилей->Wolfram->Demo, и вы ее увидите. Нажмите «Пример» (вверху), и это загрузит пример блокнота, который можно использовать в качестве шаблона. В нем есть ячейка Manipulate, которую я использую для ввода кода. Благодарность   -  person Nasser    schedule 15.06.2011
comment
Я только что попробовал это с этой таблицей стилей, и она отлично выравнивается здесь (OS X). Не знаю, что еще предложить.   -  person acl    schedule 15.06.2011
comment
@acl: я получаю то же поведение, что и Нассер, используя версию Mma для Linux. Я попытался изменить некоторые параметры шрифта и свойства для Input ячеек. , но на самом деле ничего не работало. Что не означает, что нет хорошего решения, которое можно найти, изменив шрифты...   -  person Simon    schedule 15.06.2011
comment
@Nasser Я только что попробовал с Courier New. Когда я устанавливаю размер шрифта на 14, они не выравниваются, а если это 12 (мое значение по умолчанию), они выравниваются... Все это снова в OS X   -  person acl    schedule 15.06.2011
comment
акк, спасибо за попытку. Вот так с таблицей стилей пришла настройка шрифта, выставленная на 14. Ничего не менял. Я не думаю, что смогу изменить размер шрифта для кода, так как он будет опубликован на демонстрационном сайте WRI, и я не думаю, что можно изменить эти настройки. Не уверен, что примут. Но я спрошу. Спасибо.   -  person Nasser    schedule 15.06.2011
comment
@Nasser Вы удалили свой вопрос о Workbench. Не надо торопиться удалять... хороший вопрос был, Workbench на самом деле Eclipse, а по Eclipse тут куча вопросов. См. stackoverflow.com/questions/tagged/eclipse. Просто есть много пользователей, которые игнорируют то, что такое Mma, но наслаждаются цензурными привилегиями. Просто игнорируйте их. Удалять вопрос только при наличии согласия между сообществом ММА (т.е. теми, кто часто посещает этот тег)   -  person Dr. belisarius    schedule 17.06.2011


Ответы (2)


У меня нет такой проблемы с моей установкой Mathematica 7, так как она по умолчанию использует моноширинный шрифт "Courier New" для ячеек со стилем Input. Но если по какой-то причине в вашей установке по умолчанию используется немоноширинный шрифт, вы можете переопределить стиль комментариев внутри Notebook для использования моноширинного шрифта:

SetOptions[EvaluationNotebook[], 
 AutoStyleOptions -> {"CommentStyle" -> {FontWeight -> Plain,
     FontColor -> GrayLevel[0.6`], ShowAutoStyles -> False, 
     ShowSyntaxStyles -> False, AutoNumberFormatting -> False, 
     FontFamily -> "Consolas"}}]
person Alexey Popkov    schedule 15.06.2011
comment
Я добавил EDIT 1, показав используемый шрифт. Сначала я выбрал ячейку, затем сделал Format->Font и получил снимок экрана с результатом. Там написано Courier New? Благодарность,. - person Nasser; 15.06.2011
comment
@Nasser Когда я оцениваю код, приведенный в моем ответе, а затем проверяю шрифт, используемый методом, который вы используете, я получаю Courier New, хотя на самом деле Consolas используется, как я вижу глазами. Так что этот метод ненадежен. Вместо этого попробуйте выбрать только содержимое комментария (без (* и *)), а затем попробуйте проверить шрифт. Я получаю Consolas в этом случае с моим кодом. - person Alexey Popkov; 15.06.2011
comment
Я добавил код, показанный выше, в демонстрационный код инициализации, и он действительно исправил шрифт для комментария, так что теперь я могу без проблем их выровнять. Спасибо. Добавлен РЕДАКТИРОВАТЬ 2 FYI - person Nasser; 15.06.2011
comment
поэтому я ввел (* *)( XXXX )( **) (с разрывами строк) в ячейку, затем в другую ячейку ввел Manipulate[SetOptions[EvaluationNotebook[] , AutoStyleOptions -> {CommentStyle -> {FontWeight -> Plain, FontColor -> GrayLevel[0.6`], ShowAutoStyles -> False, ShowSyntaxStyles -> False, AutoNumberFormatting -> False, FontFamily -> Monaco, FontSize [Rule] s}} ]; s, {{s, 12}, 5, 20, 1}] и поиграл с ползунком. Когда я изменяю размер шрифта, комментарии выравниваются/не выравниваются случайным образом. Хорошо, что я не пишу комментарии :) - person acl; 15.06.2011
comment
@acl Monaco не является моноширинным шрифтом. - person Alexey Popkov; 15.06.2011
comment
@Алексей странно, я всегда так думал. В любом случае, я пробовал Consolas, Monaco, Menlo, Courier, Times и т. д., и поведение сохраняется (я понимаю, что не все из них моноширинные). Так что, возможно, размер шрифта имеет к этому какое-то отношение. - person acl; 15.06.2011
comment
@acl Извините, Monaco, вероятно, моноширинный, но он не установлен в моей системе, и вместо него используется Arial, когда я указываю FontFamily -> "Monaco". В случае Courier и Consolas все работает хорошо на моей системе (Mathematica 7.0.1 для Windows). Times, конечно, не моноширинный шрифт. - person Alexey Popkov; 16.06.2011
comment
@ Алексей Я вижу, возможно, тогда это проблема только в OS X. - person acl; 16.06.2011
comment
@acl Некоторым пользователям уже неоднократно указывалось, что WRI, похоже, воспринимает пользователей, не использующих Windows, как второсортных ... - person Alexey Popkov; 16.06.2011

Я никогда не беспокоился об этом раньше, так как я использую встроенные комментарии (* -- *) только для небольших комментариев или для комментирования кода. Если мне нужен многострочный комментарий, я разобью свой код на более мелкие части и использую текстовые ячейки.

Тем не менее, вы можете попробовать использовать \[AlignmentMarker]s на самом правом *):

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

Отображается как

скриншот


Изменить в ответ на комментарий:

Если у вас есть комментарии между кодом (без кода слева), то, возможно, поместите его в GridBox (созданный с использованием Ctrl-Enter и Ctrl-,), который закомментирован с помощью (* ... *) белым шрифтом.

GridBox

Трудно дать код, чтобы сделать вышеперечисленное... но вот форма 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"]
person Simon    schedule 15.06.2011
comment
+1 Другое решение — осознать, что через три месяца ты не поймешь свой Mma-код, сколько бы комментариев ни написал :) - person Dr. belisarius; 15.06.2011
comment
Спасибо. Но я забыл упомянуть, что я не могу разделить ячейку и использовать текстовые ячейки для комментариев. Для демонстрации таблица стилей позволяет использовать только одну ячейку для функции Manipulate[] и не может быть разделена. Мне действительно нужно сделать комментарии сверху, а не справа, как в вашем примере. Чтобы сделать комментарий к большому блоку кода под ним. Благодарность - person Nasser; 15.06.2011
comment
@Nasser: Вы можете разделить свой код на код инициализации, где вы можете использовать текстовые ячейки. Это может сделать финальный Manipulate достаточно простым для небольших комментариев... - person Simon; 15.06.2011