2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Настраиваемая сборка многостраничного документа
Сообщение21.06.2016, 13:05 


21/06/16
4
Всем привет!
Это мой первый пост на форуме, надеюсь получу тут искомые знания.
Дело такое:
Есть большой документ с картинками (руководство по использованию продукта), собираемый из нескольких (до 10) файлов.

Возникла задача сделать документацию по брендированной версии продукта. На пальцах это выглядит так: было "Красный треугольник: инструкция по применению", а стало "Синий квадрат: инструкция по применению". Содержание документа на 90% не меняется. 10% - это новые скриншоты (имена файлов изображений останутся прежними), новое название продукта и изменения по части контактной информации.

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

Я себе вижу пока примерно так:
В текущую версию документации "Красного треугольника" добавить некие теги, в тех местах, где нужно упомянуть новое название "Синий квадрат", а в параметрах сборки документа указать, что требуется собрать документ только с тегами Красного треугольника или только с тегами Синего квадрата. Нечто подобное сделать и со скриншотами.

Как-то так.
Какие есть варианты?
Для редактирования и сборки использую TexStudio+MiKTex

 Профиль  
                  
 
 Re: Настраиваемая сборка многостраничного документа
Сообщение21.06.2016, 13:50 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
М.б. будет полезны логические конструкции LaTeX

http://tex.stackexchange.com/questions/5894/latex-conditional-expression

 Профиль  
                  
 
 Re: Настраиваемая сборка многостраничного документа
Сообщение11.07.2016, 18:02 


21/06/16
4
Решил (частично) свою задачу простым (как мне кажется) и возможно не очень изящным способом.

Все что нужно кастомизировать (имя продукта, названия каталогов установки и т.п.) вставляется в исходный текст через \newcommand.
Соответственно все эти команды описаны в отдельных файлах (назвал их branding.tex) + там же прописаны пути к каталогам со скриншотами для каждой версии продукта.

Итого: есть 2 файла брендинга, каждый содержит одинаковый набор команд (к примеру \productname), но значения разные (для гайда про треугольники эта команда вставляет "красный треугольник", для гайда про квадраты "Синий квадрат").
Сборка pdf происходит из главного файла проекта. Главный файл это "Инструкция по применению.tex", внутри через \input подключаются все необходимые файлы: преамбула, брендинг, и далее само содержание (каждый раздел в своем файле).

Автоматизировать сборку удалось следующим образом:
Создал 2 версии "главного файла": одна для сборки pdf "Красного треугольника", вторая для сборки "Синего квадрата". Отличаются они только подключенными файлами брендинга.

Сделал батник в котором прописал следующее:
1. Запускать pdflatex.exe на сборку главного файла Красный треугольник: Инструкция по применению.tex
2. Складывать готовый pdf в указанную папку.
3. Все файлы, кроме .pdf удалять после сборки
4. Пункты 1-3 повторить для файла Синий квадрат: Инструкция по применению.tex

Получается что 2 версии документа собираются по клику на один батник и pdf раскладываются по разным папкам.
При этом общее количество исходных файлов осталось прежним: при внесении изменений в документацию я буду работать с одной версией исходника (к примеру, системные требования описаны в отдельном файле requirements.tex. Его я и буду править, и он же подключается в 2 разных "главных файлах").

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

Может подскажет кто, можно ли как-нибудь определить свой параметр, который бы можно было указать при запуске pdflatex.exe?
Я бы видел нечто такое:
Код:
pdflatex.exe -synctex=1 -interaction=nonstopmode  "<путь к исходному файлу>" -некий параметр="<путь к подключаемому файлу брендинга>" -output-directory "<путь к каталогу для выгрузки pdf>"


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

 Профиль  
                  
 
 Re: Настраиваемая сборка многостраничного документа
Сообщение12.07.2016, 00:37 


13/07/14
257
Вот с этим ознакомьтесь, может быть ещё раз всё переделаете:
http://mrzool.cc/writing/typesetting-automation/
http://mrzool.cc/tex-boilerplates/

 Профиль  
                  
 
 Re: Настраиваемая сборка многостраничного документа
Сообщение12.07.2016, 13:20 


21/06/16
4
Спасибо, ознакомился.

Но это не совсем то, что нужно.
Ответ нашел вот тут

Там приведено аж 3 варианта решения задачи. Я использовал третий.
Получилось вот что:

Запускаем сборку батником, содержащим объявление переменной и указываем главный файл проекта:
Код:
c:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe" -synctex=1 -interaction=nonstopmode \def\brandflag{}\input{<имя главного файла>.tex}  -output-directory "<путь для выгрузки PDF>"


В главный файл(он теперь один на две версии документации) добавляем следующее:
Код:
\ifdefined\brandflag
\newcommand{\branding}[1]{\input{../../branding1}}
\else
\newcommand{\branding}[1]{\input{../../branding2}}
\fi


Далее в тексте главного файла вставляем в нужном месте \branding

Итого: можно сделать 2 батника:
-в одном указываем обычные параметры сборки и получаем документ с "дефолтным" брендингом
-в другом добавляем к ним определение флага брендинга и получаем документ с "кастомным" брендингом вместо дефолтного

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group