GNU m4 宏自动生成文件
GNU m4 macros auto generated file
我下载了 latex 包,我想对其进行一些更改,但在这个包中存在文件 include.m4,我不知道它的作用以及它是如何生成的。这是它的行:
m4_changequote([[, ]])m4_dnl
m4_dnl
m4_define([[m4_FILE_INIT]], [[m4_dnl
%
% This is automaticaly generated file, do not edit it.
%
]])m4_dnl
m4_dnl
m4_define([[m4_FILE_ID]], [[m4_dnl
m4_patsubst([[]], [[$Date::? \([0-9]+\)-\([0-9]+\)-\([0-9]+\).*]], [[//]])m4_dnl
v[[]]m4_ESKDX_VERSION]])m4_dnl
m4_dnl
m4_define([[m4_FILE_DATE]], [[m4_dnl
m4_patsubst([[]], [[$Date::? \([0-9]+\)-\([0-9]+\)-\([0-9]+\).*]], [[//]])]])m4_dnl
m4_dnl
你能解释一下它是用什么工具生成的吗?
嗯。所以这个文件不是自动生成的?你能帮我理解 Makefile 中的这些行吗:
M4FLAGS = -P -Dm4_ESKDX_INIT="m4_include($(TOP_DIR)/include.m4)" \
-Dm4_ESKDX_VERSION=$(VERSION) -Dm4_ESKDX_DATE=$(RELEASE_DATE)
和规则:
%.def: %.def.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
%.sty: %.sty.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
%.cls: %.cls.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
如我所见,GNU m4 选项“-D”将 .sty .cls 文件中的宏 m4_ESKDX_INIT 替换为 m4_include(../include.m4),然后选项“-P”首先扩展文件 include.m4 并进一步扩展 include.m4 中的宏。
这是 GNU m4 macro processor. This file is designed to be used with the -P
or --prefix-builtins
命令行选项的宏。当 m4 评估这个文件时, m4_
部分将被删除。这个文件本身不做任何事情,它只是定义了三个宏(FILE_INIT
、FILE_ID
和 FILE_DATE
),它们可能会在另一个步骤中使用。您可能想查看其他文件以查找对此文件的引用。基本思想是通过 m4 在 运行 另一个文件之前加载此文件,它将替换那些宏。
关于自动生成的消息应该作为注释出现在最终文件中。正如我们在 Makefile 的规则中看到的那样,每个 .def
、.sty
和 .cls
文件都是从一个等效命名的 .in
文件生成的(因此 result.cls
将从 result.cls.in
构建。通过评估这些文件中的宏并将它们替换为等效项。
因此,要修改这些文件,您需要编辑 .in
个文件。
我下载了 latex 包,我想对其进行一些更改,但在这个包中存在文件 include.m4,我不知道它的作用以及它是如何生成的。这是它的行:
m4_changequote([[, ]])m4_dnl
m4_dnl
m4_define([[m4_FILE_INIT]], [[m4_dnl
%
% This is automaticaly generated file, do not edit it.
%
]])m4_dnl
m4_dnl
m4_define([[m4_FILE_ID]], [[m4_dnl
m4_patsubst([[]], [[$Date::? \([0-9]+\)-\([0-9]+\)-\([0-9]+\).*]], [[//]])m4_dnl
v[[]]m4_ESKDX_VERSION]])m4_dnl
m4_dnl
m4_define([[m4_FILE_DATE]], [[m4_dnl
m4_patsubst([[]], [[$Date::? \([0-9]+\)-\([0-9]+\)-\([0-9]+\).*]], [[//]])]])m4_dnl
m4_dnl
你能解释一下它是用什么工具生成的吗?
嗯。所以这个文件不是自动生成的?你能帮我理解 Makefile 中的这些行吗:
M4FLAGS = -P -Dm4_ESKDX_INIT="m4_include($(TOP_DIR)/include.m4)" \
-Dm4_ESKDX_VERSION=$(VERSION) -Dm4_ESKDX_DATE=$(RELEASE_DATE)
和规则:
%.def: %.def.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
%.sty: %.sty.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
%.cls: %.cls.in $(M4DEPS)
m4 $(M4FLAGS) $< >$@
如我所见,GNU m4 选项“-D”将 .sty .cls 文件中的宏 m4_ESKDX_INIT 替换为 m4_include(../include.m4),然后选项“-P”首先扩展文件 include.m4 并进一步扩展 include.m4 中的宏。
这是 GNU m4 macro processor. This file is designed to be used with the -P
or --prefix-builtins
命令行选项的宏。当 m4 评估这个文件时, m4_
部分将被删除。这个文件本身不做任何事情,它只是定义了三个宏(FILE_INIT
、FILE_ID
和 FILE_DATE
),它们可能会在另一个步骤中使用。您可能想查看其他文件以查找对此文件的引用。基本思想是通过 m4 在 运行 另一个文件之前加载此文件,它将替换那些宏。
关于自动生成的消息应该作为注释出现在最终文件中。正如我们在 Makefile 的规则中看到的那样,每个 .def
、.sty
和 .cls
文件都是从一个等效命名的 .in
文件生成的(因此 result.cls
将从 result.cls.in
构建。通过评估这些文件中的宏并将它们替换为等效项。
因此,要修改这些文件,您需要编辑 .in
个文件。