向多行列表项添加右对齐文本?

向多行列表项添加右对齐文本?

我的问题类似于向列表项添加右对齐文本?。重要的区别是我的项目跨越多行。

  • 右对齐文本本身不会超过 1 行。
  • 右对齐文本必须位于第一的行。
  • 第一行末尾和右对齐文本开头之间的间距必须大于指定的最小距离X
  • 必须允许该项目第一行之后的行超出第一行。
  • 在代码中,项目文本的内容不得被右对齐文本的内容打断。

我无法满足最终条件。以下是我制作的:

期望的结果。

这是我的代码:

\begin{itemize}
    \item
        This item spans two lines.
        This item spans two lines.
        This item
        \hfill \textit{Some right-aligned text.} \\
        spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
\end{itemize}

我无法满足不中断条件,这是有问题的,因为每当我更改项目文本的内容时,我都需要删除右对齐的文本,更改项目文本,然后通过繁琐的反复试验找出在哪里重新插入右对齐的文本。一定有更好的方法。

我愿意接受任何能够产生相同视觉效果并满足无中断条件的解决方案,即使它们有些不合常规。但是,我认为必须有一种简单的方法来实现这一点。

解决这个问题的另一种方法是使用表格环境,允许单元格的内容溢出。有人知道如何让表格单元格的内容溢出右侧吗?

提前致谢!

答案1

这用作\quad“最小距离 x”(很容易用替代方案代替,\hspace但不是\hfill)。它用于\hangindent提供间隙,并\llap覆盖提供的空间。

\documentclass{article}
\newsavebox{\tempbox}
\begin{document}
\savebox{\tempbox}{\quad\textit{Some right-aligned text.}}% measuer width
\begin{itemize}
    \item\parbox[t]{\linewidth}{%
      \hangindent=-\wd\tempbox
      \hangafter=-1
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.}\llap{\usebox\tempbox}
\end{itemize}
\end{document}

此版本使用垂直重叠,\parbox因此文本不会跨页。

\documentclass{article}
%\usepackage{showframe}% alignment tool
\newsavebox{\tempboxa}
\newsavebox{\tempboxb}
\begin{document}
%\noindent\rule{\textwidth}{43\baselineskip}% check page breaking

\savebox{\tempboxa}{\quad\textit{Some right-aligned text.}}% measuer width
\begin{itemize}
    \item\strut\makebox[\linewidth][r]{\usebox\tempboxa}%
      \setbox\tempboxb=\vbox{\hsize=\textwidth
        \leftskip=\csname @totalleftmargin\endcsname
        \hangindent=-\wd\tempboxa
        \hangafter=-1
        \strut
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
        This item spans two lines.
      \strut}\par\vskip-\baselineskip
      \unvbox\tempboxb
\end{itemize}
\end{document}

相关内容