패키지 간격 개요

패키지 간격 개요

개요 패키지는 단락 유형 항목인 \0 항목 다음에 항목 번호 매기기를 다시 시작합니다. 개요 패키지에 대한 설명서는 다시 시작을 방지하기 위한 프리앰블 코드를 제공합니다. 또한 \usepackage[inline]{enumitem}\setlist{nosep}개요 항목 사이의 세로 간격을 줄이는 데 사용합니다 . 개요 카운터를 다시 시작하지 않도록 하기 위한 프리앰블 코드는 \0 명령 다음에 나오는 항목 수준의 감소된 간격으로 조판되지 않습니다. 낮은 항목 수준은 올바른 간격으로 조판됩니다. 내 예가 이를 보여줍니다. 여분의 간격을 제거하고 싶습니다. 방금 아래 코드가 첫 번째와 두 번째 수준에도 정수로 레이블을 지정한다는 것을 알았습니다. 이는 좋지 않습니다. 아마도 내 특정 문제에 대한 더 나은 해결책은 추가 프리앰블 코드를 피하고 명령을 제거하고 \renewcommand{\outlinei}{cenumerate}\0 명령 다음에 항목에 대한 카운터를 수동으로 재설정하는 것입니다. 나는 이것을 할 수 없었습니다.

\usepackage{outlines}
\usepackage[inline]{enumitem}
  \setlist{nosep}
% The following code comes from the outlines package manual
  \newcounter{cenum}
  \newcounter{cenumsaved}
  \setcounter{cenumsaved}{0}
  \newcommand{\labelcenum}{\arabic{cenum}.}
  \newenvironment{cenumerate}%
    {\begin{list}{\labelcenum}{\usecounter{cenum}}%
    \setcounter{cenum}{\value{cenumsaved}}}%
      {\setcounter{cenumsaved}{\value{cenum}}%
    \end{list}}
\begin{document}
\renewcommand{\outlinei}{cenumerate} % Comment this command to see the change in spacing
\begin{outline}[enumerate]
  \1 First item - notice the extra spacing after this item
    \2 First subitem
    \2 Second subitem
  \0 Some text
  \1 Second item - notice the extra spacing before and after this item
    \2 First subitem
    \2 Second subitem
  \1 Third item - notice the extra spacing before and after this item
    \2 First subitem
    \2 Second subitem
\end{outline}
\end{document}

답변1

이 같은?

\documentclass{article}
\usepackage{outlines}
  \newcounter{cenumi}
  \newcounter{cenumisaved}
  \setcounter{cenumisaved}{0}
  \newcommand{\labelcenumi}{\arabic{cenumi}.}
  \newenvironment{cenumeratei}%
    {\begin{list}{\labelcenumi}{\usecounter{cenumi}\partopsep=0pt\topsep=0pt\itemsep=0pt\parsep=0pt}%
    \setcounter{cenumi}{\value{cenumisaved}}}%
      {\setcounter{cenumisaved}{\value{cenumi}}%
    \end{list}}

  \newcounter{cenumii}
  \setcounter{cenumii}{0}
  \newcommand{\labelcenumii}{(\alph{cenumii})}
  \newenvironment{cenumerateii}%
    {\begin{list}{\labelcenumii}{\usecounter{cenumii}\partopsep=0pt\topsep=0pt\itemsep=0pt\parsep=0pt}%
    }%
      {%
    \end{list}}


\begin{document}
\renewcommand{\outlinei}{cenumeratei}
\renewcommand{\outlineii}{cenumerateii}
\begin{outline}
  \1 First item - notice the extra spacing after this item
    \2 First subitem
    \2 Second subitem
  \0 Some text
  \1 Second item - notice the extra spacing before and after this item
    \2 First subitem
    \2 Second subitem
  \1 Third item - notice the extra spacing before and after this item
    \2 First subitem
    \2 Second subitem
\end{outline}
\end{document}

아마도 코드가 최적화되지 않았을 수 있습니다. 2개 레벨에서만 작동합니다(그러나 3개 또는 4개 레벨로 쉽게 확장 가능).

여기에 이미지 설명을 입력하세요

답변2

나는 quark67이 위에 게시한 솔루션을 수락했고 나중에 중첩 항목에 대한 상호 참조가 상위 항목만 나열한다는 것을 깨달았습니다. 예를 들어 항목 1(a)에 대한 상호 참조가 항목 1 참조로 축소되었습니다. 저는 DP Story에 이 문제에 관해 개인적인 메모를 보냈습니다. Don은 모든 상호 참조를 존중하고 더 많은 유연성을 추가하는 다른 솔루션을 만들었습니다(아래 게시됨). Don의 솔루션을 사용하면 \n 명령과 함께 \0 명령을 수행하여 중첩된 이전 수준에서 항목 카운터를 복원할 수 있습니다. 여기서 n은 계속할 수준입니다. 개요 환경은 \0 명령으로 시작할 수 없으므로 개요 앞에 오는 텍스트를 이 환경 앞에 입력해야 합니다.

