\usepackage{environ,xifthen}
환경의 내용을 조작하기 위해서 environ 패키지를 쓰고 원래 정의했던 환경을 명령형으로 바꿔둡니다.
\newcommand{\xABC}[1]{\par\small\textsf{\textcolor{green}{[시작]}}\hspace{0.5em}\hrulefill\par #1 \par\normalsize\vspace{\baselineskip}}
string 테스트를 해서 \BODY가 비어 있으면 아무 동작도 하지 않고 그렇지 않으면 위의 \xABC를 실행하도록 새로운 명령을 다음과 같이 정의합니다.
\NewEnviron{ABC}{\ifthenelse{\equal{\BODY}{}}{}{\xABC{\BODY}}}
다만 개행문자가 공백이 하나라도 환경에 있으면 문자가 있는 것으로 간주할 겁니다. 따라서
\begin{ABC}
\end{ABC}
와 같이 빈 환경은 붙여주어야 합니다.
조금 다른 트릭으로 환경 안의 내용의 길이를 재는 방법을 다음처럼 해도 될 거 같긴 합니다만
\newsavebox\Bodybox\newlength{\Bodylen}
\NewEnviron{ABCD}{\sbox{\Bodybox}{\BODY}\setlength{\Bodylen}{\wd\Bodybox}\ifthenelse{\lengthtest{\Bodylen<1pt}}{}{\xABC{\BODY}}}
이렇게 하는 경우
\begin{ABCD}
\end{ABCD}
와 같이 빈 줄이 와도 문자가 없는 것처럼 처리할 겁니다. 다만 길이가 0pt인 \hbox가 오거나 하는 경우 잘못 진단할 위험은 있겠죠.
testtok.tex
KTUG 한국 텍 사용자 그룹
\usepackage{environ,xifthen}
환경의 내용을 조작하기 위해서 environ 패키지를 쓰고 원래 정의했던 환경을 명령형으로 바꿔둡니다.
\newcommand{\xABC}[1]{\par\small\textsf{\textcolor{green}{[시작]}}\hspace{0.5em}\hrulefill\par #1 \par\normalsize\vspace{\baselineskip}}
string 테스트를 해서 \BODY가 비어 있으면 아무 동작도 하지 않고 그렇지 않으면 위의 \xABC를 실행하도록 새로운 명령을 다음과 같이 정의합니다.
\NewEnviron{ABC}{\ifthenelse{\equal{\BODY}{}}{}{\xABC{\BODY}}}
다만 개행문자가 공백이 하나라도 환경에 있으면 문자가 있는 것으로 간주할 겁니다. 따라서
\begin{ABC}
\end{ABC}
와 같이 빈 환경은 붙여주어야 합니다.
조금 다른 트릭으로 환경 안의 내용의 길이를 재는 방법을 다음처럼 해도 될 거 같긴 합니다만
\newsavebox\Bodybox\newlength{\Bodylen}
\NewEnviron{ABCD}{\sbox{\Bodybox}{\BODY}\setlength{\Bodylen}{\wd\Bodybox}\ifthenelse{\lengthtest{\Bodylen<1pt}}{}{\xABC{\BODY}}}
이렇게 하는 경우
\begin{ABCD}
\end{ABCD}
와 같이 빈 줄이 와도 문자가 없는 것처럼 처리할 겁니다. 다만 길이가 0pt인 \hbox가 오거나 하는 경우 잘못 진단할 위험은 있겠죠.
testtok.tex