\the、\showthe 和 \show 命令之间的区别?

\the、\showthe 和 \show 命令之间的区别?

我尝试使用这些命令将 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
******

使用独特的字符串可以更容易地找到日志文件中的信息。

相关内容