KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
A truly wise man never plays leapfrog with a Unicorn.
FrontPage › LittleTree/ReadingTeXbook/2006-09

r1.9과 현재 버전의 차이점

@@ -1,5 +1,78 @@
#action Blog Add Blog
##Blog
{{{#!blog 작은나무 2006-11-24T14:37:54 Armstrong Numbers
Pluperfect DigitalInvariants(PPDI) 혹은 Armstrong Numbers 라고 불리는 수들이 있습니다. 다음이 바로 그러한 수들인데,
{{{#!latex
\newcount\cnt \newcount\length
\def\fifo#1{\ifx\ofif#1\ofif\fi \process#1\fifo}
\def\ofif#1\fifo{\fi}
\def\ppdi#1{\cnt=0 \def\process##1{\advance\cnt by1 }
\fifo #1\ofif \length=\cnt
\def\process##1{\advance\cnt by-1 ##1^{\number\length}\ifnum\cnt>0 +\fi }
$#1 = \fifo #1\ofif$}
\ppdi{153}
\ppdi{1634}
\ppdi{54748}
\ppdi{548834}
\ppdi{1741725}
\ppdi{24678050}
\ppdi{146511208}
\ppdi{4679307774}
\ppdi{82693916578}
\}}}
잘 살펴보면 재미있는 특성이 있습니다. 153을 예를 들어 설명하면, 153은 세자리 수이며, 각 자리수를 세제곱하여 모두 더하면 원래의 수인 153이 되는 것입니다. 다른 모든 수들도 마찬가지입니다. :)
PPDI 모양을 만들어주는 TeX 매크로를 만들어 보았습니다. 오랜만에 [작은나무]의 애용(?) 매크로인 \fifo ... \ofif를 이용했습니다.
{{{#!vim tex
\newcount\cnt \newcount\length
\def\fifo#1{\ifx\ofif#1\ofif\fi \process#1\fifo}
\def\ofif#1\fifo{\fi}
\def\ppdi#1{\cnt=0 \def\process##1{\advance\cnt by1 }
\fifo #1\ofif \length=\cnt
\def\process##1{\advance\cnt by-1 ##1^{\number\length}\ifnum\cnt>0 +\fi }
$#1 = \fifo #1\ofif$}
\}}}
위와 같은 \ppdi 매크로를 정의하고 \ppdi{153} 하면 153에 해당하는 PPDI 모양이 만들어 집니다. 참고로 가장 긴 수는 그 자리수가 39자리나 되는 수입니다. 아래의 두 수입니다.
{{{#!vim
115132219018763992565095597973971522400
115132219018763992565095597973971522401
\}}}
그럼 한 번 살펴볼까요? :)
{{{#!latex
\newcount\cnt \newcount\length
\def\fifo#1{\ifx\ofif#1\ofif\fi \process#1\fifo}
\def\ofif#1\fifo{\fi}
\def\ppdi#1{\cnt=0 \def\process##1{\advance\cnt by1 }
\fifo #1\ofif \length=\cnt
\def\process##1{\advance\cnt by-1 ##1^{\number\length}\ifnum\cnt>0 +\fi }
$#1 = \fifo #1\ofif$}
\ppdi{115132219018763992565095597973971522401}
\}}}
}}}
{{{#!blog 작은나무 2006-11-17T02:51:32 연분수 매크로
'''218~219쪽''': 참, 오랜만에 적어봅니다. 요즘 텍공부가 좀 뜸한 관계로... :)

@@ -9,13 +82,12 @@
{{{#!vim tex
\newcount\m % 분자
\newcount\n % 분모
\newcount\t % t = m mod % n
\newcount\s % s = m / n

\def\cf#1#2{\m=#1 \n=#2 \t=\m
\divide\m by\n \s=\m \multiply\m by\n \advance\t by-\m
\ifnum0=\t \number\s
\ else ifnum\ number\s t>0+{\ strut 1 strut1\hfill\over\displaystyle\cf {\n }{\t }}\fi}

\def\cfrac#1#2{{#1\over#2}=\cf{#1}{#2}}
\}}}
@@ -27,14 +99,15 @@
\}}}

