笔记:我必须调整这个问题以反映马丁的回答(实际上并没有 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}