Nuevo sistema de numeración

Nuevo sistema de numeración

Acudo a usted porque me gustaría saber cómo crear un nuevo comando que funcione exactamente como \Alpho \roman.

Me gustaría crear un sistema de numeración: semel, bis, ter, quater,. . . que usaría para subecuaciones, subfiguras y subtablas.

Produje el siguiente código:

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}

\newcommand*\newnum[1]{
  \ifcase#1\unskip
    \or semel
    \or bis
    \or ter
    \or quater
    \or quinquies
    % etc
  \fi
}
\patchcmd\subequations
  {\def\theequation{\theparentequation\alph{equation}}}
  {\def\theequation{\theparentequation\newnum{equation}}}
  {}{\FAIL}

\begin{document}
    \begin{subequations}
        \begin{align}
            f(x) &= ax +b +c \\
            &= x \left(a + \frac{b}{x} + \frac{c}{x} \right) \\
            &= ax + x \left( \frac{b}{x} + \frac{c}{x} \right)
        \end{align}
    \end{subequations}
\end{document}

Pero me sale este error:

! Missing number, treated as zero.

Entonces, ¿cómo creo un comando que funcione? Otra pregunta: ¿cómo se crea un comando de este tipo, pero que no necesita argumento? (Por ejemplo, ambos \Alphy \Alph{}existen)

Respuesta1

Se utiliza para obtener el valor de un contador LaTeX en términos de números arábigos.\value{⟨counter⟩}

Por cierto: sugiero eliminar completamente los espacios de la salida de la macro. Para que el usuario pueda insertarlos explícitamente donde lo desee.

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}

\makeatletter
\newcommand*\newnum[1]{%
  \ifcase\value{#1}%
    \or semel%
    \or bis%
    \or ter%
    \or quater%
    \or quinquies%
    % etc
    \else\@ctrerr
  \fi
}
\makeatother

% Don't use a space but use a thin space (\,) as Bernard did in his answer:    
\patchcmd\subequations
  {\def\theequation{\theparentequation\alph{equation}}}
  {\def\theequation{\theparentequation\ifnum\value{equation}<1 \else\protect\,\fi\newnum{equation}}}
  {}{\FAIL}

\begin{document}
    \begin{subequations}
        \begin{align}
            f(x) &= ax +b +c \\
            &= x \left(a + \frac{b}{x} + \frac{c}{x} \right) \\
            &= ax + x \left( \frac{b}{x} + \frac{c}{x} \right)
        \end{align}
    \end{subequations}
\end{document}

ingrese la descripción de la imagen aquí


Por cierto: tu segunda pregunta.

Otra pregunta: ¿cómo se crea un comando de este tipo, pero que no necesita argumento? (Por ejemplo, ambos \Alphy \Alph{}existen)

no me queda claro:

\documentclass{article}
\begin{document}
\show\Alph
\end{document}

revela:

> \Alph=macro:
#1->\expandafter \@Alph \csname c@#1\endcsname .
l.3 \show\Alph

Esto significa \Alphque es una macro que en cualquier caso durante su expansión procesa un argumento no delimitado.

Ese argumento no delimitado debe ser el nombre de un contador LaTeX.

Ese argumento queda envuelto en .\expandafter\@Alph\csname c@⟨counter⟩\endcsname

Esto \expandaftergarantiza que el token de palabra de control se forme a partir del constructo .. antes de aplicarlo a ese token de palabra de control. El token de palabra de control denota el registro TeX que subyace al contador LaTeX en cuestión.\c@counter\csname\endcsname\@Alph\c@counter\count

También lo \Alphes un contenedor \@Alphque sirve para formar algo (un token de palabra de control que denota un \countregistro) que puede procesarse como un TeX-⟨número⟩-cantidad del nombre de un contador LaTeX.

\@Alpha su vez procesa un argumento que debe ser un texto TeX-⟨número⟩-cantidad.

Un TeX-⟨número⟩-cantidad a su vez puede ser, por ejemplo, un token de palabra de control que denota un \countregistro asignado en términos de \countdef.

Pero eso no es todo. Un TeX-⟨número⟩-La cantidad puede ser, por ejemplo, una constante alfabética, algo así `\acomo una secuencia de dígitos.
(Más detalles sobre las reglas de sintaxis para TeX-⟨número⟩(Las cantidades se pueden encontrar en el TeXBook, Capítulo 24: Resumen del modo vertical).

Por supuesto, también puedes implementar \newnum/ \@newnumme gusta esto:

\documentclass{article}

\makeatletter
\newcommand*\@newnum[1]{%
  \ifcase#1%
    \or semel%
    \or bis%
    \or ter%
    \or quater%
    \or quinquies%
    % etc
    \else\@ctrerr
  \fi
}%
\newcommand*\newnum[1]{%
  \expandafter\@newnum\csname c@#1\endcsname
}%
\makeatother

\newcounter{testcounter}

\begin{document}

Testing \verb|\newnum| (argument must denote a \LaTeX-counter):
\medskip

\setcounter{testcounter}{1}
\newnum{testcounter}

\setcounter{testcounter}{2}
\newnum{testcounter}

\setcounter{testcounter}{3}
\newnum{testcounter}

\setcounter{testcounter}{4}
\newnum{testcounter}
\bigskip

Testing \verb|\@newnum| (argument must denote a \TeX-number-quantity):
\medskip

\makeatletter

\@newnum{1}%

\@tempcnta=2
\@newnum{\@tempcnta}%

\setcounter{testcounter}{3}
\@newnum{\value{testcounter}}%

\@newnum{`\^^D}

\makeatother

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

No pude parchearlo, pero aquí hay un código para redefinir el entorno (o definir su propio entorno de subecuaciones):

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}

\makeatletter%
\def\newnum#1{\expandafter\@newnum\csname c@#1\endcsname}
\def\@newnum#1{%
 \ifcase#1\or semel\or bis\or ter\or quater\or quinquies\or sexies\or septies\or octies\or nonies\else\@ctrerr\fi}
\renewenvironment{subequations}{%
  \refstepcounter{equation}%
  \protected@edef\theparentequation{\theequation}%
  \setcounter{parentequation}{\value{equation}}%
  \setcounter{equation}{0}%
  \def\theequation{\theparentequation\,\newnum{equation}}%
  \ignorespaces
}{%
  \setcounter{equation}{\value{parentequation}}%
  \ignorespacesafterend
}
\makeatother

\begin{document}
\setcounter{equation}{3}
\begin{equation}\label{eq}
  a = b
\end{equation}

 \begin{subequations}
 \begin{align}
 f(x) &= ax +b +c \\
 &= x \left(a + \frac{b}{x} + \frac{c}{x} \right) \\
 &= ax + x \left( \frac{b}{x} + \frac{c}{x} \right)
 \end{align}
 \end{subequations}
\end{document} 

ingrese la descripción de la imagen aquí

información relacionada