Создание рабочей копии устаревшей документации для версии 5 в новых версиях Mathematica - PullRequest
9 голосов
/ 25 апреля 2011

В новых версиях Mathematica у нас есть полнофункциональный старомодный браузер помощи Mathematica . Но устаревшая документация версии 5 не включена в новые версии Mathematica . Эта устаревшая документация занимает всего 209 МБ дискового пространства, и было бы полезно сделать ее доступной из новых версий Mathematica .

Если на одном компьютере установлены Mathematica 5.2 и Mathematica 7 или 8, как можно сделать доступной устаревшую документацию из новой версии через устаревший браузер справки?

Я пытался скопировать папку с документацией из

C:\Program Files\Wolfram Research\Mathematica\5.2\Documentation

до

C:\Documents and Settings\All Users\Application Data\Mathematica\Application\LegacyDocumenation

и внутри устаревшего Браузера справки теперь отображается «Браузер справки» в качестве дополнения. Но это не работает должным образом.

Некоторую полезную информацию о настройке внешнего вида браузера справки в Mathematica 5 можно найти здесь . Но я не знаю, как применить это к новым версиям Mathematica .

Ответы [ 2 ]

7 голосов
/ 01 августа 2011

Решение

Кстати, я нашел способ добавить всю документацию Mathematica 5.2 в устаревший браузер справки в новых версиях Mathematica .

Ключом является файл «HelpBrowserSetup.tr», расположенный в каталоге (под Windows)

C:\Program Files\Wolfram Research\Mathematica\7.0\SystemFiles\FrontEnd\TextResources

Его содержимое следует заменить следующим:

@@resource HelpBrowserSetup
BrowserCategory["Help Browser", None, {
    HelpDirectoryListing[{"RefGuide"}, False],
    HelpDirectoryListing[{"AddOns"}, False],
    HelpDirectoryListing[{"MainBook"}, False],
    HelpDirectoryListing[{"OtherInformation"}, False],
    HelpDirectoryListing[{"GettingStarted"}, False],
    HelpDirectoryListing[{"Tour"}, False],
    HelpDirectoryListing[{"Demos"}, False],
    BrowserCategory["Master Index", None, {HelpMasterIndex[]}]
}]

Затем «Документация»"папку из $InstallationDirectory из Mathematica 5.2 следует скопировать в $InstallationDirectory новой версии Mathematica с заменой (будет заменен один неважный файл).Другая возможность - скопировать его в каталог (под Windows)

C:\Documents and Settings\All Users\Application Data\Mathematica

(вероятно, $UserBaseDirectory также подходит).

Теперь запустите Mathematica и оцените

FrontEndTokenExecute["HelpDialog"]

Откроется устаревший браузер справки, который будет содержать всю документацию версии 5.2!

screenshot

Редактировать

Я только что нашел еще более простое решение.Можно изменить файл «HelpBrowserSetup.tr» следующим образом:

@@resource HelpBrowserSetup
HelpDirectoryListing[SystemHelpPath, False, True, True]

(или просто скопировать с заменой этот файл из установки версии 5.2 в папку новой версии).

Добавление дляте, у кого установлена ​​ Mathematica 5.2

Вам не нужно копировать Документацию.У вас есть две возможности:

1.) Скопировать только файл «HelpBrowserSetup.tr» из установки версии 5.2 в папку новой версии.Затем оцените что-то вроде

SetOptions[$FrontEnd, 
 SystemHelpPath -> 
  Union[SystemHelpPath /. 
    Options[$FrontEnd, 
     SystemHelpPath], {"C:/Program Files/Wolfram \
Research/Mathematica/5.2/"}]]

(где "C: / Program Files / Wolfram Research / Mathematica / 5.2 /" - это $InstallationDirectory из Mathematica 5.2).

2.) Просто измените файл «HelpBrowserSetup.tr» следующим образом (но в этом случае все установленные надстройки до версии 6 не будут отображаться в устаревшем браузере справки):

@@resource HelpBrowserSetup
HelpDirectoryListing[{"C:/Program Files/Wolfram Research/Mathematica/5.2/"}, False, True, True]

изатем оцените

FrontEndTokenExecute["RebuildHelpIndex"]
FrontEndTokenExecute["HelpDialog"]

PS Добавление элемента браузера справки в меню Справка

Для этого нам просто нужно добавить строку MenuItem["Help Browser...", "HelpDialog"], в соответствующем месте в MenuSetup.tr:

