如何删除代码块中每行末尾的尾随空格?

如何删除代码块中每行末尾的尾随空格?

笔记:我必须调整这个问题以反映马丁的回答(实际上并没有 100% 解决原始问题)这样我才能接受它。:-)

如果我没有使用standalone文档类,我通常会进行以下设置

\newsavebox\IBox
\savebox\IBox{\raisebox{\depth}[\totalheight]{XeTeX runs very slowly!}}    
% trimmed for simplicity

在序言中。

但是,当使用standalone文档类(将我的项目分成一个主输入文件和几个子文件)时,我被迫将与每个子文件相关的设置移动到其主体中,如下所示。

% sub-file.tex
\documentclass{standalone}    
\usepackage{pstricks}

\begin{document}
\newsavebox\IBox%
\savebox\IBox{\raisebox{\depth}[\totalheight]{XeTeX runs very slowly!}}%    
% trimmed for simplicity    

\begin{pspicture}(\LEFT,\BOTTOM)(\RIGHT,\TOP)
% trimmed for simplicity
\end{pspicture}%
\end{document}

在每行设置代码的末尾添加尾随%代码很麻烦,所以我需要一种方法来避免手动执行此操作。以下代码显示了我需要的内容;有一个\RemoveTrailingSpaceInThisBlock宏可以完成这项工作。

% sub-file.tex
\documentclass{standalone}    
\usepackage{pstricks}    

\begin{document}
\RemoveTrailingSpaceInThisBlock% to remove trailing space in the current block
\newsavebox\IBox
\savebox\IBox{\raisebox{\depth}[\totalheight]{XeTeX runs very slowly!}}    
% trimmed for simplicity    

\begin{pspicture}(\LEFT,\BOTTOM)(\RIGHT,\TOP)
% trimmed for simplicity
\end{pspicture}
\end{document}

是否有这样的宏可以删除代码块中每行末尾的尾随空格?

答案1

您可以使用\endlinechar=-1\relax它来让 TeX 忽略所有行尾,而不是将它们视为空格。如果您想使其成为环境,请将其放在环境的开始代码中。否则,您可以将其放在里面\begin{document},它将一直有效到该环境结束,即使文件被处理为子文件。

请注意,\relax只是终止数字的结束标记。您也可以使用空格或使用\m@ne代替-1。这\makeatletter当然需要。

但是,这不会忽略任何行尾的实际空格,只会忽略行尾字符插入的空格。


LaTeX3 包expl3还提供了\ExplSyntaxOff\ExplSyntaxOn,它将切换到与序言类似的模式并再次切换回来。据我所知,此模式完全忽略空格。它还允许在宏名称中使用_:,这会干扰这些字符的正常使用(例如在数学表达式中)。因此,您不应该将它用于整个文档,而应该只用于类似序言的内容。

答案2

\documentclass{standalone}    
\usepackage{pstricks}    
\makeatletter
\g@addto@macro{\endpspicture}{\ignorespacesafterend}
\makeatother

\begin{document}    
\begin{pspicture}(1,1)
\psframe(1,1)
\end{pspicture}
foo
\end{document}

相关内容