Novo sistema de numeração

Novo sistema de numeração

Estou vindo até você porque gostaria de saber como criar um novo comando que funcionasse exatamente como \Alphou \roman.

Gostaria de criar um sistema de numeração: semel, bis, ter, quater, . . . que eu usaria para subequações, subfiguras e subtabelas.

Produzi o código abaixo:

\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}

Mas eu recebo este erro:

! Missing number, treated as zero.

Então, como faço para criar um comando funcional? Outra dúvida: como criar um comando desse tipo, mas que não precisa de argumento? (Por exemplo, ambos \Alphe \Alph{}existem)

Responder1

Use para obter o valor de um contador LaTeX em termos de algarismos arábicos.\value{⟨counter⟩}

A propósito: sugiro remover completamente os espaços da saída da macro. Assim, o usuário pode inseri-los explicitamente onde desejar.

\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}

insira a descrição da imagem aqui


A propósito: sua segunda pergunta

Outra dúvida: como criar um comando desse tipo, mas que não precisa de argumento? (Por exemplo, ambos \Alphe \Alph{}existem)

não está claro para mim:

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

revela:

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

Isto significa \Alphque é uma macro que em qualquer caso durante a sua expansão processa um argumento não delimitado.

Esse argumento não delimitado deve ser o nome de um contador LaTeX.

Esse argumento é envolvido em .\expandafter\@Alph\csname c@⟨counter⟩\endcsname

Isso \expandaftergarante que o token da palavra de controle seja formado a partir da construção .. antes de ser aplicado a esse token da palavra de controle. O token da palavra de controle denota o registro TeX que está subjacente ao contador LaTeX em questão.\c@counter\csname\endcsname\@Alph\c@counter\count

O mesmo \Alphocorre com um wrapper \@Alphque serve ao propósito de formar algo (um token de palavra de controle denotando um \count-registro) que pode ser processado como um TeX-⟨número⟩-quantidade do nome de um contador LaTeX.

\@Alphpor sua vez, processa um argumento que deve ser um TeX-⟨número⟩-quantidade.

Um TeX-⟨número⟩-quantidade, por sua vez, pode, por exemplo, ser um token de palavra de controle denotando um \count-registro alocado em termos de \countdef.

Mas isso não é tudo. Um TeX-⟨número⟩-quantidade pode, por exemplo, ser uma constante alfabética, algo parecido `\aou uma sequência de dígitos.
(Mais detalhes sobre as regras de sintaxe para TeX-⟨número⟩-quantidades podem ser encontradas no TeXBook, Capítulo 24: Resumo do Modo Vertical.)

Claro que você também pode implementar \newnum/ \@newnumassim:

\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}

insira a descrição da imagem aqui

Responder2

Não consegui corrigir, mas aqui está um código para redefinir o ambiente (ou definir seu próprio ambiente de subequações):

\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} 

insira a descrição da imagem aqui

informação relacionada