如何定义不占用任何空间的命令

如何定义不占用任何空间的命令

我想创建一个可以生成特殊表格和图形的环境。在该环境中,用户应该能够执行预定义的命令,这些命令可以修改最终绘图的行为或添加应绘制的元素。

我目前面临的问题是,即使执行的每个命令没有输出任何内容,它也会消耗一些水平空间。

有没有办法定义对输出完全没有任何影响的命令?

请考虑以下示例:

\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}

相关内容