具有多个参数的新环境使用问题

具有多个参数的新环境使用问题

我正在尝试使用\newenvironment别人编写的:

使用以下代码:

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}


\newenvironment{alignedDescription}[2][0pt]
  {\begin{list}{}%
    {\renewcommand\makelabel[1]{\textsf{\bf##1}\hfil}%
     \settowidth\labelwidth{\makelabel{#2}}%
     \setlength\leftmargin{\labelwidth+\labelsep + #1}}}%
  {\end{list}}

\begin{document}


\begin{alignedDescription}{A}{B}
\item A
\item B
\end{alignedDescription}

\end{document}

我不明白它是如何工作的。但可以肯定它不能正常工作!它显示错误。

你能帮助我理解这个环境是如何运作的吗?

我已经用 Google 搜索过,但没有找到任何可以解决我的问题的方法。

答案1

  1. 您缺少\usepackage{calc}允许您+在环境定义中使用的东西。

  2. 环境需要一个可选参数和一个普通参数,第一个参数应为有效的 TeX 长度。可选参数需要方括号而不是花括号。

  3. 您需要为每个元素赋予\item一个可选的标签。

  4. 如果您想要使用粗体无字体的标签,那么请在里面使用\textbf{}而不是,因为旧的命令(如)会忽略封闭的字体选择。\bf\textsf{}\bf

尝试一下:

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{calc}

\newenvironment{alignedDescription}[2][0pt]
  {\begin{list}{}%
    {\renewcommand\makelabel[1]{\textsf{\textbf{##1}}\hfil}%
     \settowidth\labelwidth{\makelabel{#2}}%
     \setlength\leftmargin{\labelwidth+\labelsep + #1}}}%
  {\end{list}}

\begin{document}


\begin{alignedDescription}[5pt]{Longest label}

\item[Label] A first thing
\item[B] Another thing

\end{alignedDescription}

\end{document}

怎么\newenvironment運作?

要在 LaTeX 中定义一个没有参数的简单新环境,我们写入

\newenvironment{name}{...opening commands...}{...closing commands...}

如果我们想向环境传递(最多 9 个)参数,我们可以这样写

\newenvironment{name}[n]{...opening stuff...}{...closing stuff...}

其中是 1 到 9 之间的数字,每个参数都以、等n形式存在。因此,定义为...opening stuff...#1#2

\newenvironment{foo}[3]{...opening...}{...closing...}

被称为

\begin{foo}{a}{b}{c}
   ... foo contents ...
\end{foo}

为了增加复杂性,LaTeX 允许我们将第一个参数设为可选。为此,我们提供了一个默认值,如下所示:

\newenvironment{name}[n][default_for_#1]{...opening...}{...closing...}

因此,环境定义为

\newenvironment{bar}[3][3.1415]{...open...}{...close...}

可以称为

\begin{bar}{b}{c}
   ... contents of bar with #1=3.1415 ...
\end{bar}

\begin{bar}[2.718]{b}{c}
   ... contents of bar with #1=2.718 ...
\end{bar}

请注意,如果存在,可选的第一个参数必须位于 [括号] 中。

原始问题中发生的事情是,定义的环境需要 2 个参数,第一个是可选的,但 OP 给出了两个参数,它们都放在 {braces} 中;因此 TeX 使用第一个参数的默认值,将第一个 {brace} 作为第二个参数,并将第二个 {brace} 视为环境内容的一部分。由于环境是一个列表,内容应该以 开头\item,这就是 OP 收到“缺少项目”错误的原因。

我可以推荐乳胶伴侣作为此类事情的参考。

相关内容