![自定义环境中前置空格的问题](https://linux22.com/image/341559/%E8%87%AA%E5%AE%9A%E4%B9%89%E7%8E%AF%E5%A2%83%E4%B8%AD%E5%89%8D%E7%BD%AE%E7%A9%BA%E6%A0%BC%E7%9A%84%E9%97%AE%E9%A2%98.png)
我在自定义环境中遇到了一个问题,即环境的第一行前面有一个空格。下面的示例说明了这种行为。这似乎是因为后面的换行符而发生的\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>}
。