自定义项目对齐

自定义项目对齐

我打算将 itemize 环境与 minipage 环境结合起来,以防止段落出现在单独的页面上,但结果是项目符号和文本的对齐方式从
期望结果

实际结果
为了澄清起见,我正在寻找一种方法来结合 minipage 和 itemize/enumerate,就像下面的代码一样,以获得与第一个示例中项目符号和文本之间的相同间距。

\documentclass{article}
\begin{document}
\begin{itemize}
 \item
  \begin{minipage}{\textwidth}
    Lorem\\
    Ipsum
  \end{minipage}
\end{itemize}
\end{document}

编辑:已建议使用 minipage 选项[t],并且通常有效,但与其他环境不完全兼容。当将其与数组环境配对时,项目符号将重置为居中位置。

\documentclass{article}
\begin{document}
\begin{itemize}
 \item
  \begin{minipage}[t]{\textwidth}
    $\begin{array}{rcl}
    x &=& y\\
    y &=& x\\
    2x &\neq& 5y
    \end{array}$
  \end{minipage}
\end{itemize}
\end{document}  

数组不遵守选项 t

答案1

使用选项[t]可以minipage达到这样的效果:

\documentclass{article}
\usepackage[showframe]{geometry}
\usepackage{lipsum}
\usepackage{enumerate}
\begin{document}
\begin{itemize}
\item
  \begin{minipage}[t]{\linewidth} % Thanks to Bernard
    \lipsum[1]

    \lipsum[2]
  \end{minipage}
\end{itemize}
\lipsum[3]
\end{document}

在此处输入图片描述

笔记:\usepackage[showframe]{geometry}用于显示边距,您可以在实际文档中将其删除。

编辑:

至于冲突:

冲突的原因是整个array环境被视为一个元素,就像行中的一个字母,这意味着array环境将以第一行“为中心”。

解决这个问题的一个快速而棘手的方法:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{itemize}
 \item
  \begin{minipage}[t]{\linewidth}
    \raisebox{-\baselineskip}{$\begin{array}{rcl}
    x &=& y\\
    y &=& x\\
    2x &\neq& 5y
    \end{array}$}
  \end{minipage}
\end{itemize}
\end{document} 

在此处输入图片描述

标准解决方案array:我们[t]再次使用(感谢 koleygr):

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{itemize}
 \item
  \begin{minipage}[t]{\linewidth}
    $\begin{array}[t]{rcl}
    x &=& y\\
    y &=& x\\
    2x &\neq& 5y
    \end{array}$
  \end{minipage}
\end{itemize}
\end{document} 

在此处输入图片描述

答案2

我会这样做:

\documentclass{article}
\usepackage{lipsum}
\newsavebox{\mybottombox} % Box to save the text of the command 
\newlength{\mybottomlength} % The length of our text inside the command
\newlength{\availafter} % The available length left on the page after placing our text


% Optional argument is the minimum length after the nobottom text for not pagebreak. Change it to your needs
\newcommand{\mnobreak}[2][0pt]{\savebox{\mybottombox}{\vbox{#2}}\setlength{\mybottomlength}{\ht\mybottombox}%
\setlength{\availafter}{\dimexpr\textheight-\mybottomlength-\pagetotal\relax}\ifdim\availafter<#1%
\pagebreak\noindent\usebox{\mybottombox}%
\else%
\noindent\usebox{\mybottombox}%
\fi%
}%

\begin{document}
\lipsum[1-4]

To clarify, I'm looking for a way to combine minipage and itemize/enumerate like the code below to get the same spacing between the bullet and text as in the first example. To clarify, I'm looking for a way to combine minipage and itemize/enumerate like the code below to get the same spacing between the bullet and text as in the first example.

\begin{itemize}
 \item \mnobreak{Lorem\\Lipsum\\Lorem\\Lipsum\\Lorem}
\end{itemize}
\end{document}

删除最后的 Lorem 以查看该项目是否会随之破坏。

来源:我的旧答案这里

输出:

在此处输入图片描述

相关内容