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, 18:12

ctansearch's gravatar image

ctansearch
(inaktiv)
Akzeptiert: 84%

bearbeitet 25 Mär '14, 12:08

esdd's gravatar image

esdd
14.2k53251

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, 18:33) Clemens

@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!

(16 Mär '14, 19: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, 14:30

Speravir's gravatar image

Speravir
47729

@speravir Klasse!

(17 Mär '14, 15:14) ctansearch
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×45

Frage gestellt: 16 Mär '14, 18:12

Frage wurde angeschaut: 2,334 Mal

Zuletzt aktualisiert: 25 Mär '14, 12:08