LaTeX

인용 스타일을 내맘대로

ForceCore 2008. 12. 3. 02:31
참으로 고얀 것이. 인용 방식에는 표준이 없다. LaTeX에 이미 있는 것을 사용하라고 하면 좋은데, 콤마의 위치, 괄호의 위치, 써야하는 항목 이런 것을 다들 지멋대로 요구한다. 순서도, 글씨체 장식도...
bst파일을 수정하려고 했는데, 정말로 힘들게 생겼다. 아무거나 열어 보아도 1000줄이 넘어간다...

하지만 컴파일러의, lexer와 parser마저도 자동화되는 판에 이런것 쯤이야... 자동으로 해주는게 있다.

해결책:
custom-bib 이라는 패키지를 쓰자.
KC2007의 경우에는 KCMenu에서 custom-bib을 설치하겠다고 하면 됨.
그 뒤 KC2007이 설치된 디렉토리로 가서 merlin으로 검색한다.
파일이 두개 나온다. merlin.mbs, merlin.pdf.
CTAN에서 받아도 무방할듯. 그다지 어디 설치되느냐가 중요한 것은 아닌 패키지다.
필자는 merlin.pdf를 교재 삼아 작업을 시작했다. 시작!
웬만한 것은 merlin.mbs로 된다고 하는데...

검색을 또 해보면
makebst.tex가 있는데...

pdflatex makebst.tex
를 하면, yes, no로 계속 여러가지 질문을 할 것이다. 원하는 인용 형식을 제대로 만들려면 성심 성의껏 답한다. 정말 성심 성의가 필요하다. "이러이러하게 하쇼."라고 인용에서 요구한 것보다 생각해야 할 요소가 엄청 많다는 것을 알게될 것이다. 미칠듯한 질문 rush... ㄷㄷ

다 통과하고 끝이 왔다. 30분~1시간 정도 걸린다. 결과는? 원하던 것과 비슷한데 좀 다르다. :(
OTL
OTL
잘못되면 다시 해야 하는데...
dbj파일에 기록되어 있으니 안심.
makebst.log에도 완전히 기록되어 있으니 안심!
잘 백업해두고 trial and error로 도전... 도 한계가 존재한다.

dbj파일을 조금씩 손으로 수정할 수 있다.
latex xxx.dbj
를 하면 다시 bst파일이 옵션이 바뀌어 생성될 것이다.

결국은 어느정도 bst파일도 수정해야 하는데, 마음에 안 드는 것의 class를 찾으면 된다.
{book}
으로 검색하면 book class에서는 뭐가 있는지 설명이 되어 있다. 두둥.
italic 장식체 이런 것은 yes/no에서 충분히 가렸으니 순서만 미묘하게 다르게 되어있을 것이다.
순서 바로잡기는 쉽다.

필자의 경우.
단행본의 경우
자자명, 도서명, 출판사명, 소재지, 쪽수, 연도
형식으로 정보가 나와야 하는데
저자명, 도서명, 출판사명, 소재지, 월 연도 만 출력되었다.

FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.number.series output
      format.publisher.address output
    }
    {
      format.book.crossref output.nonnull
    }
  if$
  format.edition output
  format.date "year" output.check
  format.note output
  fin.entry
  write.url
}

이런 bst 파일이었다.
이렇게 수정:
FUNCTION {book}
{ output.bibitem
  author empty$
    { format.editors "author and editor" output.check
    }
    { format.authors output.nonnull
      crossref missing$
        { "author and editor" editor either.or.check }
        'skip$
      if$
    }
  if$
  format.btitle "title" output.check
  crossref missing$
    { format.bvolume output
      format.number.series output
      format.publisher.address output
    }
    {
      format.book.crossref output.nonnull
    }
  if$
  format.pages output
  format.edition output
  year "year" output.check
  format.note output
  fin.entry
  write.url
}

다른 것들도 비슷하게 손봐주었다.
원하는 항목을 출력하는 방법은... bst파일의 다른 부분을 보고 찍는 수밖에!!!;;;