\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}
ところで、2番目の質問は
別の質問: 引数を必要としないこのタイプのコマンドを作成するにはどうすればよいでしょうか? (たとえば、 と
\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
制御ワード トークンが..構造から形成されることを保証します。制御ワード トークンは、問題の LaTeX カウンターの基礎となるTeX レジスタを示します。\c@counter
\csname
\endcsname
\@Alph
\c@counter
\count
\Alph
のラッパーは、TeXとして処理できるもの\@Alph
(レジスタを示す制御語トークン)を形成する目的を果たします。\count
⟨番号⟩-LaTeX カウンターの名前からの数量。
\@Alph
今度はTeXでなければならない引数を処理する。⟨番号⟩-量。
TeX-⟨番号⟩\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}