[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17. Conditionally Visible Text

어떤 경우에는 인쇄된 매뉴얼과 그에 대응되는 Info 파일에 대해 각각 다른 텍스트를 쓰는 편이 좋다. 이러한 경우에 조건 명령(conditional command)를 써서 어떤 텍스트가 인쇄된 매뉴얼에 들어가고, 어떤 텍스트가 Info 파일에 들어갈 지 지정한다.

@ifinfo는 TeX이 인쇄된 매뉴얼을 typeset할 때 무시해야 하는 부분을 시작한다. 이 부분은 Info 파일에만 나타난다. @ifinfo 명령은 한 줄에 단독으로 나와야 한다; Info만의 텍스트는 @end ifinfo가 단독으로 쓰여진 줄로 끝난다. Texinfo 파일이 시작할 때 Info의 permmission은 @ifinfo@end ifinfo로 표시된 부분 안에 들어 있다. (See section Summary and Copying Permissions for Info.)

@iftex@end iftex 명령은 @ifinfo@end ifinfo 명령과 비슷하다. 단 지정된 텍스트는 인쇄된 매뉴얼에만 나타나고, Info 파일에는 나타나지 않는다. @ifhtml@end ifhtml도 마찬가지로 HTML 출력에만 나타날 텍스트를 지정한다.

예를 들어,

 
@iftex
이 텍스트는 인쇄된 매뉴얼에만 나타난다.
@end iftex
@ifinfo
하지만, 이 텍스트는 Info에만 나타난다.
@end ifinfo

앞의 예는 다음 줄을 만든다:

이 매뉴얼을 Info 버전을 읽느냐 인쇄된 버전을 읽느냐에 따라 이 두 줄 중에 한줄만 보인 다는 것에 유의하라.

@titlepage 명령은 인쇄된 매뉴얼의 표지와 저작권 표시 페이지를 표시하는 데 쓰이는 @iftex의 특별한 변형이다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.1 Conditional Not Commands

@ifnot… 명령으로 어떤 주어진 한개 이외의 출력 포맷에서만 포함될 텍스트를 지정할 수도 있다:

 
@ifnothtml … @end ifnothtml
@ifnotinfo … @end ifnotinfo
@ifnottex … @end ifnottex

(@ifnot… 명령과 @end 명령은 한 줄에 단독으로 나와야 한다.)

출력 파일이 주어진 포맷으로 만들어 지지 않을 경우, 지정된 부분은 포함되고, 그렇지 않으면 무시된다.

이러한 명령으로 구분된 부분은 @iftex의 경우에도 보통의 Texinfo 소스이다. @tex을 사용하는 로우 포맷터(raw formatter) 소스가 아니다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.2 Raw Formatter Commands

@iftex@end iftex으로 구분된 부분 내에서, 직접 TeX 명령을 포함시킬 수 있다. 이 부분은 TeX만 보는 부분이기 때문에 Info는 이 명령을 무시할 것이다. 보통 TeX 파일에서 쓰는 것처럼 TeX 명령을 쓸 수 있지만, TeX에서 쓰는 ‘\’를 ‘@’로 바꿔야 한다. 예를 들어, Texinfo의 @titlepage 부분에서 copyright 페이지를 포맷하는 데 TeX 명령인 @vskip 명령을 썼다. (@titlepage 명령은 @iftex 명령처럼 Info가 이 부분을 자동으로 무시하도록 한다.)

하지만, plain TeX의 많은 기능들은 Texinfo의 기능들에 의해서 변경되었기 때문에 동작하지 않을 것이다.

어떤 부분에 @tex@end tex 명령을 써서 완전히 plain TeX을 쓸 수도 있고, TeX 명령에 ‘\’를 쓴다. (@tex 명령은 @iftex 명령처럼 Info가 그 부분을 무시하도록 한다.) 유일한 예외는 @ 문자는 여전히 명령어를 시작하는 문자라는 점이다. 이렇게 해야 @end tex 명령을 제대로 인식할 수 있다.

예를 들어, 다음은 plain TeX에 쓰여진 수학 표현이다:

 
@tex
$$ \chi^2 = \sum_{i=1}^N
          \left (y_i - (a + b x_i)
          \over \sigma_i\right)^2 $$
@end tex

이 예의 출력은 인쇄된 매뉴얼에만 보일 것이다. 이 매뉴얼을 Info 에서 읽고 있다면 인쇄된 매뉴얼에 나타나는 방정식을 볼 수 없다.

마찬가지로, @ifhtml … @end ifhtml을 HTML 출력에만 포함될 부분을 감싸는 데 쓸 수 있다. 그리고 @html … @end ifhtml을 직접 HTML 명령을 쓰는 부분으로 지정할 수 있다 (마찬가지로, @는 여전히 이스케이프 문자라는 예외가 있어서, @end 명령이 동작한다.)


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.3 @set, @clear, and @value

@set, @clear, @ifset, 그리고 @ifclear 명령을 사용해서 Texinfo 포맷팅 명령이 Texinfo 파일의 어떤 부분을 포맷팅하거나 무시하도록 조정할 수 있다.

또, @set flag 명령을 써서 flag의 값을 문자열로 할 수 있다; 그리고 @value{flag}로 그 문자열을 삽입할 수 있다. 예를 들어, @set을 써서 날짜를 지정하고, @value를 써서 Texinfo 파일의 여러 군데에 날짜를 넣을 수 있다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.3.1 @ifset and @ifclear

flag가 set되면, Texinfo 포매팅 명령은 @ifset flag@end ifset 명령 사이의 텍스트를 포맷한다. flag가 clear되면, Texinfo 포매팅 명령은 그 텍스트를 포맷하지 않는다.

@set flag 명령을 써서 flag를 set한다; flag는 한개의 단어라면 무엇이든 올 수 있다. 이 명령의 포맷은 다음과 같다:

 
@set flag

조건부로 포맷되는 텍스트는 다음과 같이 @ifset flag@end ifset 명령 사이에 쓴다.

 
@ifset flag
conditional-text
@end ifset

예를 들어, ‘큰’ 것과 ‘작은’ 매뉴얼의 두가지 변형이 있는 한개의 문서를 만들 수 있다.

 
You can use this machine to dig up shrubs
without hurting them.

@set large

@ifset large
It can also dig up fully grown trees.
@end ifset

Remember to replant promptly …

이 예에서, large flag가 set되었기 때문에 포맷팅 명령은 @ifset large@end ifset 사이의 텍스트를 포맷할 것이다.

@clear flag 명령을 써서 flag를 clear한다. flag를 clear하는 것은 set하는 것의 반대이다. 이 명령은 다음과 같이 쓴다:

 
@clear flag

이 명령은 한 줄에 단독으로 쓴다.

flag가 clear되면 Texinfo 포맷팅 명령은 @ifset flag@end ifset 명령 사이의 텍스트를 포맷하지 않을 것이다; 그 텍스트는 인쇄된 매뉴얼이나 Info 출력이나 모두 무시되어 나타나지 않을 것이다.

예를 들어, 앞의 예에서 @clear large 명령을 @set large 명령 다음에 쓰면 (하지만, 조건부 텍스트 앞에), Texinfo 포맷팅 명령은 @ifset large@end ifset 명령 사이의 텍스트를 무시한다. 포맷된 출력물에서 그 텍스트는 나타나지 않는다; 인쇄물이건 Info 출력이건 나타나지 않는다. 오직 “You can use this machine to dig up shrubs without hurting them. Remember to replant promptly …”만을 볼 수 있다.

flag가 @clear flag 명령으로 clear되면, 포맷팅 명령은 @ifclear@end ifclear 명령 사이의 텍스트를 포맷할 것이다. 하지만, flag가 @set flag로 set되면, 포맷팅 명령은 @ifclear@end ifclear 명령 사이의 텍스트를 포맷하지 않을 것이다; 그 텍스트를 무시한다. @ifclear 명령은 다음과 같이 쓴다:

 
@ifclear flag

간단히 말해서, 명령어는 다음과 같다:

@set flag

Texinfo 포맷팅 명령에 flag가 set되었음을 알린다.

@clear flag

Texinfo 포맷팅 명령에 flag가 clear되었음을 알린다.

@ifset flag

flag가 set되면 Texinfo 포맷팅 명령에게 @end ifset 명령이 나올 때까지의 텍스트를 포맷하도록 한다.

flag가 clear되었으면 Texinfo 포맷팅 명령에게 @end ifset 명령이 나올 때까지의 텍스트를 무시하도록 한다.

@ifset flag

flag가 set되면 Texinfo 포맷팅 명령에게 @end ifset 명령이 나올 때까지의 텍스트를 무시하도록 한다.

flag가 clear되었으면 Texinfo 포맷팅 명령에게 @end ifset 명령이 나올 때까지의 텍스트를 포맷하도록 한다.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.3.2 @value

@set 명령으로 flag의 값을 지정할 수 있다. 이 값은 @value 명령으로 얻을 수 있다. 이 값은 문자열이다.

@set 명령은 다음과 같이 쓴다:

 
@set foo This is a string.

이것은 foo의 값을 “This is a string.”이라는 값으로 지정한다.

Texinfo 포맷터는 @value{flag} 명령을 flag의 값인 문자열로 대체한다.

즉, foo가 위와 같이 지정되었을 때, Texinfo 포맷터는 다음과 같이 변환한다.

 
@value{foo}
to
This is a string.

@value 명령은 문단 안에 쓴다; 하지만, @set 명령은 한줄에 단독으로 써야 한다.

@set 명령을 다믐과 같이 문자열을 지정하지 않고 쓴다면:

 
@set foo

foo의 값은 빈 문자열이다.

만약 앞에서 set된 flag를 @clear flag 명령으로 clear하면 뒤에 나오는 @value{flag} 명령은 잘못된 것이고, 문자열은 ‘{No value for "flag"}’라는 애러 메세지로 대체된다.

예를 들어, foo를 다음과 같이 set하면:

 
@set how-much very, very, very

그러면 포맷터는 다음과 같이 변환할 것이다.

 
It is a @value{how-much} wet day.
into
It is a very, very, very wet day.

만약 다음과 같이 쓰면

 
@clear how-much

포맷터는 다음과 같이 변환한다.

 
It is a @value{how-much} wet day.
into
It is a {No value for "how-much"} wet day.

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

17.3.3 @value Example

@value 명령은 매뉴얼을 변경한 것을 기록할 때 바꿀 부분을 줄이는 데 쓸 수 있다. 다음은 The GNU Make Manual에서의 예이다.

Set the flags:

 
@set EDITION 0.35 Beta
@set VERSION 3.63 Beta
@set UPDATED 14 August 1992
@set UPDATE-MONTH August 1992

Texinfo 파일을 읽는 사람을 위해 첫번째 @ifinfo 부분에서 다음과 같은 텍스트를 쓰고 있다:

 
This is Edition @value{EDITION},
last updated @value{UPDATED},
of @cite{The GNU Make Manual},
for @code{make}, Version @value{VERSION}.

인쇄된 매뉴얼을 읽는 사람을 위한 표지는 다음과 같이 쓰고 있다:

 
@title GNU Make
@subtitle A Program for Directing Recompilation
@subtitle Edition @value{EDITION}, …
@subtitle @value{UPDATE-MONTH}

(표지에서는, 달과 년을 나열하는 것이 날을 같이 나열하는 것보다 덜 이상해 보인다.)

Info 파일을 읽는 사람을 위해 Top 노드에서는 다음과 같은 텍스트를 쓰고 있다:

 
This is Edition @value{EDITION}
of the @cite{GNU Make Manual},
last updated @value{UPDATED}
for @code{make} Version @value{VERSION}.

매뉴얼을 포맷한 다음, 첫번째 @ifinfo 부분은 다음과 같이 보인다:

 
This is Edition 0.35 Beta, last updated 14 August 1992,
of `The GNU Make Manual', for `make', Version 3.63 Beta.

매뉴얼을 변경할 때, flag의 값만을 바꾼다. 이 세가지 부분을 모두 다시 쓸 필요가 없다.


[ << ] [ >> ]           [Top] [Contents] [Index] [ ? ]

This document was generated by Autobuild on June 20, 2017 using texi2html 1.82.