PIC(1)

명칭
pic - troff 와 TeX 로 이용하는 픽쳐 컴파일러

서식
pic [ -nvCSU ] [ filename . . . ]
pic -t [ -cvzCSU ] [ filename . . . ]

해설

본메뉴얼에서는, groff 문서 포맷 시스템의 일부이다 GNU 버젼의 pic 에 붙어 기술합니다. pic (은)는, troff 인가 TeX 의 입력 파일에 파묻힌 픽쳐의 기술을 troff 인가 TeX 를 해석할 수 있는 명령로 변환합니다. 픽쳐는 .PS 그리고 시작되는 행으로부터 개시되어 .PE 그리고 시작되는 행으로 종료합니다. .PS (와)과 .PE 에 좁아질 수 있었던 area 이외는, 변경하지 않고 소 통합니다.

.PS (와)과 .PE 매크로의 적절한 정의는 유저에게 맡고 있습니다. 사용하고 있다 매크로 패키지가 적당한 정의를 제공하지 않는 경우 (예를 들어, 낡은 버젼의 -ms 매크로의 경우), -mpic 매크로로부터 꺼낼 수가 있습니다. -mpic 매크로에서는 픽쳐 (은)는 중앙 공격이 됩니다.

옵션
인수를 수반하지 않는 옵션은 - 의 후에 정리해 계속할 수가 있습니다. 특별한 옵션 -- (은)는, 옵션의 최후를 의미합니다. 파일명의 강 에 이용된다 - (은)는, 표준 입력을 의미합니다.

-C  .PS (이)나 .PE 의 후에 공백이나 개행 이외의 캐릭터가 와도, 그것을 .PS (이)나 .PE 이다고 해석합니다.

-S  보다 안전한 모드; sh 명령을 실행하지 않습니다. 신용할 수 없는 입력을 처리하는 경우에 편리합니다. (디폴트로 유효합니다)

-U  안전하지 않은 모드; 디폴트 옵션 -S (을)를 지웁니다.

-n  groff 의 troff 에 대한 독자 확장을 이용하지 않습니다. 후 처리에 독자 확장을 해석 할 수 없는 것을 이용할 때, 이 옵션을 지정합니다. 확장에 대해서는, groff_out(5) 에 기술되고 있습니다. -n 옵션은 또, troff 모드에 대해, 점을 찍기 위해서(때문에) pic 하지만 길이 0 의 직선을 사용하지 않게 합니다.

-t  TeX 모드입니다.

-c  보다 tpic (와)과의 호환성이 높은 처리를 실시합니다. 본옵션은 자동적으로 -t 옵션도 설정합니다. \ 그리고 시작되는 행이 투과적으로 출력되는 것이 없어져 . 그리고 시작되는 행은 선두의 . (을)를 \ 에 옮겨놓습니다. .ps 그리고 시작되는 행은, 특 별도인 취급을 받습니다. 즉, 정수의 옵션을 계속할 수가 있어 그것 (은)는 직선의 굵기 (펜의 사이즈)를 1000 분의 1 인치로 가리킵니다. 옵션이 생략 되었을 경우는, 직 전의 직선의 굵기에 되돌립니다. 직선의 굵기의 초기치는 1000 분의 8 인치입니다. 이와 같이 지정된 직선의 굵기는, thickness 속성, 또는, linethick 변수에 의해 부가 아닌 값이 설정되어 있지 않은 경우에게만 유효합니다.

-v  버젼 번호를 표시합니다.

-z  TeX 모드에 대해, 길이 0 의 직선을 이용해 점을 묘화 합니다.

다른 버젼의 pic 그리고 서포트되고 있는 이하의 옵션은 무시됩니다.

-D  모든 직선을 \D escape sequence에 의해 묘화 합니다. pic (은)는, 항상 이 동작을 실시합니다.

-T dev
    troff 의 디바이스 dev (을)를 위한 출력을 실시합니다. pic 하지만 troff 에 출 힘 하는 내용은 디바이스비의존이므로, 본옵션은 불필요합니다.

사용법
본절에서는 GNU pic (와)과 오리지날 버젼의 pic (와)과의 차이만을 설명합니다. 이러한 차이의 상당수는 새로운 버젼의 Unix pic 에도 들어맞읍니다.

  TeX 모드

