KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You will soon meet a person who will play an important role in your life.
FrontPage › Picture환경

목차

1 picture 환경 만들기
2 picture 환경에서 그림 그리기
2.1 unitlength
2.2 put
2.3 linethickness
2.4 picture 환경의 시작
2.5 선분
2.6 문자
2.7 사각형
2.8
2.9 oval 또는 원의 일부분
2.10 bezier 곡선
2.11 여러번 두기(multiput)
2.12 예제
3 epic, eepic 패키지
3.1 PDFLaTeX과 eepic

1 picture 환경 만들기

picture 환경을 만드는 방법에도 두 가지가 있다. 하나는 막노동으로 picture 환경을 만드는 방법이고, 또 하나는 LaTeX picture 환경으로 export해주는 그림 도구(LaTeXCad, JPicEdt, LaTeXPix, TpX 등)로 picture 환경을 만드는 방법이다. 후자의 방법은 모눈 종이(그래프 용지)에 그림이 보이도록(WysiWyg으로) 그려 놓으면 이것을 LaTeX이 알 수 있는 언어(명령어와 환경)로 바꾸어 준다.

첫번째 방법에 대해서는 다음 문헌들을 참고할 수 있다.
  • [http]picture.pdf v1.1 (2007/04/11)

  • Leslie Lamport, LaTeX : A Document Preparation System, 2nd Edition, 1994, pp. 119-129, "7.1.1 The picture Environment"
  • Helmut Kopka & Patrick W. Daly, A GUIDE TO LaTeX, Third Edition, Addison Wesley, 1999, pp.151-166, "6.1 Drawing pictures with LaTeX"
  • lshort에도 picture 환경을 이용한 그림 그리기가 소개되어 있다. lshort-kr

2 picture 환경에서 그림 그리기

2.1 unitlength

\unitlength는 picture 환경의 기본 길이 단위가 된다. 이 값은 \setlength로 바꿀 수 있다. 기본값은 1pt(0.351 mm = 1/72.27 in)이다.

2.2 put

picture 환경 안에서 그림을 그리는 명령이다. 사용 형식은 \put(x,y){object}. 여기서 x, y는 그림 환경 안의 좌표값이다.

2.3 linethickness

\linethickness{길이값} 형식으로 수평선과 수직선의 굵기를 바꿀 수 있다. 그러나 이 명령은 대각선의 길이나 oval 박스의 corner 선의 굵기를 바꿔주지 않기 때문에 되도록이면 사용을 억제하고 기본값으로 주어진 \thicklines, \thinlines 두 개의 굵기만을 사용하는 것이 좋다.

2.4 picture 환경의 시작

\begin{picture}(30,10)
이것은 가로 30포인트, 세로 10포인트 박스를 그림 영역으로 설정하는 명령이다. 이 영역의 좌하귀가 좌표의 원점이 된다.
\begin{picture}(20,30)(5,10)
원점의 좌표는 통상 (0,0)이지만, 위와 같이 설정하여 이것을 바꿀 수도 있다.
\end{picture}
그림 환경의 끝이다. picture 환경 전체가 하나의 박스를 이룬다. 이 박스는 baseline이 박스의 아래면이고 height가 박스의 수직면이 된다. depth는 0이다.
그러므로 예컨대 10포인트 높이의 picture 환경 박스를 horizontal mode에서 놓으면 글자의 baseline과 일치하여 정렬된다. 다른 글자와 가지런하게 하려면 문자 박스의 depth만큼 그림 박스를 \lower 해주어야 할 것이다.

2.5 선분

\begin{picture}(30,10)
 \put(5,0){\line(2,1){22}}
\end{picture}

\put(x,y) 명령은 원점을 기준으로 (x,y)에 해당하는 좌표점에 인자를 놓는다. \line(m,n){d} 명령에서 (m,n)은 선분의 기울기로서 $$\frac{n}{m}$$의 기울기를 가지는 직선을 그린다. d 인자는 직선의 길이이다. 결과는 다음과 같다.

\begin{picture}(30,10)
 \put(5,0){\line(2,1){22}}
\end{picture}
선분의 끝을 화살표로 표현하려면 \line 대신 \vector를 쓸 수 있다.

\begin{picture}(30,10)
 \put(5,0){\vector(2,1){22}}
\end{picture}

\begin{picture}(30,10)
 \put(5,0){\vector(2,1){22}}
\end{picture}
선분의 두께를 나타내기 위해 \thicklines, \thinlines를 지시할 수 있다.

2.6 문자


