我正在尝试使用\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
您缺少
\usepackage{calc}
允许您+
在环境定义中使用的东西。环境需要一个可选参数和一个普通参数,第一个参数应为有效的 TeX 长度。可选参数需要方括号而不是花括号。
您需要为每个元素赋予
\item
一个可选的标签。如果您想要使用粗体无字体的标签,那么请在里面使用
\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 收到“缺少项目”错误的原因。
我可以推荐乳胶伴侣作为此类事情的参考。