![将文本传递给命令中嵌入的 alltt(需要额外的换行符)](https://linux22.com/image/255393/%E5%B0%86%E6%96%87%E6%9C%AC%E4%BC%A0%E9%80%92%E7%BB%99%E5%91%BD%E4%BB%A4%E4%B8%AD%E5%B5%8C%E5%85%A5%E7%9A%84%20alltt%EF%BC%88%E9%9C%80%E8%A6%81%E9%A2%9D%E5%A4%96%E7%9A%84%E6%8D%A2%E8%A1%8C%E7%AC%A6%EF%BC%89.png)
我想alltt
在命令内部关闭(在文本周围添加一些装饰),但用于将等宽文本放入列中的空间没有被保留。
我在这里找到了解决方案: 定义新命令时 alltt 包出现问题
它是(简化形式):
\newenvironment{comm}[1]
{%
#1%
\begin{alltt}}
{\end{alltt}}
它可以工作,但我需要在后面添加额外的换行符\begin
:
\begin{comm}
user: some-user
password: some-password
\end{comm}
如果没有这个换行符,它看起来是这样的:
不过,这个额外的换行符不会被“吃掉”,而是会被保留下来,因此实际文本前总会有一个巨大的垂直空间。例如,我尝试切换它,\null
但没有成功。
我尝试移除%
标志,但效果还是一样。
这不是一个大问题(我用一些方法解决了它vspace
),但我想知道为什么会这样,因为我认为这可能会为我澄清一些问题。
答案1
您使用的语法告诉 LaTeX 寻找环境的参数comm
。通常参数在括号中指定,但 TeX 的规则允许不使用括号指定参数:在这种情况下,它是后面的第一个标记。
所以你的尝试
\begin{comm}
user: some-user
password: some-password
\end{comm}
结果u
是论点。
由于您不需要在alltt
环境之前打印任何内容,因此解决方案是说
\newenvironment{comm}
{\begin{alltt}}
{\end{alltt}}
顺便说一下,这是一个好的提供适当的名称而不是使用通用环境是个不错的主意,就像您所做的那样。您稍后可能需要更改环境的打印方式;如果您到处都使用alltt
,则需要查看每个alltt
环境以查看是否需要更改。通过分配不同的名称,您可以更改 的定义comm
,这不会影响alltt
您文档中的其他环境。