KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
Like winter snow on summer lawn, time past is time gone.
FrontPage › Conditionals

목차

1 TeX의 조건문
1.1 \if
1.2 \ifcat
1.3 \ifx
1.4 Mode 검사(\ifhmode,\ifvmode,\ifmmode)
1.5 Number 검사(\ifnum, \ifodd)
1.6 Dimension 검사(\ifdim)
1.7 Box 검사(\ifvoid, \ifhbox, \ifvbox)
1.8 파일 검사(\ifeof)
1.9 \iff :)
1.10 Case문(\ifcase)
1.11 \newif, \iftrue, \iffalse
2 LaTeX2e의 조건문
2.1 LaTeX\newif, \iffalse, \iftrue 사용
2.2 \@if
2.3 \@ifnextchar
2.4 \IfFileExists
2.5 \@ifstar
2.6 \@ifpackageclassloaded, \@ifpackageclasslater, \@ifpackageclasswith
2.7 ifthen 패키지
2.7.1 \ifthenelse 명령
2.7.2 \ifthenelse에서 쓰이는 조건 검사
2.7.3 \newboolean, \setboolean
3 etoolbox의 조건문
3.1 boolean
3.2 조건 검사
4 Loop
4.1 PlainTeX\loop \repeat
4.2 ifthen 패키지의 \whiledo
4.3 \for-loop
4.4 multido
5 응용 : 조건부 컴파일
5.1 TTY를 통하여 사용자 입력을 받아들이는 방법
5.2 명령행을 이용하는 방법

1 TeX의 조건문


TeX의 if 조건문은 주로 문자와 ControlSequences를 검사하기 위하여 사용된다. 구문법은 다음과 같다.
\if... \fi
\if... \else... \fi

1.1 \if

TeX\if 다음에 나오는 매크로들을 전개하는데, 언제까지 하냐면 전개할 수 없는 토큰을 정확히 두 개 얻을 때까지 한다. 그리고나서 그 얻어진 두 개의 토큰을 비교한다. 따라서 \if를 이용해서 비교할 대상이 전개 가능한 매크로나 액티브 문자이면 그것들 앞에 \noexpand를 붙여서 전개를 막고 비교를 해야한다. 예를들어보자.
\def\A{abc} \def\B{abc}
\if\A\B
위의 조건문의 결과는 거짓이다. 왜냐하면, 위의 설명대로 \if 다음에 나오는 매크로를 전개하는데, 여기서는 \A를 전개하게된다. 그런데 \A를 전개하고나면 \if abc가 되고, 문자 토큰 a, b 이미 두개의 전개할 수 없는 토큰을 얻었으므로 더이상의 전개를 마치고 그 두개의 토큰을 비교한다. 따라서 \if ab의 결과가 이 조건문의 값이 되는데, 당연히 a 와 b는 다르므로 거짓이다.
\def\A{aaa} \def\B{bbb}
\if\A\B
위 경우는 어떨까? 앞에서 한것 처럼 하면 \if\A\B 는 결과적으로 \if aa 이므로 이 조건문의 값은 참이다. 다른 예를 하나 더 들어보자.
\def\pion#1{$\if#1+\pi^+\else\pi^-\fi$}
\if expands the tokens, therefore,
\let\a+
\pion\a
would give the same result as \pion+.

\def\pion#1{$\if#1+\pi^+\else\pi^-\fi$}
\let\a+
\begin{tabular}{lll}
\verb|\pion\a| & 결과 : & \pion\a \\
\verb|\pion+| &결과 : & \pion+
\end{tabular}

1.2 \ifcat

The \if test ignores CategoryCodes; these can be tested by
 \ifcat<token1><token2>
This test is a lot like \if : TEX expands after it until unexpandable tokens remain. For this test ControlSequences are considered to have CategoryCode 16 (ordinarily, category codes are in the range 0–15), which makes them all equal to each other, and different from all character tokens.

1.3 \ifx

