这个问题是关于使用-environment 的自定义环境之后的一个(对我来说)神秘的小缩进(看起来像一个普通的空白......)tabu
。
请编译此 MWE:
\documentclass[a4paper, 11pt]{scrbook}
\usepackage{blindtext}
\usepackage[cm]{fullpage}
\usepackage{tabu, booktabs}
\newenvironment{texttab}[1]{
\par\centering
\begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
{\end{tabu}\par\noindent}
\begin{document}
\section{TEST}
\blindtext
%
\begin{texttab}{X[l,2] X[l,2] X[l,3]}
Test1 & Test2 & Test3 \\ \midrule
Test1 & Test2 & Test3 \\
Test1 & Test2 & Test3 \\ \bottomrule
\end{texttab}
%
HERE HAPPENS INDENT\blindtext
\end{document}
我将类似问题的答案放入%
空白行中,\noindent
在这里效果很好。但是,表格后面的段落有一个空白状的缩进。
我发现在文本部分%
后面添加时可以使其消失,所以:\end
<table content> \\ \bottomrule
\end{texttab}% (!)
%
NOINDENT THIS TIME...
%
请解释一下;这是怎么回事?我能否以某种方式将解决方案纳入环境定义中,还是每次使用此环境时都需要将其放入?
答案1
环境后的换行符充当空格的原因是您使用了\noindent
过早将 TeX 置于水平模式,以便在该模式下行尾始终产生单词空格。
你可以通过以下方式来解决这个问题
{\end{tabu}\par\noindent\ignorespacesafterend}
但这确实是错误的做法,因为\noindent
这意味着你不能在环境之后有一个空行,否则你会得到一个虚假的白色段落。注意你需要%
在HERE
所有 LaTeX 显示环境都可以处理抑制缩进,只需使用
\documentclass[a4paper, 11pt]{scrbook}
\usepackage{blindtext}
\usepackage[cm]{fullpage}
\usepackage{tabu, booktabs}
\newenvironment{texttab}[1]{
\begin{center}%
\begin{tabu} to 0.9\textwidth {#1} \toprule \rowfont{\bfseries}}
{\end{tabu}\end{center}}
\begin{document}
\section{TEST}
\blindtext
%
\begin{texttab}{X[l,2] X[l,2] X[l,3]}
Test1 & Test2 & Test3 \\ \midrule
Test1 & Test2 & Test3 \\
Test1 & Test2 & Test3 \\ \bottomrule
\end{texttab}
%
HERE HAPPENS INDENT\blindtext
\end{document}
HERE
那么,如果前面没有空行,则不会有缩进,但是如果确实有空行,因为在某些情况下您想在那里开始一个段落,那么您就会得到缩进。
答案2
里面某个地方tabu
有零星的空间,或者缺失\ignorespaces
或\ignorespacesafterend
之后立即添加 \ignorespaces\end{texttab}
似乎有效