代码

代码

这个问题与切换锻炼方式的命令

在以下问题中,设计了以下代码

\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

相关内容