Visio 中的 MathType 公式导出 SVG 后留白过大,如何修复?
结论
先在 Inkscape 中判断异常来自页面尺寸还是公式对象的边界,再处理对应位置。inkscapearea=page 只决定按 SVG 页面区域导出,不会自动收紧 MathType 公式的边界框。
如果只是为了让图在 LaTeX 中正常排版,可以先将 SVG 页面调整到需要的图形范围,再按页面导出。如果还要求公式对象的选择框贴合内容,就需要进一步检查公式在 SVG 中的表示方式。
目前没有提供 SVG 文件和软件版本,无法确定具体原因,也无法给出适用于所有版本的 Visio 或 MathType 设置。
为什么 inkscapearea=page 改善有限?
LaTeX 的 svg 宏包区分两种导出范围:
inkscapearea=drawing:按绘图中所有对象的边界导出,包括页面外的对象。inkscapearea=page:按 SVG 文件中已定义的页面范围导出。
页面过大时,选择 page 仍会保留空白;对象边界异常时,选择 drawing 可能扩大导出范围。这两个选项都不会修复公式对象。参见 svg 宏包文档。
先区分页面问题和对象问题
请在文件副本上操作,避免影响原始图稿。
- 在 Inkscape 中打开 SVG,分别查看页面范围和整个绘图范围。
- 单独选中一个异常公式,观察选择框是否明显超出可见公式。
- 如果公式属于组合,进入组合内部逐个检查子对象;必要时在副本中取消组合。
- 使用对象面板或 XML 编辑器查看公式由哪些元素组成。
可以检查是否存在远离公式的多余对象、很大的无可见填充矩形,或自身带有透明留白的嵌入图像。这些只是排查方向,不能仅凭现象认定具体原因。
确认对象不承担背景、遮罩或其他绘图功能后,才能删除。直接缩小整个公式对象,通常只会把公式和异常范围一起缩小。
先消除最终图形的留白
如果优先目标是让 LaTeX 中的图正常显示,可以指定页面范围:
- 在 Inkscape 中画一个矩形,框住最终需要保留的完整示意图,包括公式、箭头和标签。
- 只选中这个矩形,使用将页面调整到所选对象的功能。不同版本的入口可能位于文档属性或页面工具中。
- 页面调整完成后,删除辅助矩形,并保存为新的 SVG 文件,例如
diagram-fixed.svg。 - 检查页面四周,确认没有裁掉上下标、分数线、箭头或描边。
Inkscape 可以按绘图或所选对象调整页面;没有选择对象时,会按整个绘图计算范围。如果公式边界仍然异常,直接执行“页面适应整个绘图”可能再次得到过大的页面。参见 Inkscape 页面调整说明。
调整页面后,最终导出范围会改变,但公式对象的选择框仍可能保持原来的大小。
在 LaTeX 中使用修正后的页面
如果使用 svg 宏包,可以参考以下示例:
\documentclass{article}
\usepackage{svg}
\begin{document}
\includesvg[
width=0.8\linewidth,
inkscapearea=page,
inkscapelatex=false
]{diagram-fixed}
\end{document}
其中 diagram-fixed 对应保存后的 diagram-fixed.svg。自动转换还要求编译环境能够调用 Inkscape。
inkscapelatex=false 表示不把图中文字拆出来交给 LaTeX 排版,适合希望保留图内现有文字呈现方式的情况。这个设置也不会修复边界框。如果需要由 LaTeX 排版图中文字,应根据图稿内容选择相应设置。参数说明见 svg 宏包文档。
怎样让公式对象本身的边界收紧?
处理方法取决于检查结果:
- 如果组合中有多余对象,删除已确认无用的对象,再检查公式边界。
- 如果公式是带透明留白的图像,需要裁剪图像内容,或从源头重新生成边界合适的公式图形。单纯调整页面不会改变图像自身的尺寸。
- 如果文字或导出结构导致边界异常,可以在副本中尝试转换为路径,再比较转换前后的外观和选择框。转换为路径会降低编辑便利性,也不保证能消除所有异常边界。
如果 Visio 或 MathType 提供其他矢量输出方式,可以用一个公式做小样,比较导入 Inkscape 后的外观和边界。验证之前,不宜认定更换某个格式就一定能解决问题。
如果直接导出 SVG 始终异常,还可以尝试从 Visio 导出 PDF,检查其中的公式和留白,将页面裁剪合适后,再通过 graphicx 的 \includegraphics 插入 LaTeX。PDF 也可能保留异常内容,仍需检查,不能只更换扩展名。
备注:内容仅供参考。
