
먼저 이 두 파일을 살펴보겠습니다.
\documentclass{article}
\parindent 0.0mm
\hyphenpenalty 500
\tolerance 700
\usepackage{lipsum}
\begin{document}
\lipsum[1-10]
\end{document}
\documentclass{article}
\usepackage{lipsum}
\begin{document}
\parindent 0.0mm
\hyphenpenalty 500
\tolerance 700
\lipsum[1-10]
\end{document}
이 두 파일은 이전과 이후에 일부 명령이 사용되었다는 점을 제외하면 내용이 동일합니다 \begin{document}
. 그러나 완전히 동일한 출력을 생성합니다.
\baselineskip
이제 명령을 추가하려는 경우 \begin{document}
.
다시 말하지만, 서문에서만 허용되는 명령이 있습니다. \usepackage
그 중 가장 일반적입니다.
확실히 우리는 그것이 \begin{document}
가장 높거나 가장 중요한 환경을 시작한다는 것을 이해합니다. 무슨 말인지 알 것입니다.
\newenvironment{document}
( latex.ltx와 같은 검색을 시도했지만 성공하지 못했습니다. 제가 올바른 위치를 찾고 있지 않은 것일 수도 있습니다.)
그런데 이 명령이 정확히 무엇을 하는 걸까요?
이 두 가지 질문에 답해주세요.
\begin{document} 명령이 정확히 무엇을 실행하나요? 그것이 켜는 것들은 무엇입니까?
일부 명령이 서문에서만 허용되는 이유는 무엇입니까?
확실히 다른 관련 문제에 대한 답변이 나올 것입니다.
답변1
\document
내부에서 (및/또는 \enddocument
) 을 검색해야 합니다.latex.ltx
, 환경은 env
매크로 쌍 \env
과 다음 으로 구성되기 때문입니다 \endenv
.
\def\document{\endgroup
\ifx\@unusedoptionlist\@empty\else
\@latex@warning@no@line{Unused global option(s):^^J%
\@spaces[\@unusedoptionlist]}%
\fi
\@colht\textheight
\@colroom\textheight \vsize\textheight
\columnwidth\textwidth
\@clubpenalty\clubpenalty
\if@twocolumn
\advance\columnwidth -\columnsep
\divide\columnwidth\tw@ \hsize\columnwidth \@firstcolumntrue
\fi
\hsize\columnwidth \linewidth\hsize
\begingroup\@floatplacement\@dblfloatplacement
\makeatletter\let\@writefile\@gobbletwo
\global \let \@multiplelabels \relax
\@input{\jobname.aux}%
\endgroup
\if@filesw
\immediate\openout\@mainaux\jobname.aux
\immediate\write\@mainaux{\relax}%
\fi
\process@table
\let\glb@currsize\@empty %% Force math initialization.
\normalsize
\everypar{}%
\ifx\normalsfcodes\@empty
\ifnum\sfcode`\.=\@m
\let\normalsfcodes\frenchspacing
\else
\let\normalsfcodes\nonfrenchspacing
\fi
\fi
\@noskipsecfalse
\let \@refundefined \relax
\let\AtBeginDocument\@firstofone
\@begindocumenthook
\ifdim\topskip<1sp\global\topskip 1sp\relax\fi
\global\@maxdepth\maxdepth
\global\let\@begindocumenthook\@undefined
\ifx\@listfiles\@undefined
\global\let\@filelist\relax
\global\let\@addtofilelist\@gobble
\fi
\gdef\do##1{\global\let ##1\@notprerr}%
\@preamblecmds
\global\let \@nodocument \relax
\global\let\do\noexpand
\ignorespaces}
다양한 것 중에서 document
환경은 다음을 시작합니다.
\documentclass
사용하지 않은 옵션 에 대해 보고합니다 .- 페이지 레이아웃을 설정합니다.
- 파일을 읽으십시오
.aux
. - 스트림을 열어서
.aux
; - 문서의 글꼴 크기를 시작합니다(
\normalsize
). \AtBeginDocument
(\@begindocumenthook
)를 통해 수집된 모든 것을 실행합니다 .- 프리앰블 전용 명령을 비활성화합니다( 를
\@preamblecmds
통해서만 프리앰블에서 사용할 수 있는 것으로 정의된 명령을 수집합니다\@onlypreamble
).
이는 LaTeX에서 사용되는 기본 정의입니다. 일부 문서는 요구 사항에 따라 이 정의를 변경하거나 추가할 수 있습니다.
document
기본적으로 패키지는 환경 시작 중에 수행되는 작업(위에서 언급) 에 개입하는 것을 포함하여 다양한 작업을 수행하기 위한 것입니다 . 분명히,geometry
그 중 하나는 특정 콘텐츠 작성을 시작하기 전에 페이지 레이아웃과 크기를 설정해야 하기 때문입니다. 그러나 보다 일반적인 원칙으로는 구조와 내용을 분리하는 것이 더 좋으며, 패키지는 구조적인 인터페이스를 제공하므로 프리앰블에 더 적합합니다. 다음 을 사용하여 환경 mypackage
내에서 매우 간단한 패키지를 로드할 수 있습니다.document
\makeatletter
\input{mypackage.sty}% Load mypackage.sty
\makeatother
\makeatletter
... 쌍 은 -in-macro 문제를 \makeatother
방지합니다 . @
그러나 일부 패키지는 서문 내에서만 사용할 수 있는 명령을 사용하여 작성됩니다. 이를 우회하는 것은 지루한 과정이며 필요하지 않습니다.