Как стать автором
Обновить

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

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

Эта статья является продолжением предыдущей статьи

LyX: Preview


В меню Вставка есть команда Preview. Я ее понял в числе последних.

Математический, Ctrl+M, (или выклочный, Ctrl+Shift+M) режим имеет, с одной стороны, преимущество в том, что вводимая формула отображается сразу в том виде, в каком она будет отображаться в конечном файле, но, с другой стороны, он имеет 2 недостатка, а именно: невозможность, вообще говоря, правки уже введенной формулы (например, если в формуле в математическом режиме использовалась команда \textcolor (как это делается, я расскажу в другой раз), то после закрытия и повторного открытия файла .lyx становится невозможным изменить цвет текста) и отчасти неправильная интерпретация символа "\\" (2 знака backslash) или "&". Понимаете, в процессе экспорта или предпросмотра, например, в pdflatex, файл .lyx, с которым сейчас работаешь, порождает соответствующий файл .tex (этот файл, как и файлы, обычно образующиеся при обработке pdflatex.exe какого-нибудь файла .tex в каком-нибудь «настоящем» редакторе $\LaTeX$ помещается в папку, указанную в Инструменты>Настройки>Пути в текстовом поле Временный каталог), который и подвергается обработке установленного на компе $\TeX$'а. Так вот, то, что мы пишем в математическом режиме в LyX, может, вообще говоря, отличаться от того, что запишется в соответствующий файл .tex. То, что запишется в соответствующий файл .tex, к примеру, в формулах, видно, если нажать Вид>Просмотреть исходный текст, при этом в основном окне LyX появляется область Исходный текст LaTeX (а, может, и отдельно от основного окна: если вы до этого эту область вытащили мышкой из основного окна LyX). Так вот, как видно в этой области, когда мы в математическом режиме вводим "\\", например, для начала новой строки матрицы, LyX воспринимает это как "\backslash\backslash", а "&" в математическом режиме воспринимается как "\&":



