Таким образом, в файле .js, назовем его vstavka-grafiki.js, нужно будет сымитировать нажатие сочетания клавиш
и, создав в программе LyX горячую клавишу на словосочетание call vstgr. Все бы хорошо, но выяснилось, что из программы LyX файлы .js запускать не получается. Зато из нее получается запускать файлы с расширением .bat (банальные батники). Именно поэтому я в файле default.def написал
, сделав файл vstavka-grafiki.bat следующего содержания:
А непосредственно для упрощения вызова созданной мной команды в окне LyX я, как и задумывал, когда еще не знал, что потребуется использовать еще и батник, создал горячую клавишу на словосочетание call vstgr. При этом и файл vstavka-grafiki.bat, и файл vstavka-grafiki.js должны находиться в папке, добавленной в РАТН. Так, идем дальше. При создании формата экспорта pdflatex-v-papke я столкнулся вот с чем. При вставке графики, например, с упомянутым выше именем с расширением photo.png в части окна прогры LyX, появляющейся после нажатия Вид>View Source (или Вид>Просмотреть код - название соответствующего пункта меню Вид зависит от используемого файла локализации .mo) на месте, соответствующем положению вставленной графики в основном окне программы LyX, будет следующий код:
И этот же код будет записан в соответствующий файл .tex, появляющийся в соответствующем временном каталоге в результате действия батника, выбранного в качестве движка этого формата на одном из самых первых этапов работы этого батника. Как следствие, в результате выполнения одной из последующих команд этого батника - обработки полученного файла .tex - возникнет ошибка и ничего не получится. А проблема здесь в том, что в образующийся файл .tex имя вставляемого графического файла (аргумент команды \includegraphics) записывается без расширения. Что же делать? Хм, ведь помимо получения файла .tex, обработка которого pdflatex'ом не вызывала бы ни одной ошибки, хотелось бы еще сохранить и наглядность в окне программы LyX. С другой стороны, при вставке графики в окно программы LyX в нашем, русскоязычном случае, символы, вставляемые при нажатии клавиш клавы, будут, скорее всего, кириллическими, в то время, как расширения файлов вообще, в частности, графических, записываются английскими. С другой стороны, читатель, дочитавший этот блог до этого места, уже, скорее всего, знает про весьма вкусную функцию прогры LyX - Использовать раскладку клавиатуры и вовсю ее использует. Что ж, если это так, то задача значительно упрощается. Именно, вот мы открыли файл в программе LyX, переключили раскладку на английскую, а писать мы начали, нажимая буквы, которые нам нужно, так, как будто раскладка поставлена на русскую, символы, которые вводятся в окно программы LyX, - это кириллические символы, расположенные на нажимаемых клавишах. Тут все ОК. Вот мы писали, писали, хоп, нам понадобилось вставить графику. До этого момента вводились кириллические символы, а сейчас нам стало нужным вводить буквы английские (для ввода расширения). Так мы просто-напросто возьмем и перейдем в математический режим, в котором и напишем имя вставляемого фото вместе с его расширением, после этого запустим специально для этого созданной нами горячей клавишей (у меня это
(а предыдущая горячая клавиша назначена на словосочетание call vstgr1). Как нетрудно догадаться, эта команда запускает батник vstavka-grafiki1.bat следующего содержания:
Как нетрудно догадаться, этот батник запускает файл vstavka-grafiki1.js, который, по существу, все и делает. Что же он делает? Давайте сначала я опишу, какую конструкцию мы хотим получить в редактируемом в настоящий момент файле .lyx. Мы хотим, чтобы там с новой строки (если мы там до этого уже что-то написали, если нет, так и не надо новой строки, см. ниже) было вставлено нужное нам фото, потом, опять с новой строки, был бы вставлен блок кода ТеХ (то, что обычно появляется в окне программы LyX при нажатии сочетания клавиш
Вспоминая вот это повествование, нетрудно понять, что этот батник действительно вставляет знак процента в текущее в прогре LyX положение курсора (естественно, чтобы этим возможно было пользоваться, в Инструменты>Настройки...>Пути в текстовом поле Канал сервера LyX: должно стоять \\.\pipe\lyxpipe, а при попытке использования файла procent.bat в применении к LyX вне файла vstavka-grafiki1.js необходимо соблюдать нужный порядок запуска окна командной строки, из которого будет вызываться файл vstavka-grafiki1.js и окна прогры LyX, в которое этот самый знак процента будет вставляться. За подробностями я отсылаю читателя к посту по последней приведенной ссылке. Впрочем, при вызове procent.bat из vstavka-grafiki1.js все проходит, как надо). Другим вспомогательным файлом, использующемся в файле vstavka-grafiki1.js, является файл Ostanovka.js следующего содержания:
WshShell.Popup("Если до сих пор все шло правильно, нажмите кнопку \"Ок\", иначе \"Отмена\"", 0, "Контроль процесса",1);
А ето шо за чудо-юдо? Дело в том, что, когда я создавал файл vstavka-grafiki1.js выполняющемся без остановок, во время его работы, видимо, в том числе и из-за запуска из него других файлов с командами, которые должны выполниться в том же окне прогры LyX, в котором файл vstavka-grafiki1.js сам выполняет команды, в разных местах возникали ошибки, эти команды файла vstavka-grafiki1.js в своей совокупности делали не то, что надо. Чтобы это устранить, я придумал вот что. Экспериментально выявлял такие места в файле vstavka-grafiki1.js. Именно, команды в этом файле, вызывающие ошибки. И перед этими местами я хотел приостанавливать работу файла vstavka-grafiki1.js до нажатия мной какой-нибудь клавиши. Какой - еще не знал. Думал я думал и вспомнил, что у команды-не команды, неважно, в общем, у WshShell.Run( есть такой аргумент, что, если его значение указать как true, то при выполнении этой команды работа основного, из которого эта команда выполняется, файла приостанавливается ровно до тех пор, пока не закроется открытый этой командой файл. Что ж, уже кое-что... С другой стороны, я вспомнил, что в jscript есть команда, открывающая диалоговое окно с реально функционирующими кнопками. Сложив все это вместе, я решил перед проблемными местами файла vstavka-grafiki1.js вставлять команду запуска файла Ostanovka.js с параметром ожидания окончания работы этого файла. Файл же Ostanovka.js будет создавать диалоговое окно с двумя кнопками -
WshShell.SendKeys("%лч");
WshShell.SendKeys("+{HOME}"); //выделяем находящееся в мат. режим имя
//вставляемой графики, отделенное точкой от его расширения
WshShell.SendKeys("^с"); //копируем выделение, сделанное на предыдущем шаге
WshShell.SendKeys("{LEFT}"); //выводим курсор влево из мат. режиме,
//про который я писал в комменте к третьей строке
WshShell.SendKeys("{END}"); //помещаю курсор в положение после
//мат. режима, про который я писал в комменте к третьей строке
WshShell.SendKeys("{ENTER}"); //начинаю новую строку под мат. режимом,
//про который я писал в комменте к третьей строке
WshShell.Run("Ostanovka.js",1,true); //приостанавливаю работу файла
//vstavka-grafiki1.js
WshShell.SendKeys("^д"); //вставляю блок TeX
WshShell.Run("Ostanovka.js",1,true); //приостанавливаю работу файла
//vstavka-grafiki1.js
WshShell.Run("procent.bat"); //вставляю знак процента во вставленный ранее блок TeX
WshShell.Run("Ostanovka.js",1,true); //приостанавливаю работу файла
//vstavka-grafiki1.js
WshShell.SendKeys("{RIGHT}"); //выхожу вправо из уже содержащего знак
//процента блока TeX
WshShell.SendKeys("%ч"); //перехожу в Буфер команды
WshShell.SendKeys("штыуе-фзздн пкфзршсы ашдутфьу "); //после выполнения
//этой команды в буфере команды оказывается написано
//inset-apply graphics filename с пробелом после слова filename
WshShell.SendKeys("^м"); // вставляю в буфер команды из буфера памяти
//компа скопированное ранее имя вставляемой графики вместе с его расширением,
//отделенным точкой от имени
WshShell.SendKeys("{ENTER}"); //имитирую нажатие клавиши ENTER, при
//этом после выполнения этой команды в основном
//окне прогры LyX становится видимо вставляемое фото
//WshShell.SendKeys("{UP}"); //перевожу курсор в основном окне прогры LyX
//в строку, где стоит имя вставляемого фото вместе с его расширением,
//находящиеся в мат. режиме, при этом курсор мигает в самом конце этой строки,
//вне этого мат. режима
WshShell.SendKeys("{LEFT}"); //ввод курсора в мат. режим, про который я
//писал в комменте к предыдущему шагу
WshShell.SendKeys("+{HOME}"); //выделение имени вставляемого фото,
//вместе с его расширением, отделенным точкой от его имени
WshShell.SendKeys("^ч"); //вырезание выделения, сделанного на предыдущем шаге
WshShell.SendKeys("{LEFT}"); //выход влево из опустевшего математического режима
WshShell.SendKeys("{DELETE}"); //удаление ставшего пустым после
//вырезания имени вставляемого фото вместе с его расширением, отделенным
//точкой от его имени, математического режима WshShell.SendKeys("{DELETE}"); //удаление опустевшей после удаления
//предыдущим шагом строки WshShell.SendKeys("{END}"); //после выполнения предыдущей команды курсор
//перед выполнением этой команды мигает перед знаком процента, находящемся в блоке
//ТеХ. Так вот, после выполнения этой команды курсор оказывается
//мигающем в конце этой строки, после ставшей до этого отображаться
//в окне прогры LyX вставляемого фотки
WshShell.SendKeys("{ENTER}"); //Начало новой строки
WshShell.SendKeys("^д"); //вставка в начатую предыдущей командой новую строку
//блока ТеХ
WshShell.SendKeys("\штсдгвупкфзршсы"); //вписывание в блок ТеХ, созданный предыдущей
//командой, \includegraphics
WshShell.SendKeys("+х"); //дальше вписываем в этот блок ТеХ открывающую
//фигурную скобку
WshShell.SendKeys("^м"); //вставляем в этот блок ТеХ скопированное ранее имя
//вставляемой графики вместе с его расширением,
//отделенным точкой от его имени
WshShell.SendKeys("+ъ"); //дальше вписываем в этот блок ТеХ закрывающую
//фигурную скобку
WshShell.SendKeys("{RIGHT}"); //выводим курсор вправо из блока ТеХ
Скажу еще пару слов по поводу приведенного кода. Во-первых, комментарии в jscript обозначаются знаком
Комментариев нет:
Отправить комментарий