LaTeX:如何查找命令所属的包?

Ash*_*ppa 20 search latex command

这是一个简单的问题,我无法找到答案:

给定一个LaTeX 命令,我如何找出它所属或来自哪个

例如,给定\qquad水平间距命令,它来自哪个包?特别麻烦,因为它不包括任何包装!

Nor*_*sey 15

给定一个LaTeX命令,我如何找出它所属或来自哪个包?

咨询您的参考:

  1. 如果它在TeXbook的索引中,它继承自驱动LaTeX的引擎TeX.
  2. 否则,如果它位于LaTeX手册的索引中,则可能latex.ltx是在标准类文件中或其中一个中定义的,而不是在包中.
  3. 否则,如果它位于LaTeX Companion的索引中,页码可能会告诉您它来自哪个包.
  4. 否则,你可以做一些花哨的结果find /usr/share/texmf -name '*.sty',但要做好准备进行痛苦的运动.
  5. 或者,您可以在http://stackoverflow.com上询问.但是,一些白痴会回答问你为什么想知道......


Rya*_*ior 10

您可以在http://www.ctan.org/tex-archive/info/symbols/comprehensive/上搜索该信息等.

请记住,LaTeX是一种基于TeX的宏语言,所有宏都由TeX组成,不需要导入.\qquad属于那一类.


Ste*_*eve 7

据我所知,对此没有真正好的一般答案.但是,对于任何给定的命令,您可以尝试许多技术.在这种情况下\qquad,它是基本TeX的一部分.请记住,您始终可以在交互模式下使用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.

LaTeX在TeX上添加了一些宏,例如\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 \reserved@a {\@latex@error {Environment #1 undefine
d}\@eha }}{\def \reserved@a {\def \@currenvir {#1}\edef \@currenvline {\on@line
 }\csname #1\endcsname }}\@ignorefalse \begingroup \@endpefalse \reserved@a .
 \show\begin

? x
No pages of output.

其他一切都来自包装.如果你真的想知道一个宏来自哪个包(除了google或grepping你的texmf树),你可以检查你加载的每个包后是否定义.尝试在任何\usepackage命令之前定义它:

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

然后当你运行latex你的.tex文件时,在输出中查找一行说明includegraphics is defined in graphicx.这不太可能,但是一些狡猾的包装可能会做坏事,\usepackage所以这可能不会起作用.另一种方法是在加载任何包之前简单地定义您感兴趣的命令:

\newcommand\includegraphics{}

然后,当加载定义命令的包时,您可能会收到错误消息.这实际上不如前一种方法可靠,因为许多软件包使用\def\let定义它们的宏而不是\newcommand绕过"已经定义的"检查.您也可以在每次加载之间手动插入支票:

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