
Ich bin sicher, dass ich etwas falsch mache, kann aber nicht genau herausfinden, was.
Beim Schreiben meiner Diplomarbeit habe ich ein Paket für meine Konstanten erstellt, sie funktionieren einwandfrei:
\def \earthRadius {\num{6.371e6}\si{\metre}}
\def \lightSpeed {\num{2.99793e8}\si{\metre\per\second}}
\def \lightSpeedAprox {\num{3e8}\si{\metre\per\second}}
Ich habe \num standardmäßig auf wissenschaftlich eingestellt, aber stilistisch musste ich an einigen Stellen einige Dezimalzahlen hinzufügen. Daher habe ich beschlossen, einen neuen Befehl wie diesen hinzuzufügen:
\newcommand{\thanum}[1]{\num[scientific-notation=false]{#1}}
Der Punkt ist: Ich würde es gerne mit dem Rest meiner Makros in mein Paket packen, aber \latex scheint es nicht zu mögen. Wenn ich denselben Befehl in der Hauptdatei verwende, funktioniert es einwandfrei, aber wenn ich es im Paket mache, heißt es:
! LaTeX Error: Command \thanum already defined.
Or name \end... illegal, see p.192 of the manual.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.9 ...um}[1]{\num[scientific-notation=false]{#1}}
Derselbe Fehler sowohl bei Verwendung von TeXworks als auch von ShareLatex. Mein Ansatz zur Portabilität besteht derzeit darin, leere Makros in main.tex zu deklarieren und sie im Paket zu erneuern. Das funktioniert, aber ich habe das Gefühl, dass das gesamte Makro im Paket gekapselt sein sollte. Was mache ich falsch?
Ich habe ein öffentliches Projekt in Sharelatex bearbeitbar gemacht, wobei das Problem repliziert wurde:https://www.sharelatex.com/project/551003850f9d21382c0e5437
Antwort1
Überprüfen Sie, ob \thanum
es versehentlich zweimal definiert wird.
Und wie Joseph Wright bereits in einem Kommentar angemerkt hat, sollten Sie beim Setzen kombinierter Zahlen und Einheiten „ und \SI
“ anstelle von „ \num
und “ einzeln verwenden.\si
Erwägen Sie auch die Verwendung \newcommand
von anstelle von \def
zur Definition der Kurzmakros. Auf diese Weise können Sie die Makros so definieren, dass sieoptionales Argumentdas standardmäßig unbenutzt oder leer ist. Auf diese Weise können bei Bedarf einige der Formatierungseinstellungen problemlos „on the fly“ überschrieben werden.
\documentclass{article}
\usepackage{siunitx}
\newcommand\earthRadius[1][]{%
\SI[tight-spacing,#1]
{6.371e6}{\metre}}
\newcommand\lightSpeed[1][]{%
\SI[tight-spacing,per-mode=symbol,group-digits=false,#1]
{2.99793e8}{\metre\per\second}}
\newcommand\lightSpeedApprox[1][]{%
\SI[tight-spacing,per-mode=symbol,#1]
{3e8}{\metre\per\second}}
\begin{document}
\renewcommand\arraystretch{1.25}
\begin{tabular}{ll}
\earthRadius & \earthRadius[tight-spacing=false]\\
\lightSpeed & \lightSpeed[group-digits=true]\\
\lightSpeedApprox & \lightSpeedApprox[per-mode=reciprocal]\\
\end{tabular}
\end{document}
Antwort2
Bitte posten Sie keine Links zu externen Sites, anstatt ein ordentliches Minimalbeispiel zu konstruieren. Das erschwert die Hilfestellung und macht Ihre Frage für zukünftige Benutzer mit genau ähnlichen Problemen fast wertlos.
Das Problem ist, dass Ihre Hauptdatei .tex
diese Zeilen enthält
\input{thabeatmacros.sty}
\usepackage{thabeatmacros}
Der \input
liest Ihre Paketdatei und verarbeitet deren Inhalt. Er erstellt die Befehle usw.
Anschließend lädst du das Paket, das die Datei erneut einliest und ihren Inhalt ein zweites Mal verarbeitet. Dabei wird versucht, die bereits vorhandenen Befehle erneut zu erstellen. Natürlich sind die Namen bereits vergeben und LaTeX weigert sich, vorhandene Befehle zu überschreiben, wenn du ihm mitgeteilt hast, dass sie neu sind.
Die Lösung besteht darin, einfach die erste Zeile zu entfernen. Pakete sollten nie \input
auf diese Weise sein. Sie sollten immer verwenden \usepackage{}
.
\usepackage{thabeatmacros}
Beachten Sie auch, dass der Neudefinitionsbefehl lautet \renewcommand
und nicht \rewnewcommand
. Das ist hier jedoch offensichtlich sowieso nicht das, was Sie wollen.
Daher:
\begin{filecontents}{thabeatmacros.sty}
\ProvidesPackage{thabeatmacros}[2016/02/23 v1.0 My own macros]
\newcommand* \earthRadius {\SI{6.371e6}{\metre}}
\newcommand* \lightSpeed {\SI{2.99793e8}{\metre\per\second}}
\newcommand* \lightSpeedAprox {\SI{3e8}{\metre\per\second}}
\newcommand*{\thanum}[1]{\num[scientific-notation=false]{#1}}
\endinput
\end{filecontents}
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage{amsmath}
\usepackage{thabeatmacros}
\begin{document}
\section{Introduction}
There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened.
\subsection*{TESTING DEFs WORK}
\begin{itemize}
\item {\huge\earthRadius\par}
\item {\huge\lightSpeed\par}
\end{itemize}
\end{document}