パッケージの間隔を概説する

パッケージの間隔を概説する

アウトライン パッケージは、段落タイプのエントリである \0 エントリに続く項目の番号付けを再開します。アウトライン パッケージのドキュメントには、再開を回避するためのプリアンブル コードが記載されています。また、\usepackage[inline]{enumitem}\setlist{nosep}アウトライン項目間の垂直方向の間隔を狭めるためにも使用しています。アウトライン カウンターの再開を回避するためのプリアンブル コードは、\0 コマンドに続く項目レベルの間隔が狭まった状態ではタイプセットされません。下位の項目レベルは、正しい間隔でタイプセットされます。私の例はこれを示しています。余分な間隔を削除したいと思います。以下のコードでは、第 1 レベルと第 2 レベルにも整数のラベルが付けられていることに気付きました。これは良くありません。おそらく、私の特定の問題に対するより良い解決策は、余分なプリアンブル コードを回避して コマンドを削除し\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 の解決策では、\0 コマンドの後に \n コマンドを続けることで、ネストされた前のレベルで項目カウンターを復元できます。ここで、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}

関連情報