自定义环境中前置空格的问题

自定义环境中前置空格的问题

我在自定义环境中遇到了一个问题,即环境的第一行前面有一个空格。下面的示例说明了这种行为。这似乎是因为后面的换行符而发生的\begin{oppg}。它似乎也与第 7 行中的有关\noindent,因为删除它可以解决问题(但我不希望该行缩进)。

如您所见,%当我开始环境时,通过在行尾添加一个,可以轻松解决此问题,但在我看来应该有更可靠的方法来实现此目的。对此可能有一个显而易见的解释,但我看不出来。

\documentclass{article}

\newcounter{oppg}
\newenvironment{oppg}{%
    \refstepcounter{oppg}%
    \par\noindent\textbf{Oppgave \theoppg}%
    \par\smallskip\noindent%
    }%
    {\bigbreak}%

\begin{document}

\begin{oppg}
Lorem ipsum, et cetera...
\end{oppg}

\begin{oppg}%
Lorem ipsum, et cetera...
\end{oppg}

\end{document}

答案1

环境本质上是两个宏,它们通过适当的范围(通过组)转换为 和 。但是,您仍然使用参数调用宏,\begin{<env>}如果\<env>的定义没有处理它,它们会在输入流中留下一个空格。对于这些情况,请使用:\end{<env>}\end<env>\begin\<env>\ignorespaces

在此处输入图片描述

\documentclass{article}

\newcounter{oppg}
\newenvironment{oppg}
  {\par\refstepcounter{oppg}%
   \noindent\textbf{Oppgave \theoppg}%
   \par\nobreak\smallskip\noindent\ignorespaces}
  {\par\addvspace{\bigskipamount}\ignorespacesafterend}

\begin{document}

\begin{oppg}
Lorem ipsum, et cetera...
\end{oppg}

\begin{oppg}%
Lorem ipsum, et cetera...
\end{oppg}

\end{document}

我也做过同样的事情\end{<env>}

相关内容