使用 LaTeX 将 { 和 } 写入文件

使用 LaTeX 将 { 和 } 写入文件

在 LaTeX 中,如何才能将特殊字符{}逐字逐句地写入外部文件,而不进行平衡?

显然下面的做法是行不通的:

 \immediate\write\my@outfile{{}
 \immediate\write\my@outfile{}}

答案1

编写平衡的括号不需要任何特殊要求,如以下交互式 TeX 会话的记录所示:

$ tex
This is TeX, Version 3.1415926 (TeX Live 2011)
**\relax
*\newwrite\mywr
*\immediate\openout\mywr=temp.dat
*\immediate\write\mywr{{}}
*\bye
No pages of output.
Transcript written on texput.log.
$ cat temp.dat
{}

如果你想写不平衡的括号,你可以这样做

\begingroup
\catcode`<=1 \catcode`>=2
\catcode`{=12 \catcode`}=12
\gdef\wbgroup<{>
\gdef\wegroup<}>
\endgroup

\newwrite\mywr
\immediate\openout\mywr=temp.dat

\immediate\write\mywr{\wbgroup}
\immediate\write\mywr{\wegroup}

\bye

即分别使用\wbgroup\wegroup来书写开括号和闭括号。的内容temp.dat将是

{
}

请注意,LaTeX 已经有和的等效物,称为和,\wbgroup它们实际上扩展为类别代码 11 个字符。\wegroup\@charlb\@charrb

\wbgroup和的替代定义\wegroup扩展到类别代码 12 个字符

\begingroup\lccode`?=`\{ \lccode`!=`\}
\lowercase{\endgroup\def\wbgroup{?}\def\wegroup{!}}

或者

\edef\wbgroup{\iftrue\string{\else}\fi}
\edef\wegroup{\iffalse{\else\string}\fi}

答案2

为了编写不平衡的括号,您应该使用宏来将它们保存为逐字字符。写入文件时,这些将被扩展。LaTeX2e 定义了\@charlb(左括号) 和\@charrb(右括号),它们当然需要\makeatletter..。您可以在或更好的\makeatother中找到这些列表。source2emacros2e

\immediate\write\my@outfile{\@charlb}
\immediate\write\my@outfile{\@charrb}

\Verbdef您还可以使用我的newverbs包(不要与包混淆\verbdef)轻松定义您自己的宏verbdef。以这种方式定义的宏可用于写入外部文件(与\verbdef哪些宏可输入不同)。

\usepackage{newverbs}
\Verbdef\leftbrace|{|
\Verbdef\rightbrace|}|
% ...

\immediate\write\myoutfile{\leftbrace}
\immediate\write\myoutfile{\rightbrace}

答案3

取决于你想做什么,你可以尝试逃避它

\newwrite\temp
\immediate\openout\temp=temp.dat
\immediate\write\temp{\}}
\bye

这将写入文件\delimiter "5267309temp.dat,或者您可以写入\string\},这将写入 \}文件中。

相关内容