\documentclass{article}
\usepackage{outlines}
\usepackage{enumitem}
\usepackage{calc} % dps
\setlist{noitemsep}
\setlist{nolistsep}
\makeatletter
\newif\if@needsRsm\@needsRsmfalse
\def\resumeToDefault{%
  \global\let\resume@ti\@empty
  \global\let\resume@tii\@empty
  \global\let\resume@tiii\@empty
  \global\let\resume@tiv\@empty
}
\resumeToDefault
\def\ol@csarg#1#2{\expandafter#1\csname#2\endcsname}
% Executed at \0
\def\setPrevLevel{\global\@needsRsmtrue % dps
  \xdef\@prevLevel{\@curLevel}}
\def\@prevLevel{0}
% Placed within \curLevel, which is expanded at the beginning of \1, \2, \3, \4
\def\resumeIfNeeded#1{\if@needsRsm\def\@next{\expandafter
  \resumeAt\expandafter{\csname#1\endcsname}}\else\let\@next\relax\fi\@next}
% Expanded within each level: \1, \2, \3, \4
\def\curLevel#1{\def\@curLevel{#1}\resumeIfNeeded{#1}}
% dps modify outline package: \ol@z (insert \item[] so we can use \0 at any level
\renewcommand{\ol@z}{%
  \ol@commands%
    {}%                                        0
    {\ol@inci}%                                1
    {\ol@inci\item[]\ol@incii}%                2
    {\ol@inci\item[]\ol@incii\item[]\ol@inciii}%             3
    {\ol@inci\item[]\ol@incii\item[]\ol@inciii\item[]\ol@inciiii}}% 4
% dps modify outline package: outline env (add \olsave, \curLevel)
\renewenvironment{outline}[1][]{%
  \ifthenelse{\equal{#1}{}}{}{\renewcommand{\ol@type}{#1}}%
  \ol@z%
  \newcommand{\0}{\olsave\setPrevLevel\ol@toz\ol@z}% dps incorporate \olsave into level \0
  \newcommand{\1}{\curLevel{1}\ol@toi\ol@i\resume@ti\item}%
  \newcommand{\2}{\curLevel{2}\ol@toii\ol@ii\resume@tii\item}%
  \newcommand{\3}{\curLevel{3}\ol@toiii\ol@iii\resume@tiii\item}%
  \newcommand{\4}{\curLevel{4}\ol@toiiii\ol@iiii\resume@tiv\item}%
}{%
  \ol@toz\ol@exit%
}
\def\UD#1{\noexpand\setcounter{enum#1}{\@nameuse{s@veAt#1}}%
  \global\noexpand\ol@csarg\let{resume@t\@roman\@tempcnta}\noexpand\@empty}
\newcommand\resumeAt[1]{\global\@needsRsmfalse\begingroup\resumeToDefault
  \edef\r@t{\expandafter\@roman\expandafter\@gobble\string#1}%
  \edef\n@t{\expandafter\@gobble\string#1}%
% When we are resuming at a higher level then the previous level,
% we zero all counters out below (new environment starting)
  \ifnum\n@t>\@prevLevel\relax
    \zeroOutBelow{\@prevLevel}\olsave\fi
  \@tempcnta=0\relax\toks@={}%
  \@whilenum\@tempcnta<\n@t\relax\do{\advance\@tempcnta\@ne
    \edef\x{\UD{\@roman\@tempcnta}}%
    \toks2=\expandafter{\x}\edef\y{\the\toks@\the\toks2 }%
    \toks@=\expandafter{\y}%
  }%
  \edef\x{\noexpand\ol@csarg\noexpand
    \xdef{resume@t\r@t}{\noexpand\the\noexpand\toks@}}\x
  \endgroup\ignorespaces
}
\def\zeroOutBelow#1{\begingroup
  \@tempcnta#1\relax
  \@whilenum\@tempcnta<4\relax\do{%
    \advance\@tempcnta\@ne
    \setcounter{enum\@roman\@tempcnta}{0}}%
  \endgroup
}
\def\olsave{\@tfor\n:={i}{ii}{iii}{iv}\do{%
  \ol@csarg\xdef{s@veAt\n}{\the\value{enum\n}}}% do
}
\makeatother
\begin{document}
We begin the outline here
\begin{outline}[enumerate]
  \1 First item
    \2  First subitem
      \3\label{cr} Item with label
        \4  Fourth level
        \4  Fourth level, again
\0 This is another comment
    \2 Second subitem
\0 Some text here, let's make it long to see what happens when we wrap around to the next line.
    \1 Second item
      \2 \textbf{See item} \ref{cr}
        \3 The above reference reads``See item 1''
          \4 Let's not forget level 4
          \4 Another level 4
\0 Hello world!
    \2 Second subitem
    \2 Second subitem
\0 Make my day!
  \1 A third top level
    \2 Level 2 item
      \3 Level 3 item
\0 Let's break the outline here with a comment
      \3 Level 3 item
\0 Do we continue as expected ?
      \3 Level 3 for testing
%        \4 More four to follow
\0 Now test level 4 in the same way
      \4 Level 4
      \4 Level 4, again
\0 Back to level 1
  \1 back to level 1
    \2 Another important point
\end{outline}
\end{document}

관련 정보