(если после \begin мы просто нажмем Shift+{, то в понимании LyX это будет означать ввод $\mbox{\\\{}$, что не является верным — правильно надо вводить \+Shift+{). С одной стороны, в случае матрицы с обыкновенными разделителями на всю высоту матрицы неправильное понимание символов "\\" и "&" легко преодолимо с помощью команды Матрица, расположенной на панели инструментов «Формула (автоматически)». С другой стороны, упомянутой командой Матрица не введешь макет матрицы с разделителями деления уголком

∖arraycolsep=0.05em
∖begin{array}{rrr@{∖,}r|r}
 x^2&{}+2x&{}-12&&∖,x+5∖∖ 
∖cline{5-5}
 x^2&{}+5x&&&∖,x-3∖∖
\cline{1-2}
 &{}-3x&{}-12∖∖
 &{}-3x&{}-15∖∖ 
∖cline{2-3}
 &&3
∖end{array} 

(пример кода взят из книги С. М. Львовского «Набор и верстка...», стр. 223): попытка вставить преамбулу матрицы приведенного кода в текстовое поле Горизонтально диалогового окна «LyX: Матрица», открывающегося после нажатия упомянутой команды Матрица, дает совсем не тот результат. Все это, на первый взгляд, свидетельствует о некоторой ущербности LyX. А на самом деле это не так. Нет, может, эта ущербность и есть, только мне не хватило фантазии ее выявить. Ну, и вот. Нажимаем Вставка>Preview, нажимаем в появившемся прямоугольнике команду Вставить код LaTeX (ту, что выполняется сочетанием клавиш Ctrl+l) и вот в эту конструкцию мы и вставляем приведенный выше код. Все, выводим курсор из прямоугольника, созданного описываемой в этой теме командой. После некоторого времени, 1-2 секунды, без экспорта и предпросмотра, мы видим то, что получится из этого кода в конечном файле выхода, но только видим мы это в окне LyX. Это все применимо не только к объектам $\LaTeX$, но и к графике, генерируемой tikz и pstricks (при подключении соответствующих пакетов). Например, следующий файл .lyx в открытом виде выглядит следующим образом:



Внизу, кстати, видна панель *буфер команды*, которая предоставляет, в частности, еще один способ решения проблемы неправильной интерпретации "\\" и "\&". Как ей пользоваться, рассказано в следующем заголовке

LyX: Буфер команды


Если мы пройдем Вид>Панели инструментов, то там среди прочих панелей мы увидим панель Буфер команды. Что это такое? Во-первых, этой функцией мы можем выполнить какую-либо команду по словосочетанию для этой команды, на которое мы назначали горячую клавишу для этой команды, таким образом, как рассказано в разделе LyX: Горячие клавиши первой части этой серии статей. Именно, открываем эту панель (для открытия этой панели мы на словосочетание toolbar-toggle minibuffer назначим сочетание клавиш Ctrl+0+B+K, тогда закрыть эту панель можно тем же сочетанием клавиш, а чтобы перебросить курсор в буфер команды, используется сочетание клавиш Alt+X, назначенное на словосочетание command-execute. Ну, это сочетание клавиш имеется в LyX изначально, пользователю его назначать не нужно). Итак, вот мы открыли эту панель. Если мы туда введем, к примеру,

image

(там после слова Theorem при этом все еще мигает курсор, просто сфотографировать так не получилось) и нажмем кнопку Enter, как я понял, в том абзаце, в котором мигал (или мигает сейчас, зависит от способа перевода курсора в буфер команды, см. ниже), до переброса в буфер команды курсора, курсор, в основном окне прогры LyX начнется окружение Теорема.

Примечание. Если мы курсор переводили в буфер команды сочетанием клавиш, то в основном окне LyX курсор тоже остается на прежнем месте, а в буфере команды появляется еще один курсор и, таким образом, в окне LyX появляется 2 курсора, но, к сожалению, как я ни старался, сфотографировать 2 курсора не удалось, курсор в буфере команды вновь категорически отказывается фотографироваться). Если же мы курсор туда помещаем нажатием левой кнопки мышки, курсор получается только в буфере команды. Однако в обоих случаях после нажатия Enter положение курсора становится таким, каким оно было до перевода курсора в Буфер команды.

Для ввода формулы текстовой (выклочной) формулы через буфер команды, эта формула должна начинаться с math-mode (math-display). Если мы в буфере команды напишем



(наконец-то удалось схватить 2 курсора!) и нажмем Enter, то в основном окне LyX между «в» и «такой» появится греческая (у греческом зале, у греческом зале...) буква пи под знаком корня и все это будет выглядеть точно так же, как если бы мы вводили эту формулу из основного окна LyX без применения буфера команды, через (в данном случае) Ctrl+M и т. д., и т. п. Само собой разумеется, буфер команды для ввода таких простых формул представляет мало интереса, однако… Ввод таких формул, как

\begin{tabular}{|c|cc|c|}\hline А & Б & В & Г\\\hhline{|=|~~|-|}Д & Е & Ж & З \\ \hline\end{tabular}

в текстовой или выклочной формуле — дело нереальное из-за неправильной интерпретации символа \. Не забываем подключать пакет hhline (отмечу, что этот пакет оказался для меня не совсем обычным: когда я его подключил в своем документе, сначала в TeXworks, чтоб посмотреть, вообще работают или нет подобные коды, по сообщениям в Выводе работы программы у меня создалось такое впечатление, что его нет среди установленных пакетов, я в Менеджер пакетов — нет такого пакета, я в репозиторий — нет, ну, думаю, может, как большинство пакетов — в C:\Program Files\MiKTeX 2.9\tex\latex — нет. И только поиском по компьютеру я нашел его в C:\Program Files\MiKTeX 2.9\tex\latex\tools). И один из способов решения этой проблемы — ввод таких формул через буфер команды:

"

После нажатия Enter получаем ожидаемый результат:



Однако, такой способ срабатывает не всегда. Например, при попытке вставки через буфер таблицы

math-mode 
\begin{tabular}{lr@{--}@{\qquad Obed\quad}r@{--}cc} \text{Понедельник}  &  $8^{30}$ &  15  &  11  &  12 \\  Вторник   &  12  & 19  & 15  &  16 \\ \end{tabular}
\begin{tabular}{lr@{--}@{\qquad Obed\quad}r@{--}cc} \text{Понедельник}  &  $8^{30}$ &  15  &  11  &  12 \\  Вторник   &  12  & 19  & 15  &  16 \\ \end{tabular}


после нажатия Enter в понимании компьютера слово Obed (я специально написал его латинскими буквами) сливается с командой \qquad и возникает ошибка при экспорте (получении pdf, в чем вы там экспортируете — в pdflatex или еще в чем). Выход из этой ситуации — вставка кодов таких формул, окружений в *код TeX
(*Ctrl*+*l*) или в **Вставка>preview** (туда опять-таки нужно вставлять **код TeX**). Все эти заковыристые формулы с *@* и прочей прелестью взяты мной из книги Львовского «Набор и верстка...» Ну, вы знаете.

LyX: Раскладка клавиатуры


В LyX в Инструменты>Настройки>Редактирование>Клавиатура/Мышь, там, где раздел Клавиатура, есть флажок Использовать раскладку клавиатуры. Этот неприметный с виду флажок обеспечивает довольно существенный перевес между LyX и другими «настоящими редакторами $LaTeX$». Я не скажу, что LyX имеет преимущество перед этими редакторами прямо-таки по всем показателям в силу недостаточной своей компетентности в этом вопросе, но с этой стороны он их точно превосходит. Итак, эта функция нужна для того, чтобы с одной клавиатуры (не переключая язык ввода, что, впрочем, пока не важно) можно было вводить необычные (там, диакритические, и т. п.) символы. Именно: нажимаем кнопку Просмотреть для первой и Выбрать для второй клавиатуры (где находятся эти кнопки, указано в первом предложении данного раздела этого поста) и устанавливаем с помощью выбора соответствующих файлов с расширением .kmap (на всякий случай скажу, что эти файлы находятся в C:\Program Files\LyX 2.0\Resources\kbd), как нам удобно, какой язык (какую раскладку клавиатуры) на какую клавиатуру (первую или вторую) повесить. Нажимаем Сохранить, при этом диалоговое окно настроек закроется (в данном случае можно нажать кнопку Применить, тогда можно в основном окне LyX что-то делать без ограничения функционала, там, писать, выполнять команды всех меню без закрытия диалогового окна Настройки, но мы нажимаем Сохранить, потому что нам надо желательно сразу перезапустить LyX). Потом, повторюсь, лучше перезапустить LyX. Язык ввода в окне LyX ставим английский. Переключение раскладок осуществляется сочетаниями Alt+K+1 или Alt+K+2 соответственно. Сочетание Alt+K+Т осуществляет переключение между выбранными раскладками по кругу (так сказано в мануале). Ну, это все мелочи. Хочу, однако, отметить, что в мануале сказано, что эта функция работает не на всех системах. И, действительно, у меня, на Windows 7 максимальной (до этого на профессиональной), это работает (работало) только отчасти: когда в первой указана какая-либо раскладка, переключение на вторую не происходит. Но зато при включении этой функции, независимо от выбранной второй раскладки, при переходе в математический Ctrl+M) или выклочный (Ctrl+Shift+M) режимы, язык ввода становится английским! При выходе же из математического (или выклочного) режима (можно мышкой щелкнуть вне прямоугольника, обозначаемого красными уголками, в котором курсор находится в момент ввода математической формулы, или кнопками навигации курсора) язык ввода становится опять тем, который указан в первой клавиатуре. Это о-очень удобно, когда пишешь что-то с математическими формулами на языке, отличном от английского: сто раз не переключать язык ввода на английский (для ввода формул) и назад, на свой язык. Однако не для всякого языка в папке, названной мной выше, есть соответствующий файл .kmap. Нет его, в частности, для русского языка. Поэтому его нужно изготовить. Делается это довольно просто. Копируем и вставляем в эту же папку файл null.kmap, переименовываем его в russian.kmap (я подозреваю, что файл null.kmap для того и задуман, чтобы непосредственно из него изготавливать нужный пользователю файл .kmap, но на всякий случай я его трогать не стал, а изготовил свой). И в russian.kmap вставляем такие строки:

\kmap q й 
\kmap w ц 
\kmap e у 
.................. 
 \kmap m ь 
\kmap "," б 
\kmap "." ю 
\kmap "6" ‚ 
\kmap "7" . 
 \kmap "@" \" 
 \kmap "^" ; 
 \kmap "&" : 
 \kmap "`" ё 
\kmap "~" Ё 
\kmap "" 
"
 

 \kmap Q Й 
\kmap W Ц 
\kmap E У 
\kmap R К 
.................... 
 \kmap L Д 
\kmap : Ж 
\kmap "”" Э 
\kmap Z Я 
\kmap X Ч 
\kmap C С 
\kmap V М 
\kmap B И 
\kmap N Т 
\kmap M Ь 
\kmap "<" Б 
\kmap ">" Ю 

т. е. строка имеет такую структуру: «\kmap» «символ английской раскладки» «символ русской раскладки (вернее, казахской раскладки: я ее больше предпочитаю, потому что там наиболее употребительные знаки препинания – точка и запятая – расположены на разных клавишах при доступности практически всех буквах русского языка, нет только букв “Ё” и “ё”, потому что их нет в казахском алфавите, что легко восполнимо с помощью Alt-кодов символов), расположенный на одной клавише с введенным ранее английским символом» (наверное, скорее всего, русский символ не обязательно ставить с одной клавиши с кодируемой английской буквой, не пробовал, мне это не к чему). Многоточия обозначают пропущенные буквы. Все, закрываем с сохранением изменений файл russian.kmap, который, что перекликается с написанным мной выше, и выбираем для первой раскладки (с помощью кнопки Просмотреть, упоминавшейся мной выше), для второй раскладки можно ничего не выбирать. Перезапускаем LyX. Язык ввода ставим английский. При этом он начинает писать русскими буквами так, что какую русскую букву нажмешь, такую он и выведет в окно LyX, при переходе же в математический или выклочный режим (без надоедливого переключения мышкой языка ввода) он выводит в окно LyX латинский символ, который ты и нажимал. ИМХО, очень удобно. Отмечу, что, несмотря на все мои попытки, сделать, чтобы так работала буква «Э», мне не удалось: кавычка вылетает и всё тут. Ну, это и не беда: эта буква употребляется сравнительно редко, так что когда нужно, нажимаем и удерживаем клавишу Alt, с цифровой клавиатуры вводим последовательно 1, 5, 7, отпускаем клавишу Alt. В окне LyX, там, где мигает курсор, появится буква «Э». На всякий случай выкладываю свой файл файл russian.kmap. Так, ну, вроде все. Старался писать максимально доходчиво.

LyX: Соединение с Maxima


В LyX, когда курсор мигает в строчной или выклочной формуле в меню Правка появляется подменю Метематика. В этом подменю есть еще одно подменю Использовать систему компьютерной алгебры, в котором есть команда maxima. Что ж, выглядит это многообещающе, осталось только подключить саму программу Maxima к LyX. Я об этом прочитал здесь, однако, ввиду возможности устаревания ссылки, перескажу еще здесь. Итак, делается это следующим образом. Ищем папку, в которую установлена Maxima. У этой программы есть 2 файла, запускающих эту программу в разных видах — wxmaxima.exe и xmaxima.exe. Нам нужен путь к папке, в которой находится файл xmaxima.exe. Мы предполагаем, что при установке Maxima папка, в которую предлагалось извлечь ну, или записать файлы Maxima (не знаю, как это называется), не была изменена пользователем. Тогда эта папка (во всяком случае, для версии Maxima 5.27.0) — C:\Program Files\Maxima-5.27.0\bin. Копируем этот путь. Открываем LyX, идем Инструменты>Настройки...>Пути, щелкаем левой кнопкой мышки в текстовое поле Пути, уходим в окончание этого поля и без пробела с последней буквой этого поля вставляем ; и ранее скопированный путь C:\Program Files\Maxima-5.27.0\bin, нажимаем Сохранить, все, LyX готов для использования в нем Maxima. Входим в математический или в выклочный (Ctrl+Shift+M) режим, вводим в нем для проверки функционирования простейшую команду программы Maxima:

ratsimp(a+a)

Идем Правка>Математика>Использовать систему компьютерной алгебры и нажимаем Maxima. В результате справа от нашей команды, в математическом или в выклочном этом же режиме появляется вот что:



Знак = появляется не от ввода пользователем, а автоматически, после вызова Maxima. Чтобы для каждого вызова Maxima не нажимать много раз мышку, я создал горячую клавишу на словосочетание math-extern maxima (как назначать горячую клавишу на словосочетание см. статью LyX: Горячие клавиши этой серии статей). А чтобы после окончания работы Maxima в математическом (выклочном) режиме исчезали команды Maxima, нужно перед ее вызовом, находясь в математическом (выклочном) режиме выделить эти команды, как выделяют перед копированием.

LyX: Опции окружений


Листая составные мануала по Lyx, я довольно часто встречал такие места:



И каждый раз мне становилось интересно, как это получают? Так я время от времени возвращался к этому вопросу, при этом возобновляя поиски в Инете. И в очередной раз мне удалось на каком-то английском форуме найти пару фоток по этому вопросу, которые помогли мне, наконец-то закрыть эту тему. Я не помню, где это было, но, склоняюсь к мысли, что это было, все-таки, на stackexchange. И вот я хочу рассказать про это на русском языке. Давайте я расскажу об этом, показывая на примере конкретного окружения Нумерация. Аргументом в пользу выбора этого окружения явилось то, что для использования параметров в этом окружении в LyX мне потребуется в LyX использовать модуль Customtable Lists (enumitem), а, значит, отвлекаясь от этого конкретного модуля, я смогу показать еще и как использовать какой угодно модуль в этой программе. Итак, для начала подключим этот модуль. Для этого идем в Документ>Настройки>Модули. Там, перемещая бегунок в полосе прокрутки в окошечке под словом Доступные ищем это словосочетание. Должен признаться, что, когда узнав, как это делается, я это записывал, я пользовался LyX'ом, установленным выполнением одного.ехе-шника, а сейчас у меня установлен LyX выполнением другого.ехе-шника, так что, когда я сейчас полез с поиском этого модуля в соответствующее место, я этот модуль там не обнаружил. Однако, открыв файл .lyx, изготовленный, когда я выяснил, как это делать, чтобы не забыть и, покопавшись в уже подключенных модулях, я обнаружил, что один из таких подключенных модулей — модуль Настраиваемые списки(enumitem). А всего в том файле .lyx 3 подключенных модуля. Остальные 2 — это Нумерация формул по разделам и Нумерация рисунков по разделам. Ни один из этих модулей явно не является модулем, подключенным мной тогда с целью оказания влияния на окружение Нумерация. Остается только модуль Настраиваемые списки(enumitem). Получается, что модуль, который в той копии LyX назывался Customtable Lists (enumitem), в этой копии называется Настраиваемые списки(enumitem). Будем иметь это ввиду. Итак, в окошечке под словом Доступные — под тем словом, как добраться до которого, я рассказал, — ищем модуль с одним из двух этих имен, щелкаем по этому модулю левой кнопкой мыши, нажимаем кнопку Добавить, расположенную чуть правее этого всего и нажимаем кнопку OK или Применить. Все, нужный модуль подключен. Отмечу, что при подключении этого модуля становится доступным новое окружение. Сейчас оно у меня называется Нумерация-Продолжение. Чтобы в него перейти, как обычно, щелкаем левой кнопкой мыши выпадающий список окружений (ну, там, где при создании нового файла .lyx обычно видно слово Обычный), наводим мышку на элемент этого списка Нумерация-Продолжение и щелкаем по этому элементу левой кнопкой мышки. Суть этого окружения в том, что, если мы его где-нибудь начнем, напишем некоторое число пунктов этой нумерации, потом прервем чем-то эту нумерацию, например, обычным текстом, а потом опять начнем это же, Нумерация-Продолжение, окружение, то нумерация в получающемся .pdf после прерывания начнется не с 1, а продолжит прерванную нумерацию (но в самом окне программы LyX нумерация по-прежнему с 1, только пункты этой нумерации, как до, так и после прерывания отличаются синим, ну, может, голубым, цветом). Впрочем, мы отвлеклись. Итак, Подключили названный выше модуль, начали окружение Нумерация. Далее, идем в меню Вставка. Там стал активным пункт Краткое заглавие. Вот по нему щелкаем левой кнопкой мыши и в появившийся прямоугольник вводим нужные нам опции в данном случае Нумерации, а вообще окружения, в котором это все происходит. Например, вставив такую опцию

start=4

получим соответствующую нумерацию в .pdf начинающуюся не с 1, а с 4. Вообще, про опции, значение которых для окружения Нумерация имеет смысл указывать, в том числе описанным здесь способом можно прочитать (а не прочитать — так догадаться) в документации к пакету enumitem (я имею ввиду реализацию $\TeX$'a — MiKTeX. Про TeXlive не знаю, рвать, ой, врать, врать)) не буду).

LyX: Плавающие обтекаемые рисунки


Вот, когда я в LyX пытался вставить плавающий обтекаемый рисунок через Вставка>Плавающий объект>Обтекаемый рисунок, ну, туда еще, понятно, графику вставлял, у меня получалось следующее:



в результате чего, как читатель, вероятно, уже догадался, глядя на код, находящийся в окошечке LaTeX Source, (это окошечко появляется при нажатии левой кнопки мышки Вид>View Source (или Вид>Просмотреть исходный код, пункт меню с таким названием — это тот же пункт того же меню, названный мной перед этими скобками, только в зависимости от используемого файла локализации с расширением .mo, о котором я расскажу позже, этот пункт может называться по-разному), в создающемся файле .pdf соответствующий рисунок появляется аж на полстраницы. Я довольно долго не мог найти способа этим управлять, пока не наткнулся на этот маленький блог. Я еще раз здесь перескажу, что там пишется. Итак, после вставки через Вставка>Плавающий объект>Обтекаемый рисунок появляется красный прямоугольник с надписью обтекаемый объект: Рисунок. Вот по этой надписи и щелкаем правой кнопкой мышки. В появившемся выпадающем списке щелкаем левой кнопкой мышки пункт Настройки...:



В появившемся диалоговом окне и устанавливаем ширину рисунка и другие параметры так, как нам и нужно. Однако при использовании этого метода в создаваемом .pdf могут появляться не очень желательные места, к примеру, такого вида:



Как ни странно это звучит, но в этом случае к счастью, приведенную выше ссылку с ответом на этот вопрос я нашел не сразу и, пока я ее искал, мне удалось найти альтернативный способ решения этой проблемы. Суть этого способа в том, что мы нужное нам фото вставляем через Вставка>Изображение, а по бокам от этого вставленного таким образом фото мы в предварительно вставленные коды $\TeX$ (Ctrl+l) вписываем то, что мы обычно вписываем в таких случаях в файл .tex слева и справа от \includegraphics{какой-нибудь графический файл}, открытый в каком-нибудь редакторе $\LaTeX$ — например, TeXworks или TeXmаker (напомню, что LyX — это не редактор, а процессор), а именно: в левый от фото такой код мы вставляем

\begin{wrapfigure} 


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

\end{wrapfigure}
В результате получается, например, так:



И вот этот вариант вставки плавающей обтекаемой графики представляется мне более гибким, чем способ, предусмотренный создателями программы: именно, если при вставке стандартным способом плавающей графики управлять появлением/не появлением caption, protect (см. часть окна программы LyX LaTeX/Source на первом фото настоящего заголовка настоящей повести) не получается, то при таком способе мы получаем полный контроль над кодом, который при экспорте в какой-нибудь формат, перед появлением этого формата, будет записан в соответствующий файл .tex. И, как следствие этого, у нас появляется возможность предотвращать появление показанных выше нежелательных мест в .pdf. Именно, если в .pdf где-нибудь появилось такое место с фото, то в месте файла .lyx, создающем это нежелательное место, мы в блок кода TeX
, содержащий \end{wrapfigure}, перед этим окончанием окружения вставляем

\vspace{- какая-то длина, в см, в мм}


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

\vspace{-2.5cm} 


И всегда использование этого значения вертикального пробела приводила к исчезновению таких дефектов в .pdf. Однако, при таком способе вставки плавающей обтекаемой графики становится необходимым подключение пакета wrapfig в Документ>Настройки>Преамбула LaTeX. Отмечу еще, что в LyX вообще, независимо от способа вставки плавающей обтекаемой графики, если при классе документа, в названии которого есть AMS, используются поля не по умолчанию, плавающие обтекаемые рисунки в получающемся .pdf уходят далеко вправо.

Продолжение следует...
Теги:
Хабы:
+7
Комментарии2

Публикации

Изменить настройки темы

Истории

Ближайшие события