TeX 모드는 -t 옵션에서 유효하게 됩니다. TeX 모드에서는, 각 픽쳐를 위해서(때문에) \graph (으)로부터 불려 가는 vbox 를, pic (은)는 정의합니다. 예를 들면 이하와 같이 해, 자기 자신으로 vbox 를 표시할 필요가 있습니다.

    \centerline{\box\graph}

실제, vbox 는 높이가 0 이기 때문에, 이 표현에서는 픽쳐의 건성간이 픽쳐아래의 공간보다 약간 커집니다.

    \centerline{\raise 1em\box\graph}

(은)는 이 문제를 피합니다.

TeX 드라이버로 tpic 스페셜 버젼 2 를 서포트하는 것을 사용할 필요가 있습니다.

\ 그리고 시작되는 행은 투과적으로 통해지는; 단일의 % 하지만 줄 끝에 추가되어 바람직하지 않는 공백이 나오는 것을 막습니다. 이 기능을 사용해, 안전하게 폰트를 변경하거나 \baselineskip 의 값을 변경할 수 있습니다. 이 방법 이외로 실행하면(자), 바람직하지 않은 결과가 되겠지요; 각자의 리스크로 실행해 주세요. 피리어드로 시작되는 행은 특별히는 다루어지지 않습니다.

  명령

for variable = expr1 to expr2 [by [*]expr3] do X body X
    variable (을)를 expr1 (으)로 설정합니다. variable 의 값이 expr2 이하의 사이, body (을)를 실행해 variable (을)를 expr3 만 증가시킵니다; 만약 by 하지만 지정되지 않는 경우, variable 의 증분은 1 입니다. 만약 expr3 의 전에 * 하지만 지정되었을 경우, variable 에는 expr3 하지만 걸 수 있습니다. X 하 body 에 존재하지 않는 임의의 캐릭터를 사용해 상관하지 않습니다.

if expr then X if-true X [else Y if-false Y]
    expr (을)를 평가합니다; 만약 비 0 이라면, if-true (을)를 실행합니다, 그렇지 않으면 if-false (을)를 실행합니다. X 하 if-true 에 존재하지 않는 임의의 캐릭터이며, Y 하 if-false 에 존재하지 않는 임의의 캐릭터입니다.

print arg. . .
    인수를 결합해, 표준 에러 출력에 1 행으로 출력합니다. 각 arg (은)는 식, 위치, 텍스트의 언젠가일 필요가 있습니다. 디버그에 유효합니다.

command arg. . .
    인수를 결합해, troff 또는 TeX 에 1 행으로서 건네줍니다. 각 arg (은)는 식, 위치, 텍스트의 언젠가일 필요가 있습니다. 이것은 . (이)나 \ 그리고 시작되는 행과 같은 효과가 있습니다만, 값이나 변수를 그대로 통합니다.

sh X command X
    command (을)를 쉘에 건네줍니다. X 하 command 안에 존재하지 않는 임의의 캐릭터입니다.

copy "filename"
    filename (을)를 파일의 이 정도치에 묻습니다.

copy ["filename"] thru X body X [until "word"]

copy ["filename"] thru macro [until "word"]
    이 구조는 body (을)를 filename 의 각 행에 대해서 1 번씩 실행합니다. 행은 공백에서 단락지어진 말에 분할되어 body 안의 $i 다만 i (은)는 1 에서 9 까지는, 행의 i 번째의 말에 치환됩니다. filename 하지만 지정되지 않는 경우, 행은 현재의 행으로부터 .PE 의 행까지가 사용됩니다. until 마디가 지정되면(자), 행의 최초의 말이 word 의 행까지가 읽힙니다; 그 행은 버려집니다. X 하 body 에 포함되지 않는 임의의 캐릭터입니다. 예를 들면

        .PS
        copy thru % circle at ($1,$2) % until "END"
        1 2
        3 4
        5 6
        END
        box
        .PE

    (은)는 이하 등가입니다.

        .PS
        circle at (1,2)
        circle at (3,4)
        circle at (5,6)
        box
        .PE

    각 행에 대해서 실행되는 명령은, thru 의 인수로서 매크로명을 주는 것으로, 벌써 정의되고 있는 매크로를 취할 수 있습니다.

reset

reset variable1,  variable2 . . .
    기정도리의 변수 variable1, variable2 . . . (을)를 기본값에 리셋트 합니다. 인수가 지정되지 않는 경우, 모든 기정도리의 변수는 기본값에 리셋트 됩니다. 또 scale 에 값을 정의하면(자), 치수를 관리하는 모든 기정도리의 변수는, 그러한 기본값에 새로운 scale 를 건 것이 됩니다.