{{{#!latex
\newcount\m % 분자
\newcount\n % 분모
\newcount\t % t = m mod % n
\newcount\s % s = m / n

\def\cf#1#2{\m=#1 \n=#2 \t=\m
\divide\m by\n \s=\m \multiply\m by\n \advance\t by-\m
\ifnum0=\t \number\s
\ else ifnum\ number\s t>0+{\ strut 1 strut1\hfill\over\displaystyle\cf {\n }{\t }}\fi}
\def\cfrac#1#2{{#1\over#2}=\cf{#1}{#2}}

$$\cfrac{421}{73}$$



Nov 24, 2006
Armstrong Numbers
Submitted by 작은나무 @ 11-24 [11:37 pm]
Pluperfect DigitalInvariants(PPDI) 혹은 Armstrong Numbers 라고 불리는 수들이 있습니다. 다음이 바로 그러한 수들인데,



잘 살펴보면 재미있는 특성이 있습니다. 153을 예를 들어 설명하면, 153은 세자리 수이며, 각 자리수를 세제곱하여 모두 더하면 원래의 수인 153이 되는 것입니다. 다른 모든 수들도 마찬가지입니다. :)

PPDI 모양을 만들어주는 TeX 매크로를 만들어 보았습니다. 오랜만에 작은나무의 애용(?) 매크로인 \fifo ... \ofif를 이용했습니다.

\newcount\cnt \newcount\length \def\fifo#1{\ifx\ofif#1\ofif\fi \process#1\fifo} \def\ofif#1\fifo{\fi} \def\ppdi#1{\cnt=0 \def\process##1{\advance\cnt by1 } \fifo #1\ofif \length=\cnt \def\process##1{\advance\cnt by-1 ##1^{\number\length}\ifnum\cnt>0 +\fi } $#1 = \fifo #1\ofif$}

위와 같은 \ppdi 매크로를 정의하고 \ppdi{153} 하면 153에 해당하는 PPDI 모양이 만들어 집니다. 참고로 가장 긴 수는 그 자리수가 39자리나 되는 수입니다. 아래의 두 수입니다.

115132219018763992565095597973971522400 115132219018763992565095597973971522401

그럼 한 번 살펴볼까요? :)



Nov 17, 2006
연분수 매크로
Submitted by 작은나무 @ 11-17 [11:51 am]
218~219쪽: 참, 오랜만에 적어봅니다. 요즘 텍공부가 좀 뜸한 관계로... :)

최근에 우연히 연분수(continued fraction)이라는 것을 알게되어서 텍으로 매크로를 만들어보면 재밌겠다 싶어서 작성해봤습니다. 꼬리 재귀(tail recursion)를 이용합니다. 처음에는 저의 블로그에 적었는데, 그곳보다는 여기가 적당하다 싶어서 옮깁니다.

\newcount\m % 분자 \newcount\n % 분모 \newcount\t % t = m % n \newcount\s % s = m / n \def\cf#1#2{\m=#1 \n=#2 \t=\m \divide\m by\n \s=\m \multiply\m by\n \advance\t by-\m \number\s \ifnum\t>0+{\strut1\hfill\over\displaystyle\cf\n\t}\fi} \def\cfrac#1#2{{#1\over#2}=\cf{#1}{#2}}
아래와 같이 사용합니다.

$$\cfrac{421}{73}$$ $$\cfrac{103}{24}$$



Sep 01, 2006
엉터리지만 동작한다
Submitted by 작은나무 @ 09-01 [12:00 pm]
213쪽: \expandafter

1부터 \n 까지의 합을 구하는 루틴입니다.




\loop...\repeat 또는 재귀문을 사용하지 않고 변수를 1개만 사용하는 루틴을 만드려고 해보았는데, 엉터리 코드지만 동작합니다. 이상합니다.

\newcount\n \def\square{\multiply\n\n} \def\divtwo{\divide\n2} \def\summation#1{\n=#1 \def\add{\advance\n#1} \expandafter\expandafter\expandafter\square\expandafter\add\divtwo The sum from 1 to #1 is \number\n.} \summation{97} \summation{98} \summation{99} \summation{100}
결과




expandafter를 남발함으로써 골머리를 썩게 하고 민심을 흉흉하게 한 허물, 결코 가볍다 할 수 없으리라 사료됩니다.^^ expandafter를 싹 걷어내고 컴파일해 봤더니 얼레~ 결과는 동일하더군요 -.-;; -- DohyunKim 2006-09-01 14:12:59

그러니 이상하다는거 아닙니까...^^; 위에 사용한 방식이 책대로라면 전개 순서를 역으로 한다는 건데요... 이거 뭐 잘못된거 아닌가요? ㅎㅎㅎ -- 작은나무 2006-09-01 15:08:40

TeXbyTopic 12.3.1을 보면 개념이 나와있습니다. One step expansion: \expandafter -- DohyunKim 2006-09-01 16:14:17

아... 제가 이해력이 떨어져서 엄청난 착각을 하고 있던것 같습니다... 전개(expansion) 순서만 바뀌는 것이고, 실행되는 순서는 유지되는 것이군요. 언제나 이처럼 잘못된 것을 지적해주시고 한 수 가르쳐주셔서 감사하게 생각하고 있습니다. -- 작은나무 2006-09-01 16:32:46

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-11-24 23:37:54
Processing time 7.0714 sec