新的編號系統

新的編號系統

我來找你是因為我想知道如何創建一個與\Alph或完全相同的新命令\roman

我想創造一個編號系統:semel、bis、ter、quater、。 。 。我將用於子方程式、子圖和子表。

我產生了以下程式碼:

\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控製字令牌是在應用於該控製字令牌之前由..構造形成的。控製字令牌表示 TeX暫存器,它是所討論的 LaTeX 計數器的基礎。\c@counter\csname\endcsname\@Alph\c@counter\count

\Alph包裝器也是如此,其目的是形成可以作為 TeX 處理的\@Alph東西(表示暫存器的控製字令牌)\count⟨數字⟩-LaTeX 計數器名稱中的數量。

\@Alph依序處理一個參數,該參數必須是 TeX-⟨數字⟩-數量。

一個 TeX-⟨數字⟩-quantity 又可以是例如控製字令牌,表示\count根據 分配的暫存器\countdef

但這還不是全部。一個 TeX-⟨數字⟩-quantity 可以是字母常數、類似的東西`\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} 

在此輸入影像描述

相關內容