表内のリスト余白のみ削除

表内のリスト余白のみ削除

itemize表形式の環境 (具体的には ) に表示されるリストのスタイルを設定しようとしていますlongtable。理想的には、表内に表示されるリストから左余白を削除し、表外のリストの余白を維持したいと考えています。

enumitemパッケージを使用してリストの余白を変更する方法については、すでにいくつかの回答がここにあります。leftmargin=*特定のリストに設定できますまたは、新しいカスタムitemize環境を作成する特にテーブル内で使用します。

ただし、私は Markdown を TeX に変換するために pandoc を使用しているため、結果の TeX 出力を制御できません。\begin{itemize}[leftmargin=*]カスタムを追加または使用することはできません\begin{marginlessitemize}。には、リスト設定をグローバルに設定し、すべてのリストから左余白を削除できるマクロenumitemがありますが、これは、テーブル内のリストのみを対象としているため理想的ではありません。\setlist\setlist[itemize]{leftmargin=*}

申請する方法はありますか\setlist{...} のみ表形式の環境内にネストされた環境を項目別にするにはどうすればよいでしょうか。理想的には、プリアンブルで何らかのロジックを使用するのがよいでしょう。itemize表内にある場合は余白を使用せず、そうでない場合は余白を使用します。


これが MWE です…

(乱雑なlongtable出力は、Pandoc が TeX に変換するこの Markdown テーブルから生成されます)。

+-----------+-----------+
| Thing     | List      |
+===========+===========+
| Thing 1   | - Item 1  |
|           | - Item 2  |
+-----------+-----------+
| Thing 2   | - Item 3  |
|           | - Item 4  |
+-----------+-----------+

この TeX ファイル…

\documentclass[11pt,article,oneside]{memoir}

\usepackage{longtable}

\begin{document}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\begin{itemize}
\tightlist
\item
  Item 1
\item
  Item 2
\end{itemize}

\begin{longtable}[]{@{}ll@{}}
\caption{This is a table.}\tabularnewline
\toprule
\begin{minipage}[b]{0.21\columnwidth}\raggedright
Thing
\end{minipage} & \begin{minipage}[b]{0.27\columnwidth}\raggedright
List
\end{minipage}\tabularnewline
\midrule
\endfirsthead
\toprule
\begin{minipage}[b]{0.21\columnwidth}\raggedright
Thing
\end{minipage} & \begin{minipage}[b]{0.27\columnwidth}\raggedright
List
\end{minipage}\tabularnewline
\midrule
\endhead
\begin{minipage}[t]{0.21\columnwidth}\raggedright
Thing 1
\end{minipage} & \begin{minipage}[t]{0.27\columnwidth}\raggedright
\begin{itemize}
\tightlist
\item
  Item 1
\item
  Item 2
\end{itemize}
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.21\columnwidth}\raggedright
Thing 2
\end{minipage} & \begin{minipage}[t]{0.27\columnwidth}\raggedright
\begin{itemize}
\tightlist
\item
  Item 3
\item
  Item 4
\end{itemize}
\end{minipage}\tabularnewline
\bottomrule
\end{longtable}

\end{document}

…この PDF を生成します:

表の内側と外側の余白

これを前文に付け加えると…

\usepackage{enumitem}
\setlist[itemize]{leftmargin=*}

…表内のリストの左余白は消えますが、表外のリストでも左余白は消えます。

どこにも余裕がない

カスタム itemize 環境を作成すると、それをテーブルで使用できます。

\newlist{marginlessitemize}{itemize}{1}
\setlist[marginlessitemize]{label=\textbullet,leftmargin=*}

...

% Inside a table cell...
\begin{marginlessitemize}
\item
  Item 1
\item
  Item 2
\end{marginlessitemize}

マージンインなし、マージンアウトあり

これは機能しますが、TeX は自動的に生成されるため、変換されたファイルを手動で編集せずにカスタム環境を使用することはできません。そのため、何らかの方法でテーブル内のリストに余白を自動的に設定しないようにする必要があります。

答え1

以下は、longtableプリアンブルに配置すると機能します ( の場合のみ)。