plot expr ["text"]
    이것은 텍스트 오브젝트이며, text (을)를 포맷으로서 expr (을)를 인수로서 sprintf 를 이용해 구성합니다. text 하지만 생략 되었을 경우에는 포맷 캐릭터 라인 "%g" 하지만 사용됩니다. 통상의 텍스트 오브젝트와 같이 속성을 지정할 수 있습니다. 적절한 포맷 캐릭터 라인을 지정하도록(듯이) 매우 조심할 필요가 있습니다; pic (은)는 캐릭터 라인에 관해서 매우 한정된 체크 밖에 실시하지 않습니다. 이 사양은, sprintf (을)를 고려해 비판되고 있습니다.

variable:=expr
    이것은 = (와)과 같습니다만, variable 하지만 이미 정의되어 있지 않으면 안되어, variable 하지만 변경되는 경우는, 이것이 정의된 최안쪽 블록이 아니면 안됩니다. (이것에 대해서 = (은)는, variable 가 아직 정의되어 있지 않은 경우에는 현재의 블록에 대해 정의해, 현재의 블록에 두어 값을 변경합니다. )

    X anything X

그렇다고 하는 형식에 대해서는

    { anything }

도 용서됩니다. 이 경우, anything 에는 { (와)과 } 하지만 밸런스 해 등장할 필요가 있습니다. 캐릭터 라인에 X 하지만 포함되는 경우, { (와)과 } 의 밸런스가 나쁜 경우에 대응합니다.

  식
식의 문법이 조금 확장되었습니다:

x ^ y (지수)
sin(x)
cos(x)
atan2(y, x)
log(x) (base 10)
exp(x) (base 10, ie 10x)
sqrt(x)
int(x)
rand() (0 에서 1 까지의 난수를 돌려준다)
rand(x) (1 으로부터 x 까지의 난수를 돌려준다; 권유받지 않습니다)
srand(x) (난수의 종을 설정한다)
max(e1, e2)
min(e1, e2)
!e
e1 && e2
e1 || e2
e1 == e2
e1 ! = e2
e1 >= e2
e1 > e2
e1 <= e2
e1 < e2
"str1" == "str2"
"str1" ! = "str2"

애매함을 피하기 위해서(때문에), 캐릭터 라인의 비교식은 있는 문맥에 대해 괄호로 괄필요가 있습니다

  그 외의 변경

단순한 식 expr (은)는 속성으로서 수리 가능합니다; 이것은 dir expr (와)과 같고, dir (은)는 현재의 방향입니다. 예를 들면

    line 2i

(은)는 2 인치의 길이의 선을 현재의 방향에 그립니다.

픽쳐의 최대의 폭과 높이는 변수 maxpswid, maxpsht 에 의해 지정됩니다. 초기치는 8.5 및 11 입니다.

수를 나타내는데 과학기술적 표기가 가능합니다. 예를 들면
    x = 5e-2

텍스트의 속성은 조합하는 것이 가능합니다. 예를 들면
    "foo" above ljust
(은)는 올바릅니다.

블록이 검사되는 깊이에는 제한은 없습니다. 예를 들면
    [A: [B: [C: box ]]] with . A.B.C.sw at 1,2
    circle at last []. A.B.C
(은)는 수리 가능합니다.

원호는 컴퍼스 포인트를 가져, 원호가 부분이 되는 것 같은 엔으로부터 결정됩니다.

엔과 원호는 점선이나 파선으로 쓸 수가 있습니다. TeX 모드에서는 스프라인을 점선이나 파선으로 쓸 수가 있습니다.

박스의 모퉁이를 둥글게 할 수 있습니다. rad 속성은, 모퉁이를 구성하는 1/4 엔의 반경을 지정합니다. rad, diam 속성이 주어지지 않는 경우, boxrad 하지만 반경으로서 사용됩니다. 초기치에서는 boxrad (은)는 값 0 입니다. 모퉁이의 둥근 박스는 점선이나 파선으로 쓸 수가 있습니다.

.PS 행은 2 번째의 인수로서 픽쳐의 최대의 높이를 지정할 수 있습니다. 폭으로서 0 이 지정되었을 경우에는, 픽쳐의 슬캘링 팩터의 계산에 대해 폭은 무시됩니다. GNU pic (은)는 항상 수평 방향과 수직 방향 모두 같은 축척으로 슬캘링 하고 있는 것에 주의해 주세요. 이것은 높이가 지정되었을 경우에 수평 방향과 수직 방향을 같은 축척으로 슬캘링 하지 않는다 DWB 2.0 pic (와)과 다릅니다.

