将 GAP 输出翻译成 latex

将 GAP 输出翻译成 latex

我想知道是否有可能将计算机代数系统 GAP 的输出自动转换为漂亮的 latex 形式。我没有使用 latex 编程的经验,所以我不确定这样的事情是否可能,或者是否存在可以立即进行转换的工具。

以下是此类 GAP 输出的两个示例:

[ [ 'x{}'_op_'x{0, 1, 2}' ], [ 'x{2}'_op_'x{0, 1}', 'x{1}'_op_'x{0, 2}', 'x{0}'_op_'x{1, 2}' ], 
  [ 'x{1, 2}'_op_'x{0}', 'x{0, 2}'_op_'x{1}', 'x{0, 1}'_op_'x{2}' ], [ 'x{0, 1, 2}'_op_'x{}' ] ]

这是一个包含多个条目的列表,预期的乳胶输出应如下所示:

$( \emptyset , \{ 0,1,2 \} ) \rightarrow ( \{2 \} , \{0,1 \} ) \oplus ( \{1 \} , \{0,2 \} ) \oplus ( \{ 0 \} , \{1,2 \} ) \rightarrow  ( \{1,2 \} , \{ 0 \} ) \oplus ( \{ 0,2 \} , \{ 1 \} ) \oplus ( \{ 0,1 \} , \{ 2 \} ) \rightarrow ( \{ 0,1,2 \} , \emptyset )$

上面给出的代码呈现的渲染公式。

因此,GAP 输出由几个形式如下的列表组成(例如)['x{1, 2}'操作‘x{0}’,‘x{0, 2}’操作‘x{1}’,‘x{0, 1}’操作'x{2}' ],其在 Latex 中应对应于 $( {1,2 } , { 0 } ) \oplus ( { 0,2 } , { 1 } ) \oplus ( { 0,1 } , { 2 } )$,并且这些列表在 Latex 中通过 $\rightarrow $ 连接。

GAP-输出(示例2):

[ [ 'x{}'_op_'x{0, 1, 2}' ], [ 'x{}'_op_'x{0, 1}', 'x{1}'_op_'x{0, 1, 2}', 'x{0}'_op_'x{1, 2}' ], 
  [ 'x{1, 2}'_op_'x{0}', 'x{0}'_op_'x{1}', 'x{0, 1}'_op_'x{1, 2}' ], [ 'x{0, 1, 2}'_op_'x{}' ] ] 

预期乳胶形式:

$( \emptyset , \{ 0,1,2 \} ) \rightarrow ( \emptyset , \{0,1 \}) \oplus ( \{1\} , \{ 0,1,2 \} ) \oplus ( \{0\} , \{1,2 \}) \rightarrow ( \{1,2 \} , \{0 \} ) \oplus ( \{ 0 \} , \{1 \} ) \oplus ( \{0,1\} , \{1,2 \} ) \rightarrow ( \{0,1,2 \} , \emptyset )$

上面给出的代码呈现的渲染公式。

答案1

看起来我们需要自己进行转换。理论上,在纯 latex 中可以进行转换。但用其他编程语言编写要容易得多。我写了一个(非常 hacky)python 脚本来完成这项工作:

gap_input =  """
[ [ 'x{}'_op_'x{0, 1, 2}' ], [ 'x{2}'_op_'x{0, 1}', 'x{1}'_op_'x{0, 2}', 'x{0}'_op_'x{1, 2}' ], 
  [ 'x{1, 2}'_op_'x{0}', 'x{0, 2}'_op_'x{1}', 'x{0, 1}'_op_'x{2}' ], [ 'x{0, 1, 2}'_op_'x{}' ] ]
"""

def listify(s):
    return s.replace('_op_', ', ').replace("x{", "[").replace("}", "]")

def transform_gap_to_tex(gap_input):
    gap_input = eval(gap_input.replace("'_op_'", '_op_'))
    gap_input = map(lambda x: map(lambda y: eval("[%s]" % listify(y)), x), gap_input)
    return "$%s$" % " \\rightarrow ".join(map(lambda x: 
                        "\\oplus".join(map(lambda y: "( %s )" % ", ".join(
                            map(lambda z: "\\{ %s \\}" % str(z)[1:-1], y)
                        ), x)), gap_input)).replace("\\{  \\}", "\\emptyset")

print(transform_gap_to_tex(gap_input))

有很多方法可以自动使用类似的东西。有一篇很好的帖子介绍这个: 如何使用其他编程语言和工具来创建 TeX 文档的内容?

还有在 latex 中使用 python 代码的包但是这个代码特别需要一些额外的功能才能以这种方式工作。('%'在乳胶中被解释为注释)

如果以上都不适合您,那么手动运行脚本的工作量至少会比手动进行转换少。

相关内容