当我需要临时移动边距时,我经常使用 KOMA-Script 的addmargin
环境。但是,它使用列表来完成其工作,并且始终设置\itemindent
为\z@
,这意味着第一段永远不会缩进。这可能是大多数人在大多数情况下想要的行为,但我有时需要缩进。
梅威瑟:
\documentclass{scrartcl}
\usepackage{lipsum}
\usepackage{indentfirst}
\begin{document}
\lipsum[1]
\begin{addmargin}{2cm}
\lipsum[2-3]
\end{addmargin}
\lipsum[4]
\end{document}
我有下面的解决方案,它在indentfirst
包加载时缩进,否则不会,但我对人们对这个问题的其他解决方案感兴趣,特别是如果它们在环境实例之间更具可配置性。
答案1
此解决方案修补addmargin
以检查indentfirst
所做的重新定义。如果存在,则将其设置\itemindent
为\parindent
。否则,它将遵循默认行为。
\documentclass{scrartcl}
\usepackage{xpatch}
\usepackage{lipsum}
\usepackage{indentfirst}
\makeatletter
\xpatchcmd{\@addmargin}
{\setlength{\itemindent}{\z@}%
}
{\ifx\@afterindentfalse\@afterindenttrue
\setlength{\itemindent}{\parindent}%
\else
\setlength{\itemindent}{\z@}%
\fi}
{\typeout{Success patching}}{\typeout{Error patching}}
\makeatother
\begin{document}
\lipsum[1]
\begin{addmargin}{2cm}
\lipsum[2-3]
\end{addmargin}
\lipsum[4]
\end{document}