![用户定义环境:文章与书籍](https://linux22.com/image/459656/%E7%94%A8%E6%88%B7%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%EF%BC%9A%E6%96%87%E7%AB%A0%E4%B8%8E%E4%B9%A6%E7%B1%8D.png)
对于 LaTeX 提交的文章(例如期刊论文),我有一个非常简单的 Remark 环境:
\newcounter{remarkno}%
\renewcommand{\theremarkno}{\arabic{remarkno}}%
\newenvironment{remark}{\small%
\refstepcounter{remarkno}%
\noindent\textbf{Remark~\theremarkno}.%
\par}%
{}%
此定义将注释 1、2、... 编号到整篇文章中。我想将其扩展到正在编写的教科书,以便第 3 章的注释标签为 3.1、3.2、... 问题:假设已加载 amsmath,将 \renewcommand 更改为
\renewcommand{\theremarkno}{\arabic{\numberwithin{remarkno}{chapter}}}
注意:此更改将需要用于另外 6 个环境,即练习、解决方案、datedremark、myfootnote、chapternotes、评论。因此,如果上述替换有效,则可以轻松复制。而且只需要标准 LaTeX 2.0。(我的经验是插入较新的软件包通常会破坏代码)。
答案1
进行抽象。
\documentclass{article} % or book
\makeatletter
\newcommand{\newnumberedenvironment}[3]{%
\newcounter{#1}%
\newenvironment{#1}{#2}{#3}%
\@ifundefined{chapter}{}{\counterwithin{#1}{chapter}}%
}
\makeatother
\newnumberedenvironment{remark}{\small%
\refstepcounter{remark}%
\noindent\textbf{Remark~\theremark}.%
\par}%
{}%
\newnumberedenvironment{solution}{...}{...}
\newnumberedenvironment{datedremark}{...}{...}
\newnumberedenvironment{myfootnote}{...}{...}
\newnumberedenvironment{chapternotes}{...}{...}
\newnumberedenvironment{comment}{...}{...}
\begin{document}
\begin{remark}
Something
\end{remark}
\end{document}
如果我变成article
并book
添加\chapter{Test}
,我得到
如果您想支持新环境的参数,那就有点复杂了。
\documentclass{book} % or book
\makeatletter
\newcommand{\newnumberedenvironment}[1]{%
\def\numberedenv@name{#1}%
\@newnumberedenvironment
}
\newcommand{\@newnumberedenvironment}[3][0]{%
\newcounter{\numberedenv@name}%
\newenvironment{\numberedenv@name}[#1]{#2}{#3}%
\@ifundefined{chapter}{}{%
\expandafter\counterwithin\expandafter{\numberedenv@name}{chapter}%
}%
}
\makeatother
\newnumberedenvironment{remark}{\small%
\refstepcounter{remark}%
\noindent\textbf{Remark~\theremark}.%
\par}%
{}%
\newnumberedenvironment{solution}{...}{...}
\newnumberedenvironment{datedremark}{...}{...}
\newnumberedenvironment{myfootnote}{...}{...}
\newnumberedenvironment{chapternotes}{...}{...}
\newnumberedenvironment{comment}{...}{...}
\begin{document}
\chapter{Test}
\begin{remark}
Something
\end{remark}
\end{document}