Новая система нумерации

Новая система нумерации

Я обращаюсь к вам, потому что хочу узнать, как создать новую команду, которая работала бы точно так же, как \Alphили \roman.

Я хотел бы создать систему нумерации: семел, бис, тер, кватер, ..., которую я бы использовал для подуравнений, подрисунков и подтаблиц.

Я создал следующий код:

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

Но я получаю эту ошибку:

! Missing number, treated as zero.

Так как же мне создать работающую команду? Другой вопрос: как создать команду такого типа, но которая не нуждается в аргументе? (Например, существуют и то, \Alphи другое \Alph{})

решение1

Используется для получения значения счетчика LaTeX в арабских цифрах.\value{⟨counter⟩}

Кстати: предлагаю полностью убрать пробелы из вывода макроса. Чтобы пользователь мог вставлять их явно, где захочет.

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

введите описание изображения здесь


Кстати: Ваш второй вопрос

Еще вопрос: как создать команду такого типа, но которая не требует аргумента? (Например, существуют \Alphи \Alph{})

мне не ясно:

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

показывает:

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

Это означает, \Alphчто это макрос, который в любом случае во время своего расширения обрабатывает неразделенный аргумент.

Этот неразделенный аргумент должен быть именем счетчика LaTeX.

Этот аргумент заворачивается в .\expandafter\@Alph\csname c@⟨counter⟩\endcsname

Гарантирует \expandafter, что control-word-token формируется из .. -конструкции перед применением к control-word-token. Control-word-token обозначает TeX- -регистр, который лежит в основе рассматриваемого LaTeX-счетчика.\c@counter\csname\endcsname\@Alph\c@counter\count

Так же \Alphесть оболочка, \@Alphкоторая служит для формирования чего-то (токена-управляющего-слова, обозначающего -регистр \count), что может быть обработано как TeX-⟨число⟩-количество из названия LaTeX-счетчика.

\@Alphв свою очередь обрабатывает аргумент, который должен быть TeX-⟨число⟩-количество.

A TeX-⟨число⟩-quantity в свою очередь может быть, например, контрольным словом-токеном, обозначающим \count-регистр, выделенный в терминах \countdef.

Но это еще не все. TeX-⟨число⟩-количество может быть, например, буквенной константой, чем-то вроде `\aили последовательностью цифр.
(Более подробная информация о правилах синтаксиса для TeX-⟨число⟩-величины можно найти в TeXBook, Глава 24: Краткое описание вертикального режима.)

Конечно, вы можете реализовать \newnumи \@newnumтак:

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

введите описание изображения здесь

решение2

Я не смог исправить это, но вот код для переопределения среды (или определения собственной среды подуравнений):

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

введите описание изображения здесь

Связанный контент