가장 많이 쓰는 \if 관련 문법 중의 하나. \ifx<token1><token2>는 두 개의 token이 일치하는지 검사한다. 그러나 명령을 확장하지는 않는다. 이 조건이 참(true)이 되려면 다음 중 어느 하나여야 한다.
  1. 두 개의 token이 명령이 아닐 것. 동일한 문자코드와 CategoryCode를 가지거나 동일한 TeX 원시명령이거나 동일한 \font, \chardef, \countdef에 의해 정의된 것일 것.
  2. 두 개의 token이 명령이고 \long이나 \outer와 같은 상태가 동일할 것. 동일한 파라미터를 가질 것. 동일한 상위수준 확장상태에 있을 것.

\let\boxhor=\hbox \ifx\boxhor\hbox %is true
\font\a=cmr10 \font\b=cmr10 \ifx\a\b %is true

\ifx\commandsfile\undefined\else\endinput\fi
\let\commandsfile\null

명령을 확장하지 않는다는 것은, 위에 보인 \if에서의 예와 유사하게
\def\pion#1{$\ifx#1+\pi^+\else\pi^-\fi$}
로 정의한 다음
\def\a{+}
\pion\a
한 결과는, \if에서와는 달리 $\pi^-$ 가 된다. 즉, \a+로 확장하지 않았으므로 \ifx 조건문의 값은 거짓(false)이 되고, 그 결과 \else\pi^-가 실행된 것이다.

1.4 Mode 검사(\ifhmode,\ifvmode,\ifmmode)

\ifhmode is true if TEX is in HorizontalMode or restricted horizontal mode. • \ifvmode is true if TEX is in VerticalMode or internal vertical mode. • \ifmmode is true if TEX is in MathMode or display math mode.

1.5 Number 검사(\ifnum, \ifodd)

\ifnum<number1><relation><number2>
<relation>은 $>, =, <$ 가운데 하나이다.(catcode 12)

\ifodd<number>
is true if the <number> is odd.

1.6 Dimension 검사(\ifdim)

\ifdim<dimen>
사용법은 \ifnum과 같지만 숫자가 아닌 길이변수가 온다.

1.7 Box 검사(\ifvoid, \ifhbox, \ifvbox)

Contents of box registers can be tested with
\ifvoid<8-bit number>
which is true if the register contains no box,

\ifhbox<8-bit number>
which is true if the register contains a horizontal box, and

\ifvbox<8-bit number>
which is true if the register contains a vertical box.

1.8 파일 검사(\ifeof)

입력파일의 EOF 상태를 검사한다. \ifeof<number> 형태로 쓰이며, <number>가 0-15이면 false이다. 이 명령을 이용하여 파일이 존재하는지 검사할 수 있다.
\newread\instream \openin\instream= fname.tex
\ifeof\instream \message{File ’fname’ does not exist!}
\else \closein\instream \input fname.tex
\fi

1.9 \iff :)

$a\iff b$
$$a\iff b$$

1.10 Case문(\ifcase)

\ifcase<number><case0>
\or ...
\or<casen>
\else<other cases>
\fi

\ifcase의 전형적인 보기이다.
\def\today{\ifcase\month\or
  January\or  February\or  March\or    April\or
  May\or      June\or      July\or     August\or
  September\or October\or November\or December\fi
\space\number\day, \number\year}

1.11 \newif, \iftrue, \iffalse

\newif 새로운 조건 변수를 설정한다.
\newif\iffoo
이 하나의 명령으로 TeX은 세 개의 ControlSequences를 정의한다. 즉, \footrue, \foofalse, \iffoo를 정의하는 것이다.

\def\footrue{\let\iffoo=\iftrue}
\def\foofalse{\let\iffoo=\iffalse}
\foofalse

\iffoo
 <iftrue_commands>
\else
 <iffalse_commands>
\fi

2 LaTeX2e의 조건문

