带括号的 LaTeX 3 字符串变量

带括号的 LaTeX 3 字符串变量

我想在字符串变量中包含一些括号:

\documentclass{article}
\usepackage{expl3}

\begin{document}
    \ExplSyntaxOn
    \str_new:N \l_example_var
    \int_new:N \l_example_int

    \str_set:Nn \l_example_var {\{}
    \str_put_right:NV \l_example_var {\l_example_int}
    \str_put_right:Nn \l_example_var {\}~some~text}

    \str_show:N \l_example_var
    \ExplSyntaxOff
\end{document}

不幸的是,这会导致括号前面出现令人讨厌的反斜杠:

> \l_example_var=\{0\} some text.
<recently read> }

l.13 ^^I\str_show:N \l_example_var

我怎样才能去掉括号前面的反斜杠?例如\l_example_var={0} some text.

答案1

我不确定这样的字符串有什么好处{42},也许你需要一个标记列表。然而,

\str_set:Nx \l_example_str { \c_left_brace_str \int_use:N \l_example_int \c_right_brace_str }

就行了。对于令牌列表,它类似

\tl_set:Nx \l_example_tl { { \int_use:N \l_example_int } }

答案2

显然,{}“字符串”应在字符串中按字面意思出现,因此添加它们的一种方法是使用\c_left_brace_str\c_right_brace_str以及宏V的修饰符\str_set:Nn

还有其他文字字符串常量,例如\c_hash_str\c_dollar_str,它们实际上是带有 catcode 12 的常量标记列表。请参阅当前interface3手册第 75 页(截至 2018/12/27)。

\documentclass{article}
\usepackage{expl3}

\begin{document}
    \ExplSyntaxOn
    \str_new:N \l_example_var
    \int_new:N \l_example_int

    \str_set:NV \l_example_var \c_left_brace_str
    \str_put_right:NV \l_example_var \l_example_int
    \str_put_right:NV \l_example_var \c_right_brace_str
    \str_put_right:Nn \l_example_var {~some~text}


    \str_show:N \l_example_var
    \ExplSyntaxOff
\end{document}

输出为

这是 pdfTeX,版本 3.14159265-2.6-1.40.19(TeX Live 2018)

(预加载格式=pdflatex)\write18 已启用。进入扩展模式

(./stringwith.tex LaTeX2e <2018-12-01>

(/usr/local/texlive/2018/texmf-dist/tex/latex/base/article.cls

文档类别:文章 2018/09/03 v1.4i 标准 LaTeX 文档类别

(/usr/local/texlive/2018/texmf-dist/tex/latex/base/size10.clo)

(/usr/local/texlive/2018/texmf-dist/tex/latex/l3kernel/expl3.sty

(/usr/local/texlive/2018/texmf-dist/tex/latex/l3kernel/expl3-code.tex)

(/usr/local/texlive/2018/texmf-dist/tex/latex/l3kernel/l3pdfmode.def)

(./stringwith.aux)

\l_example_var={0} 一些文本。}

l.16 \str_show:N \l_example_var

? x 没有输出页面。记录写在 stringwith.log 上。

相关内容