这个问题与切换锻炼方式的命令。
在以下问题中,设计了以下代码
\newcommand{\Problem}{
\refstepcounter{problem}
\vspace{3.25ex plus 1ex minus .2ex}\par
\noindent\makebox[0pt][r]{\protect\fbox{\UNIproblemnumber}\qquad}%
\par\vskip-\baselineskip\vskip-\parskip
}
删除 makebox 命令后的垂直间距。例如
\Problem
\lipsum[75]
生产
这很好。当枚举环境直接跟在
解决这个问题的方法是\vspace{-\topsep}
手动在\Problem
和环境之间插入。但是,全局使用这种方法会使和正常段落enumerate
之间的间距变得混乱。\Problem
- 问题:有没有办法可以减少
\Problem
和之间的间距而不影响和正常段落enumerate
之间的间距?\Problem
代码
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{xcolor}
\newcounter{problem}
\newcommand{\UNIproblemnumberformat}{\bfseries\color{blue}}
\newcommand{\UNIproblemnumber}{\UNIproblemnumberformat\arabic{problem}}
\newcommand{\Problem}{
\refstepcounter{problem}
\vspace{3.25ex plus 1ex minus .2ex}\par
\noindent\makebox[0pt][r]{\protect\fbox{\UNIproblemnumber}\qquad}%
\par\vskip-\baselineskip\vskip-\parskip
}
\setlength\parindent{0pt}
\begin{document}
\Problem
\begin{enumerate}
\item
\end{enumerate}
\Problem
\lipsum[75]
\begin{enumerate}
\item Hi
\end{enumerate}
\lipsum[66]
\end{document}
答案1
最好通过以下环境来解决这个问题:
\documentclass{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{lipsum}
\newcommand{\UNIproblemnumberformat}{\bfseries\color{blue}}
\newlist{Problemenv}{enumerate}{1}
\setlist[Problemenv]{
labelwidth=3em,
align=left,
label=\fbox{\UNIproblemnumberformat\arabic*},
resume
}
\newenvironment{Problem}{\Problemenv\item}{\endProblemenv}
\newenvironment{penumerate}{\enumerate[leftmargin=*]}{\endenumerate}
\begin{document}
\begin{Problem}
\begin{penumerate}
\item \lipsum[3][1-2]
\item \lipsum[3][3-5]
\end{penumerate}
\end{Problem}
\begin{Problem}
\lipsum[75]
\begin{enumerate}
\item Hi
\end{enumerate}
\lipsum[66]
\end{Problem}
\end{document}
如果您想要切换格式,请按照以下步骤操作。
\documentclass{article}
\usepackage{enumitem}
\usepackage{xcolor}
\usepackage{etoolbox}
\usepackage{changepage}
\usepackage{lipsum}
\newtoggle{inline}
\settoggle{inline}{true}
\newcommand{\UNIproblemnumberformat}{\bfseries\color{blue}}
\newlist{Problemenv}{enumerate}{1}
\setlist[Problemenv]{
labelwidth=\dimexpr3em\relax,
align=left,
label=\fbox{\UNIproblemnumberformat\arabic*},
resume
}
\newenvironment{Problem}
{%
\setlength{\parindent}{0pt}%
\iftoggle{inline}
{\Problemenv\item}
{%
\adjustwidth{\dimexpr3em-\labelsep\relax}{0pt}%
\refstepcounter{Problemenvi}\subsection*{Problem \theProblemenvi}%
}%
}
{\iftoggle{inline}{\endProblemenv}{\endadjustwidth}}
\newenvironment{penumerate}{\enumerate[leftmargin=*]}{\endenumerate}
\begin{document}
\begin{Problem}
\begin{penumerate}
\item \lipsum[3][1-2]
\item \lipsum[3][3-5]
\end{penumerate}
\end{Problem}
\begin{Problem}
\lipsum[75]
\begin{enumerate}
\item Hi
\end{enumerate}
\lipsum[66]
\end{Problem}
\togglefalse{inline}
\begin{Problem}
\begin{penumerate}
\item \lipsum[3][1-2]
\item \lipsum[3][3-5]
\end{penumerate}
\end{Problem}
\begin{Problem}
\lipsum[75]
\begin{enumerate}
\item Hi
\end{enumerate}
\lipsum[66]
\end{Problem}
\end{document}
答案2
我会做以下事情。由于您已经在使用,因此enumitem
您可以按如下方式创建一个新列表:
\newlist{myenumerate}{enumerate}{1}
\setlist[myenumerate,1]{label=\arabic*., topsep=0pt}
关键topsep=0pt
在于,如何消除不理想的空间。
因此,无论何时解决问题后需要枚举列表,只需这样调用它:
\begin{myenumerate}
\item
\end{myenumerate}
整个代码如下:
\documentclass{article}
\usepackage{lipsum}
\usepackage{enumitem}
\usepackage{xcolor}
\newcounter{problem}
\newcommand{\UNIproblemnumberformat}{\bfseries\color{blue}}
\newcommand{\UNIproblemnumber}{\UNIproblemnumberformat\arabic{problem}}
\newcommand{\Problem}{
\refstepcounter{problem}
\vspace{3.25ex plus 1ex minus .2ex}\par
\noindent\makebox[0pt][r]{\protect\fbox{\UNIproblemnumber}\qquad}%
\par\vskip-\baselineskip\vskip-\parskip
}
\newlist{myenumerate}{enumerate}{1}
\setlist[myenumerate,1]{label=\arabic*., topsep=0pt}
\setlength\parindent{0pt}
\begin{document}
\Problem
\begin{myenumerate}
\item \lipsum[75]
\end{myenumerate}
\Problem
\lipsum[75]
\begin{myenumerate}
\item Hi
\end{myenumerate}
\lipsum[66]
\end{document}
生成结果:
leftmargin
您还可以通过设置键和来调整数字左侧的空间itemindent
。