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'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.3k163148
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
\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}
Permanenter link

beantwortet 12 Apr '14, 00:12

ctansearch's gravatar image

ctansearch
(ausgesetzt)
Akzeptiert-Rate: 18%

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
×48

gestellte Frage: 10 Apr '14, 23:46

Frage wurde gesehen: 6,400 Mal

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