複数環境に適用できるコマンドを1つの環境のみに適用したい

複数環境に適用できるコマンドを1つの環境のみに適用したい

- A S の投稿
返信数: 2
itemize環境とenumerate環境の2つを使って文書を作成しています。

この際、enumerate環境のみの左余白を一貫して調整したいと思い、

\setlength{leftmargini}{??pt}

とプリアンブルに書けば、itemize環境にも影響してしまいます。

一方で各enumerate環境ごとにこのコマンドを書くのは面倒であるため、できれば一貫して調整したいのですが何か回避策はありますでしょうか?
A S への返信

Re: 複数環境に適用できるコマンドを1つの環境のみに適用したい

- 帯田 木偶太 の投稿
enumerate 環境を再定義すればいいのかしらん。

\documentclass{jarticle}\relax
\makeatletter
    \def\enumerate{%
      \ifnum \@enumdepth >\thr@@\@toodeep\else
        \advance\@enumdepth\@ne
        \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
          \expandafter
          \list
            \csname label\@enumctr\endcsname
            {%
                \setlength{\leftmargin}{20mm}%  <-- お好きな長さを代入してください
                \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}%
            }%
      \fi}
\makeatother
\begin{document}
いろはにほへとちりぬるをわかよたれそつねならむ
うゐのおくやまけふこえてあさきゆめみしゑひもせすん
\begin{enumerate}
    \item
        The first item in an enumerate environment..
\end{enumerate}

\begin{itemize}
    \item
        The first item in an itemize environment.
\end{itemize}
\end{document}
A S への返信

Re: 複数環境に適用できるコマンドを1つの環境のみに適用したい

- Cmplstof B の投稿

既に環境命令を再定義するという解決策が示されていますが,もう少し〝安全な〟方法もあります。

LaTeX2εで「列挙環境 (listing environment)」(記号箇条や番号箇条の総称) を組むに際して確実に用いられる\@trivlistという命令に, 一連のコードを元の命令を書き換えることなく追加します。 追加するのは 「もしも現行環境が“enumerate”という名前であれば, \leftmarginの寸法を調整し,そうでなければ調整しない」 という内容のコードです。
なお,「元の命令を書き換えることなく追加」する機能は, LaTeX2ε側で用意されています (外部からの利用を想定しているかどうか分かりませんが……)。

以下に例示します。\leftmarginの寸法をお好きな値にして, \begin{document}の前に置いて下さい。


\makeatletter
\newcommand*{\x@target@envname}{enumerate}%対象とする環境の名前
\g@addto@macro\@trivlist{%`\@trivlist'命令に追加する
\ifx\x@target@envname\@currenvir\relax%もしも現行環境名が対象環境名であれば……
\setlength{\leftmargin}{50pt}%分かり易くデカい幅に
\fi
}
\makeatother

{enumerate}環境以外の列挙環境に対しても, \x@target@envnameの部分を適宜変更することで対応できると思います。