取消嵌套列表缩进

取消嵌套列表缩进

我的目标是制作一个带有阿拉伯数字的列表,每个阿拉伯数字都有一个带有拉丁数字的子列表。每个阿拉伯数字项目代表一个一般类别,每个拉丁数字项目代表该类别中的一个问题。

每次回答完问题后,我都想输入答案。因此,我尝试使用一个枚举,在枚举内再输入一个枚举,然后每当我需要写一段话来回答问题时,我都会结束内部枚举,写一段话,然后在完成后继续枚举。示例如下:

\documentclass{article}

\usepackage{enumitem}

\begin{document}
    \begin{enumerate}
        \item{}

        \begin{enumerate}[label=\roman*)]
            \item{Question:}
        \end{enumerate}

        My answer

        \begin{enumerate}[resume,label=\roman*)]
            \item{Question 2:}
        \end{enumerate}

        My second answer
    \end{enumerate}
\end{document}

这种方法的问题在于答案文本与外部枚举的缩进绑定在一起。如果我也退出外部枚举,我将无法在不重新开始编号的情况下重新启动枚举,因为如果没有当前项目,我似乎无法使用枚举。

另外需要注意的是,我希望将拉丁数字列表项保留在缩进内,同时允许段落文本保持不缩进。

我该如何最好地获取期望的效果?

答案1

修改后的答案(使用\leftskip

修改后的答案将允许在答案中间分页。

\documentclass{article}
\usepackage{enumitem,lipsum}
\usepackage[pass,showframe]{geometry}
\newcommand\myanswer[1]{{%
  \leftskip-\dimexpr\leftmargini+\leftmarginii\relax #1\par}}
\begin{document}
\begin{enumerate}
    \item{}

    \begin{enumerate}[label=\roman*),parsep=5pt]
        \item Question: What is the margination if my question
          goes on long enough?

    \myanswer{My answer shows that the answer will retain the
      proper margination if one uses the macro
      \textbackslash myanswer.}
    \end{enumerate}


    \begin{enumerate}[resume,label=\roman*),parsep=5pt]
        \item{Question 2:}

    \myanswer{My second answer}
    \end{enumerate}

    \begin{enumerate}[resume, label=\roman*),parsep=5pt]
        \item{Question 3:}

    \myanswer{My third answer \lipsum[4-8]}
    \end{enumerate}
\end{enumerate}
\end{document}

在此处输入图片描述

原始答案

也许像这样,用于listparindent取消项目额外段落的缩进。这里的用法关键是

  1. \item使答案成为问题的一部分。

  2. \myanswer如果您的答案超过一行,请使用来排版您的答案。

妇女权利委员会:

\documentclass{article}
\usepackage{enumitem}
\usepackage[pass,showframe]{geometry}
\newcommand\myanswer[1]{\parbox[t]{\textwidth}{#1}}
\begin{document}
\begin{enumerate}
    \item{}

    \begin{enumerate}[label=\roman*),parsep=5pt,
      listparindent=-\dimexpr\leftmargini+\leftmarginii\relax]
        \item Question: What is the margination if my question
          goes on long enough?

    \myanswer{My answer shows that the answer will retain the
      proper margination if one uses the macro
      \textbackslash myanswer.}
    \end{enumerate}


    \begin{enumerate}[resume,label=\roman*),parsep=5pt,
      listparindent=-\dimexpr\leftmargini+\leftmarginii\relax]
        \item{Question 2:}

    \myanswer{My second answer}
    \end{enumerate}

    \begin{enumerate}[resume, label=\roman*),parsep=5pt,
      listparindent=-\dimexpr\leftmargini+\leftmarginii\relax]
        \item{Question 3:}

    \myanswer{My third answer}
    \end{enumerate}
\end{enumerate}
\end{document}

在此处输入图片描述

答案2

您可以使用 TeX 原语\parshape来转义所有列表环境引入的缩进。下面的代码应该可以满足您的要求:

\documentclass{article}

\usepackage{enumitem}
\usepackage{lipsum} %% <- for \lipsum

\makeatletter   %% <- make @ usable in macro names
\newcommand*\answer[1]{%
  \begingroup   %% <- limit scope of the following changes
    \par        %% <- start a new paragraph
    \@totalleftmargin=0pt \linewidth=\columnwidth
    %% ^^ let other commands know that the margins have been reset
    \parshape 0
    %% ^^ reset the margins
    #1\par      %% <- insert #1 and end this paragraph
  \endgroup
}
\makeatother    %% <- revert @

\begin{document}

\lipsum[66]

\begin{enumerate}
\item
    \begin{enumerate}[label=\roman*)]

    \item
        Question 1:
    \answer{\lipsum[75]}

    \item
        Question 2:
    \answer{\lipsum[75]}

    \end{enumerate}
\end{enumerate}

\end{document}

在此处输入图片描述

您也可以answer使用以下方式定义环境

\makeatletter %% <- make @ usable in macro names
\newenvironment*{answer}{%
  \par
  \@totalleftmargin=0pt \linewidth=\columnwidth
  \parshape 0
}{\par}
\makeatother %% <- revert @

关于\parshape

在底层,所有列表命令都用于\parshape更改边距。虽然它可以用来做更多,如果你只想改变当前(以及所有后续)段落的缩进/宽度,你可以调用

\@totalleftmargin=<new indentation> \linewidth=<new line width>
\parshape 1 \@totalleftmargin \linewidth

您也可以只写\parshape 1 <new indentation> <new width>,但段落内的其他命令(例如列表环境)将不知道您设置的边距(并采用旧值)。撤消先前发出的s\parshape 0的效果。\parshape

相关内容