用 LaTeX 中的平衡括号替换平衡括号

发布于 2024-09-07 03:20:14 字数 254 浏览 4 评论 0原文

如何编写一个 (La)TeX 命令,将所有 [ 替换为 {,将所有 ] 替换为 },假设每个 [ 都有一个匹配的 ],并且 [ 和 ] 之间的任何大括号都是平衡的?它需要能够处理嵌套括号。

例如,我希望能够编写命令 \mynewcommand 以便 \mynewcommand{{[[{1}{2}][{3}{4}]]}}\mycommand{{{{{1}{2}}{{3}{4}}}}} 相同。

How can I write a (La)TeX command that replaces all [ with { and all ] with }, assuming that every [ has a matching ], and that any braces between the [ and ] are balanced? It needs to be able to deal with nested brackets.

For example, I want to be able to write a command \mynewcommand so that \mynewcommand{{[[{1}{2}][{3}{4}]]}} is the same as \mycommand{{{{{1}{2}}{{3}{4}}}}}.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

守护在此方 2024-09-14 03:20:17

也许最简单的方法是使用 e-TeX 和 \scantokens

\newcommand*\mycommand[1]{%
  \begingroup
    \everyeof{\noexpand}%
    \endlinechar=-1\relax
    \catcode`\[=1\relax
    \catcode`\]=2\relax
    \edef\temp{\scantokens{#1}}%
  \expandafter\endgroup
  \expandafter\def\expandafter\temp\expandafter{\temp}%
}

这将使用 #1 中的材料定义 \temp,但每个“[”...“]”对都变成 TeX 大括号组(“{”... “}”)。然后你可以使用 \temp 来做任何你想做的事情。正如我所说,这需要 e-TeX,它在所有现代 TeX 系统中都可用。

Probably the easiest way is to use e-TeX and \scantokens

\newcommand*\mycommand[1]{%
  \begingroup
    \everyeof{\noexpand}%
    \endlinechar=-1\relax
    \catcode`\[=1\relax
    \catcode`\]=2\relax
    \edef\temp{\scantokens{#1}}%
  \expandafter\endgroup
  \expandafter\def\expandafter\temp\expandafter{\temp}%
}

This will define \temp with the material in #1 but with every "[" ... "]" pair turned into a TeX brace group ("{" ... "}"). You can then use \temp to do whatever you want. As I say, this requires e-TeX, which is available in all modern TeX systems.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文