picture 환경 내에서 문자를 쓸 수도 있다.
\begin{picture}(40,30)
 \put(5,6){\vector(2,1){22}}
 \put(0,0){\tiny 여기봐요}
 \put(16,16){\mbox{\tiny\sffamily KTUG 만세!}}
\end{picture}

\fbox{
\begin{picture}(40,30)
 \put(5,6){\vector(2,1){22}}
 \put(0,0){\tiny 여기봐요}
 \put(16,16){\mbox{\tiny\sffamily KTUG 만세!}}
\end{picture}
}

2.7 사각형

\framebox(x,y){stuff}
\makebox(x,y){stuff}
\dashbox{d}(x,y){stuff} or \dashbox(x,y){stuff}

\framebox(x,y)[t]{stuff} 형식으로 쓸 때 옵션인자는 t,b,r,l(각각 top, bottom, right, left)를 줄 수 있다. stuff이 사각형 안의 어느 위치에 오는지를 정하는 것이다. \dashbox의 첫번째 인자 d는 dash선의 길이를 가리킨다. 주지 않으면 1\unitlength이다.

\setlength{\unitlength}{1cm}
\begin{picture}(2.5,1)
  \thicklines
  \put(0,0){\framebox(1,1){굵은선}}
  \thinlines
  \put(1.5,0){\framebox(1,1){가는선}}
\end{picture}

\setlength{\unitlength}{1cm}
\begin{picture}(2.5,1)
  \thicklines
  \put(0,0){\framebox(1,1){굵은선}}
  \thinlines
  \put(1.5,0){\framebox(1,1){가는선}}
\end{picture}

2.8

\circle{d}
d는 원의 지름이다. 원을 그릴 때 사용하는 폰트의 제약 때문에 지름의 값은 15mm 정도를 넘지 못한다.[1]

\setlength{\unitlength}{1pt}
\begin{picture}(30,30)
 \put(15,15){\circle{2}}
 \put(15,15){\circle{4}}
 \put(15,15){\circle{10}}
\end{picture}

\setlength{\unitlength}{1pt}
\begin{picture}(30,30)
 \put(15,15){\circle{2}}
 \put(15,15){\circle{4}}
 \put(15,15){\circle{10}}
\end{picture}
----
  • [1] 프리앰블에 \usepackage{pspicture} 또는 \usepackage{eepic}를 넣으면 이 제약은 없어진다. See KTUGOperate:19530


2.9 oval 또는 원의 일부분

\usepackage{pspicture}          % preamble

\setlength{\unitlength}{1cm}
\begin{picture}(6,4)
\linethickness{0.1mm}
\thicklines
\put(2,4){\oval(6,8)[bl]}%bl=bottom left
\put(2,3){\oval(3,1.8)}
\thinlines
\put(3,2){\oval(3,1.8)}
\thicklines
\put(2,1){\oval(3,1.8)[tl]}
\put(4,1){\oval(3,1.8)[b]}
\put(4,3){\oval(3,1.8)[r]}
\put(3,1.5){\oval(1.8,0.4)}
\end{picture}
로 쓰면 "좌표 (2,4)를 중심으로 하고 가로 반지름(횡반경) 6 단위 세로 반지름(종반경) 8 단위인 oval(타원 비슷한 것)을 그리데 밑(b)에서 왼쪽(l)까지만 그려라"는 뜻이다. 만약 \oval(6,6)로 같은 수치를 쓰면 원(옵션 []을 넣지 않을 경우)이 된다. [t], [b], [l], [r]과 같이 하나만 쓰면 모두 반원이 된다. [bl], [br], [tl], [tr] 등은 모두 4분원이 된다.

\makeatletter
\input{pspicture.sty}          % preamble
\makeatother

\setlength{\unitlength}{1cm}
\begin{picture}(6,4)
\linethickness{0.1mm}
\thicklines
\put(2,4){\oval(6,8)[bl]}%bl=bottom left
\put(2,3){\oval(3,1.8)}
\thinlines
\put(3,2){\oval(3,1.8)}
\thicklines
\put(2,1){\oval(3,1.8)[tl]}
\put(4,1){\oval(3,1.8)[b]}
\put(4,3){\oval(3,1.8)[r]}
\put(3,1.5){\oval(1.8,0.4)}
\end{picture}

2.10 bezier 곡선

quadratic bezier 곡선을 그린다.
\qbezier(sx,sy)(mx,my)(tx,ty)
(sx,sy), (mx,my), (tx,ty)는 각각 시작점, 중간조절점, 끝점의 좌표이다.

