这是我的代码:
\documentclass{article}
\usepackage{listings}
\begin{document}
Foo
{ \texttt \input{bar.txt} }
Baz
\end{document}
输出结果如下:
Foo bar.txt Baz
我原本期望的是这个输出:
Foo <content of bar.txt> Baz
其中<content of bar.txt>
包含名为 bar.txt 的文件的实际内容。
我知道我的代码不正确,并且我知道可以这样修复:
\texttt{ \input{bar.txt} }
或者像这样:
{\ttfamily \input{bar.txt}}
bar.txt
但我想知道为什么我的错误代码最终会在输出中产生文字而不是文件 bar.txt 的内容?
答案1
如果参数是单个标记,则可以省略 TeX 宏参数周围的括号。\fbox{a}
可以写成\fbox a
所以
\texttt \input{bar.txt}
是
\texttt{\input}{\bar.txt}
即(模数一些与此不相关的检查)
{\ttfamily \input}{bar.txt}
因此,一个组启动后,字体被切换,然后 TeX 开始处理\input
它,然后输入文件,.tex
该文件除了发出一条警告消息,说明它什么都不做之外什么都不做。在终端上,你会看到
(/home/davidc/texmf/tex/latex/tools/.tex File ignored)
然后}
关闭组,因此没有文本以 tt 字体设置。最后将{}
aroundbar.txt
作为一个组(而不是参数分隔符),并bar.txt
使用文档字体进行排版。