gpt4 book ai didi

latex - TeX edef 宏蓝调

转载 作者:行者123 更新时间:2023-12-01 02:58:35 25 4
gpt4 key购买 nike

我花了一些时间尝试编写一个“帮助程序”宏来测试参数的新值,否则使用现有值——所有参数位置都存在默认值。

我希望能够写:

\foo{left}{nil}{}{20pt}

这样第二个参数将使用其当前值,但第三个值将是值空字符串。我想使用符号:
\edef\pA{\isnil{#1}{\pA){#1}} % one for each parameter

我像这样定义了\isnil:
\def\nil{nil}
\def\isnil#1#2#3{%
\edef\nilTest{#1}%
\ifx\nilTest\nil#2\else#3\fi
}

但是当我尝试运行它时,TeX 提示\nilTest 是一个未定义的控制序列。
这当然是正确的,但我希望\pA 保存一个值,而不是一个值的配方,所以它必须是一个\edef,这意味着所有的宏测试都将被扩展,但是\edef 不会保护\nilTest - 这是一个使用\noexpand 的地方 - 似乎对我不起作用。

编辑:\cs 名称中没有数字(是的,我知道。)

最佳答案

为什么您的解决方案不起作用? \edef\pA{\isnil{#1}{\pA){#1}}展开 \isnil并得到 \edef\nilTest{... .现在 \edef不可展开并落入\pA 作为第一个元素的序列。尝试扩展下一个宏 \nilTest失败。

使用 \setpar从以下代码更改您的参数。

\def\nil{nil}
\def\setpar#1#2{%
\edef\nilTest{#2}%
\ifx\nilTest\nil\else\let#1\nilTest\fi}

\def\first{old first}
\def\second{old second}
\setpar \first{nil}
\setpar \second{new}

first = ``\first'', second = ``\second''

附言不要在宏中使用数字。

关于latex - TeX edef 宏蓝调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1867748/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com