用于乳胶后端的组织模式导出过滤器以创建\ cmidrule

时间:2018-03-26 01:38:58

标签: emacs latex org-mode

我正在尝试编写一个LaTeX导出过滤器,该过滤器应该将所有表行替换为具有<3cid4> by \cmidrule{lr}{3-4}

等条目的单元格

这个想法是有一个这样的表格行

| <2cid3> |           <4cid5> |        <6cid7>             |                   |                                           |                   |                   |

哪个应该导出到

\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(lr){6-7}

这就是我已经走了。

(defun org-export-cmidrule-filter-latex (row backend info)
  (while (string-match "\\(<\\([0-9]+\\)cid\\([0-9]+\\)?>[[:blank:]]*\\([^&]+\\)\\)" row)
    (let ((start (string-to-number (match-string 2 row)))
          (end (or (match-string 3 row) "l")))
      (setq row (replace-match (format "\\\\cmidrule(lr){%s-%s}" start end) nil nil row 1))
      (while (string-match "& \\| \\\\\\\\" row 0)
        (setq row (replace-match "" nil nil row))
        (decf start))))
  row)

(add-to-list 'org-export-filter-table-row-functions
         'org-export-cmidrule-filter-latex)

如果我连续只有一个或两个<[0-9]cid[0-9]>字符串,则上述过滤器有效。它没有获取第三个<[0-9]cid[0-9]>字符串。

问题似乎出现在代码的这一部分:

(while (string-match "& \\| \\\\\\\\" row 0)
  (setq row (replace-match "" nil nil row))
  (decf start))

如果我发表评论,我会收到三个\cmidrule个乳胶命令,但&s\\

不知何故,上述行代替的不仅仅是&s\\

如果有人可以帮助改进此过滤器,我将非常感激。

0 个答案:

没有答案