Готовим фотошаблоны печаток из kicad’a при помощи latex

Если вы начинали со Sprint Layout, то наверное помните диалог печати, который позволяет совместить на листе сколько-то копий одной и той же платы. К сожалению, одной единственной, или одного и того же слоя.
В kicad’е нет и этого. Если плата здоровая, а изготавливать с первого раза уже получается почти всегда, то это нормально. Но если вдруг надо изготовить сразу пачку мелких плат, или отпечатать сразу два слоя рядом… В общем, облом.
Посему, начал я думать над каким-нибудь костылем. kicad отлично выводит как в gerber (для производства) так и в postscript (для кустарного производства). Последнее-то мне и приглянулось.
Рамку смело выкидываем в реактор, она нам не понадобится.
После выведения в postscript мы имеем несколько .ps файликов, с каждым слоем. Каждый занимает A4 страницу.
Первым делом надо их перегнать во что-то удобоваримое. Сначала я перегнал их в png imagemagic’ом и увидел здоровенный холст на страницу размером. Не вариант, ибо bounding box оно не считает, и картинка выйдет во весь лист. На помощь пришла маленькая утилитка ps2eps. Она создает векторное eps изображение из постсрипта и обсчитывает тот самый bounding box. Иными словами, в LaTeX документ можно будет эту картинку воткнуть тупо при помощи заклинания

\includegraphics[scale=1]{jtagice-1.eps}

И это будет гарантировать масштаб 1:1, то есть если это статья для журнала, то читатели вашей научной статьи смогут ксерануть страничку на глянец и сразу сделать плату для своего домашнего реактора.

Теперь, остается только автоматизировать процесс.
Немного покумекав, я соорудил вот такой костыль.
В виде аргументов скармливаем:
1. Как обозвать проект в первой и единственной строчки текста.
2. Сколько раз изпользовать каждый из файлов
3. Сами файлики. Много их…

Скрипт требует наличие LaTeX’a, а в конце запускает окуляр. Последние строчки скрипта можно подкрутить по вкусу, но смысл изменится врядли. В идеале, конечно, можно было подкрутить оформление. Была мысля соорудить рамку по ЕСКД ради прикола, но она много места на листе занимает, так что отправилась она прямиком в реактор.

#!/bin/bash
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more detail
 
usage()
{
echo "mkpcb.  (c) 2011, Necromant"
echo "Generate a printable document out of several postscript images. "
echo "usage: mkpcb project_name n file1.ps file2.ps ..."
echo "where n is the number of times to use each file"
echo "Great for exporting PCBs from kicad for batch printout"
}
 
if [ "$#" -lt "3" ]; then
echo "Need moar args"
usage
exit 1
fi
 
if [ "$1" == "--help" ]; then
usage
exit 1
fi
 
gen_latex()
{
cat << EOF
\documentclass[a4paper,14pt]{report} %размер бумаги устанавливаем А4, шрифт 12пунктов
\usepackage[T2A]{fontenc}
\usepackage{extsizes}
\usepackage{listings}
\usepackage{longtable}
\usepackage{courier}
\usepackage{tabularx}
\usepackage{framed}
\usepackage[utf8]{inputenc}%включаем свою кодировку: koi8-r или utf8 в UNIX, cp1251 в Windows
\usepackage[english,russian]{babel}%используем русский и английский языки с переносами
\usepackage{amssymb,amsfonts,amsmath,mathtext,cite,enumerate,float} %подключаем нужные пакеты расширений
\usepackage[dvips]{graphicx} %хотим вставлять в диплом рисунки?
\graphicspath{{data/images}}%путь к рисункам
 
 
\makeatletter
\renewcommand{\@biblabel}[1]{#1.} % Заменяем библиографию с квадратных скобок на точку:
\makeatother
 
%\usepackage{geometry} % Меняем поля страницы
%\geometry{left=2cm}% левое поле
%\geometry{right=1.5cm}% правое поле
%\geometry{top=1cm}% верхнее поле
%\geometry{bottom=2cm}% нижнее поле
\usepackage[a4paper,left=30mm,right=15mm,top=25mm,bottom=25mm]{geometry}
 
\renewcommand{\theenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumi}{\arabic{enumi}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\theenumii}{.\arabic{enumii}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumii}{\arabic{enumi}.\arabic{enumii}.}% Меняем везде перечисления на цифра.цифра
\renewcommand{\theenumiii}{.\arabic{enumiii}}% Меняем везде перечисления на цифра.цифра
\renewcommand{\labelenumiii}{\arabic{enumi}.\arabic{enumii}.\arabic{enumiii}.}% Меняем везде перечисления на цифра.цифра
\renewcommand{\lstlistingname}{Листинг \No}
\renewcommand{\baselinestretch}{1.25}
 
%\addtocounter{chapter}{0} % не хочу нумеровать главы
%\setcounter{secnumdepth}{-1} % глубина оглавления
 
 
 
 
 
 
\begin{document}
EOF
echo "Plots for Project $1 ($2 pieces each)\\"
echo ""
echo ""
COUNT=$2
shift
shift
 
ps2eps $*
 
while [ "$COUNT" -gt "0" ]; do
for plot in $*; do
echo "\includegraphics[scale=1]{`basename $plot .ps`.eps}"
let COUNT-=1
#\includegraphics[scale=1]{2.eps}  
 
#%\includegraphics[scale=1]{jtagice-1.eps}  
#%\includegraphics[scale=1]{jtagice-1.eps}  
done 
done
 
echo "\end{document}"
}
 
 
gen_latex $* > output.tex
latex output.tex
okular output.dvi

Leave a Reply