\makeatletter
\let\LT@arraybak\LT@array
\def\LT@array{\setlist[itemize]{leftmargin=*,after=\strut}\LT@arraybak}
\makeatother

MWE を完了する:

\documentclass[11pt,article,oneside]{memoir}

\usepackage{longtable}
\usepackage{enumitem}
\makeatletter
\let\LT@arraybak\LT@array
\def\LT@array{\setlist[itemize]{leftmargin=*,after=\strut}\LT@arraybak}
\makeatother



\begin{document}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\begin{itemize}
\tightlist
\item
  Item 1
\item
  Item 2
\end{itemize}

\begin{longtable}[]{@{}ll@{}}
\caption{This is a table.}\tabularnewline
\toprule
\begin{minipage}[b]{0.21\columnwidth}\raggedright
Thing
\end{minipage} & \begin{minipage}[b]{0.27\columnwidth}\raggedright
List
\end{minipage}\tabularnewline
\midrule
\endfirsthead
\toprule
\begin{minipage}[b]{0.21\columnwidth}\raggedright
Thing
\end{minipage} & \begin{minipage}[b]{0.27\columnwidth}\raggedright
List
\end{minipage}\tabularnewline
\midrule
\endhead
\begin{minipage}[t]{0.21\columnwidth}\raggedright
Thing 1
\end{minipage} & \begin{minipage}[t]{0.27\columnwidth}\raggedright
\begin{itemize}
\tightlist
\item
  Item 1
\item
  Item 2
\end{itemize}
\end{minipage}\tabularnewline
\begin{minipage}[t]{0.21\columnwidth}\raggedright
Thing 2
\end{minipage} & \begin{minipage}[t]{0.27\columnwidth}\raggedright
\begin{itemize}
\tightlist
\item
  Item 3
\item
  Item 4
\end{itemize}
\end{minipage}\tabularnewline
\bottomrule
\end{longtable}

\end{document}

間隔の改善

簡単に説明すると、 -環境の開始はlongtable次のように定義されます。

macro:->\par \ifx \multicols \@undefined \else \ifnum \col@number
>\@ne \@twocolumntrue \fi \fi \if@twocolumn \LT@err {longtable not
in 1-column mode}\@ehc \fi \begingroup \@ifnextchar [\LT@array {\LT@array
[x]} 

したがって、いくつかのものを評価した後、環境\LT@arrayを変更するコードを挿入するマクロを呼び出しますitemize。これはコンストラクト内にあるため、\begingroup...\endgroup行われた変更はローカルです。

編集: 垂直方向の間隔を改善するために、 を追加しましafter=\strut\setlist

答え2

enumitemここに、と を使用した (うまくいけば) 解決策がありますetoolbox。2 行目と 3 行目の間に小さな垂直スペースが必要ない場合は、after=\vspace*{\dimexpr1ex-\baselineskip}を に置き換えますafter=vspace*{-\baselineskip}

\documentclass[11pt, article, oneside]{memoir}%
\usepackage{longtable}
\usepackage{enumitem}

\usepackage{etoolbox}
\AtBeginEnvironment{longtable} {\setlist[itemize]{nosep, wide=0pt, leftmargin=*, before=\vspace*{-\baselineskip}, after=\vspace*{\dimexpr1ex-\baselineskip}}}

\begin{document}

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

\begin{itemize}
\tightlist
\item
  Item 1
\item
  Item 2
\end{itemize}

%%%%%%%%%%%%%%%%%%%%%%
\begin{longtable}{@{}>{\raggedright\arraybackslash}p{0.21\linewidth}>{\raggedright\arraybackslash}p{0.27\linewidth}@{}}%
\caption{This is a table.}\tabularnewline
\toprule
Thing & List
\tabularnewline
\midrule
\endfirsthead
\toprule
Thing & List
\tabularnewline
\midrule
\endhead
Thing 1
 &\begin{itemize}
\item
 Item 1
\item
 Item 2
\end{itemize}
\tabularnewline
Thing 2
 & \begin{itemize}
\item
 Item 3
\item
 Item 4
\end{itemize}
\tabularnewline
\bottomrule
\end{longtable}

\end{document} 

ここに画像の説明を入力してください

関連情報