我尝试使用这些命令将 LaTeX 源文件中的某些几何参数打印到终端和日志文件。但是,有时编译后会出现问题, TeXstudio 中pdftex
会显示此问题Process exited with error(s)
。这是个问题吗?因为这些命令是 TeX 基元,很难在终端或日志文件中查找这些命令的输出,那么有没有更简单的方法来完成这项任务?
答案1
\show
让您(在日志中)看到控制序列的定义。如果是宏,您将获得定义,对于其他宏,它会告诉您它是如何定义的(例如,它是计数器、标记列表还是长度等)。对于非宏,\the
排版其值。并\showthe
在日志文件中显示该值。
\documentclass{article}
\begin{document}
\newlength\somelength
\somelength=10pt
\show\somelength
\the\somelength
\showthe\somelength
\newcommand{\somemacro}[2]{this has #1 and #2}
\show\somemacro
\end{document}
在日志文件中你会看到三个节目:
> \somelength=\skip43.
l.5 \show\somelength
> 10.0pt.
l.7 \showthe\somelength
> \somemacro=\long macro:
#1#2->this has #1 and #2.
l.9 \show\somemacro
并\the\somelength
打印10.0pt
在输出文档中。
答案2
\the
基本上,和之间的区别\showthe
在于,前者将其结果插入到当前标记流中,例如在 TeX 正在排版的其他材料中,而后者将其结果以错误消息的形式显示在终端上(和转录文件中)。参见\命令了解这些命令的作用。
该\show
命令类似于\showthe
,它将结果显示为终端上显示的错误消息,但是,\showthe
它不会返回某个内部量的当前值,而是给出标记的当前含义(通常是控制序列,但是,正如@egreg在他的评论,\show
适用于任何标记)。实际上,返回的信息只有当此标记或控制序列代表宏时才有意义,在这种情况下,它会\show
在终端上显示其当前定义。当标记代表 TeX 基元时,\show
只会通知您这一事实。
让我们举一个例子来说明一下区别:如果你说
\show\parindent
TeX 将回答
> \parindent=\parindent.
这是它的说法,这\parindent
是一个原始命令(更确切地说,在这种情况下,它是一个<dimen parameter>
,见TeXbook,第 274 页)。另一方面,如果你要求
\showthe\parindent
TeX 可能会回答,例如
> 20.00003pt.
显示参数的当前值。下面是应用于表示宏的标记\parindent
的示例:如果你说\show
\show\mbox
你会得到答案
> \mbox=\long macro:
#1->\leavevmode \hbox {#1}.
对于非控制序列的宏标记,其工作方式相同:例如,
\show ~
导致以下回复
> ~=macro:
->\nobreakspace {}.
最后一个例子:\show
应用于代表原始命令的标记:
\show x
产量
> the letter x.
显示这x
是一个原始命令,它指示 TeX 将字母“x”的字符(在当前字体中)添加到当前水平列表中。
\the
该\show
命令的一个松散的类似物是,它将与终端上显示的\meaning
信息基本相同的信息插入到当前标记流中(例如,插入到正在排版的文本中) 。\show
还应该注意的是,该\the
操作是在 token 扩展期间执行的(相反,\show
和\showthe
是命令这些都在 TeX 的胃里执行),而且其结果可以用于与排版完全不同的目的,例如,它们可用于初始化宏。典型的用法是
\edef\savedParindentValue{\the\parindent}
保存当前值以\parindent
供日后使用。
答案3
正如在以下问题的答案中所解释的那样在非停止模式下使用 \show 会导致 TeXmaker 发出错误警报。有什么解决办法吗?,\show
并\showthe
以与错误相同的方式中断 TeX(它们导致进程以非零代码退出)。
如果要在日志文件和终端中记录某些参数的值,最好使用\typeout
:
\newcommand{\recordvalue}[1]{%
\typeout{%
*** Vesnog message ***^^J%
Value of \detokenize{#1}: \the#1^^J%
******%
}%
}
完整示例:
\documentclass{article}
\newcommand{\recordvalue}[1]{%
\typeout{%
*** Vesnog message ***^^J%
Value of \detokenize{#1}: \the#1^^J%
******%
}%
}
\begin{document}
\recordvalue{\textwidth}
\recordvalue{\count0}
\recordvalue{\value{page}}
\end{document}
终端上输出:
*** Vesnog message ***
Value of \textwidth : 345.0pt
******
*** Vesnog message ***
Value of \count 0: 1
******
*** Vesnog message ***
Value of \value {page}: 1
******
使用独特的字符串可以更容易地找到日志文件中的信息。