LaTeX2e의 조건문은 TeX의 경우와는 달리 대개 세 개의 인자를 가지는 형식을 취한다. 예컨대
\@ifXXX{condition}{iftrue_execution}{iffalse_execution}
이 전형적인 형식이다. 특히 ifthen 패키지는 이러한 형식의 명령을 좀더 자유롭게 활용할 수 있도록 한다.

각각의 패키지들은 독자적인 \if 형식을 갖추고 있는 경우가 많다. 예를 들면 FancyHdr 패키지의 \iffloatpage 명령이 그 한 보기이다. See FancyHdr.

2.1 LaTeX\newif, \iffalse, \iftrue 사용

article.cls의 titlepage 관련 설정을 보면 다음과 같다.
\newif\if@titlepage
\@titlepagefalse
\DeclareOption{titlepage}{\@titlepagetrue}
\ProcessOptions

\if@titlepage
....
\else
....
\fi

이와 동일한 구문법으로 다른 \if@ 형식의 설정을 할 수 있다. 간단한 예를 들어본다.
\newif\if@pdfmake
\@pdfmaketrue
라는 임의의 설정을 새로 하게 되면, \@pdfmaketrue\@pdfmakefalse를 선언할 수 있게 된다. 이 이후로는
\if@pdfmake
...
\else
...
\fi
형태의 TeX 형식 명령을 사용할 수 있다.

그러나 이런 TeX 구문형식의 사용법은 번거로울 뿐 아니라 syntax 오류를 일으킬 가능성이 너무 많아서, 이 과정을 LaTeX2e 구문법으로 편리하게 처리하는 ifthen 패키지를 이용하는 것이 좋다. 아래 ifthen 패키지 관련 부분 참조.

2.2 \@if

LaTeX에서 \newif\@if는 다음과 같이 정의되어 있다.
\def\newif#1{%
  \count@\escapechar \escapechar\m@ne
    \let#1\iffalse
    \@if#1\iftrue
    \@if#1\iffalse
  \escapechar\count@}
