我正在尝试定义一个新的 \newenvironment
,但遇到了一些问题。我需要一个使用计数器并使用额外参数来写入一些文本的环境。
我正在这个环境中工作:
\newenvironment{homeworkProblem}[1][-101010]{
\ifnum#1>0
\setcounter{homeworkProblemCounter}{#1}
\fi
\section{Problem \arabic{homeworkProblemCounter}}
\setcounter{partCounter}{1}
\enterProblemHeader{homeworkProblemCounter}
该环境与以下计数器配合使用:
\setcounter{secnumdepth}{0}
\newcounter{partCounter}
\newcounter{homeworkProblemCounter}
\setcounter{homeworkProblemCounter}{1}
\nobreak\extramarks{Problem \arabic{homeworkProblemCounter}}{}\nobreak{}
还有这个:
\documentclass[10pt]{article}
\newcommand{\enterProblemHeader}[1]{
\nobreak\extramarks{}{Problem \arabic{#1} continued on next page}\nobreak{}
\nobreak\extramarks{Problem \arabic{#1} (continued)}{Problem \arabic{#1} continued on next page}\nobreak{}
}
\usepackage{amsmath}
\newcommand{\exitProblemHeader}[1]{
\nobreak\extramarks{Problem \arabic{#1} (continued)}{Problem \arabic{#1} continued on next page\ldots}\nobreak{}
\stepcounter{#1}
\nobreak\extramarks{Problem \arabic{#1}}{}\nobreak{}
}
我尝试在这种环境下进行编辑以添加一个额外的参数,我希望此参数 {#2} 出现在以下行中:
\section{Problem \arabic{homeworkProblemCounter}}
并将其更改为:
\section{Problem \arabic{homeworkProblemCounter} ( Book {#2} )}
我使用命令\section
,因为我喜欢它的外观。我尝试编辑代码,但没有成功
谢谢
答案1
该示例有效,问题是当你用默认参数(即)定义环境(或命令)时\newenvironment{env}[2][1]{...}{...}
,使用是\begin{env}[1]{2}...
。
因此,如果你将环境定义为
\newenvironment{homeworkProblem}[2][-101010]{
\ifnum#1>0
\setcounter{homeworkProblemCounter}{#1}
\fi
\section{Problem \arabic{homeworkProblemCounter} (book #2)}}{}
那么你必须写
\begin{homeworkProblem}{a}
test
\end{homeworkProblem}
使用第一个参数的默认值,并且
\begin{homeworkProblem}[3]{b}
test
\end{homeworkProblem}
当您明确传递它时。