HelpMenu["&Help", 
{
    MenuItem["Documentation &Center", "OpenHelpLink"],
    MenuItem["Help Browser...", "HelpDialog"],

screenshot

5 голосов
/ 31 июля 2011

ПРЕДУПРЕЖДЕНИЕ: Недавно я узнал, что создание индекса для новой документации может иметь нежелательные последствия для компьютера с Windows. Пожалуйста, прочитайте комментарии Алексея для более подробной информации. Насколько я могу судить, в Mac OS X все работает нормально. Я дам обновление, как только выясню, в чем причина проблемы.

Здесь я представляю функцию, позволяющую любому ноутбуку стать частью центра документации в Mathematica 8. Вы можете начать с того, что Mathematica оцените следующее:

Clear[FormatDoc, AddDocs];
FormatDoc[dir_, last_, num_, appName_, pacFile_, index_] := 
 Module[{dirs, nbs, nb, str, comma = ",", title, tags}, 
  nbs = FileNames[dir <> "/*.nb"];
  dirs = FileNames[dir <> "/*"];
  Do[If[last && i == Length@nbs, comma = ""];
   str = FileNameDrop[nbs[[i]], {1, num}];
   title = StringDrop[FileNameTake[nbs[[i]]], -3];
   Print[Row[{Style["Adding: ", "MSG", Black], 
      Style[str, "MSG", Blue]}]];
   str = StringDrop[str, -3];
   WriteString[pacFile, 
    "\t\t\t\t\"" <> str <> "\"" <> comma <> "\n"];
   nb = NotebookOpen[nbs[[i]]];
   tags = 
    DeleteDuplicates@
     Flatten@Map[#[[2]] &, 
       Cases[NotebookGet[
         nb], (_Dummy | (CellTags -> _)), \[Infinity]]];
   SetOptions[nb, 
    DockedCells -> 
     FEPrivate`FrontEndResource["FEExpressions", "HelpViewerToolbar"],
     Saveable -> False, 
    WindowTitle -> 
     "Mathematica 5.2 | " <> FileNameDrop[str] <> " | " <> title, 
    TaggingRules -> {"ModificationHighlight" -> False, 
      "Metadata" -> {"context" -> appName <> "`", "keywords" -> tags, 
        "index" -> True, 
        "label" -> "Mathematica 5.2 | " <> FileNameDrop[str], 
        "language" -> "en", "paclet" -> appName, "status" -> "", 
        "summary" -> ToString@tags, "synonyms" -> {}, 
        "title" -> title, "windowtitle" -> title, "type" -> "Doc", 
        "uri" -> 
         StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]}, 
      "SearchTextTranslated" -> "", "LinkTrails" -> ""}];
   NotebookSave[nb];
   NotebookClose[nb];
   DocumentationSearch`AddDocumentationNotebook[index, nbs[[i]]];, {i,
     Length@nbs}];
  Do[If[DirectoryQ[dirs[[i]]], str = FileNameDrop[dirs[[i]], {1, num}];
    Print[
     Row[{Style["Adding from: ", "MSG", Black], 
       Style[str, "MSG", Gray]}]];
    FormatDoc[dirs[[i]], last, num, appName, pacFile, index];], {i, 
    Length@dirs}]]
AddDocs[appName_] := 
 Module[{appDir, appDocs, dirs, pacFile, index, indexDir, str, num}, 
  appDir = FileNameJoin[{$UserBaseDirectory, "Applications"}];
  appDocs = 
   FileNameJoin[{appDir, appName, "Documentation", "English"}];
  indexDir = FileNameJoin[{appDocs, "Index"}];
  dirs = FileNames[appDocs <> "/*"];
  If[Length@dirs == 0, 
   Print[Style["There are no documents to add... ", "MSG", Orange]];
   Return[]];
  Print[Row[{Style["Working in: ", "MSG", Black], 
     Style[appDocs, "MSG", Red]}]];
  num = Length@FileNameSplit[appDocs];
  index = 
   DocumentationSearch`NewDocumentationNotebookIndexer[indexDir];
  pacFile = OpenWrite[FileNameJoin[{appDir, appName, "PacletInfo.m"}]];
  WriteString[pacFile, "Paclet[
                Name -> \"" <> appName <> "\",
                Version -> \"5.2.0\",
                MathematicaVersion -> \"7+\",
                Extensions -> {
                    {
                        \"Kernel\",
                        \"Context\" -> {
                        }
                    },
                    {
                        \"Documentation\",
                        Language -> \"English\",
                        LinkBase -> \"" <> appName <> "\",
                        Resources -> {\n"];
  Do[If[DirectoryQ[dirs[[i]]], str = FileNameDrop[dirs[[i]], {1, num}];
    Print[
     Row[{Style["Adding from: ", "MSG", Black], 
       Style[str, "MSG", Gray]}]];
    FormatDoc[dirs[[i]], i == Length@dirs, num, appName, pacFile, 
     index];], {i, Length@dirs}];
  WriteString[pacFile, "\t\t\t}
                }
            }
          ]\n"];
  Close[pacFile];
  DocumentationSearch`CloseDocumentationNotebookIndexer[index];
  PacletManager`RestartPacletManager[];]

Как это использовать:

В новом или том же документе, где вы оценивали функции, начните с выяснения, что это за переменная:

$UserBaseDirectory

В моем случае, поскольку я использую Mac OS X, я получаю:

/Users/jmlopez/Library/Mathematica

Узнайте, что у вас. В этом каталоге вы должны увидеть папку Applications. Внутри Applications создайте папку, в которую вы будете помещать документацию MMA5. Я назвал свою папку MMA5, потому что она короткая, но вы можете дать ей любое имя, какое хотите, в случае Алексея мы можем назвать ее LegacyDocumentation. Внутри этой папки передайте копию папки с именем Documentation, найденной в каталоге установки для MMA5.

Мы почти закончили. Теперь вызовите функцию AddDocs. Эта функция принимает только один аргумент: имя приложения, документацию которого мы хотим добавить. В моем случае, так как я назвал папку MMA5, я назову ее следующим образом:

AddDocs["MMA5"]

Следующее, что вы должны увидеть, - это последовательность появления и исчезновения записных книжек, а также последовательность печатаемых сообщений. Вот часть этой последовательности сообщений:

Output

Поскольку документация по MMA5 довольно обширна, этот процесс займет некоторое время. Я выбрал время для этой функции, и он сказал, что это заняло около 40 секунд (мне это показалось намного дольше).

Вы сделали. Документация MMA5 теперь должна быть доступна в центре документации.

Тест-драйв

Скажем, вы хотите найти информацию по DSolve. Если вы ищете DSolve, вы увидите следующее:

DSolve MM8

Чтобы найти документацию по MMA5, нам нужно щелкнуть ссылку для DSolve, расположенную в разделе «Поиск всех страниц, содержащих DSolve». Теперь мы получаем что-то вроде этого:

DSolve MM5

На скриншоте выше я пометил красным записи, которые дают нам доступ к документации Mathematica 5. У меня нет возможности написать хорошее резюме для каждого из файлов в документации, поэтому я просто заставил Mathematica написать CellTags, расположенный в тетрадях. Вот почему вы видите список строк.

Если вы нажмете на первую красную запись, это то, что мы получаем

Jackpot

Итак, у вас есть рабочая копия устаревшей документации, работающей над новой версией Mathematica. Я не проверял это в MMA7, но у меня есть ощущение, что это сработает. Если кто-то попробует это, пожалуйста, дайте мне знать.

ПРИМЕЧАНИЯ

Если вы хотите применить это к другим документам в другом приложении. Вам необходимо обратить на это внимание:

    WindowTitle -> 
     "Mathematica 5.2 | " <> FileNameDrop[str] <> " | " <> title,
    TaggingRules -> {
      "ModificationHighlight" -> False,
      "Metadata" -> {
        "context" -> appName <> "`",
        "keywords" -> tags,
        "index" -> True,
        "label" -> "Mathematica 5.2 | " <> FileNameDrop[str],
        "language" -> "en",
        "paclet" -> appName,
        "status" -> "",
        "summary" -> ToString@tags,
        "synonyms" -> {},
        "title" -> title,
        "windowtitle" -> title,
        "type" -> "Doc",
        "uri" -> 
         StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]
        },

Обратите внимание, что я жестко закодировал "Mathematica 5.2" на этикетке. Вы можете даже изменить это на «LegacyDocumentation», если хотите. Это просто ярлык. Еще один важный момент keywords. Я установил keywords для переменной tags. Каждая ячейка в блокноте имеет возможность добавить CellTags. Если вы собираетесь написать какую-то документацию, вы должны их использовать. Я воспользовался этим, чтобы центр документации знал, как искать документы. Это то, что я только недавно узнал, и я определенно буду реализовывать в пакете.

Если вам когда-нибудь захочется написать законченное приложение с его документацией, предлагаю вам взглянуть на мой пост об интеграции ноутбуков в MMA doc center . Здесь вы найдете больше информации, которая позволит вам понять, как работают функции, которые я здесь предоставил.

В качестве заключительного замечания я хотел бы добавить, что я также проверил это в Windows-машине, и она работала нормально, вот причина этой строки кода:

StringReplace[FileNameJoin[{appName, str}], "\\" -> "/"]

EDIT:

Я изменил функцию, чтобы она могла корректно работать в MMA7. Оказывается, что файл pacletInfo.m должен иметь строку MathematicaVersion -> 7+, чтобы он мог работать в MMA7 и MMA8.

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

Я сделал ошибку при копировании и вставке функции. Это должно быть исправлено сейчас. Если у вас есть и MMA7, и MMA8, я предлагаю запустить его только один раз в MMA7. Таким образом, документация будет доступна как для MMA7, так и для MMA8.

...