Dbd9008f86c426eb255aadb7fb0b9769 normal

年賀状の宛名をtex + lispで作る

  • 6
    Stock
  • 0
    Comment
Stock this post
  • furushchev
  • hide5stm
  • hmikisato
  • jabropt
  • JuanitoFatas
  • g000001

いろいろと改変は必要だったけど(特に文字コード) べつにとくに大したことはなかった。
slurpのコードは借りてきた。

(ql:quickload :alexandria)
(ql:quickload :inferior-shell)
(ql:quickload :cl-csv)
(ql:quickload :osicat)
(in-package :cl-user)
(use-package :alexandria)
(use-package :inferior-shell)
(use-package :cl-csv)
(use-package :osicat) ;; 2 conflict

;; http://www.ymeme.com/slurping-a-file-common-lisp-83.html

(defun slurp (stream)
  (let ((seq (make-array (file-length stream)
                         :element-type 'character
                         :fill-pointer t)))
    (setf (fill-pointer seq) (read-sequence seq stream))
    seq))

(defun read-file-to-string (path)
  (with-input-from-file (s path)
    (slurp s)))

;; http://homepage2.nifty.com/domae/tex/atena.html
;; 古いので sjis + DOS改行コード
;; 
;; atena.sty --> dos2unix , nkf --in-place -J -w8
;; 

(defun take-tex ()
  (read-file-to-string "atena/2014.tex"))

(defun format-tex (data s)
  (format s (take-tex) data))

(format-tex '(("なかじま" "123-0348" "千葉東京ディズニーランド")
             ("なかじま2" "124-0348" "北海道札幌1-1-1-1-1-1-1"))
             t)

(defun %make-pdf (data)
  (with-open-file (s "atena/temp.tex"
                     :direction :output
                     :if-does-not-exist :create
                     :if-exists :supersede)
    (format-tex data s))
  (run/s `(progn (cd "atena")
                 (platex "temp.tex")
                 (dvipdfm "temp.dvi")
                 (mv "temp.pdf" "../2014-atena.pdf"))
         :show t))

(%make-pdf '(("なかじま" "123-0348" "千葉東京ディズニーランド")
             ("なかじま2" "124-0348" "北海道札幌1-1-1-1-1-1-1")))


(defun make-pdf (csv-path)
  (%make-pdf (csv-data csv-path)))

(defun csv-data (path)
  (with-input-from-file (s path)
    (read-csv s)))

(csv-data "addresses.csv")

;; なかやまきんに君,000-0000,札幌1-1-1-1-1-1

(make-pdf "addresses.csv")

以下 2014.tex

\documentclass{jarticle}
\usepackage[hagaki,nenga]{atena}
\usepackage{graphicx}

\begin{document}

%=======差出人設定================
\sasidasinin{浅井 政太郎}{000-0000}{東京都目黒区駒場3-8-1 東京大学駒場キャンパス}

%=======表書き開始==============
\begin{atena}

~:{
\personal{~a}{~a}{~a}
~}

\end{atena}
\end{document}