在列表中将任何内容放在 \item 前面

在列表中将任何内容放在 \item 前面

例如如果我有这个列表:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}

\begin{document}

   \begin{itemize}
    \item one
    \clap{some text}\item two 
    \item three
    \end{itemize}

\end{document}

它的编译结果如下:

在此处输入图片描述

第一个项目符号的位置被渲染在哪里some text,但我希望它位于我用箭头标记的位置。您有什么想法吗?

答案1

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}

\begin{document}

   \begin{itemize}
    \item one
    \item \makebox[0pt][r]{some text\hspace{0.5cm}}two
    \item three
    \end{itemize}

\end{document}

在此处输入图片描述

答案2

按照@UlrikeFischer 的想法,这里有一种如何使用流畅的用户界面的方法,即语法是

\item[<mark>](<text before label>)

注意两个都参数是可选的:

\begin{itemize}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
\end{itemize}

此外,我还添加了一个检查器来检查项目标签前面的文本宽度,如果文本长度超过一行,则会发出警告。如果前面的文本不是太长(即两行),此解决方案仍然可以处理。

展示

完整代码

\documentclass{article}
\usepackage{lipsum}

\makeatletter
\let\ltx@item\item
\def\item{\kernel@ifnextchar[{\item@}{\item@[\@itemlabel]}}
\def\item@[#1]{\kernel@ifnextchar({\item@@[#1]}{\item@@[#1]()}}
\def\item@@[#1](#2){\ltx@item[#1]\itemc@mment{#2}\ignorespaces}
\def\itemc@mment#1{%
  \@tempdima\dimexpr\oddsidemargin+\hoffset+\itemindent+1in\relax
  \setbox0\hbox{\ignorespaces#1}%
  \ifdim\wd0>\@tempdima
    \@latex@warning{Overfull item comment
      (\the\dimexpr\wd0-\@tempdima\relax)}\fi
  \ifdim\wd0>\z@
    \hspace{-.67em}
    \makebox[\z@][r]{%
      \smash{\parbox[t]{\dimexpr\@tempdima-.175cm\relax}{%
        \setlength\parindent\z@
        \addtolength\baselineskip{-.33em}
        \ifdim\wd0<\@tempdima\hspace{0pt plus 1fill}\fi#1}}
      \hspace{.175cm}
    }
  \fi
}
\makeatother

\begin{document}
\begin{itemize}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}

\begin{itemize}
  \setlength\itemindent{-1in}
  \item one
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}
\end{document}

附录

请注意,此解决方案也支持嵌套列表。

\begin{itemize}
  \item first
    \begin{itemize}
      \item sub one
      \item[:] sub two
      \item(text) sub three
      \item[:](text) sub four
    \end{itemize}
  \item[+] two
  \item(text) three
  \item[--](text) four
  \item(text text text text text text text) five
  \item six
\end{itemize}

输出2

答案3

如果您只想在的“根”级别使用它itemize,则可以使用\textbullet,否则使用\itemmark(适应的级别itemize)。

\item[<mark>]下面的解决方案依赖于您可以使用可选参数指定的事实<mark>

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcommand{\itemmark}{\expandafter\csname labelitem\romannumeral\the\@itemdepth\endcsname}
\makeatother

\begin{document}

\begin{itemize}
  \item one
  \item[some text~1\ \textbullet] two 
  \item[some text~2\ \itemmark] three
  \begin{itemize}
    \item four
    \item[some text~3\ \itemmark] five
  \end{itemize}
  \item six
\end{itemize}

\end{document}

答案4

在这里,我只是定义\clap

\def\clap#1\item{\item[#1~$\bullet$]}

其余内容保持不变。MWE:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage{mathtools}
\def\clap#1\item{\item[#1~$\bullet$]}
\begin{document}

   \begin{itemize}
    \item one
    \clap{some text}\item two 
    \item three
    \end{itemize}

\end{document}

在此处输入图片描述

为了自动处理项目深度,可以定义\clap

\def\clap#1\item{\item[#1~\itemmark]}

并使用Werner 的定义\itemmark

相关内容