我想实现一个类似于定理类的环境,它带有一个可选的参数,下面是我的测试代码
\documentclass{ctexart}
\usepackage{xifthen}
\newcounter{numdef}[subsection]
\setcounter{numdef}{0}
\renewcommand\thenumdef{\arabic{numdef}}
\newenvironment{ntdef}[1][]{
\vspace*{.2em}
\newcommand\makecomment{%
\ifthenelse{\isempty{#1}}
{}% if the option is empty
{#1}
}
\newcommand\makedef{\stepcounter{numdef}
\textit{定义}\ \thesubsection.\thenumdef:
}
\noindent\makedef
}{\par\vspace{.2em}}
\begin{document}
\section{A}
\subsection{B}
\noindent\textit{定义}\ 1.1.0\textit{(定义一)}:这是测试定义。\par
\begin{ntdef}[定义一]
这是第一条定义
\end{ntdef}
\begin{ntdef}
这是第二条定义
\end{ntdef}
\end{document}
然后我得到了下面的结果
第一行是一个大致的理想结果。我用 xifthen 宏包判断环境所给参数是否为空,如果不为空则输出括号内容(为了演示方便,我没有加上这段代码),但是当我给了一个非空值之后,这段话结尾就会莫名出现一个短的水平空白(红线部分),这是为什么?
经过测试,并不是 xifthen 宏包的问题。只要为环境设置非空值,就会出现这样的空白。
问题已经解决,和 xifthen 红包无关。是由于
\begin{ntdef}[定义一]
这是第一条定义
\end{ntdef}
使用环境时[参数]
后面的换行被视作空格导致,两个解决方法,
在
\begin{ntdef}[定义一]%
这是第一条定义
\end{ntdef}
或在环境的前定义末尾加上 \ignorespaces
\newenvironment{ntdef}[1][]{
\vspace*{.2em}
\newcommand\makecomment{%
\ifthenelse{\isempty{#1}}
{}% if the option is empty
{1}%
}
\newcommand\makedef{\stepcounter{numdef}
\textit{定义}\ \thesubsection.\thenumdef:
}
\noindent\makedef \ignorespaces
}{\par\vspace{.2em}}