LaTeX спецификация в SolidWorks

Материал из Xgu.ru

(Перенаправлено с LaTex спецификация в SolidWorks)
Перейти к: навигация, поиск

Содержание


[править] Кратко о LaTeX

Основная идея использования пакетов LaTeX состоит в разделении содержимого и описания форматирования. Другими словами, стилевой файл (в нашем случае он будет рисовать форматку, отвечать за шрифты и т.п.) создается единожды. Далее, все что требуется – это с помощью скрипта сбрасывать отсортированный перечень названий и "компилировать" вариант спецификации для печати (пример - Specification.pdf 60kB).

Преимущества:

  • имеются готовые решения (см. пример ниже);
  • используется язык разметки, т.е. представление исходных данных абсолютно формализовано;
  • при желании весь процесс можно полностью автоматизировать (без глубоких знаний программирования);
  • использование титульной и последующих рамок листа в одном документе без каких-либо дополнительных переносов/перестановок строк;
  • сквозная нумерация, заполнение штампа и пр.
  • и софт и стилевые файлы распространяются бесплатно;
  • конечный результат представляется в формате *.pdf (есть возможность получить *.xml, *.html и т.п.).

Недостатки:

  • придется устанавливать и изучать новые пакеты;
  • весьма трудоемкое создание стилевых файлов (но надо ж кому-то один раз потрудиться).

[править] Небольшой пример

Все описанное ниже является, скорее, общей последовательностью. Хотите знать подробности – читайте документацию по LaTeX.

1) И так, для начала идем на www.miktex.org, качаем и ставим MiKTeX – Windows-аналог LaTex. Версия любая и вполне достаточно минимальной базовой комплектации – в крайнем случае, лучше доставить недостающие пакеты, чем качать все CD. Вопросы установки и настройки самого MiKTeX выходит за пределы пособия, посему на них мы останавливаться не будем.

2) Пакет eskdx для оформления документации согласно ЕСКД (и не только спецификаций) разработал Konstantin Korikov. Нас будут интересовать стилевые файлы, которые лежат в папке unpacked архива.

3) Создаем папку, например D:\Specification, куда копируем упомянутые выше стилевые файлы. В этой же папке делаем 3 новых текстовых файла (названия произвольные):

  • Main.tex
  • Content.tex
  • GetSpecification.bat

Файл Main.tex содержит информацию для заполнение штампа спецификации (полный перечень см. описание пакета) и ссылку \include{Content} на файл с содержимым (слово в фигурных скобках должно совпадать с названием файла - в данном случае Content.tex).

   % Содержимое файла Main.tex
   \documentclass[russian,cp1251]{eskdtab}
   \usepackage{eskdspec}
   \usepackage[T2A]{fontenc}
   \usepackage[unicode]{hyperref}
   \usepackage{longtable}
   \usepackage{array}
   \ESKDdepartment{Акционерное общество}
   \ESKDcompany{завод имени И. А. Лихачева}
   \ESKDclassCode{31 1398}
   \ESKDtitle{Форсунка Ф-750}
   \ESKDdocName{Технические условия}
   \ESKDsignature{АБВГД ХХХХХХХХ}
   \ESKDauthor{Петров~И.~И.}
   \ESKDchecker{Гусев~И.~И.}
   \begin{document}
   \selectlanguage{russian}
   \include{Content} 
   \end{document}

Файл Content.tex содержит следующие строки:

   \begin{ESKDspecification}
   А2 & & 1 & ЧМ.6.104.01 & Корпус & 1 & \\
   А4 & & 2 & ЧМ.6.104.02 & Седло & 1 & \\
   % .................................
   \end{ESKDspecification}

Согласно ГОСТ 2.108-68 в спецификации должно быть 7 колонок:

Формат Зона Позиция Обозначение Наименование Количество Примечания
А2 - 1 ЧМ.6.104.01 Корпус 1 -
А4 - 2 ЧМ.6.104.01 Седло 1 -

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

