3
1

Manchmal suche ich die ursprüngliche (und vollständige) Befehlsdefinition eines Latex-Befehls. Der Consolen-Befehl \show bringt da nur sehr dünne Informationen, eine grep-Suche im TeX-Verzeichnis viele Anwendungen und Redefinitionen, unter denen die ursprüngliche Definition nur sehr schwer oder auch gar nicht herauszufinden ist. Gibt es ein Verzeichnis von Befehlen und Makros oder eine Möglichkeit, einzelne Makros aus den Paketen herauszufiltern oder auch nur eine Möglichkeit herauszufinden, wo ein Befehl oder Makro das erste Mal definiert wurde?

gefragt 16 Mär '14, 23:12

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 25 Mär '14, 17:08

esdd's gravatar image

esdd
17.7k254256

4

Ich verstehe die Frage nicht... Was genau meinst Du mit »ursprüngliche« Definition? Die Definition eines Makros wird mit \show ja gezeigt und man sieht auch, ob es Hilfsmakros aufruft, deren Definition man sich wiederum mit \show anzeigen lassen kann. Darüber, ob ein Makro umdefiniert wurde, gibt es (soweit ich weiß) keine Info. Wenn Du keine Pakete lädst, hast Du die reinen (ursprünglichen) LaTeX Kernel-Befehle zur Verfügung, die in latex.ltx definiert werden und in source2e beschrieben sind.

(16 Mär '14, 23:33) cgnieder

@Clemens Ok, mit dem Hinweis kann ich was anfangen. \show zeigt allerdings nur die direkte und minimale Definition und auch nicht, wo genau sie erzeugt wird und welche Vordefinitionen dazugehören. (von Zeile x bis Zeile y in Datei z) Hilfreicher Hinweis!

(17 Mär '14, 00:07) ctansearch

Das Perlskript texdef.pl sollte Dein Freund sein, das sowohl in MiKTeX als auch in TeX Live enthalten ist. Um zu sehen, was damit möglich ist, gib in Windows in die Kommandozeile texdef -h ein (ob die Angabe ohne Dateiendung auch in Linux und MacOS X funktioniert, weiß ich nicht).

Nebenbemerkung: Für MiKTeX muss eine externe Perl-Distribution installiert sein, TeX Live dagegen verwendet einen eigenen Perl-Interpreter.

Um eine Definition unter LaTeX herauszufinden, gibt man texdef -t latex ⟨befehl⟩ ein, der Backslash vor dem Befehl kann dabei entfallen. Hinweis: Für texdef -t ⟨TeX-Variante⟩ existieren Abkürzungen, die in MiKTeX nicht funktionieren, also zum Beispiel: texdef -t latex ⟨befehl⟩ geht, latexdef ⟨befehl⟩ dagegen nicht.
Konkret für Deine Frage dürfte noch die Option --source oder kurz -s interessant sein.

Man kann auch Einschränkungen machen auf eine Klasse (-c ⟨klasse⟩) oder ein Paket (-p ⟨paket⟩).
(Auch -t, -c und -p sind genau wie -s Kurzversionen der entsprechenden Optionen.)

Ein Beispiel:

C:\>texdef -t latex -c article section

\section:
\long macro:->\@startsection {section}{1}{\z@ }{-3.5ex \@plus -1ex \@minus -.2ex
}{2.3ex \@plus .2ex}{\normalfont \Large \bfseries }

C:\>texdef -t latex -s -c article section
% article.cls, line 312:
\newcommand\section{\@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\normalfont\Large\bfseries}}

C:\>texdef -t latex -s -c article @startsection
% latex.ltx, line 5628:
\def\@startsection#1#2#3#4#5#6{%
  \if@noskipsec \leavevmode \fi
  \par
  \@tempskipa #4\relax
  \@afterindenttrue
  \ifdim \@tempskipa <\z@
    \@tempskipa -\@tempskipa \@afterindentfalse
  \fi
  \if@nobreak
    \everypar{}%
  \else
    \addpenalty\@secpenalty\addvspace\@tempskipa
  \fi
  \@ifstar
    {\@ssect{#3}{#4}{#5}{#6}}%
    {\@dblarg{\@sect{#1}{#2}{#3}{#4}{#5}{#6}}}}

Die Angabe ohne -s ist anscheinend diejenige, die man mit \show erhalten würde. Im letzten Beispiel bei der Suche nach der Definition von \@startsection hätte offensichtlich die Option -c article auch entfallen können, da die Definition in latex.ltx gefunden wurde.

Permanenter link

beantwortet 17 Mär '14, 19:30

Speravir's gravatar image

Speravir
497139
Akzeptiert-Rate: 25%

@speravir Klasse!

(17 Mär '14, 20:14) ctansearch
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×52

gestellte Frage: 16 Mär '14, 23:12

Frage wurde gesehen: 8,351 Mal

zuletzt geändert: 25 Mär '14, 17:08