텍스트 오브젝트는 각각 관련 지을 수 있던 안보이는 박스를 가지고 있습니다. 텍스트 오브젝트의 컴퍼스 포인트는 이 박스에 의해 결정됩니다. 오브젝트에 관련 지을 수 있었던 암시적인 움직임도 이 박스에 의해 결정됩니다. 이 박스의 치수는 width, height 속성으로부터 정해집니다; 만약 width 속성이 주어지지 않은 경우는 폭은 textwid 됩니다; 만약 height 속성이 주어지지 않은 경우는 높이는 textht 됩니다. 초기치에서는 textwid, textht (은)는 값 0 입니다.

쿼츠 된 텍스트가 사용되는 경우,

    sprintf("format", arg,...)

그렇다고 하는 형식의 식을 사용 가능합니다; 이것은 인수를 format 에 따라 정형한 것을 출력합니다. format 하 printf(3) 에 기술되고 있는 캐릭터 라인이며, 주어지는 수 및 인수에 적절한 것일 필요가 있습니다. e, f, g, % 포맷 캐릭터만 사용 가능합니다.

오브젝트를 묘화 할 때에 사용하는 선의 굵기는 linethick 변수로 제어 가능합니다. 이것은 선의 굵기를 포인트로 지정합니다. 부의 값은 디폴트의 굵기를 사용하는 것을 의미합니다: TeX 출력 모드에서는, 8 밀리 인치를 사용하는 것을 의미합니다; TeX 출력 모드로 -c 옵션 사용시에는, 선의 굵기에는 .ps 행으로 지정되는 것을 사용하는 것을 의미합니다; troff 출력 모드에서는, 포인트 사이즈에 비례하는 굵기를 사용하는 것을 의미합니다. 값 0 에서는 디바이스가 서포트하는 가장 가는 선으로 묘화 합니다. 초기치는 -1 입니다. 또, thick[ness] 속성이 있습니다. 예를 들면

    circle thickness 1.5

(은)는 1.5 포인트의 굵기의 엔을 묘화 합니다. 선의 굵기는 scale 변수의 값의 영향도 .PS 행에 있어서의 높이의 영향도 받지 않습니다.

박스 (모퉁이의 둥근 박스를 포함합니다), 엔, 타원은 전부 칠하는 것이 가능하고, 속성 fill[ed] 그리고 지정합니다. 이것은 값이 0 에서 1 의 식을 옵션으로 인수로서 취합니다; 0 은 흰색으로 전부 칠해, 1 은 흑으로 전부 칠해, 그 사이의 값으로는 적절한 회색으로 전부 칠합니다. 1 보다 큰 값도 사용 가능합니다: 이 경우, 현재의 텍스트 및 선에 사용하고 있는 회색으로 전부 칠합니다. 통상 이것은 흑입니다만, 출력 디바이스가 변경하는 기구를 가지고 있을지도 모릅니다. 인수를 취하지 않는 경우, fillval 변수의 값이 사용됩니다. 초기치에서는 0.5 입니다. invisible 속성은 오브젝트의 전부 칠해에는 영향을 주지 않습니다. 전부 칠해진 오브젝트에 관련 지을 수 있었던 텍스트는, 전부 칠해 후에 추가됩니다. 이 때문에, 전부 칠해에 의해 텍스트가 숨겨지는 것은 없습니다.

변수 arrowhead 하지만 비 0 으로 있는 곳개 TeX 모드가 유효 혹은 -x 옵션이 주어지고 있는 경우에는, 화살표의 머리를 실선의 삼각형으로 묘화 합니다. 초기치에서는 arrowhead (은)는 1 입니다.

pic 의 troff 출력은 디바이스 독립입니다. 그러므로 -T 옵션은 장황합니다. 모든 수치는 인치로서 다루어집니다; 수치는 troff 머신 단위로서는 해석되지 않습니다.

오브젝트는 aligned 속성을 취할 수 있습니다. 이것은 후 처리가 grops 그리고 실행되는 경우만 기능합니다. 오브젝트에 관련 지을 수 있었던 텍스트로 aligned 속성을 가지는 것은 모두 오브젝트의 중앙에 있어 회전됩니다. 그러므로, 오브젝트의 시점에서 종점에의 방향에 맞출 수 있습니다. 이 속성은 시점과 종점이 같은 오브젝트에 관해서는 효과가 없습니다.

nth 이렇게 말하는 표현이 용서되고 있는 장소에서는 `expr'th 그렇다고 하는 표현도 용서됩니다. 'th (은)는 단일의 토큰인 것에 주의해 주세요: ' (와)과 th 의 사이에는 공백을 들어갈 수 있어 되지 않습니다. 사용예는 이하입니다.

    for i = 1 to 4 do {
       line from `i'th box.nw to `i+1'th box.se
    }

변환
스탠드얼론의 픽쳐를 pic 파일로부터 얻으려면 , pic 코드를 .PS (와)과 .PE 의 리퀘스트로 둘러쌉니다. roff 설정 명령을 파일의 선두에 추가해도 좋습니다만, roff 텍스트는 추가하지 않습니다.

페이지 정보를 아무것도 더하지 않고 , 이 파일을 groff 에 식원 다투는 것이 필요합니다. 어느 .PS (와)과 .PE 의 리퀘스트가 실제로 불렸는지를 확인해 주세요. 예를 들면, mm 매크로 패키지는 페이지 번호를 추가합니다만, 이것은 매우 귀찮습니다. 당면, 표준의 groff (을)를, 어느 매크로 패키지도 일하지 않게 해 호출합니다. 또는, 독자적인 리퀘스트를 정의합니다. 예를 들면, 아무것도 하지 않게 하려면 다음과 같이 합니다:

    .de PS
    ..
    .de PE
    ..

groff 자신은, 다른 그래픽스 파일 서식에의 직접 변환은 할 수 없습니다. 그러나, groff 옵션 -Tps 의 사용에 의해, 픽쳐를 최초로 PostScript® 서식에 변환하면, 많은 가능성이 있습니다. 이 ps 파일은, BoundingBox 정보가 없기 때문에, 그것 자신은 매우 사용하기 쉽다고 하는 것은 아니기 때문에, 다른 변환 프로그램, 통상은 ps2other (이)나 pstoother 그렇다고 하는 이름의 것에 식. 게다가 PostScript 인터프리터 ghostscript (gs) (은)는, 다음의 옵션으로 호출해 가능한 편입의 그래픽스 변환 디바이스를 가집니다:

    gs -sDEVICE=<devname>

사용 가능한 디바이스 일람을 얻으려면 , 다음과 같이 호출합니다:
    gs --help

Encapsulated PostScript 파일 서식 EPS 하지만 보다 중요하게 되어 있어 또 변환이 과거와 같이는 간단하지 않기 때문에, 올바른 일을 실시한다 ps2eps (이)라는 이름의 변환 툴의 존재를 알고 있으면 좋을 것입니다. 이것은, gs 에 패키지 되고 있는 툴 ps2epsi 보다 좋은 것입니다.

비트 맵 그래픽스 서식용으로는, pstopnm (을)를 사용합니다. 결과의 (중간 출력의) PNM 파일은, netpbm 패키지를 사용하는 것으로써, 실질적으로 임의의 그래픽스 서식에 변환 가능합니다.

관련 파일
/usr/share/tmac/pic.tmac PS (와)과 PE 매크로의 정의의 예입니다.

관련 항목
troff(1), groff_out(5), tex(1), gs(1), ps2eps(1), pstopnm(1), ps2epsi(1), pnm(5)

Tpic: Pic for TeX
Brian W. Kernighan, PIC — A Graphics Language for Typesetting (User Manual). AT&T Bell Laboratories, Computing Science Technical Report No. 116 <URL:http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz> (revised May, 1991).

ps2eps (은)는 CTAN 밀러로 입수 가능하고, 예를 들면 다음의 곳부터 입수 가능합니다:
<ftp://ftp.dante.de/tex-archive/support/ps2eps/>

W. Richard Stevens - Turning PIC Into HTML
<http://www.kohala.com/start/troff/pic2html.html>

W. Richard Stevens - Examples of picMacros
<http://www.kohala.com/start/troff/pic.examples.ps>

버그

groff 에 있어 부정한 캐릭터 (예를 들면 ASCII code 0 이나 8 진으로 013~037, 0200~0237)은 TeX 모드여도 거부됩니다.

fillval 의 해석은 10th edition Unix 와 호환성이 없습니다. 10th edition Unix 는 0 을 흑, 1 을 흰색이라고 해석합니다.

PostScript® 는, Adobe Systems Incorporation 의 등록상표입니다.