creando un nuevo comando en mi propio paquete

creando un nuevo comando en mi propio paquete

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 \thanumse define dos veces sin darse cuenta.

Y, como Joseph Wright ya señaló en un comentario, debería utilizar \SIen lugar de \nume \siindividualmente al componer números y unidades combinados.

Además, considere usar \newcommanden lugar de \defdefinir 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".

ingrese la descripción de la imagen aquí

\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 .texarchivo principal incluye estas líneas

\input{thabeatmacros.sty}
\usepackage{thabeatmacros}

Lee \inputel 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 \inputde esa manera. Siempre debes usar \usepackage{}.

\usepackage{thabeatmacros}

Tenga en cuenta también que el comando de redefinición es \renewcommandy 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}

macros fijas

información relacionada