![如何定义不占用任何空间的命令](https://linux22.com/image/274141/%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E4%B8%8D%E5%8D%A0%E7%94%A8%E4%BB%BB%E4%BD%95%E7%A9%BA%E9%97%B4%E7%9A%84%E5%91%BD%E4%BB%A4.png)
我想创建一个可以生成特殊表格和图形的环境。在该环境中,用户应该能够执行预定义的命令,这些命令可以修改最终绘图的行为或添加应绘制的元素。
我目前面临的问题是,即使执行的每个命令没有输出任何内容,它也会消耗一些水平空间。
有没有办法定义对输出完全没有任何影响的命令?
请考虑以下示例:
\documentclass{article}
\newenvironment{test}{x}{y}
\newcounter{somecounter}
\newcommand{\somecommand}[1]{%
\setcounter{somecounter}{#1}%
}
\begin{document}
\section*{Test 1}
\begin{test}%
\somecommand{42}
\end{test}
\section*{Test 2}
\begin{test}
\end{test}
\end{document}
结果如下:
somecommand
我想要的是以一种方式定义命令测试 1看起来就像测试 2。有什么办法可以实现吗?也许我可以将命令放在不可见的框中,或者高度和宽度为 0 的框中?
如果做不到,有没有办法计算命令需要多少空间,以便我可以(以编程方式)插入负水平和垂直空间?
答案1
在这种情况下,你应该定义test
为
\newenvironment{test}{x\ignorespaces}{\unskip y}
它将删除(忽略) 之后的空格\begin{test}
并吞噬 之前的空格\end{test}
。此外,您还需要删除 中的虚假空格\somecommand
:
\newcommand{\somecommand}[1]{%
\setcounter{somecounter}{#1}%
}
作为参考,请参阅%
行末百分号 ( ) 有什么用?。
\documentclass{article}
\newenvironment{test}{x\ignorespaces}{\unskip y}
\newcounter{somecounter}
\newcommand{\somecommand}[1]{%
\setcounter{somecounter}{#1}%
}
\begin{document}
\section*{Test 1}
\begin{test}
\somecommand{42}
\end{test}
\section*{Test 2}
\begin{test}
\end{test}
\end{document}