\def\@if#1#2{%
  \expandafter\def\csname\expandafter\@gobbletwo\string#1%
                    \expandafter\@gobbletwo\string#2\endcsname
                       {\let#1#2}}

2.3 \@ifnextchar

LaTeX에서 가장 많이 쓰는 조건문 중 하나이다. 주어진 명령에 해당하는 부분의 다음 한 글자를 읽어서 검사한다. 다음 예는 \@ifnextchar 명령으로 제곱근 기호를 정의한 부분이다.
\renewcommand\sqrt{\@ifnextchar[\@sqrt\sqrtsign}
\def\@sqrt[#1]{\root #1\of}

이 명령은 \sqrt[3]과 같은 명령이 있으면 \@ifnextchar[가 참값(true)로 되돌려지므로 \@sqrt[3]을 부른다. 그러나 \sqrt의 경우에는 \@ifnextchar[가 거짓(false)이므로 \sqrtsign 명령을 호출하게 된다.

2.4 \IfFileExists

이 명령은 세 개의 인자를 가진다. 첫번째 것은 파일이름이고, 그 다음은 각각 thenelse에 해당하는 처리 명령들이다. 파일이 존재하면 두번째 인자가, 존재하지 않으면 세번째 인자가 실행된다. 파일이 존재하면 불러들이도록 하는 명령으로 \InputIfFileExists가 있다. 역시 세 개의 인자를 가지며, 파일이 존재하면 불러들인 다음, 두번째 인자로 주어진 명령을 실행하고, 그렇지 않으면 세번째 인자로 주어진 명령을 실행한다.
\newcommand{\printglossary}{%
  \InputIfFileExists{\jobname.gld}{}{%
  \typeout{No file exists! \jobname.gld}}%
}

2.5 \@ifstar

별표붙은 명령(\table*, \section* 등)을 처리하기 위한 테스트.
\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1} }}

2.6 \@ifpackageclassloaded, \@ifpackageclasslater, \@ifpackageclasswith

\@ifpackageloaded
To find out if a package has already been loaded.
\@ifpackageloaded{package_name}{then_commands}{else_commands}

\@ifpackagelater
To find out if a package has already been loaded with a version more recent than _version_.
\@ifpackagelater{package_name}{_version_}{then_commands}{else_commands}

\@ifpackagewith
To find out if a package has already been loaded with at least the options _options_.
\@ifpackagewith{package_name}{_options_}{then_commands}{else_commands}

2.7 ifthen 패키지

ifthen 패키지는 David Carlisle씨가 만든 것으로, 조건문 처리를 용이하게 해주는 역할을 한다.

2.7.1 \ifthenelse 명령

\ifthenelse{<test>}{<then clause>}{<else clause>}
<test>를 boolean 함수로 보고 검사하여, 참이면 <then clause>를, 거짓이면 <else clause>를 실행한다.

calc 패키지와 함께 써서 am-pm 형식을 바꾸는 구문을 작성해본다.
<!> calc 패키지에 대해서는 TeX산술연산을 볼 것.
\usepackage{ifthen,calc} %% preamble

\newcommand{\printtime}{%
  \setcounter{hours}{\time / 60}%
  \setcounter{minutes}{\time - \value{hours} * 60}%
  \ifthenelse{\value{hours}>12}%
   {\setcounter{hours}{\value{hours} - 12}%
    \thehours:\theminutes\,pm\ \today}%
   {\thehours:\theminutes\,am\ \today}
}

2.7.2 \ifthenelse에서 쓰이는 조건 검사

\ifthenelse의 첫번째 인자에 오는 조건 검사를 위해서는 다음과 같은 형식이 쓰일 수 있다.
  1. 논리연산
    • \and
    • \or
    • \not
    • 괄호 \( \)
  2. 숫자 비교
    • number $$<$$ number
    • number $$=$$ number
    • number $$>$$ number
    • \isodd{number}
  3. commands 비교
    • \isundefined{command name}
    • \equal{string}{string}
  4. 길이변수 비교
    • \lengthtest{dimen $$<$$ dimen}
    • \lengthtest{dimen $$=$$ dimen}
    • \lengthtest{dimen $$>$$ dimen}
  5. boolean 검사
    • \boolean{name}

\equal명령으로 검사하는 <string>은 token으로 확장된 명령어들이다. 명령을 확장한 결과가 동일(equal)하면 이 조건은 참(true)이 된다. \isodd 명령은 <number>가 홀수이면 참이 된다. 인자가 숫자가 아니거나 홀수가 아니면 거짓(false)이다. \isundefined{\cmd}\cmd가 정의되어 있지 않을 때 참이다. \boolean{xyz} 명령은 TeX의 원시 \if문에 의해 정의된 \ifxyz\iftrue일 때 참(true) 값을 되돌려준다.
xyz\newboolean 또는 \provideboolean에 의하여 정의될 수 있다. 그리고, TeX\newif에 의하여 정의된 토큰에 대해서도 쓸 수 있다. 예를 들면, \boolean{true}\iftrue를 가리키는 것이다. 또, \boolean{mmode}\ifmmode와 같다.

2.7.3 \newboolean, \setboolean

\usepackage{ifthen}  %% preamble

\newboolean{BoolVar}
\setboolean{BoolVar}{true}
\ifthenelse{\boolean{BoolVar}}{1}{2}

이 형식을 이용하여, 앞서 \@pdfmake를 설정했던 방식에 응용해보자. 먼저, @pdfmake라는 불린 변수를 만들고 true 값을 할당한다.
\newboolean{@pdfmake}
\setboolean{@pdfmake}{true}
이제 \ifthenelse 조건문을 쓴다.
\ifthenelse{\boolean{@pdfmake}}%
 {.....} % if true
 {.....} % if false

3 etoolbox의 조건문

etoolbox는 e-TeX의 primitive를 이용하는 다양한 명령을 제공한다. 조건 검사와 관련해서 필요한 것이 거의 다 있다시피할 정도이므로 자세한 것은 etoolbox 문서를 참고할 것. 여기서는 boolean 관련된 것과 조건문 두어 개만을 소개한다. 조건에 따른 실행은 LaTeX 조건문의 문법을 따른다.

3.1 boolean

  • \newbool{name}
  • \providebool{name}
  • \setbool{name}{value} : value는 true나 false.
  • \booltrue{name}
  • \boolfalse{name}
  • \ifbool{name}{true}{false}
  • \notbool{name}

3.2 조건 검사

control sequences
  • \ifdef{controlsequence}{true}{false}, \ifcsdef{name}{true}{false}
  • \ifundef{controlsequence}{true}{false}, \ifcsundef{name}{true}{false}
  • \ifdefequal{controlsequence}{controlsequence}{true}{false}, \ifcsequal{name}{name}{true}{false}
string
  • \ifstrequal{string}{string}{true}{false}
  • \ifstrempty{string}{true}{false}
  • \ifblank{string}{true}{false}
arithmetic
  • \ifnumcomp{integer}{relation}{integer}{true}{false} : integer는 e-TeX의 number expression 쓸 수 있음.
  • \ifnumequal{integer}{integer}{true}{false}
  • \ifnumgreater, \ifnumless
  • \ifnum.... 꼴의 명령에 상당하는 \ifdim... 명령들이 있음.
  • \ifnumodd

4 Loop

4.1 PlainTeX\loop \repeat

\newcount\MyCount
\MyCount=0
\newcount\Summation
\Summation=0
\loop
 \message{\number\MyCount}
 \advance\MyCount by 1
 \advance\Summation by \MyCount
  \hbox{MyCounter Number: \number\MyCount\quad Summatioin: \number\Summation}
\ifnum\MyCount<10\repeat
\bye

4.2 ifthen 패키지의 \whiledo

\whiledo{<test>}{<while clause>}
<test>는 위에서 언급한 조건검사와 동일한 구문을 사용한다. 이 조건이 true인 한 <while clause>가 실행된다.

1부터 10까지 더하여 합을 출력해본다.
\documentclass{article}
\usepackage{ifthen,calc}
\usepackage{hfont}

\begin{document}

\newcounter{myloopcnt}
\setcounter{myloopcnt}{0}
\newcounter{summation}
\setcounter{summation}{0}

\noindent\textbf{1부터 10까지 더해본다.}

\noindent\whiledo{%
        \value{myloopcnt} < 10}{%
        \stepcounter{myloopcnt}%
        \setcounter{summation}{\thesummation + \themyloopcnt}%
        \themyloopcnt번째 실행 : \qquad 현재까지 합계 \thesummation\\}
\end{document}

4.3 \for-loop

\makeatletter
\def\for#1#2#3{\@ifnextchar[{\@for@{#1}{#2}{#3}}{\@for@{#1}{#2}{#3}[1]}}
\long\def\@for@#1#2#3[#4]#5{\setcounter{#1}{#3}\addtocounter{#1}{1}%
        \edef\for@loopend{\arabic{#1}}%
        \setcounter{#1}{#2}%
        \loop
        \ifnum \expandafter\the\csname c@#1\endcsname < \for@loopend\relax
        #5\addtocounter{#1}{#4}\repeat}
\newcounter{repeatcnt}
\makeatother

같은 기능을 이 \for 문을 써서 구현해보자. 여기서는 ifthen 패키지가 불필요하다.
\documentclass{article}
\usepackage{calc}
\usepackage{hfont}

\makeatletter
\def\for#1#2#3{\@ifnextchar[{\@for@{#1}{#2}{#3}}{\@for@{#1}{#2}{#3}[1]}}
\long\def\@for@#1#2#3[#4]#5{\setcounter{#1}{#3}\addtocounter{#1}{1}%
        \edef\for@loopend{\arabic{#1}}%
        \setcounter{#1}{#2}%
        \loop
        \ifnum \expandafter\the\csname c@#1\endcsname < \for@loopend\relax
        #5\addtocounter{#1}{#4}\repeat}
\newcounter{repeatcnt}
\makeatother

\begin{document}

\newcounter{summation}
\setcounter{summation}{0}

\noindent\textbf{1부터 10까지 더해본다.}

\noindent
\for{repeatcnt}{1}{10}%
        {\setcounter{summation}{\thesummation + \therepeatcnt}%
         \therepeatcnt번째 실행 : \qquad 현재까지 합계 \thesummation\\}

\end{document}

4.4 multido

Timothy van Zandt 씨가 작성한 매크로이다. multido.texmultido.sty로 사용할 수 있다.
PSTricks 매크로는 이 스타일을 자동으로 불러들인다.
\multido{_variables_}{_repetitions_}{_stuff_}
여기서 _variables_은 다음 형식으로 쓰인다.
variable = initial value + increment
variable로 올 수 있는 것은 Dimension, Number, Integer, Real이고 각각 \d, \n, \i, \r 등으로 형식을 지시한다. 다음 예를 보라.
\multido{}{10}{\TeX\ }

\multido{\d=2pt+3pt}{5}{\d, }

\multido{\n=2+3}{10}{\n, }

\multido{\i=2+-3}{10}{\i, }

\multido{\r=2+3.05}{6}{\r, }

  • \multido 명령은 nesting이 가능하다.
  • 실행전에 카운터를 1씩 증가시키는 \mmultido 명령도 있다.
  • \multidostop은 multido 반복문을 현재 위치에서 강제로 빠져나가게 한다.

5 응용 : 조건부 컴파일

5.1 TTY를 통하여 사용자 입력을 받아들이는 방법

main.tex 파일을 컴파일 시도하면 화면에 "Yes/No"를 묻고, y 또는 n로 답하는 데 따라서 다른 결과를 보여주는 간단한 소스를 작성해보자. 한글 터미널일지 알 수 없으므로 화면상의 응답은 영문으로 하는 것으로 한다.

\documentclass{article}
\usepackage{hfont}
\usepackage{ifthen}

여기에서부터 Preamble 설정을 시작한다. ttyin, ttyout을 정의하고 \Msg 명령과 \Ask 명령을 정의한다.
\makeatletter
\chardef\ttyin16
\chardef\ttyout16
\def\iden#1{#1}
\def\strip#1#2 \@gobble{\def #1{#2}}
\def\@defpar{\par}
\def\yes{yes}
\def\y{y}
\def\n{n}

\def\Msg{\immediate\write\ttyout}
\def\Ask#1#2{%
    \message{#2}\read\ttyin to #1\ifx#1\@defpar\def#1{}\else
    \iden{\expandafter\strip
       \expandafter#1#1\@gobble\@gobble} \@gobble\fi}
\makeatother

사용자 인터페이스를 위한 YesOrNo라는 boolean 변수(이것을 쓰려면 ifthen 패키지가 필요하다.)를 설정한다. 기본값은 true.
\newboolean{YesOrNo}
\setboolean{YesOrNo}{true}

본문 시작.
\begin{document}

화면에 "Please Answer Me, Yes or No(y/n)?"이라는 메시지를 보여주고 사용자 입력을 받아들인다.
\Msg{**************************************************^^J%
     * Please Answer Me, Yes or No(y/n)?}%
\Ask\answer{%
     **************************************************}%

만약 y가 입력되면 YesOrNo를 true로, 그밖의 경우에는 모두 false로 설정
\ifx\y\answer\setboolean{YesOrNo}{true}
\else\setboolean{YesOrNo}{false}\fi

출력루틴. YesOrNo가 true인지 false인지에 따라 다른 메시지를 DVI로 출력한다. ifthen 패키지의 \ifthenelse 명령을 사용함.
\ifthenelse{\boolean{YesOrNo}}%
        {`예스'를 선택하셨습니다.}%
        {`노'를 선택하셨습니다.}

문서 끝.
\end{document}

5.2 명령행을 이용하는 방법

같은 일을 명령행에서 한꺼번에 하는 방법은 없을까? 그 가운데 가장 쉬운 방법을 생각해보자.

원본을 다음과 같이 작성한다.
\documentclass{article}
\usepackage{hfont}
\usepackage{ifthen}

\makeatletter
\chardef\ttyin16
\chardef\ttyout16
\def\iden#1{#1}
\def\strip#1#2 \@gobble{\def #1{#2}}
\def\@defpar{\par}
\def\Ask#1#2{%
    \message{#2}\read\ttyin to #1\ifx#1\@defpar\def#1{}\else
    \iden{\expandafter\strip
       \expandafter#1#1\@gobble\@gobble} \@gobble\fi}
\def\Msg{\immediate\write\ttyout}
\def\yes{yes}
\def\y{y}
\def\n{n}
\makeatother

\newboolean{YesOrNo}
\setboolean{YesOrNo}{true}

\def\getYesOrNo{%
        \Msg{**************************************************^^J%
         * Please Answer Me, Yes or No(y/n)?}%
        \Ask\answer{%
         **************************************************}%
}

\newcommand\DetermineYesOrNo{%
%% 만약 \answer가 이미 주어져있지 않다면
\ifx\answer\undefined
        \getYesOrNo
\else\fi
%% \answer에 따라 YesOrNo 불린값을 결정함
\ifx\y\answer\setboolean{YesOrNo}{true}
        \else\setboolean{YesOrNo}{false}\fi
}

%%% 출력문자열
\newcommand\YesMessage{`예스'를 선택하셨습니다.}
\newcommand\NoMessage{`노'를 선택하셨습니다.}

\begin{document}
\DetermineYesOrNo
\ifthenelse{\boolean{YesOrNo}}%
        {\YesMessage}%
        {\NoMessage}

\end{document}

명령행에서는 다음과 같이 처리한다.(파일이름은 test.tex)
#> latex \def\answer{y}\input{test}

YesOrNono로 하고 싶으면
#> latex \def\answer{n}\input{test}

만약 단순하게 latex test만을 실행한다면 앞서와 같은 대화식으로 (y/n)을 화면에서 물어서 얻는다. 이것을 배치파일 또는 스크립트로 실행할 수 있을 것이다.


앞부분은 Victor Eijkhout, TeX By Topic(http://www.eijkhout.net/tbt/), pp.112-117. 에서 주로 발췌, 인용하였습니다.
DeleteMe 이 분 성함을 우찌 읽지요? --Karnes My name is approximately pronounced "ike-howt". -- Victor Eijkhout HJhan

DeleteMe \ifXXX 같은 것이 많이 사용되던데 자세한 설명을 못 찾았습니다. ;) 고수님들의 설명을 들었으면 합니다. --2004-03-28hermian

DeleteMe 유용한 페이지 작성해주심에 감사의 말씀 드립니다. LaTeX을 쓰려면 컴퓨터도 좀 알아야하고, 수학도, 폰트도 좀 알아야하고, 편집도 조금 알면 좋고... 그러나 결국 이 Conditionals을 알아야 가장 효율적인 문서작성을 할 수 있으리라는 생각을 지울 수 없습니다. --Progress
고맙습니다. ;) 이따금 칭찬받구 싶을 때도 있답니다. 뇰띠미 했거덩요. :) 도움이 되면 좋겠습니다. --Karnes
그냥 페이지만 덜렁 만들었더니 날마다 무럭무럭자라는군요 . 잘가꾸어 주신 Karnes님 감사합니다. 뇰띠미 가 압권입니다. :) 열심히 공부하겠습니다. ~꾸벅 --hermian

Contributors: Karnes


^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2011-07-05 18:40:17
Processing time 0.1693 sec