ЛАТЕКС: Как найти пакет (пакеты), которому принадлежит команда?

Это - простой вопрос, на который я не могу найти ответ:

Учитывая команду LaTeX, как я узнаю, какому пакету (пакетам) она принадлежит или прибывает из?

Например, данный \qquad команда пространства по горизонтали, из какого пакета это прибывает? Особенно неприятный, так как это работает без включения любого пакета!

20
задан Ashwin Nanjappa 13 March 2010 в 23:55
поделиться

3 ответа

Учитывая команду LaTeX, как мне узнать, к какому пакету (пакетам) она принадлежит или из которых происходит?

Проконсультируйтесь со своими ссылками:

  1. Если она находится в индексе TeXbook, она унаследована от TeX, движок, который управляет LaTeX.
  2. В противном случае, если он находится в указателе к руководству LaTeX, он, вероятно, определен в latex.ltx или в одном из стандартных файлов классов, а не в пакете.
  3. В противном случае, если он находится в индексе к The LaTeX Companion , номер страницы, вероятно, говорит вам, из какого он пакета.
  4. В противном случае вы могли бы проделать какую-нибудь причудливую работу с результатами поиска find / usr / share / texmf -name '* .sty' , но будьте готовы к болезненному упражнению.
  5. Или вы можете спросить на http://stackoverflow.com . Но тогда какой-то идиот ответит, спросив, почему вы хотите знать ...
15
ответ дан 30 November 2019 в 00:13
поделиться

Вы можете найти http://www.ctan.org/tex-archive/info/symbols/comprehensive/ эту и другую информацию.

Помните, что LaTeX - это макроязык поверх TeX, и все макросы состоят из TeX, который не нужно импортировать. \qquad находится в этой категории.

10
ответ дан 30 November 2019 в 00:13
поделиться

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

Похожие вопросы: