代码:
\documentclass[a4paper]{report}
\usepackage{lipsum,amsthm,thmtools,xparse}
\newtheorem{defi}{Definizione}
\NewDocumentCommand{\xbegin}{mooo}
{\IfValueTF{#4}
{\begin{#1}[name={\contrel{#2}{#4}},continued={#3}]}
{\IfValueTF{#3}
{\begin{#1}[name={#2},label={#3}]}
{\IfValueTF{#2}
{\begin{#1}[name={#2}]}
{\begin{#1}}
}
}
}
\newcommand{\xend}[1]{\end{#1}\noindent}
\begin{document}
\xbegin{defi}
\lipsum[1]
\end{defi}
\lipsum[2]
\xbegin{defi}
\lipsum[3]
\xend{defi}
\lipsum[4]
\xbegin{defi}
\lipsum[5]
\end{defi}\noindent
\lipsum[6]
\end{document}
%5 and 1 comment. Then 6 more and 2 comment.
输出:
基本上,\xbegin
通过将键作为可选参数(不带name=
、label=
或continues=
部分)可以使(在我看来)定理开始的代码更具可读性。\xend
应该抑制定理后第一行的缩进。我们注意到以下几点:
- 在第一个 Definizione 之后,我们有缩进;
- 奇怪的是,如果我使用正常的
\begin
,我不会得到缩进; - 在第二次定义之后,我们得到了部分缩进,即缩进量在零和正常缩进量之间;它可能看起来也有额外的垂直空间,但它只是分割的图片;
- 第三次定义之后,我们就没有缩进。
我的问题有两个:
- 为什么缩进会出现
\xbegin
,如第 1 点和第 2 点所述? - 为什么
\noindent
只有\xend
部分抑制缩进?
答案1
“部分缩进”不是缩进,它只是来自源文件的相邻空格,%
如果您使用空白来布置您不想出现在输出中的源,则需要在行尾使用空白。
在评论中,你问为什么你会得到完整的缩进,\let\xend\end
这是段落开头的正常行为,在定理环境之后就是这种情况。你\xindent
抑制了缩进,但代价是隐式地开始一个新段落,这使得标记非常脆弱,定理环境结束后的任何空格字符都会在输出中显示为空格,定理环境后的空白行或显示环境(如列表)将结束通过导致\noindent
虚假空白行而开始的空段落,