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
\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} gefragt 10 Apr '14, 23:46 ctansearch saputello |
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. 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. beantwortet 11 Apr '14, 00:03 stefan ♦♦ Ich glaube, das hatten wir schonmal angesprochen: http://www.texwelt.de/wissen/fragen/1626/wie-kann-ich-mir-einen-eigenen-eindeutig-benannten-befehlssatz-erzeugen falls, das gemeint ist.
(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
(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
\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 Herkunft der Befehle sehen will, gibt man \textbackslash showcommand ein. Dann werden die Ursprungsdateien der Befehle angezeigt. \myAcommand (hier nicht) und an der Stelle der Anwendung erscheint eine hochgestellte Zahl mit dem Index c. Am Ende des Dokumentes werden die Befehle und deren Ursprungsdatei in den \textbf{comnotes} aufgelistet, (aber hier) \showcommands \myBcommand, wenn die Befehle in der Ursprungsdatei entsprechend formuliert sind. Um es auszuprobieren \textbackslash showcommands aus- und einkommentieren. Man kann das sicher noch schöner formatieren, hier nur mal ein Ansatz. \end{document} beantwortet 12 Apr '14, 00:12 ctansearch |