Это все. В файле GetSpecification.bat пишем команды перехода в рабочую папку (1 и 2-я строка), компилируем файл (3-я строка) и открываем его программой, установленной по умолчанию для просмотра *.pdf (4-я строка):

   d:
   cd D:\Specification
   pdflatex Main.tex
   Main.pdf

После выполнения GetSpecification.bat получим нечно вроде:

SpecificationExample.PNG

В случае, когда по каким-либо причинам таблица не устраивает, можно создать собственную:

   % 
   \begin{longtable}{p{10mm}| p{5mm}| p{30mm}| p{80mm}| p{10mm}| p{20mm}}
   А2 & & 1 & ЧМ.6.104.01 & Корпус & 1 & \\
   А4 & & 2 & ЧМ.6.104.02 & Седло & 1 & \\
   % .................................
   \end{longtable}

где p{10mm} - наличие колонки шириной 10мм, а символ | - создание вертикальной линии по правому (в данном случае) краю колонки.

[править] Скрипт для формирования исходной информации

Ниже приведен элементарный скрипт (VBA Excel) для создания форматированного Content.tex по исходному *.xls файлу.

   Sub InsertString(row As Long, sim As String)
   Sheets("Лист2").Range(Cells(row, 1), Cells(row, 4)) = "&"
   Sheets("Лист2").Cells(row, 5) = sim
   Sheets("Лист2").Cells(row, 6) = "&"
   Sheets("Лист2").Cells(row, 7) = "\\"
   End Sub
   Sub GetSpecification()
   Dim r As Variant
   Dim ID As Variant
   'Ввод исходных данных:
   '1) заполняем массив; в скобках следует указать диапазон ячеек
   '   с исходными данными, например "A1:E18"
   Set r = Sheets("Лист1").Range("A1:E18")
   '2) определяем массив идентификаторов (должны совпадать с ID заданными в SolidWorks)
   ID = Array("a", "b", "c")
   'Выполняем сортировку, например группируем типы элементов (детали, сборки и т.д.) -- Key1 по колонке №1
   'и в пределах каждой группы по названию -- Key2 по колонке №3
   'сортировка по возростанию -- xlAscending
   r.Sort Key1:=r.Columns(1), Order1:=xlAscending, Key2:=r.Columns(3), Order2:=xlAscending        
   Dim i, j, k As Long
   Sheets("Лист2").Cells(1, 1) = "\begin{ESKDspecification}"
   k = 2
   For i = 0 To UBound(ID)
       Call InsertString(k, "&")                                                           'вставка в пустой строки
       If i = 0 Then Call InsertString(k + 1, "\hfil \underline{Сборочные единицы}\hfil")  'вставка названия раздела
       If i = 1 Then Call InsertString(k + 1, "\hfil \underline{Детали} \hfil")            'вставка названия раздела
       If i = 2 Then Call InsertString(k + 1, "\hfil \underline{Стандартные детали} \hfil")'вставка названия раздела
       If i = 3 Then Call InsertString(k + 1, "\hfil \underline{Материалы} \hfil")         'вставка названия раздела
       Call InsertString(k + 2, "&")                                                       'вставка в пустой строки
       k = k + 3
       For j = 1 To r.Rows.Count
           If r(j, 1) = ID(i) Then
               'заполняем построчно:
               Sheets("Лист2").Cells(k, 1) = "&"           'Формат
               Sheets("Лист2").Cells(k, 2) = "&"           'Зона
               Sheets("Лист2").Cells(k, 3) = r(j, 2) & "&" 'Позиция
               Sheets("Лист2").Cells(k, 4) = r(j, 4) & "&" 'Обозначение
               Sheets("Лист2").Cells(k, 5) = r(j, 3) & "&" 'Наименование
               Sheets("Лист2").Cells(k, 6) = r(j, 5) & "&" 'Количество
               Sheets("Лист2").Cells(k, 7) = "\\"          'Примечание
               k = k + 1
           End If
       Next j
   Next i
   Sheets("Лист2").Cells(k, 1) = "\end{ESKDspecification}"
   'сохраняем файл
   Sheets("Лист2").SaveAs Filename:="D:\Works\SolidWorks\Specification\Content.tex", FileFormat:=xlTextWindows
   End Sub