다음 예제는 http://www.ursoswald.ch/ 에서 구할 수 있는 LaTeX Graphics 문서에 들어 있는 것으로 lshort에도 포함되어 있다.
\setlength{\unitlength}{1cm}
\begin{picture}(6,4)(-2.5,-1.5)
\put(-2.5,0){\vector(1,0){5}}
\put(2.7,-0.1){$\chi$}
\put(0,-1.5){\vector(0,1){3}}
\multiput(-2.5,1)(0.4,0){13}
{\line(1,0){0.2}}
\multiput(-2.5,-1)(0.4,0){13}
{\line(1,0){0.2}}
\put(0.2,1.4)
{$\beta=v/c=\tanh\chi$}
\qbezier(0,0)(0.8853,0.8853)(2,0.9640)
\qbezier(0,0)(-0.8853,-0.8853)(-2,-0.9640)
\put(-2.5,-1.5){\circle*{0.2}}
\end{picture}

\setlength{\unitlength}{1cm}
\begin{picture}(6,4)(-2.5,-1.5)
\put(-2.5,0){\vector(1,0){5}}
\put(2.7,-0.1){$\chi$}
\put(0,-1.5){\vector(0,1){3}}
\multiput(-2.5,1)(0.4,0){13}
{\line(1,0){0.2}}
\multiput(-2.5,-1)(0.4,0){13}
{\line(1,0){0.2}}
\put(0.2,1.4)
{$\beta=v/c=\tanh\chi$}
\qbezier(0,0)(0.8853,0.8853)(2,0.9640)
\qbezier(0,0)(-0.8853,-0.8853)(-2,-0.9640)
\put(-2.5,-1.5){\circle*{0.2}}
\end{picture}
Bezier 곡선의 중간조절점 좌표를 얻는 java script가 http://www.ursoswald.ch/ 에 있다.

2.11 여러번 두기(multiput)

\multiput(x,y)(p,q){n}{stuff}
이 명령을 실행한 결과는 stuff$$(x+kp,\;y+kq);\;\;k=0,1,\ldots,n-1\;\;$$ 좌표 위치에 여러번 그린다.
\setlength\unitlength{1truecm}
\begin{picture}(10,0.7)
  \put(0,0){\line(1,0){10}}
  \multiput(0,0)(1,0){11}{\line(0,1){0.7}}
  \multiput(0,0)(0.5,0){20}{\line(0,1){0.5}}
  \multiput(0,0)(0.1,0){100}{\line(0,1){0.3}}
\end{picture}
\setlength\unitlength{1truecm}
\begin{picture}(10,0.7)
  \put(0,0){\line(1,0){10}}
  \multiput(0,0)(1,0){11}{\line(0,1){0.7}}
  \multiput(0,0)(0.5,0){20}{\line(0,1){0.5}}
  \multiput(0,0)(0.1,0){100}{\line(0,1){0.3}}
\end{picture}

2.12 예제

이 예제는 오쿠무라, 「LaTeX2e美文書作成入門」의 p.310에 있는 예이다.
\newcommand{\BOOK}{{\normalsize
 \begin{picture}(19.3,13)
  \put(1.1,-2){\line(0,1){10}}
  \put(.5,6.5){$\frown$}
  \put(.5,-2.5){$\frown$}
  \put(.5,-3.4){\small$\frown$}
  \put(9.65,-2){\line(0,1){10}}
  \put(8.65,-2){\line(1,0){2}}
  \put(9,6.5){$\frown$}
  \put(9,-2.5){$\frown$}
  \put(9.8,-3.4){\small$\frown$}
  \put(18.2,-2){\line(0,1){10}}
 \end{picture} }}

3 epic, eepic 패키지

epic, eepic 패키지는 picture 환경을 확장하여 LaTeX에 기본적으로 정의된 것보다 더 세밀한 그림을 그릴 수 있게 해준다.

3.1 PDFLaTeX과 eepic

PDF / PDFLaTeX과 picture 환경


목차


eepic 패키지는 PDFLaTeX으로 처리되지 못한다. 즉, PDFLaTeX은 eepic \special 코드를 이해하지 못한다. 이 문제를 해결하려면, PDFLaTeX을 실행할 때는 eepic 대신 eepicemu 패키지를 로드하는 방법이 있다.
\usepackage{ifpdf}
\ifpdf
  \usepackage{epic,eepicemu}
\else
  \usepackage{epic,eepic}
\fi



XYPic에 관한 절은 새 페이지를 만들고 옮깁니다. XYPic은 Picture 환경과 아무 상관없는 것으로 생각됩니다.

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2007-05-21 14:47:49
Processing time 0.0689 sec