Jetzt wird's schwierig: Gesetzt den Fall, ich habe den folgenden Code, habe aber das Paket longtable in der Präamble nicht geladen.(hier auskommentiert) Nun benutze ich das Paket longtable (oder ein anderes) und/oder Befehle daraus im Quellcode. Wie könnte Latex erkennen, aus welchem Paket ein Befehl stammt, welches Paket dafür nachgeladen werden muß und wie könnte Latex dieses Paket selbständig in die Präamble einfügen oder nachladen, idealerweise im ersten oder zweiten Durchlauf? Wie müsste man Befehle und Pakete in Zukunft gestalten, sodaß Latex in der Lage ist, die Herkunft der Befehle festzustellen, die relevanten Pakete nachzuladen und darüber hinaus aussagekräftige Fehlermeldungen auszugeben und, um es auf die Spitze zu treiben, ein interaktives Nachladen der Pakete ermöglichen?

Öffne in Overleaf
Code, hier editierbar zum Übersetzen:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
%\usepackage{longtable}
\begin{document}
Normaler Text.Normaler Text.Normaler Text.Normaler Text.Normaler Text.
\begin{longtable}[c]{p{2cm}p{2cm}}\caption{longtable}\\
Das ist ein longtable&dessen Paket nachgeladen werden soll\\
\end{longtable}
Normaler Text.Normaler Text.Normaler Text.Normaler Text.Normaler Text.
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 10 Apr '14, 23:46

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

bearbeitet 31 Jul '17, 14:46

saputello's gravatar image

saputello
11.1k174365


LaTeX kann an Befehlsnahmen zunächst nicht feststellen, welches Paket den Befehl definiert. Es gibt auch viele gleich benannte Befehle in verschiedenen Paketen, wie z.B. \chead sowohl in fancyhdr als auch in scrpage2.

Zu einer möglichen Lösung können eindeutige Befehls-Präfixe beitragen, die paketspezifisch registriert sind, wie es bei expl3 bzw. LaTeX3 begonnen wurde - Autoren registrieren zentral Präfixkürzel und stellen dies jedem Befehl voran. Anhand dessen könnte ein spezielles Paket die Zuordnung treffen und das zugehörige Paket laden. Dieses eine Paket muss man dann natürlich einbinden.

Ansonsten kann man das natürlich noch scripten, also einen Präprozessor das erledigen lassen.

Permanenter link

beantwortet 11 Apr '14, 00:03

stefan's gravatar image

stefan ♦♦
18.4k163148
Akzeptiert-Rate: 50%

(11 Apr '14, 00:10) ctansearch

Auch die Bennenung bei expl3 ist natürlich nur eine Konvention, die durch jeden, der sich nicht dran halten will, durchbrochen werden kann - das prinizipielle Problem, dass Befehle jederzeit überschrieben werden können, ist dadurch natürlich nicht gelöst.

Ich glaube auch nicht, dass das hier helfen wird. Wie soll LaTeX beispielsweise dem Befehl \ch ansehen, dass er auf \chemformula_ch:nn basiert und deshalb das Paket chemformula geladen werden soll? Oder \footnote: möchte der Anwender die Basisfunktion, oder zusätzlich footmisc oder bigfoot und fnpct? Oder...

(11 Apr '14, 10:54) cgnieder

Hier ein Ansatz, wie man in den Quelldateien (sty,cls) jedem Befehl die Information mitgeben kann aus welcher Datei er stammt (Innerhalb der Befehlsdefinition). Eine reload-Funktion ist noch nicht gegeben, lässt sich aber vielleicht ableiten.

Open in writeLaTeX
Code, hier editierbar zum Übersetzen:
\documentclass[a4paper]{article}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\newcounter{showcommand}
\def\showcommands{\setcounter{showcommand}{1}}
\newcommand\newnotestype[1]{%
\newcounter{#1note}%
\expandafter\newwrite\csname the#1notes\endcsname
\expandafter\immediate\expandafter\openout
\csname the#1notes\endcsname=\jobname.#1\relax
\expandafter\newcommand\csname #1note\endcsname[1]{%
\stepcounter{#1note}%
{\small{\raisebox{1ex}{\hbox{\kern-0.4em\csname
the#1note\endcsname c\kern-0.0em}}%
}%
}%
\expandafter\immediate\expandafter\write\csname the#1notes\endcsname
{\csname the#1note\endcsname\ \unexpanded{##1 \par}}%
}%
%
\expandafter\newcommand\csname display#1notes\endcsname[1]{%
\vspace{1\baselineskip}%
\expandafter\immediate\expandafter\closeout
\csname the#1notes\endcsname
\parindent=0pt
\subsubsection*{##1} \tiny \input\jobname.#1
}%
}
\newnotestype{com}
\AtEndDocument{\displaycomnotes{comnotes}}
\newcommand{\myAcommand}{
\def\mysource{\comnote{commands.sty Line 122 Befehl, um die Wurzel aus 2 darzustellen}}
$\sqrt{4}=2 $ \ifnum\theshowcommand=1\mysource\fi\ }
\newcommand{\myBcommand}{
\def\mysource{\comnote{irgendeine.sty Line 123 um die Wurzel aus 9 darzustellen}}
$\sqrt{9}=3 $ \ifnum\theshowcommand=1\mysource\fi\ }
\begin{document}
%\showcommands
Hier wird ein Text gegeben und die Befehle werden verwendet. Wenn man die
 
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 12 Apr '14, 00:12

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

Deine Antwort
[Vorschau ausblenden]

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

Frage-Themen:

×52
×48

gestellte Frage: 10 Apr '14, 23:46

Frage wurde gesehen: 6,670 Mal

zuletzt geändert: 12 Apr '14, 00:12