Это - простой вопрос, на который я не могу найти ответ:
Учитывая команду LaTeX, как я узнаю, какому пакету (пакетам) она принадлежит или прибывает из?
Например, данный \qquad
команда пространства по горизонтали, из какого пакета это прибывает? Особенно неприятный, так как это работает без включения любого пакета!
Учитывая команду LaTeX, как мне узнать, к какому пакету (пакетам) она принадлежит или из которых происходит?
Проконсультируйтесь со своими ссылками:
latex.ltx
или в одном из стандартных файлов классов, а не в пакете. find / usr / share / texmf -name '* .sty'
, но будьте готовы к болезненному упражнению. Вы можете найти http://www.ctan.org/tex-archive/info/symbols/comprehensive/ эту и другую информацию.
Помните, что LaTeX - это макроязык поверх TeX, и все макросы состоят из TeX, который не нужно импортировать. \qquad
находится в этой категории.
Насколько мне известно, на этот вопрос нет действительно хорошего общего ответа. Но есть ряд методов, которые вы можете попробовать для каждой данной команды. В случае \ 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 определяется в graphicx
. Это маловероятно, но некоторые хитрые пакеты могут делать плохие вещи с \ usepackage
, поэтому есть шанс, что это может не сработать. Другой альтернативой было бы просто определить интересующую вас команду перед загрузкой любых пакетов:
\newcommand\includegraphics{}
Тогда вы можете получить сообщение об ошибке, когда пакет, который определяет команду, загружается. На самом деле это менее надежно, чем предыдущий подход, поскольку многие пакеты используют \ def
и \ let
для определения своих макросов, а не \ newcommand
, минуя "уже -определенная "проверка. Вы также можете вручную вставить чек между каждой загрузкой:
\ifcsname includegraphics\endcsname\message{^^Jdefined after graphicx^^J}\fi