
Estoy seguro de que estoy haciendo algo mal, pero no encuentro exactamente qué.
Al escribir mi tesis, creé un paquete para mis constantes, funcionan bien:
\def \earthRadius {\num{6.371e6}\si{\metre}}
\def \lightSpeed {\num{2.99793e8}\si{\metre\per\second}}
\def \lightSpeedAprox {\num{3e8}\si{\metre\per\second}}
Tengo \num configurado en científico de forma predeterminada, pero en cuanto al estilo necesitaba agregar algunos números decimales en algunos lugares. Entonces decidí agregar un nuevo comando como:
\newcommand{\thanum}[1]{\num[scientific-notation=false]{#1}}
El punto es: me gustaría ponerlo en mi paquete con el resto de mis macros, pero a \latex no parece gustarle. Si uso el mismo comando en el archivo principal funciona bien, pero cuando lo hago en el paquete dice:
! 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}}
El mismo error al usar TeXworks y ShareLatex. Mi enfoque para la portabilidad en este momento es declarar macros en blanco en main.tex y renovarlas en el paquete. Funciona, pero creo que toda la macro debería estar encapsulada en el paquete. ¿Qué estoy haciendo mal?
Hice un proyecto público en sharelatex editable con el problema replicado:https://www.sharelatex.com/project/551003850f9d21382c0e5437
Respuesta1
Verifique y vea si \thanum
se define dos veces sin darse cuenta.
Y, como Joseph Wright ya señaló en un comentario, debería utilizar \SI
en lugar de \num
e \si
individualmente al componer números y unidades combinados.
Además, considere usar \newcommand
en lugar de \def
definir las macros abreviadas. De esa manera, puede definir las macros para tomar unaargumento opcionalque, por defecto, no se utiliza o está vacío. Hacerlo facilita, si es necesario, anular algunas de las configuraciones de formato "sobre la marcha".
\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}
Respuesta2
No publique enlaces a sitios externos en lugar de construir un ejemplo mínimo adecuado. Hace que sea más difícil ayudar y hace que su pregunta casi no tenga valor para futuros usuarios con problemas exactamente similares.
El problema es que tu .tex
archivo principal incluye estas líneas
\input{thabeatmacros.sty}
\usepackage{thabeatmacros}
Lee \input
el archivo de su paquete y procesa su contenido. Crea los comandos, etc.
Luego carga el paquete que ingresa el archivo nuevamente y procesa su contenido por segunda vez. Esto intenta crear nuevamente los comandos ya existentes. Naturalmente, los nombres ya están en uso y LaTeX se niega a sobrescribir los comandos existentes cuando usted le dice que son nuevos.
La solución es simplemente eliminar la primera línea. Los paquetes nunca deberían estar \input
de esa manera. Siempre debes usar \usepackage{}
.
\usepackage{thabeatmacros}
Tenga en cuenta también que el comando de redefinición es \renewcommand
y no \rewnewcommand
. Sin embargo, obviamente eso no es lo que quieres aquí.
De este modo:
\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}