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>처럼 입력하시면 좋습니다.

noname

앞서 중...학생이라고 하셨으니 조금 자세히 설명할게요.

에러 메시지를 잘 보면

log.png

118라인의 \Title이라는 명령이 정의되지 않았다고 합니다. 그런데 메인 파일인 example.tex의 118행에는 그런 것이 없지요.

\usepackage 되어 있는 brainstackoverflowed_concept.sty 파일에 보니 다음과 같은 부분이 있네요.

% Headers and Footers
\RequirePackage{etoolbox}
\pretocmd\maketitle{%
	\let\Title\@title%
	\let\Author\@author%
}{}

그리고

\pagestyle{fancy}
\fancyhf{}
\lhead{\textit{Brain\_stackoverflowed}}
\chead{\textit{\Title}}

여기서 한 번 사용되고 있고요. 이것이 문제라는 것을 일단 알겠습니다. 그럼 이게 왜 문제인가?

let \Title = \@title이라는 의미의 명령이 \maketitle이라는 매크로가 실행되는 지점에서 한 번 정의되고 있다는 그것이 문제입니다. 이것은 \maketitle 정의부 내부에서 local 변수로 정의되었기 때문에 \maketitle 명령이 끝나는 지점에서 효력을 잃었습니다. 그런데 pagestyle fancy를 만드는 과정은 \maketitle 내부에 있지도 않고 있어서도 안 됩니다.

이제 이 문제를 해결하는 방법을 생각해보지요.

(1) 원래의 정의를 그대로 두고 global하게 정의하는 방법.

\RequirePackage{etoolbox}
\pretocmd\maketitle{%
	\global\let\Title\@title%
	\global\let\Author\@author%
}{}{}

\pretocmd 명령 마지막에 {}를 하나 더 두는 게 좋아 보이네요. \pretocmd{명령}{코드}{성공시}{실패시}

그런데 이 방법은 \maketitle 명령이 반드시 존재해야 하고 그것도 첫 페이지에 있어야만 에러가 발생하지 않는다는 제약을 가지고 있습니다. 아예 \maketitle이 없는 문서에서는 또 \Title이 정의되지 않았다고 불평하겠죠. 그러니 좋은 방법이라고 생각하지 않습니다.

(2) fancyhdr의 fancy에서 \Title을 사용하지 않게 수정하는 방법

또는 아예 fancy에서 \Title을 쓰지 않는 것입니다.

\chead{\textit{\@title}}

위의 코드는 sty 파일 안에 있기 때문에 \makeatletter, \makeatother가 필요 없습니다.

(3) \Title 명령을 처음부터 전역적으로 정의하는 방법

아니면, \Title 정의를 \maketitle 앞에 가둘 필요가 없다고 보고 다음처럼 할 수도 있을 거여요. 앞에서 본 \pretocmd\maketitle 부분 대신 다음처럼 하는 거지요.

\AtBeginDocument{%
	\let\Title\@title%
	\let\Author\@author%
}

===

보통 이렇게 길게 설명하지 않습니다...




XE Login