内部列表环境的格式化长度被添加到外部列表环境

内部列表环境的格式化长度被添加到外部列表环境

代码

\documentclass{article}
\usepackage[body={20em,100ex}]{geometry}
\newcommand{\abc}{\rule{0.95em}{1ex}\kern.05em\allowbreak}
\newcommand{\abcd}{\abc\abc\abc\abc\abc}
\newcommand{\abcde}{\abcd\abcd\abcd\abcd\abcd}
\begin{document}
\noindent\abcde
\begin{list}{$\bullet$}{%
\setlength{\labelwidth}{1em}%
\setlength{\labelsep}{1em}%
\setlength{\leftmargin}{2em}%
\setlength{\itemindent}{2em}}
\item\abcde
\item
\begin{list}{\ddag}{%
\setlength{\labelsep}{1em}%
\setlength{\labelwidth}{1em}%
\setlength{\leftmargin}{1em}%
\setlength{\itemindent}{1em}}
\item\abcde
\item\abcde
\end{list}
\end{list}
\end{document}

得到左侧:

我怎样才能得到正确的一面?

答案1

如果您可以将内部列表放在小页面中(因此与分页符不兼容),则无需太多摆弄即可实现您想要的目标。而且,只需稍加摆弄就可以做到这一点,而不受无分页符的限制。第一种方法:

\documentclass{article}
\usepackage[body={20em,100ex}]{geometry}
\newcommand{\abc}{\makebox[1em][l]{\rule{.9em}{1ex}}\allowbreak}
\newcommand{\abcd}{\abc\abc\abc\abc\abc}
\newcommand{\abcde}{\abcd\abcd\abcd\abcd\abcd}
\begin{document}
\noindent\abcde\par
%% testing the \abc building block: 20 times 1em = 20em
%% \noindent\rule{\linewidth}{1ex}\par
%% \noindent------------------------------------%
%% -----------------------------------\par
\begin{list}{$\bullet$}{%
\setlength{\labelwidth}{1em}%
\setlength{\labelsep}{1em}%
\setlength{\leftmargin}{2em}%
\setlength{\itemindent}{2em}}
\item \abcde\par\abcde
\item\begin{minipage}[t]{\dimexpr\linewidth-\itemindent}
        \begin{list}{\ddag}{%
        \setlength{\labelsep}{1em}%
        \setlength{\labelwidth}{1em}%
        \setlength{\leftmargin}{0em}% note the 0em here and the stuff below
        \setlength{\itemindent}{\dimexpr\labelsep+\labelwidth}}
    \item\abcde\par\abcde
    \item\abcde
    \end{list}
  \end{minipage}
\item hello
\end{list}
\end{document}

请注意我是如何修改你的\abc宏的。因为,正如我在另一个场合遇到的,并且不明白为什么,\kern.05em\allowbreak来自你原始代码的会导致一个框过多,进入右边距。而我这里的方法没有。无论如何,此代码产生:

tex 结果

第二种方法是:

\documentclass{article}
\usepackage[body={20em,100ex}]{geometry}
\newcommand{\abc}{\makebox[1em][l]{\rule{.9em}{1ex}}\allowbreak}
\newcommand{\abcd}{\abc\abc\abc\abc\abc}
\newcommand{\abcde}{\abcd\abcd\abcd\abcd\abcd}
\begin{document}
\noindent\abcde
\newdimen\mydimen
\begin{list}{$\bullet$}{%
\setlength{\labelwidth}{1em}%
\setlength{\labelsep}{1em}%
\setlength{\leftmargin}{2em}%
\setlength{\itemindent}{2em}}
\item \abcde
\item \setlength{\mydimen}{\itemindent}%
      \begin{list}{\ddag}{%
        \setlength{\labelsep}{1em}%
        \setlength{\labelwidth}{1em}%
        \setlength{\leftmargin}{\mydimen}%
        \setlength{\itemindent}{\dimexpr\labelsep+\labelwidth}}
    \item[]\hskip-\mydimen\hskip-\labelsep\llap{\ddag}\hskip\labelsep
           \abcde
    \item\abcde
    \end{list}
\item hello
\end{list}
\end{document}

答案2

在第一个列表环境中更改\itemindent0em,在第二个列表环境中更改\itemindent2em

相关内容