在环境中使用命令来获取属性

在环境中使用命令来获取属性

我想使用环境中的命令来设置环境的属性。我可以使用参数来做到这一点,但如果我有更多属性,参数可能会混淆。

\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}

在此处输入图片描述

相关内容