Таинственная программа LyX. Часть 3

    Скопировано с моего блога в целях создания еще одного русскоязычного источника информации по данной теме.

    Эта статья является продолжением следующих статей одного цикла:

    статья 1
    статья 2

    LyX: Ветка


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



    Эта ветка появляется неактивной. Это значит, что если я что-то напишу перед веткой, затем я какой-то текст впишу в прямоугольник ветки и продолжу повествование после ветки, то в .pdf, образующемся из этого файла .lyx, часть текста, находящаяся в красном прямоугольнике, будет просто отсутствовать. Чтобы включить эту часть в .pdf, навожу мышку на слово Ветка, там, плюс-минус около этого слова, щелкаю правой кнопкой мышки и выбираю левой кнопкой мышки пункт Активировать ветку. В зависимости от используемого файла .mo этот пункт может называться по-разному, но всегда в выпадающем меню он стоит первым.

    LyX: Предпросмотр математики


    В Инструменты>Настройки>Вид вторым сверху стоит один раскрывающийся список. В зависимости от используемого файла .mo в русском переводе названий элементов интерфейса он имеет различные названия. В той копии программы LyX, которую я использовал до этого, он назывался, если я не ошибаюсь, Предпросмотр математики. В текущей копии программы LyX он называется Instant Preview. А суть его в следующем. Если я установлю значение этого списка в выкл, то после выхода курсора из математического (строковой формулы) или выклочного режима формула в окне LyX выглядит так:



    А при значении этого списка вкл формула начинает выглядеть вот как:



    Но само по себе это представляет мало интереса. Гораздо интереснее выглядит использование этого раскрывающегося списка вместе со счетчиком Preview Size. Именно, установим значение выпадающего списка в вкл, а значение счетчика в какое-нибудь значение, большее 1, например, 3,8, нажимаем кнопку Сохранить. Тогда после перезапуска LyX формулы начинают отображаться следующим образом:



    А вот это уже кое-что. Я это использовал, например, когда расписывал многоэтажные дробные показатели степеней при изучении доказательства одной теоремы теории групп: от руки получалось запутанно, а в LyX с использованием этой примочки получилось в самый раз.

    Как в LyX использовать программу Asymtote?


    А очень просто: открываем программу LyX. Идем Документ>Настройки>Преамбула LaTeX. Вписываем туда

    \usepackage{asymptote}

    возможно, с некоторыми опциями пакета asymptote, нажимаем кнопку
    Сохранить. Все, начинаем писать в основном окне программы LyX нужный нам текст. Как только дошло дело до вставки кода asymptote, вставляем ветку, активируем ее (см раздел LyX: Ветка настоящей статьи) в ветку вставляем код ТеХ (Ctrl+l) и только в этот блок начинаем писать

    
    \begin{asy}
     ...
     \end{asy} 

    где на месте многоточия пишем код Asymptote ровно таким же образом, как мы это делаем в каком-нибудь файле .asy. Например, выглядеть это может так:



    Снимок сделан после первого экспорта в PDF(pdflatex). Обратите внимание на путь к папке, обведенный в нижней части окна прогры LyX красным цветом. Вот когда я обрабатываю обыкновенный файл .tex в каком-нибудь тоже обыкновенном редакторе $\LaTeX$, например, в TeXworks, все файлы, попутно при этом возникающие, такие, как .log, .aux и т. д., создаются в одной папке с этим файлом .tex. В случае же экспорта в какой-нибудь формат в программе LyX в одной папке с обрабатываемым файлом .lyx образуется только .pdf все остальные возникающие при этом файлы (а сначала происходит экспорт в .tex, а затем на этот файл .tex натравляется какой-нибудь бинарник имеющейся на компе реализации $\TeX$, подключенной (хотя, необязательно) к программе LyX. Например, в этот раз я LyX установил после программы MiKTeX. Так подключенность LyX к MiKTeX выразилась в том, что, я, когда после установки LyX, полез в Инструменты>Настройки...>Пути, там, в текстовом поле Префикс PATH: среди прочих, был путь C:\Program Files\MiKTeX 2.9\miktex\bin — путь к папке с бинарниками, упомянутой мной выше установленной на компе реализации $\TeX$. Однако наличие пути к этой папке в этом текстовом поле не является обязательным: я в предыдущей, тоже Windows7, системе, устанавливал LyX, когда еще не был установлен MiKTeX, так, несмотря на то, что пути к той папке в том текстовом поле не было как до установки и настройки MiKTeX, так и после этих операций, LyX функционировал нормально. Так вот, при обработке бинарником образовавшегося файла .tex все файлы, попутно при этом возникающие, такие, как .log, .aux и т. д., также создаются в одной папке с этим файлом .tex.) помещаются в папке, путь к которой содержится в области окна программы LyX, появляющейся после нажатия Вид>View Source. Для демонстрации формата пути к такой папке, я на фото и обвел этот путь красной рамкой. Переходим в эту папку, запускаем из этой папки командную строку, выполняем в этой строке команду

    asy *.asy

    И делаем еще один экспорт в PDF(pdflatex). Вот теперь все готово: открываем созданное .pdf и наслаждаемся качеством графики, обычно ожидаемого там, где используется программа Asymptote. А ветка нам в этой всей истории нужна потому, что без ее использования иногда графика в .pdf получается не в том месте, где стоит генерирующий ее код в .lyx. Впрочем, я недавно придумал способ вставки кода Asymptote в файл .lyx без использования веток, но об этом я расскажу на странице, более близкой к этой теме.

    LyX: изменение названий, всплывающих подсказок для элементов интерфейса


    Вот, когда используешь LyX на языке, отличном от английского, отображаемые названия различных меню, элементов меню, панелей инструментов и т. д. одним словом, отображаемые названия почти всех элементов интерфейса, кроме выпадающего списка окружений и, возможно, чего-то еще, переводы различных сообщений берутся программой LyX из файла .mo, соответствующего используемому языку. Вот сколько я ни ставил различные копии программы LyX, эти файлы .mo, во всяком случае, в рамках используемой копии LyX для различных языков имеют одинаковые имена. В копии программы, используемой мной сейчас, эти файлы называются LyX2.0.mo. Эти файлы для различных языков отличаются, помимо своего содержания еще и тем, что они находятся в различных подпапках одной и той же папки. Для русского языка соответствующий файл LyX2.0.mo находится в
    C:\Program Files\LyX 2.0\Resources\locale\ru\LC_MESSAGES. Однако, если с целью пробы заменить в окне программы LyX, отображаемое название там, какой-нибудь панели инструментов какого-нибудь пункта какого-нибудь меню, изменить соответствующее место в файле .mo (как найти это место рассказано ниже), это, после сохранений изменений в файле .mo при перезапуске LyX, вопреки ожиданиям, приведет не к изменению названия соответствующего элемента интерфейса, а к отображению вообще всех названий, всплывающих подсказок на английском языке: редактировать файл .mo напрямую не имеет смысла. А нужно редактировать файл .po, из которого впоследствии с помощью программы gettext после каждого его изменения (с последующим сохранением этого изменения) получают заново файл .mo и перемещают с заменой вновь полученный файл .mo в папку, названную выше. Остановимся подробнее на этом процессе. Вначале скачиваем gettext. я по приведенной ссылке нажимал для скачивания 32-битный static, причем не на значок с компьютером и диском, а на значок папки на молнии. Скачали архив, распаковали куда угодно. Чтобы папку bin этой программы из-за такой мелочи в РАТН не добавлять, сделаем следующее: идем сюда. Отсюда скачиваем файл lyx-2.3.2.tar.gz. Откроем его, из папки po скопируем в папку bin ранее распакованной программы gettext файл ru.po, переименуем его в LyX2.0.po. Далее мы открываем этот файл .po в каком-нибудь текстовом редакторе. Так. Вот мы захотели изменить, например, отображаемое название пункта Закладки меню Навигация на Закладки: измененное отображение. Ага, открываем меню Навигация, смотрим на название пунктов этого меню рядом с пунктом Закладки. Эти пункты, например, такие: Следующая заметка, Следующее изменение,... это нужно потому, что в файле .po могут в нескольких разных местах стоять одинаковые переводы отображаемых названий различных элементов интерфейса, из-за чего так же будет и в полученном файле .mo, что приведет к тому, что в окне LyX несколько элементов интерфейса в разных местах будут иметь одинаковые отображаемые названия. Так вот, чтобы в файле .po изменить перевод какого-нибудь элемента интерфейса, чтобы в файле .mo изменились отображаемые названия точно тех элементов интерфейса, отображаемые названия которых изменить нужно, нам и нужно посмотреть на отображаемые названия элементов, соседних с теми элементами интерфейса, отображаемые названия мы изменить собираемся. Если в окне программы LyX у какого-нибудь элемента есть всплывающая подсказка, отображаемый на соответствующем языке текст этой подсказки в файле .po будет располагаться недалеко от отображаемого названия этого элемента интерфейса. Еще один признак места файла .po, которое нужно редактировать, чтобы это привело к изменению отображаемого названия того элемента интерфейса, у которого отображаемое название изменить и нужно. Итак, переходим в окно редактора с открытым файлом LyX2.0.po, поиском находим там Закладки, смотрим на соседние участки на русском языке. Вот один из результатов поиска вместе со своим окружением:

    #: src/frontends/qt4/ui/PDFSupportUi.ui:249
     msgid "Bibliographical backreferences"
     msgstr "Обратные библиографические ссылки"
    
     #: src/frontends/qt4/ui/PDFSupportUi.ui:252
     msgid "B&ackreferences:"
     msgstr "&Обратные ссылки:"
    
     #: src/frontends/qt4/ui/PDFSupportUi.ui:281
     msgid "&Bookmarks"
     msgstr "&Закладки"
    
     #: src/frontends/qt4/ui/PDFSupportUi.ui:293
     msgid "G&enerate bookmarks (toc)"
     msgstr "&Создавать закладки"
    
     #: src/frontends/qt4/ui/PDFSupportUi.ui:314
     msgid "&Numbered bookmarks"
     msgstr "&Нумерованные закладки"  
    

    Это найденное слово Закладки находится в строке с номером 3144. Судя по соседним словам на русском языке, это не то, что нужно. А вот другой результат поиска слова Закладки вместе с некоторым своим окружением в файле LyX2.0.po:

     #: lib/ui/stdmenus.inc:559
     msgid "Reject All Changes|e"
     msgstr "Отклонить все изменения"
    
     #: lib/ui/stdmenus.inc:560
     msgid "Show Changes in Output|S"
     msgstr "Показать изменения на выводе"
    
     #: lib/ui/stdmenus.inc:567
     msgid "Bookmarks|B"
     msgstr "Закладки|З"
    
     #: lib/ui/stdmenus.inc:568
     msgid "Next Note|N"
     msgstr "Следующая заметка|С"
    
     #: lib/ui/stdmenus.inc:569
     msgid "Next Change|C"
     msgstr "Следующее изменение|щ"
    

    Находится это вхождение слова Закладки в строке с номером 19619 и, судя по словам русского языка, находящимся в окрестности этого вхождения, это то, что нужно. Заменяем это вхождение слова на то словосочетание, предложение, которое мы хотим, чтобы служило отображаемым именем соответствующего элемента интерфейса. Таким образом, этот участок кода вместе с некоторой своей окрестностью в файле LyX2.0.po начинает выглядеть так:

    #: lib/ui/stdmenus.inc:559
     msgid "Reject All Changes|e"
     msgstr "Отклонить все изменения"
    
     #: lib/ui/stdmenus.inc:560
     msgid "Show Changes in Output|S"
     msgstr "Показать изменения на выводе"
    
     #: lib/ui/stdmenus.inc:567
     msgid "Bookmarks|B"
     msgstr "Закладки: измененное отображение|З"
    
     #: lib/ui/stdmenus.inc:568
     msgid "Next Note|N"
     msgstr "Следующая заметка|С"
    
     #: lib/ui/stdmenus.inc:569
     msgid "Next Change|C"
     msgstr "Следующее изменение|щ"

    Сохраняем изменения в LyX2.0.po. Запускаем командную строку в папке bin, в которой находимся. В окне этой строки пишем следующую команду:

    msgfmt LyX2.0.po --o LyX2.0.mo

    , нажимаем клавишу Enter. После этого, как и следовало ожидать, в папке bin появляется файл LyX2.0.mo. Лично я, чтобы по сто раз не вводить одну и ту же команду в командную строку, в папке bin программы gettext создал батник следующего содержания:

    cd /d %0\..
     msgfmt LyX2.0.po --o LyX2.0.mo 

    И теперь, когда я его открываю после сохранения изменений в файле LyX2.0.po, у меня в папке bin создается точно такой же файл LyX2.0.mo, как если бы я его получил из командной строки. Далее перемещаем, повторюсь с заменой, полученный файл .mo в папку
    C:\Program Files\LyX 2.0\Resources\locale\ru\LC_MESSAGES. После перезапуска LyX получаем следующее:



    LyX: про файл default.def


    В C:\Program Files\LyX 2.0\Resources\commands есть файл default.def. Для чего нужен этот файл? Я в августе 19-го обнаружил, что изменения, внесенные мной 12.06.19 в этот файл, только тогда вступили в силу. В июне же эти изменения этого файла никак не проявлялись. Видимо, в течение этого промежутка времени я сделал что-то, связанное с программой LyX, но что именно, сказать не могу. Зато сразу вступали тогда и вступают сейчас в силу изменения в файле с тем же названием, но только расположенном в другой папке — в папке C:\Users\ДИОНИС\AppData\Roaming\LyX2.0\commands. Итак, этот файл нужен для того, чтобы в этом файле присваивать имена комбинациям команд, которые (команды) мы обычно используем в буфере команд с тем, чтобы затем вызывать любую из этих комбинаций команд опять же через буфер команд с помощью имени, присвоенного этой комбинации. Вот примеры для определения таких имен таких комбинаций в этом файле:

     \define "corpi" "command-sequence math-mode; math-insert {\displaystyle \intop_{-\infty}^{\infty}e^{-x^{2}}dx=\dfrac{\sqrt{\pi}}{2}}; char-right; char-right;"
     \define "vstgr" "command-sequence vc-command U \"$$p\" \"vstavka-grafiki.bat\""  

    Вызов так определенной команды, например, vstgr, осуществляется в буфере команды следующим образом:

    call vstgr

    Я с помощью этой команды вставляю графику в окне программы LyX, не отрывая рук от клавы. При этом в дело вступает файл vstavka-grafiki.bat. Что внутри этого файла и как он работает, я расскажу в другой статье этого этой серии статей: к тому, о чем я рассказываю здесь, это не имеет почти никакого отношения. Здесь же отмечу еще только, что, как я понял, команда

    command-sequence

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

    LyX: добавление кнопок в меню, на панели инструментов


    Сначала я покажу, как добавить какую-нибудь кнопку в какое-нибудь меню. Для примера, я покажу, как добавить в меню Правка кнопку, при нажатии на которую будет начинаться математический режим, туда будет вводиться формула

    $\frac{\sqrt{\pi}}{2}$

    и после этого курсор 2 раза перемещается влево, так, что после окончания выполнения этой команды курсор начинает мигать слева от только что введенной формулы. При этом я хочу, чтобы эта кнопка стояла между кнопками Вставить и Вставить недавнее, сверху этой кнопки помещалась полоса, такая, как, ну, знаете, есть же в меню полосы, разделяющие их на блоки, в которых группируются как-то связанные друг с другом кнопки. А отображаемое имя этой кнопки должно быть drob' s chislitelem. Для того, чтобы выполнить эту задачу — частный случай задач, заявленных в названии этой темы, нам потребуется редактировать файлы, находящиеся в папке C:\Program Files\LyX 2.0\Resources\ui. Именно, для того, чтобы изменить какое-нибудь меню, нам нужно редактировать файл stdmenus.inc, находящийся в этой папке. Открываем его в каком-нибудь редакторе, я это все делаю в банальном Блокноте. Где интуитивно, где глядя на код и, держа в уме горячие клавиши, которыми я пользовался в LyX, когда я еще только-только начал изучение этой программы и о создании собственных горячих клавиш не могло быть и речи, я понял, что редактировать нужно блок кода этого файла, начинающийся с

    #
     # EDIT MENU
     #
     Menu "edit" 
    

    А именно: после строки

    Item "Paste" "paste"

    добавить 2 строки

    Separator
     Item "drob' s chislstelem" "command-sequence math-mode; math-insert \dfrac{\sqrt{\pi}}{2}; char-left; char-left;"
    

    Первая из добавленных строк как раз и дает разделяющую полоску, описанную выше. Сохраняем изменения в stdmenus.inc, перезапускиваем) LyX. В результате получаем вот что:



    Так, теперь займемся добавлением кнопок на панели задач. Признаюсь, что, как добавлять кнопки на панели задач, я подсмотрел вот здесь. А процедура добавления кнопок в меню, описанная выше была додумана уже мной на базе этого узнанного материала. И, уж, конечно, я не претендую ни на какое авторство. Ну, и вот… Вероятно, внимательный читатель во второй статье этой серии статей, там, где про плавающие обтекаемые рисунки, уже заметил отличие одной панели инструментов в окне прогры LyX, которой пользуюсь я (она, эта отличающаяся панель, расположены на фото там точно над рабочей областью, в которой я пишу) от аналогичной панелей инструментов в еще неизмененной прогре LyX. Именно, отличие этой панели сразу бросается в глаза большущей кнопкой, на которой имеется лишь частично вошедшая на фото надпись Moyacom [Ctrl + 0 1]. Однако, той кнопкой я не ограничился, потому что не ясно было, как на кнопки, созданные пользователем, прикреплять еще и какие хочешь картинки. Поэтому я создал еще одну кнопку. На следующем фото созданные мной на этой панели инструментов кнопки указаны красными стрелками:



    Вот для начала я и расскажу, как создать кнопку, покрытую желаемой картинкой (у картинки должно быть обязательно расширение .png), при нажатии на которую выполняется команда, определенная в C:\Users\ИВАН\AppData\Roaming\LyX2.0\commands\default.def. Итак, вписываем в этот файл с новой строки следующее:

    \define "pina2" "command-sequence math-mode; math-insert \dfrac{\pi}{2}; char- right; char-right;" 
    

    Закрываем файл default.def, сохраняем изменения. Далее, в папку C:\Users\ИВАН\AppData\Roaming\LyX2.0\images\commands копируем фото (повторюсь, обязательно расширения .png), под которым мы хотим, чтобы создаваемая нами кнопка появилась в окне прогры LyX, переименовываем это фото в pina2. Давайте договоримся, что кнопку мы добавляем на панель Дополнительно (на приведенном выше фото приведена измененная панель инструментов Дополнительно). Но сама програ LyX не знает панели инструментов с таким названием. Эта панель в понимании LyX называется Extra (я это выяснил, смотря на сообщения в не раз упоминавшейся в моих рассказах этой серии рассказов про прогру LyX области ее окна Сообщения прогресса/отладки при активации/деактивации этой панели через Вид>Панели инструментов).

    Отлично. Идем в уже упомянутую выше папку C:\Program Files\LyX 2.0\Resources\ui. Открываем файл stdtoolbars.inc, ищем там что-то, начинающееся со слова extra (возможно, с большой буквы) или что-то, похожее на, там, заголовок или что-то в этом духе, содержащее это слово. Чтобы не лезть далеко, мы добавим нашу кнопку в самое начало этой команды. Именно, вот участок кода того файла до моего вмешательства:

    ...................................................................
    StickyPopupMenu "update-others" "Update other formats"
     End
    
     Toolbar "extra" "Extra"
     Item "Default" "layout"
     Item "Numbered list" "layout Enumerate"
     ...................................................................  
    

    А вот каким я сделал тот участок кода:

     ...................................................................
    StickyPopupMenu update-others Update other formats
     End
    
     Toolbar "extra" "Extra"
     Item "Privet moim chitatelyam" "call pina2"
     Item "Default" "layout"
     Item "Numbered list" "layout Enumerate"
     ................................................................... 
    

    , где многоточия — это строки файла stdtoolbars.inc, стоящие до и после приведенного кода этого файла. В принципе, все, закрываем с сохранением файл stdtoolbars.inc. Тогда после перезапуска LyX при активации панели Дополнительно на этой панели появляется новая функционирующая кнопка с тем изображением, которое мы и назначили и выполняющая ту функцию, которую мы и определили. Как видно из последнего фото, всплывающая подсказка определяется написанным нами в первой паре кавычек, относящихся к соответствующему item. В заключении скажу, что добавленная мной вторая кнопка была определена без участия файла default.def и, как я сказал выше, без умысла назначить на нее картинку, под которой эта кнопка отображалась бы в окне прогры LyX: я просто вставил перед последней строкой блока кода, в котором я делал только что описанные манипуляции, пустую строку и вставил в эту пустую строку следующий код:

    item "Moyacom" "command-sequence math-mode; math-insert \dfrac{\sqrt{\pi}}{2}; char-left; char-left;"
    

    А [Ctrl + 0 1] на созданной мной кнопке на приведенном мной фото видно потому, что у меня на команду command-sequence math-mode; math-insert \dfrac{\sqrt{\pi}}{2}; char-left; char-left; Ctrl+0+1 (признаться, я появления этой подсказки в этом месте совсем не ожидал.

    Продолжение следовает...
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      Так что же такое ветка? А главное, зачем?
        0
        Странный вопрос. Процитирую себя:
        Эта ветка появляется неактивной. Это значит, что если я что-то напишу перед веткой, затем я какой-то текст впишу в прямоугольник ветки и продолжу повествование после ветки, то в .pdf, образующемся из этого файла .lyx, часть текста, находящаяся в красном прямоугольнике, будет просто отсутствовать. Чтобы включить эту часть в .pdf, навожу мышку на слово Ветка, там, плюс-минус около этого слова, щелкаю правой кнопкой мышки и выбираю левой кнопкой мышки пункт Активировать ветку.


        По поводу зачем. Хм, ну, это каждый решает сам. Вы делали, например, вывод формул в логике? Бывает, это много-много строк и в выводе одной формулы нужна другая формула, которую тоже нужно вывести. И вот в зависимости от требуемой в данный момент степени детализации вывода можно одним и тем же файлом эти степени обеспечить. Это первое, что приходит в голову. Да мало ли? Откуда я знаю? Если задаваться вопросом зачем, большая часть TeX'а оказывается просто не нужна (большинству). Ну, какому-то меньшинству эти «ненужные функции все же нужны. Так и тут.

      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

      Самое читаемое