2010-03-13 2 views
15

그것은이다 내가 답을 찾을 수 없습니다 오전 간단한 질문 :LaTeX : 명령이 속한 패키지를 찾는 방법은 무엇입니까?

감안할 LaTeX의 명령, 어떻게 패키지 (들)이 속한 또는에서 온다 무엇을 알 수 있습니까?

예를 들어, \qquad horizontal spacing 명령을 사용하면 어떤 패키지가 생성됩니까? 패키지를 넣지 않아도 작동하므로 특히 골칫거리입니다!

+1

'\ qquad '는 TeX (즉 핵심 부분)에서 나왔기 때문에 LaTeX 패키지를 사용할 필요가 없습니다. –

+0

Noram : 나는 그와 같은 약간의 OCD입니다. 필자는 사용하는 명령에 대한 원래 패키지와 설명서를 알고 싶어합니다. Microsoft API를 사용하면 MSDN에서도 동일한 작업을 수행합니다. –

답변

14

LaTeX 명령을 사용하면 어떤 패키지가 속해 있거나 어떤 패키지가 제공되는지 어떻게 알 수 있습니까?

당신의 참조를 참조하십시오 :

  1. 을가 TeXbook에 대한 인덱스의 경우, 텍 라텍스를 구동하는 엔진에서 상속합니다.
  2. 그렇지 않으면 LaTeX 매뉴얼 색인에있는 경우 latex.ltx에 정의되어 있거나 패키지가 아닌 표준 클래스 파일 중 하나에 정의되어있을 가능성이 큽니다.
  3. 그렇지 않으면 색인에있는 경우 LaTeX 도우미, 페이지 번호는 아마도 그 패키지의 출처를 알려줍니다.
  4. 그렇지 않으면, 당신은 find /usr/share/texmf -name '*.sty'의 결과에 약간의 grepping을 할 수 있지만, 고통스러운 운동을 준비하십시오.
  5. http://stackoverflow.com으로 문의하십시오. 그러나 어떤 바보는 왜 당신이 알고 싶은지 묻는 것으로 응답 할 것입니다 ...
10

해당 정보는 http://www.ctan.org/tex-archive/info/symbols/comprehensive/ 이상을 검색 할 수 있습니다.

LaTeX는 TeX 상단의 매크로 언어이며, 모든 매크로는 가져올 필요가없는 TeX로 구성되어 있다는 것을 기억하십시오. \qquad은 해당 카테고리에 있습니다.

5

내가 아는 한, 이것에 대한 좋은 대답은 없습니다. 그러나 주어진 명령에 대해 시도 할 수있는 여러 기술이 있습니다. \qquad의 경우 기본 TeX의 일부입니다.

$ tex '\show\qquad' 
This is TeX, Version 3.141592 (Web2C 7.5.6) 
> \qquad=macro: 
->\hskip 2em\relax . 
\show\qquad 

? x 
No pages of output.

일부 매크로 텍 위에 유액에 의해 추가되는 등 \begin 등 :

 $ tex '\show\begin' 
This is TeX, Version 3.141592 (Web2C 7.5.6) 
> \begin=undefined. 
\show\begin 

? x 
No pages of output.

다른 모든

$ latex '\show\begin' 
This is pdfTeXk, Version 3.141592-1.40.3 (Web2C 7.5.6) 
%&-line parsing enabled. 
entering extended mode 
LaTeX2e 
Babel and hyphenation patterns for english, usenglishmax, dumylang, noh 
yphenation, greek, monogreek, ancientgreek, ibycus, pinyin, loaded. 
> \begin=macro: 
#1->\@ifundefined {#1}{\def \[email protected] {\@[email protected] {Environment #1 undefine 
d}\@eha }}{\def \[email protected] {\def \@currenvir {#1}\edef \@currenvline {\[email protected] 
}\csname #1\endcsname }}\@ignorefalse \begingroup \@endpefalse \[email protected] . 
\show\begin 

? x 
No pages of output.

반면, 당신은 항상 대화 형 모드에서 TeX이 사용할 수있는 기억 패키지에서 제공됩니다. 매크로가 어떤 패키지를 제공하는지 알고 싶다면 (구글이나 texmf 트리를 제외하고), 각 패키지가로드되었는지 확인한 후 정의되었는지 여부를 확인할 수 있습니다. 어떤 \usepackage 명령하기 전에이 정의보십시오 :

\let\oldusepackage\usepackage 
\renewcommand\usepackage[1]{ 
    \oldusepackage{#1} 
    \ifcsname includegraphics\endcsname 
    \message{^^Jincludegraphics is defined in #1^^J} 
    \let\usepackage\oldusepackage 
    \fi}

을 그리고 당신이 당신의 .tex 파일 latex을 실행할 때, includegraphics is defined in graphicx을 말한다 출력에서 ​​줄을 찾습니다. 그럴 가능성은 없지만 일부 사악한 패키지는 \usepackage으로 나쁜 일을 할 수 있으므로 작동하지 않을 수 있습니다.또 다른 대안은 단순히 어떤 패키지를로드하기 전에 관심있는 명령을 정의하는 것입니다 : 명령을 정의하는 패키지가 로딩 될 때

\newcommand\includegraphics{}

그런 다음 오류 메시지가 표시 될 수 있습니다. 많은 패키지가 \newcommand 대신 매크로를 정의하기 위해 \def\let을 사용하여 "이미 정의 된"체크를 우회하기 때문에 이전의 방법보다 실제로 신뢰성이 떨어진다. 각로드 사이에 손으로 수표를 삽입 할 수도 있습니다.

\ifcsname includegraphics\endcsname\message{^^Jdefined after graphicx^^J}\fi

3

평판이 부족하기 때문에 Steve의 답변에 대해서는 언급 할 수 없지만 조금 더 연장하고 싶습니다.

첫 번째, 그의 두 번째 접근법 (usepackage으로 손대지)에서 usepackage에 선택적 인수가있는 경우는 다루지 않습니다. 두 번째로 패키지는 종종 RequirePackage을 통해 다른 패키지에 의해로드되기 때문에 명령 정의의 실제 위치를 찾기가 어렵습니다. 그래서 스티브의 대답은 내 정제는 다음과 같습니다

\usepackage{xargs} 
\let\oldusepackage\usepackage 
\let\oldRequirePackage\RequirePackage 
\renewcommandx{\usepackage}[3][1,3]{ 
    \oldusepackage[#1]{#2}[#3] 
    \ifcsname includegraphics\endcsname 
    \message{^^Jincludegraphics is defined in #2^^J} 
    \let\usepackage\oldusepackage 
    \let\RequirePackage\oldRequirePackage 
    \fi} 
\renewcommandx{\RequirePackage}[3][1,3]{ 
    \oldRequirePackage[#1]{#2}[#3] 
    \ifcsname includegraphics\endcsname 
    \message{^^Jincludegraphics is defined in #2^^J} 
    \let\usepackage\oldusepackage 
    \let\RequirePackage\oldRequirePackage 
    \fi} 

xargs 패키지가 usepackage 권리의 특별한 옵션을 얻기 위해 여기에 사용된다 (첫 번째와 세 번째 매개 변수는 선택 사항입니다).

documentclass 다음에 직접 입력하면 includegraphics이 정의되어 있어야합니다.

관련 문제