我正在编辑一个文件,里面有大量的文本和公式,如下所示
lorem ipsums
\begin{align}
foo & bar\\
qux & rofl\\
& toto
\end{align}
lorem ipsums
…
当我想让我的编辑器缩进/换行文本时,我遇到一个问题lorem ipsums
:它会认为一个段落会一直持续到下一个空白行,这意味着它会将整个内容格式化为如下所示的简介:
lorem ipsums \begin{align} foo & bar\\ qux & rofl\\ & toto \end{align} lorem ipsums …
您可能会同意,阅读和编辑它并不是一件愉快的事情。
我想知道是否有办法解决这个问题,以便我可以在公式周围插入行,而不改变语义?
也许类似
lorem ipsums\slurp
\begin{align}
foo & bar\\
qux & rofl\\
& toto
\end{align}
\slurp
lorem ipsums
…
干杯。
答案1
如果你的编辑器支持注释,那么最简单的方法就是在空白行上放置一个注释字符:
lorem ipsums
%
\begin{align}
foo & bar\\
qux & rofl\\
& toto
\end{align}
%
lorem ipsums
但这只有当您的编辑器知道不要断开注释行时才会起作用。
更新:虽然我认为真正的答案是:使用支持 LaTeX 的格式化程序,但这里有三个针对实际问题的答案。这可能不太优雅,而且可能会破坏其他地方(我没有进行太多测试)。
\documentclass{article}
% \url{http://tex.stackexchange.com/q/24786/86}
\let\savepar=\par
\def\restorepar{\let\par=\savepar}
\def\nopar{\let\par=\restorepar}
\long\def\igpar#1{}
% Equivalent to the above is:
%\makeatletter
%\let\igpar=\@gobble
%\makeatother
\makeatletter
\def\eatpar{\@ifnextchar\par{\@gobble}{}}
\makeatother
\begin{document}
This is a paragraph.
This is the next paragraph.
This should be part of the previous one.
This is a paragraph.
This is the next paragraph.
\nopar
This should be part of the previous one.
This is a paragraph.
This is the next paragraph.
\igpar
This should be part of the previous one.
This is a paragraph.
This is the next paragraph.
\eatpar
This should be part of the previous one.
\end{document}
我建议将它们单独放在一行中。这样不仅可以方便稍后删除它们,还意味着可以保留上一行末尾的间距。
第一个 ( \nopar
) 通过重新定义来工作,\par
这样下一次出现的\par
就会被忽略。因此它只起作用一次,下一次出现的\par
也会重置为 ,\par
这样下一个one 将像以前一样工作。\nopar
实际上,它可以出现在任何地方,而不仅仅是在空白行之前。
第二个 ( \igpar
) 只是吞噬了它的下一个参数。由于它是,因此它可以毫无顾忌地\long
吞噬 a 。\par
第三个 ( \eatpar
) 测试下一个标记是否为 a \par
。如果是,则吞掉它。如果不是,则保留它。这可能是最强大的。
它们都能正常工作,因为 TeX 处理空行的方式不同。当输入TeX 处理器看到空白行时,它会将一个\par
标记插入到流中。这意味着空白行将被替换为\par
前任何宏处理都已完成。因此,在 TeX 内部,我们可以通过测试\par
s 来测试空行。否则,我们必须测试换行符,并测试是否连续出现两个换行符。
答案2
考虑\gobblepars
:
\makeatletter
\newcommand\gobblepars{%
\@ifnextchar\par%
{\expandafter\gobblepars\@gobble}%
{}}
\makeatother
请注意,递归定义允许它吞噬不止一个 par。所以你应该能够摆脱...
One paragraph. \gobblepars
More of that one paragraph.
只需确保在 之前留一个空格\gobblepars
即可。或者,您可以修改\gobblepars
以在完成后插入一个空格,如下所示:
\makeatletter
\newcommand\gobblepars{%
\@ifnextchar\par%
{\expandafter\gobblepars\@gobble}%
{ }}
\makeatother
[背景:我最初发布关于\gobblepars
别处... ]