Q&A 마당은 텍 관련 질문/답변을 위해 만들었습니다.
- 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
- 질문 전에 아래를 읽어 보세요. 좋은 질문이 좋은 답을 받을 수 있는 좋은 방법입니다.
- 질문에 맞는 제목을 붙이세요. 질문의 내용과 관련없는 "고수님", "긴급질문", "도와주세요"와 같은 제목은 답이 잘 올라오지 않습니다. 이 게시판에 올라오는 모든 글은 질문입니다. 굳이 [질문], [Q]를 적으실 필요도 없습니다.
- 내용을 충실히 적어 주시고, 같은 상황을 재현할 수 있는 최소한의 예제가 같이 있어야 합니다.
- 최소 예제는 "Minimal working example"을 읽어 보세요.
- 파일을 첨부하실 때에는 가능한 압축하여 파일 크기를 줄여서 올려주시길 바랍니다.
- 개인적으로 사용하신 글꼴이 들어 있는 경우, preparefont.sty에 관한 답변을 참조하세요.
- 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
- 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
- MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
- 사용하는 편집기는 CKeditor입니다.
- 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한 줄을 비웁니다.
- 글줄만 바꾸려면 [shift-enter]를 누르면 <BR> 태그가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.
- 수식를 문서내에 삽입하시려면 에디터를 툴바에서 [소스]를 눌러 HTML로 입력할 수 있게 바꾸신 후 <pre> </pre> tag를 사용하셔서 <pre> 여러 줄의 수식 </pre>처럼 입력하시면 좋습니다.
\newenvironment 에서 이런 일이 가능할까요?
2012.10.13 17:54
먼저 읽어주신 모든 분들의 건강을 기원합니다. 항상 도움만 얻는 군요..
제가 궁금한 것은
\newenvironment{ABC}{\par\small\textsf{\textcolor{green}{[시작]}}\hspace{0.5em}\hrulefill\par}{\par\normalsize\vspace{\baselineskip}}
과 같이 정의된 환경에서
\begin{ABC}
asfdasdfasdf
\end{ABC}
와 같이 잘 쓰고 있습니다. 그런데
\begin{ABC}
\end{ABC}
와 같이 환경안에 아무것도 없을 때, 물론 여기서 줄바꿈기호정도는 포함되어 있겠지요..
즉, TeX에서 컴파일될 아무런 내용이 없을 때는
\newenvironment{ABC}{\par\small\textsf{\textcolor{green}{[시작]}}\hspace{0.5em}\hrulefill\par}{\par\normalsize\vspace{\baselineskip}}
가 적용되지 않도록 하고 싶습니다.
\begin{ABC}
\end{ABC}
같은 것을 지워버리면 되겠지만 그러기에는 너무 일이 많군요..
혹시 환경안의 글자수를 읽어서 글자수가 0이면 if문을 활용하는 방법으로 되지 않을까요?
고수님들의 고견을 바랍니다.
행복하세요..
\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