템플릿 이해

템플릿 이해

논문 작성을 위해 TeX 템플릿을 받았고 중복되거나 쓸모없는 작업을 수행하기 전에 코드를 이해하려고 노력했습니다. 대부분의 내용을 알아냈지만 해독할 수 없는 코드가 있습니다.

\makeatletter
 \def\thebibliography#1{\chapter*{References\@mkboth
  {REFERENCES}{REFERENCES}}\list
  {[\arabic{enumi}]}{\settowidth\labelwidth{[#1]}\leftmargin\labelwidth
\advance\leftmargin\labelsep
\usecounter{enumi}}
\def\newblock{\hskip .11em plus .33em minus .07em}
\sloppy\clubpenalty4000\widowpenalty4000
\sfcode`\.=1000\relax}
\makeatother

참고문헌 바로 앞에 있습니다.
이 신비한 언어를 이해하도록 도와줄 수 있는 사람이 있나요?

답변1

약간 다른 들여쓰기로 코드를 읽습니다.

\makeatletter
\def\thebibliography#1{%
  \chapter*{References\@mkboth{REFERENCES}{REFERENCES}}%
  \list
    {[\arabic{enumi}]}
    {\settowidth\labelwidth{[#1]}%
     \leftmargin\labelwidth
     \advance\leftmargin\labelsep
     \usecounter{enumi}}%
  \def\newblock{\hskip .11em plus .33em minus .07em}%
  \sloppy
  \clubpenalty4000
  \widowpenalty4000
  \sfcode`\.=1000\relax}
\makeatother

\thebibliography시작 코드의 기초를 형성하는 명령을 수정합니다 .

\begin{thebibliography}{<longest label>}
\bibitem{<key>} <entry text>
\end{thebibliography}

상세히

  \chapter*{References\@mkboth{REFERENCES}{REFERENCES}}%

먼저 코드는 번호가 없는 장을 조판합니다.참고자료양쪽 독서에 런닝 헤드를 추가합니다.참고자료.

  \list
    {[\arabic{enumi}]}

참고문헌은 counter를 사용하여 목록으로 조판됩니다 enumi(약간 특이하지만 표준 구현에서는 counter를 사용 enumiv하지만 일반적으로 이는 중요하지 않습니다). 라벨 번호/라벨은 대괄호 안에 표시됩니다.

    {\settowidth\labelwidth{[#1]}%
     \leftmargin\labelwidth
     \advance\leftmargin\labelsep
     \usecounter{enumi}}%

이는 이 시나리오에 적합한 마진이 있는 목록을 설정하는 표준 항목입니다.

  \def\newblock{\hskip .11em plus .33em minus .07em}%

삽입되는 추가 신축성 공간을 정의합니다 \newblock. \newblock참고문헌에서 더 큰 정보 블록을 분리하기 위해 많은 참고문헌 스타일에서 발행되는 명령입니다. 시각적인 분리가 가능하며 추가적인 신축성으로 라인 끊김을 개선하는 데 도움이 될 수 있습니다.

  \sloppy

줄바꿈에 대한 매개변수를 설정합니다.\까다로움, \엉성함, \긴급 신장, \관용, \hbadness의 의미는 무엇입니까?. 이 설정은 일반적으로 과도한 내용을 방지하는 데 유용하지만 긴 텍스트 단락의 경우 수준 이하의 결과를 제공할 수 있습니다. 아마도 허용될 수 있는 참고문헌의 경우.

  \clubpenalty4000
  \widowpenalty4000

과부와 고아를 제어하기 위한 매개변수를 설정합니다. 보다과부/고아 라인을 방지하려면 어떻게 해야 합니까?그리고https://texfaq.org/FAQ-widows.

  \sfcode`\.=1000\relax

.참고문헌에서 문장 끝 s 뒤의 더 큰 공간을 비활성화합니다 . 또한보십시오문장 사이의 이중 공백.


의 표준 정의와 비교 report.cls(에서는 동일 book.cls하지만 약간만 다름 article.cls)

\newenvironment{thebibliography}[1]
     {\chapter*{\bibname}%
      \@mkboth{\MakeUppercase\bibname}{\MakeUppercase\bibname}%
      \list{\@biblabel{\@arabic\c@enumiv}}%
           {\settowidth\labelwidth{\@biblabel{#1}}%
            \leftmargin\labelwidth
            \advance\leftmargin\labelsep
            \@openbib@code
            \usecounter{enumiv}%
            \let\p@enumiv\@empty
            \renewcommand\theenumiv{\@arabic\c@enumiv}}%
      \sloppy
      \clubpenalty4000
      \@clubpenalty \clubpenalty
      \widowpenalty4000%
      \sfcode`\.\@m}
     {\def\@noitemerr
       {\@latex@warning{Empty `thebibliography' environment}}%
      \endlist}
\newcommand\newblock{\hskip .11em\@plus.33em\@minus.07em}

우리는 다음과 같은 차이점에 주목합니다:

  • 귀하의 코드는 시작 코드만 재정의합니다(아마도 종료 코드는 변경되지 않은 상태로 유지됩니다).
  • 귀하의 코드 enumi에서는 enumiv. 실제로 그 차이는 거의 중요하지 않습니다.
  • 표준 코드에는 코드에 하드 코딩된 값( [...]vs \@biblabel{...}; Referencesvs \bibname; )이 있는 일부 위치에 사용자 정의 가능한 매크로가 있습니다.
    • 특히 표준 클래스는 를 인쇄하며 \bibname기본값은 다음과 같습니다.서지, 귀하의 코드에는참고자료하드 코딩되었습니다. 이것은 귀하의 코드와 '일반적인 사용'에 대한 표준 정의 사이의 유일한 눈에 띄는 차이점에 관한 것입니다( \def\@biblabel#1{[#1]}정의에 하드 코딩된 의 표준 정의를 가정 ).
  • 코드가 \newblock시작 코드에서 재정의되므로 문서에서 해당 명령에 대한 모든 변경 사항은 무효화됩니다.

FWIW 내가 찾았어http://kb.mit.edu/confluence/x/YJ47당신이 보여준 코드를 거의 추천합니다. 앨런 호에닉(Alan Hoenig)TeX Unbound: 글꼴, 그래픽 등에 대한 LaTeX 및 TeX 전략에 대해서도 비슷한 정의를 보여줍니다.피. 546. 정의는 의 정의와 스타일이 매우 유사합니다.apalike.sty. 또한 .sty(enumihttp://mirrors.ctan.org/macros/latex209/contrib/misc/chapref.sty,http://mirrors.ctan.org/macros/latex209/contrib/misc/cites.sty). 어쩌면 코드가 이전 LaTeX 2.09 코드에서 영감을 얻었을까요?

관련 정보