# 既に問題はご解決済みですので、安心して(?)口を挟まさせて
# いただけます。こういう「後出しじゃんけん」スタイルが、私に
# は似つかわしいようです。
「いくつかある」方法のうち、私でも思いつくものを挙げてみますと、
(1)定義そのものをコピーしてきて、書き足す
(2)変更を書き足した環境を、別名の環境にする
(3)\let でコピーしてから、それを使って再定義する
(4)\g@addto@macro で書き足す
(5)etoolbox.sty の \appto や \apptocmd を使って書き足す
とかでしょうか。
ちゃんとは確認してませんので、うまくいかなかったり、副作用が
あったりするものもあるかも知れません。
最初に、見やすさを考えて、変更をひとまとめにしておきます:
\newcommand{\myalteration}{\itemsep0pt\parsep0pt\parskip0pt}
(1)定義そのものをコピーしてきて、書き足す
latex.ltx とか、お使いのクラスファイルから、itemize 等々の定義
を丸々コピーしてきて、\list の第 2 引数に必要な変更を書き足すと
いう直接的なやり方です:
\makeatletter
\def\itemize{%
\ifnum \@itemdepth >\thr@@\@toodeep\else
\advance\@itemdepth\@ne
\edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
\expandafter
\list
\csname\@itemitem\endcsname
{\def\makelabel##1{\hss\llap{##1}}\myalteration}%
\fi}
\makeatother
(2)変更を書き足した環境を、別名の環境にする
とても素直なアプローチかと:
\newenvironment{myitemize}{\begin{itemize}\myalteration}{\end{itemize}}
(3)\let でコピーしてから、それを使って再定義する
ある意味古典的なやり方だと思います:
\let\originalitemize\itemize
\renewcommand{\itemize}{\originalitemize\myalteration}
(4)\g@addto@macro で書き足す
カーネルが変更されるとうまくいかなくなる可能性があります:
\makeatletter
\g@addto@macro{\itemize}{\myalteration}
\makeatother
(5)etoolbox.sty の \appto や \apptocmd を使って書き足す
これが安全な方法なのでしょう:
(\AtBeginEnvironment というのも用意されてますが、説明を読
む限り環境の冒頭に追加されるっぽいので、試してません)
\usepackage{etoolbox}
\appto{\itemize}{\myalteration}
※ なお、\list の第 2 引数の中でしか変更できないパラメータの
場合には、\myalteration を \list の後ろに追加している(2)
~(5)の方法では、多分うまくいきません。
逆に、今回変更したパラメータに関しては \list の第 2 引数の
外でも変更可能みたいですので、(1)で \myalteration を \list
の後ろに追加してみても一応うまくいきました。
既に解決済のトピックに余計な口出しをしているのですから、疎ま
しくお感じになられてもおかしくないところ、寛容なご応答をして
くださいまして、ありがとうございます。
なお、後出しのさらに後出しですけれど、
(2)は、\NewDocumentEnvironment
(3)は、\NewCommandCopy と \RenewDocumentCommand
を使ったほうが、今どきだったかも知れません。
enumitem パッケージについては、The LaTeX Companion, 3rd, 2023
を最初手にした際に、その解説に 20 ページも割かれていて驚いた
ことを覚えています。
しくお感じになられてもおかしくないところ、寛容なご応答をして
くださいまして、ありがとうございます。
なお、後出しのさらに後出しですけれど、
(2)は、\NewDocumentEnvironment
(3)は、\NewCommandCopy と \RenewDocumentCommand
を使ったほうが、今どきだったかも知れません。
enumitem パッケージについては、The LaTeX Companion, 3rd, 2023
を最初手にした際に、その解説に 20 ページも割かれていて驚いた
ことを覚えています。
以下、雑談です。
> (1)定義そのものをコピーしてきて、書き足す
> (2)変更を書き足した環境を、別名の環境にする
> (3)\let でコピーしてから、それを使って再定義する
> (4)\g@addto@macro で書き足す
> (5)etoolbox.sty の \appto や \apptocmd を使って書き足す
いずれもがなかなか難しくなりつつあると思っています。
「これがいま動いているものの本当に定義である」を探すのがたいへんですよね。
LaTeX kernelのものを引っ張ってきたとしても、それ以降に読み込んでいる何かが勝手に上書きしていたとか、Hookで\begin{document}以降なり、何かのパッケージ前後で勝手に上書きされているとか、本当はすべてを完全に把握した上で、初めてできることだと思います。
例えば、hyperrefパッケージを読み込んだ時点で、通常のクラスファイルさえも影響しますし、hyperrefパッケージが前提としているパッケージの挙動さえも変わってしまうものがありますし、なんなら\begin{document}...\end{document}中の記法を厳密にhyperrefの挙動に合わせる必要に迫られたりします。なので、hyperrefパッケージを読み込む場合、hyperrefパッケージの挙動で大事なところを把握することが必要になります。
実際には、ちょっとしたものを書き換えるものに依って、
・だいたいまぁまぁ動く、
・前後のパッケージの影響でなんかちょっとおかしくなる(それに気付かないで、そのちょっとおかしい状態さえも仕様となる)
などあると思います。
本末転倒ですが、いまLaTeXでコンパイルしようとしている文章を、できるかぎり全体を把握して、変える必要があると思います。
> (1)定義そのものをコピーしてきて、書き足す
> (2)変更を書き足した環境を、別名の環境にする
> (3)\let でコピーしてから、それを使って再定義する
> (4)\g@addto@macro で書き足す
> (5)etoolbox.sty の \appto や \apptocmd を使って書き足す
いずれもがなかなか難しくなりつつあると思っています。
「これがいま動いているものの本当に定義である」を探すのがたいへんですよね。
LaTeX kernelのものを引っ張ってきたとしても、それ以降に読み込んでいる何かが勝手に上書きしていたとか、Hookで\begin{document}以降なり、何かのパッケージ前後で勝手に上書きされているとか、本当はすべてを完全に把握した上で、初めてできることだと思います。
例えば、hyperrefパッケージを読み込んだ時点で、通常のクラスファイルさえも影響しますし、hyperrefパッケージが前提としているパッケージの挙動さえも変わってしまうものがありますし、なんなら\begin{document}...\end{document}中の記法を厳密にhyperrefの挙動に合わせる必要に迫られたりします。なので、hyperrefパッケージを読み込む場合、hyperrefパッケージの挙動で大事なところを把握することが必要になります。
実際には、ちょっとしたものを書き換えるものに依って、
・だいたいまぁまぁ動く、
・前後のパッケージの影響でなんかちょっとおかしくなる(それに気付かないで、そのちょっとおかしい状態さえも仕様となる)
などあると思います。
本末転倒ですが、いまLaTeXでコンパイルしようとしている文章を、できるかぎり全体を把握して、変える必要があると思います。