\renewcommand 的 ConTeXt 等效项

\renewcommand 的 ConTeXt 等效项

我可以用\定义定义一个新命令,但如何覆盖现有命令?

我的用例是重写所有内容{\externalfigure[cow]}\placefigure[right]{My Caption}{\externalfigure[cow]}使它们浮动。

答案1

(重新)定义命令

\define覆盖现有命令:

\define\foo{Foo}
\define\foo{Bar}
\starttext
  \foo  %% Bar
\stoptext

这将向日志文件打印一条消息,指出该命令已定义,但正在重新定义。如果你这样做不是想要覆盖现有命令,可以使用\unique

\def\foo{Foo}
\unique\def\foo{Bar}
\starttext
  \foo  %% Foo
\stoptext

这也会将消息打印到日志文件,但保留旧的定义。

command '\foo' is already defined

您的用例

我不会修改 TeX 宏或尝试重新定义核心宏。使用编辑器的搜索替换功能或编写正则表达式来添加\placefigure\externalfigure调用之前。

如果你真的想要一个肮脏的 TeX 黑客,这是我的镜头:

\let\externalfigureOrig\externalfigure

\def\externalfigure[#1]%%
  {\placefigure[right]{}{\externalfigureOrig[#1]}}

答案2

下面的内容不是标题中问题的答案,但可能对你有帮助。我认为它利用了 pandoc 的属性,即直接传递与输入格式的语法不匹配的内容。

因为你的管道是这样的:

[ reStructuredText ]     pandoc
[ or Markdown      ] --------------> [ context ]
[ or ...           ]

你可能对pandoc+预处理器解决方案在 Aditya 的博客上。

在那篇文章中,他描述了使用gpp使用通用预处理器,将特定于输出格式的代码放入他的 Markdown 文档中;您还可以使用它将具有自定义“翻译”的自定义结构元素放入您的文档中。

(The plain Markdown output)
<#define rightpic|![#1](#2)>
(The output for HTML mode)
<#ifdef HTML>
    <#define rightpic|<img alt="#1" href="#2" float="right" />> 
<#endif>
(the output for TeX mode)
<#ifdef TEX> 
    <#define rightpic|\\placefigure[right]{#1}{\\externalfigure[#2]}> 
<#endif> 

I have here a picture of a cow. <#rightpic My caption|cow>

使用以下方式直接将其编译为上下文或 HTML

gpp -H -DTEX=1  mysource.md | pandoc -f markdown -t context -o myresult.tex
gpp -H -DHTML=1 mysource.md | pandoc -f markdown -t html    -o myresult.html

祝你好运!

相关内容