Querverweise auf externe Daten

Querverweise auf externe Daten

Gibt es ein vorhandenes Modul, mit dem auf externe Daten verwiesen werden kann? Ich möchte beispielsweise das Ergebnis meiner Analyse einer Art Bibliothek hinzufügen und ihm einen Zitatschlüssel geben, den ich in meinem gesamten Text verwenden kann. Die Idee besteht darin, Fehler/Konstanzprobleme durch die Verwendung eines Zitatschlüssels zu vermeiden und die Daten in meinem gesamten Manuskript schnell aktualisieren zu können, wenn die Analyse geändert wird.

Antwort1

Ich würde eine externe Datei bereitstellen, zB myData.txtmit folgendem Inhalt:

% Content of myData.txt
\newcommand{\myVariablePi}{3.14} 
\newcommand{\myVariableEuler}{2.71} 

In Ihr Hauptdokument können Sie diese Datei mit importieren . Anschließend können Sie sie als Variable im Dokument \input{myData.txt}verwenden .\myVariablePi

Randbemerkung 1:Sie benötigen möglicherweise ein \myVariablePi{}( {}am Ende), wenn Sie nach der Variablen ein Leerzeichen haben möchten (oder xspaceein Paket verwenden).

Randbemerkung 2:Stellen Sie sicher, dass Ihre Aussagen auch nach der Aktualisierung der Variablen noch zutreffen :).

Antwort2

Im Lichte des Kommentars könnten Sie Folgendes tun: Erstellen Sie eine Datei my-variables.stymit beispielsweise

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{my-variables}
\RequirePackage{siunitx}

% Commands for setting and getting variables
\newcommand{\setvariable}[2]{
    \expandafter\def\csname myv@riable@#1\endcsname{#2}
}
\newcommand{\getvariable}[1]{%
    \csname myv@riable@#1\endcsname
}

% My variable variable definitions
\setvariable{speed-of-light}{\SI{299 792 458}{m/s}}

und platzieren Sie es in Ihrem Home-Texmf-Baum. Bei mir auf einem Linux-Computer ist das ~/texmf/tex/latex/local. Das für Sie richtige Verzeichnis sollten Sie herausfinden, indem Sie es kpsewhich -var-value TEXMFHOMEauf dem Terminal ausführen.

Jetzt können Sie Ihre „Bibliothek“ nutzen, indem Sie beispielsweise die folgende Tex-Datei schreiben:

\documentclass{article}
\usepackage{my-variables}
\begin{document}
    The speed of light is \getvariable{speed-of-light}.
\end{document}

Dies sollte die richtige Lichtgeschwindigkeit sein, wie sie in Ihrer my-variables.styDatei gespeichert ist.

Randnotiz:Stellen Sie sich vor, Sie möchten alle Variablen hervorheben, die aus Ihrer Bibliotheksdatei gelesen werden. Ein Anwendungsfall hierfür, den ich mir vorstellen könnte, ist, dass Sie schnell durch ein Dokument blättern und sicherstellen möchten, dass tatsächlich alle Mengen aus Ihrer Bibliothek gelesen werden. Mit meiner vorgeschlagenen Lösung können Sie einfach Folgendes tun:

\renewcommand{\getvariable}[1]{%
    \colorbox{yellow!50}{\csname myv@riable@#1\endcsname}
}

oder was auch immer Sie tun möchten, um Gleichungen hervorzuheben.

Antwort3

Ausarbeitung derLösung von Bubaya Man könnte ein kleines Fehlermanagement hinzufügen für den Fall, dass man fälschlicherweise, z. B. aufgrund eines Tippfehlers, versucht, nicht definierte Werte abzurufen oder bereits definierte Werte zu definieren.

Ich habe den Code dort eingefügt, wo Makros zum Setzen und Abrufen von Werten sinddefiniertin eine eigene .sty-Datei mit dem NamenSetValues.sty.
Ich habe den Code dort eingefügt, wo diese Makros sindgebrauchtum die Werte selbst in eine andere .sty-Datei mit dem NamenMeineWerte.sty.

Beim Kompilieren des folgenden Beispiels werden diese .sty-Dateien aufgrund der filecontents*-Umgebungen automatisch erstellt.

Wenn Sie möchten, können Sie die beiden .sty-Dateien zusammenführen.

Ich habe das nicht getan, da man diese Makros möglicherweise auch mit anderen Projekten und anderen Wertesätzen verwenden möchte. ;-)

\documentclass{article}

% Let LaTeX create the file SetValues.sty in case it does not already exist
% on the system:
\begin{filecontents*}{SetValues.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{SetValues}
\newcommand\SetValues@Exchange[2]{#2#1}%
\newcommand\SetValues@Name{}%
\long\def\SetValues@Name#1#{\romannumeral0\SetValues@@Name{#1}}%
\newcommand\SetValues@@Name[2]{%
  \expandafter\SetValues@Exchange\expandafter{\csname#2\endcsname}{ #1}%
}%
\DeclareRobustCommand\GetValue[1]{%
  \@ifundefined{SetValues@@@#1}%
               {%
                 \SetValues@UndefText
                 \GenericError{\space\@spaces\@spaces}%
                   {Error: Value `#1' not defined}%
                   {Source for further information on this error is neither available nor needed.}%
                   {It was attempted to obtain a value with name `#1'\MessageBreak%
                    although such a value is not defined.\MessageBreak%
                    Either the intended value has another name (typo or the like?)\MessageBreak%
                    or it needs to be defined.%
                   }%
               }{%
                 \SetValues@Name{SetValues@@@#1}%
               }%
}%
\DeclareRobustCommand\SetValue[1]{%
  \@ifundefined{SetValues@@@#1}%
               {\SetValues@Name\newcommand*{SetValues@@@#1}}%
               {%
                 \GenericError{\space\@spaces\@spaces}%
                   {Error: Value `#1' already defined}%
                   {Source for further information on this error is neither available nor needed.}%
                   {A value with name `#1' is already defined.\MessageBreak%
                    Either choose another name for the value\MessageBreak%
                    or modify the existing definition.%
                   }%
               }%
}%
\@onlypreamble\SetValue
\AtBeginDocument{%
  \@ifpackageloaded{hyperref}{%
    \DeclareRobustCommand\SetValues@UndefText{%
      \texorpdfstring{\nfss@text{\reset@font\bfseries ??}}{??}%
    }%
  }{%
    \DeclareRobustCommand\SetValues@UndefText{%
      \nfss@text{\reset@font\bfseries ??}%
    }%
  }%
}%
\endinput
\end{filecontents*}

% Let LaTeX create the file MyValues.sty in case it does not already exist
% on the system:
\begin{filecontents*}{MyValues.sty}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{MyValues}
\RequirePackage{SetValues}
%
% At this place you can require whatever additional packages you 
% need for having LaTeX typeset your values nicely:
\RequirePackage{siunitx}
%\RequirePackage ...
%
% Now do a sequence of calls to \SetValue for defining values:
\SetValue{ApproxPi}{\num{3.1415927}}%
%\SetValue...
%
\endinput
\end{filecontents*}

%\usepackage{SetValues} % Actually you don't need to require the 
                        % SetValues-package as it is also required
                        % by the MyValues-package.
\usepackage{MyValues}

\begin{document}

$\pi$ is approximately \GetValue{ApproxPi}

\end{document}

verwandte Informationen