다양한레이텍응용방법 목봉균 2017. 2. 11 2017 한국텍학회학술대회
L A TEX 의응용범위 레이텍코드는 plain text 다양한외부프로그램, 프로그래밍언어와자연스럽게섞을수있다. 안되는거빼고다된다. 1
우편주소록만들기
우편주소록 Excel 데이터를이용한우편주소록 \guest{ 대전시유성구무슨로어쩌구아파트 }% {101 동 1101 호아저씨귀하 }% { 우 ) 111-111} 2
우편주소록 (guest 명령 ) \newcommand{\guest}[3]{% \fbox{ \begin{minipage}{.45\textwidth} \begin{flushright} \vskip 1em \Large{% #1\\ #2\\ 우 ) #3 } \end{flushright} \vskip 1em \end{minipage} } \vskip 1em } 3
우편주소록 ( 이걸반복하면이렇게 ) 4
프리젠테이션
추천테마 Blackboard Metropolis 5
Blackboard 테마
Metropolis 테마 Metropolis A modern beamer theme Matthias Vogelgesang January 23, 2017 Center for modern beamer themes
PythonTEX
소개 TEX 코드안에 Python 코드를삽입한다. 삽입한 Python 실행결과를다시 TEX 문서에반영한다. 3party Python 모듈을사용할수있다. 참고 A Gentle Introduction to PythonTEX 1 1 https://tug.org/tug2013/slides/mertz-a_gentle_introduction_to_ PythonTeX.pdf 8
컴파일방법 1. xelatex hello 2. pythontex3 hello.pytxcode 3. xelatex hello 9
PythonTEX 예제코드 \documentclass{article} \usepackage{pythontex} \begin{document} \begin{pyconsole} print("hello Python") \end{pyconsole} \begin{pyconsole} def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a \end{pyconsole} \begin{pycode} def fib(n): a, b = 0, 1 for i in range(n): a, b = b, a + b return a \end{pycode} \begin{verbatim} $F_{100} = \py{fib(100)}$ \end{verbatim} $F_{100} = \py{fib(100)}$ \end{document} 10
결과 >>> print("hello Python") Hello Python >>> def fib(n):... a, b = 0, 1... for i in range(n):... a, b = b, a + b... return a $F_{100} = \py{fib(100)}$ F 100 = 354224848179261915075 11
LuaTEX+ Rest API
소개 Lua 스크립트로 Apple 의 itunes 사이트에서노래정보를 JSON 으로가져와서파싱한다. 파싱한정보를이용해서앨범아트를파일시스템에저장한다. PDF 를만들고나면앨범아트를삭제한다. 12
lua 코드 ( 일부 ) local http = require('socket.http') local url = 'https://itunes.apple.com/search?term=' local json = require('dkjson') itunes = {} function itunes.tracks (name) local b, c, h = http.request(url..name) local data, pos, err = json.decode(b, 1, nil) return data end function itunes.save_artwork(artist) local response = itunes.tracks(artist) if type(response) == 'nil' then print('error') return end results = response.results resultcount = response.resultcount for k, v in pairs(results) do local b, c, h = http.request(v.artworkurl100) local img = io.open(itunes.tmp_img_name(k), 'wb') img:write(b) img:close() end end function itunes.tmp_img_name(index) 13
결과 K- POP!! Major Lazer $ 21.89 Phineas and Ferb: Summer Belongs... Stacy s Cousins $ 4.99 Kpop - Single Vintage Disobedience $ 0.99 J-Rock, J-Punk, J-Ska, J-Pop xthrowxdownx $ 0 DADDY (feat. CL) PSY $ 1.99 Osaka s J-Pop Tsakura $ 0 House J-pop Covers 3 Baby House... Elequte $ 9.9 Gaijin Kanpai - Japanese Music... Gaijin Kanpai $ 0 I Don t Need a Man miss A $ 1.49 This Week in Kpop This Week in Kpop $ 0 14
Python + Mako + JSON + EXIF
소개 일기를 JSON 으로작성 ( 날짜, 날씨, 제목, 내용, 그림파일 ) Python 으로이미지의 EXIF 정보를추출 Mako 2 를이용해서 tex 코드를생성 2 파이썬템플릿라이브러리 15
JSON { "day01": { "date": "1월 27일 ", "weather": " 구름 ", "title": " 상사병 ", "body": " 가만히앉아만있어도내심장은너무떨리고멍하니앉아서온종일깊은한숨만내쉬고주위에사람들자기일아 "image": { "name": "IMGP0370", "desc": " 빅토리아피크 " } }, "day02": { "date": "1월 28일 ", "weather": " 맑음 ", "title": " 꿈에 ", "body": " 어떤말을해야하는지나너무가슴이떨려서우리옛날그대로의모습으로만나고있네요이건꿈인걸알지만지 "image": { "name": "IMGP0590", "desc": " 침사추이 " } }, "day03": { "date": "1월 29일 ", "weather": " 비 ", "title": " 미장원에서 ", "body": " 이제난오늘부터새로운사람이되죠거울속에비친내모습이낯서네요그대날떠나간후많이도울었었죠그긴 "image": { "name": "IMGP0880", 16 "desc": " 드래곤스백 "
Python # -*- coding: utf-8 -*- import os import json from collections import OrderedDict import exifread from mako.template import Template from PIL import Image, ExifTags weather = { ' 구름 ': {'code': '`^^^^f000\\relax', 'color': 'gray'}, ' 비 ': {'code': '`^^^^f008\\relax', 'color': 'olive'}, ' 맑음 ': {'code': '`^^^^f002\\relax', 'color': 'orange'} } mytemplate = Template(filename='diary.tex', input_encoding='utf-8') data = json.load(open('hongkong.json'), object_pairs_hook=ordereddict) for k, v in data.items(): image = v.get('image') portrait = False name = image.get('name') + '.jpg' image_path = os.path.join('images', name) with Image.open(image_path) as f: width, height = f.size if height > width: portrait = True 17
결과
결과 1 월 28 일 꿈에 어떤말을해야하는지나너무가슴이떨려서우리옛날그대로의모습으로만나고있네요이건꿈인걸알지만지금이대로깨지않고서영원히잠잘수있다면날안아주네요예전모습처럼그동안힘들었지나를보며위로하네요내손을잡네요지친맘쉬라며지금도그대손은그때처럼따뜻하네요혹시이게꿈이란걸그대가알게하진않을거야내가정말잘할거야그대다른생각못하도록그대이젠가지마요그냥여기서나와있어줘요나도깨지않을게요이젠보내지않을거에요계속나를안아주세요예전모습처럼그동안힘들었지나를보며위로하네요내손을잡네요지친맘이젠쉬라며지금도그대손은그때처럼따뜻하네요대답해줘요그대도나를나만큼그리워했다고고마워요사랑해요나괜찮아요다신오지말아요 그림 2: 침사추이 2017:01:29 17:46:28에 smc PENTAX-DA 18-135mm F3.5-5.6 ED AL[IF] DC WR로찍음 ISO400 Lense[18, 135, 7/2, 28/5]
마치며 Lua, Python, Git, Database, Excel, JSON, 정말다양한것들과어울릴수있습니다. 20