我想使用环境中的命令来设置环境的属性。我可以使用参数来做到这一点,但如果我有更多属性,参数可能会混淆。
\newenvironment{environment_example} {
\newcommand\thetitle{Default title.}
\newcommand\title[1]{\renewcommand\thetitle{#1}}
This is the \thetitle
}
用法:
\begin{environment_example}
\title{A title text}
\end{environment_example}
这与图形环境非常相似,其中标题由命令设置:
\begin{figure}
\caption{Some Caption}
\end{figure}
编辑:但是它不起作用。我该怎么做?
答案1
代码无法运行的原因如下:
\newcommand{\title}
失败,因为\title
已经有许多类提供了 → 使用\renewcommand{\title}
。- 因为它是其他命令(实际上是环境)中的重新定义,所以参数是
##1
,而不是#1
。
逻辑错误是\thetitle
在环境启动代码中使用——在调用时,\title
根本没有使用。
→\thetitle
必须放在\title
调用之后。否则请使用与 不同的接口environment
。
\documentclass{article}
\providecommand{\title}[1]{}% Make sure, \title is available
\providecommand{\thetitle}{Default Title}%
\newenvironment{environmentexample}{%
\renewcommand{\title}[1]{%
\renewcommand{\thetitle}{##1}%
}
This is the \thetitle.% too early
}{}
\makeatother
\begin{document}
\begin{environmentexample}
\title{A title text}
This is the title (now): \thetitle%
\end{environmentexample}
\end{document}
我建议使用一个可选参数来保存标题,检查 opt. 参数是否为空\notblank{}
并删除该\title
命令:
\documentclass{article}
\usepackage{etoolbox}
\providecommand{\title}[1]{}% Make sure, \title is available
\providecommand{\thetitle}{Default Title}%
\newenvironment{environmentexample}{%
\renewcommand{\title}[1]{%
\renewcommand{\thetitle}{##1}%
}
This is the \thetitle.% too early
}{}
\newenvironment{otherenvironmentexample}[1][]{%
\notblank{#1}{%
\renewcommand{\thetitle}{#1}%
}{}
This is the \thetitle.%
}{}
\makeatother
\begin{document}
\begin{environmentexample}
\title{A title text}
This is the title of the other environment: \thetitle
\end{environmentexample}
\begin{otherenvironmentexample}
Something inside
\end{otherenvironmentexample}
\begin{otherenvironmentexample}[Let's change the title]
Something inside again!
\end{otherenvironmentexample}
\end{document}