我正在尝试编写一个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
和\\
。
如果有人可以帮助改进此过滤器,我将非常感激。