我的情况

我的情况

我的情况

itemize我有一个由一组minipage(或varwidth,无论......)组成的环境

我们把这个称为环境myItemize

我在垂直间距方面遇到了困难\end{myItemize}

(我不关心之前的垂直间距\begin{

所有代码都在最后。

myItemize:之后有常规间距

通过摆弄myItemize定义,我可以让它在“常规文本”

插图 :

在此处输入图片描述

\item前后间距myItemize:不可以

如果myItemize嵌套在itemize,则特别指定间距不再相关。

有人可以向我展示在两种情况下施展魔法才能使之后的间距myItemize与之后的间距相同吗?itemize

我尝试了一下,\ignorespacesafterend但没有成功!

插图 :

在此处输入图片描述

代码

\documentclass[12pt]{article}
\begin{document}

\newenvironment{myItemize}
{%
  \noindent
  \begin{minipage}{\linewidth}
    \begin{itemize}
}
{%
    \end{itemize}
    \strut
  \end{minipage}
  \vspace{-2.3\baselineskip}
  \vspace{-\lineskip}

  \strut
}
\newcommand\myCommand[2]
{
\begin{minipage}{.5\linewidth}
  \begin{#1}
    \item this is #2
    \item spacing below is about \textsc{ok}
  \end{#1}

  dummy below

  \hrulefill
\end{minipage}
}

\myCommand{myItemize}{{\verb!myItemize}}%
\myCommand{itemize}{{\verb!itemize}}

\begin{itemize}
  \item dummy item
    \begin{itemize}
      \item this is \verb!itemize!
      \item spacing is \textsc{ok}
    \end{itemize}
  \item dummy item

    \begin{myItemize}
      \item this is \verb!myItemize!
      \item spacing below is not \textsc{ok}
      \item I don't care about above spacing
    \end{myItemize}

  \item dummy item
\end{itemize}


\end{document}

干杯,

答案1

\begin首先,在环境中使用。您的原始代码将扩展为:

\begin{MyItemize}
\begin{minipage}
\begin{itemize}
\end{MyItemize}
\end(itemize}
\end{minipage}

这是不正常的。(\end测试)\@currenvir#1

其次,除了在 vmode 中时,\item添加\itemsep。因此,问题的一部分是如何避免在不添加额外行的情况下处于 vmode 中。无论如何,解决方案是将 添加到itemize 的\strut最后\item而不是末尾。

第三,itemize 以 skip 结尾,而 minipage 没有。我能找到的唯一一种\myCommand不添加行就能修复对齐的方法是使用\unskipin \myCommand,然后将 skip 放回去。(实际上,删除的 skip 是13.0pt plus 6.0pt minus 8.0ptwhereas \baselineskip=14.5pt。我还没能识别 itemize 使用的 skip 的名称。)

\documentclass[12pt]{article}

\newenvironment{myItemize}
{%
  \noindent
  \minipage{\linewidth}\null
    \itemize
}
{%
    \strut\enditemize
  \endminipage
}

\newcommand\myCommand[2]
{
\begin{minipage}[t]{.5\linewidth}\null
  \begin{#1}
    \item this is #2
    \item spacing below is about \textsc{ok}
  \end{#1}\unskip\par\vskip\baselineskip

  dummy below \the\parskip

  \hrulefill
\end{minipage}
}
\begin{document}
\myCommand{myItemize}{myItemize}%
\myCommand{itemize}{itemize}

\begin{itemize}
  \item dummy item
    \begin{itemize}
      \item this is \verb!itemize!
      \item spacing is \textsc{ok}
    \end{itemize}
  \item dummy item \smash{\rule{1pt}{\dimexpr\baselineskip+\itemsep}}

    \begin{myItemize}
      \item this is \verb!myItemize!
      \item spacing below is not \textsc{ok}
      \item I don't care about above spacing
    \end{myItemize}

  \item dummy item \smash{\rule{1pt}{\dimexpr\baselineskip+\itemsep}}
\end{itemize}

\end{document}

演示

答案2

我可能在这个问题上没有很好地解释自己。

如果环境后面跟着 ,那么 John 的解决方案是可以的\item,但对于常规文本则不行,但我希望“后” vspace无论如何都是正确的。

我从David Carlisle 的解决方案,有条件地摆脱\baselineskip由引入的额外内容\item

输出

在此处输入图片描述

代码

\documentclass[12pt,border=5pt]{standalone}

\makeatletter
\def\detectItem{%
  \@ifnextchar\item%
    {\par\kern-\baselineskip}%
    {}%
}
\makeatother

\def\useDetectItem#1\ignorespaces\fi{#1\fi\detectItem}

\newenvironment{myItemize}
{%
  \noindent
  \minipage{\linewidth}
    \itemize
}
{%
    \strut%\smash{\rule[\dimexpr-\baselineskip-\itemsep]{1pt}{1cm}}
    \enditemize
  \endminipage%
  \par\kern\dimexpr\baselineskip-.7\lineskip\relax
  \aftergroup\useDetectItem}

\newcommand\myCommand[2]
{%
\begin{minipage}{.5\linewidth}
  \begin{#1}
    \item this is {\verb!#2}
    \item spacing below is \textsc{ok}
  \end{#1}
  dummy below

  \hrulefill
\end{minipage}%
}
\begin{document}

\begin{minipage}{390pt}
\myCommand{myItemize}{myItemize}%
\myCommand{itemize}{itemize}


\begin{itemize}
  \item dummy item
    \begin{itemize}
      \item this is \verb!itemize!
      \item spacing is \textsc{ok}
    \end{itemize}
  \item dummy item \smash{\rule{1pt}{\dimexpr\baselineskip+\itemsep}}

    \begin{myItemize}
      \item this is \verb!myItemize!
      \item spacing below is now \textsc{ok}
      \item I don't care about above spacing
    \end{myItemize}
  \item dummy item \smash{\rule{1pt}{\dimexpr\baselineskip+\itemsep}}
\end{itemize}
\end{minipage}

\end{document}

相关内容