Насколько я знаю, нет действительно хорошего общего ответа на это. Но есть несколько методов, которые вы можете попробовать для любой команды. В случае \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 или поиска в дереве 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