我正在尝试这样做:
\documentclass{article}
\begin{document}
\message{Hello \\ world!}
\end{document}
但是,并\\
没有打印出行尾。我在控制台中得到了这个:
Hello \\ world!
这里的正确语法是什么?
答案1
此版本有效(我假设打印行尾意味着您转到下一行):
\documentclass{article}
\begin{document}
\message{Hello ^^J world!}
\end{document}
(^^J
表示换行符)。
答案2
(其他方面都不错的)答案普热米斯瓦夫·舍尔文特克掩盖了几个细节。
您不能使用\\
来分隔行\message
,因为\\
是排版操作说明。
TeX 中有一个通用机制来在\write
或\message
指令中生成新行,即使用以内部整数的当前值作为字符代码(ASCII 码)的字符\newlinechar
。
在 TeXbook 中我们发现(第 228 页)
⟨token list⟩
\write
应该比较短,因为它只输出一行。TeX 的一些实现无法写出长行;如果你想写很多东西,只需给出几个\write
命令即可。或者,你可以将 TeX 的\newlinechar
参数设置为你想要代表“开始新行”的某个字符的 ASCII 码编号;然后 TeX 将在通常将该字符输出到文件时开始新行。例如,在单个命令中向终端输出两行的一种方法\write
是说\newlinechar=`\^^J \immediate\write16{Two^^Jlines.}
值得注意的是,纯 TeX 没有为 设置值\newlinechar
,因此它保留默认值 −1。
相反,LaTeX 始终设置\newlinechar=`\^^J
,因此你始终可以执行类似以下操作
\documentclass{article}
\begin{document}
\message{Hello^^Jworld!}
\end{document}
请注意, 周围的空格^^J
会保留。这会在和指令中\message
产生新行。\message
\write
\typeout