
よりきれいなアンダースコアを作成するために再定義しようとしています\rule
が、私のブック ファイル (回想録クラス) に次の問題があります。
\RequirePackage{letltxmacro}
\LetLtxMacro{\oldrule}{\rule}
\renewcommand{\rule}[1]{\oldrule[0pt]{#1}{0.4pt}}
で「未定義の制御シーケンス」が発生します\LetLtxMacro{\oldrule}{\rule}
。
答え1
LaTeX におけるの目的は、\newcommand
システムにとって非常に重要となる可能性があるコマンドを再定義することからユーザーを保護することです。
例えば、 を再定義しようとすると、LaTeXが検索して伝える\fi
ときにエラーをスローすることから始まり、さまざまな奇妙なことが起こります。\begin{document}
Missing \begin{document}.
本当に。 :)
このコマンドは\rule
、LaTeX カーネルで脚注をタイプセットするときに使用され、再定義すると機能が壊れます。クラスとパッケージで\rule
も使用できます。このコマンドは に 14 回出現しますmemoir.cls
。
場合によってはカーネルコマンドも再定義すると良いでしょう。Heiko Oberdiekのパッケージは頻繁にこれを行っており、このためにパッケージletltxマクロ考案されました。しかし、ユーザーは自分が何をしているのかを正確に理解する必要があり、一度もないコマンド構文(引数の数と性質)を変更します。
あなたのコードは私の場合は機能するので、エラーが発生するのは非常に奇妙です。しかし、しない代わりに、次のような個人コマンドを定義します。
\newcommand{\blank}[1]{\rule{#1}{0.4pt}}
あなたにはメリットしかありません。セマンティックコードに価値を追加します。