使用pylatex插入指定坐标图片始终显示在左上角问题求助
问题原因
你使用的standalone文档类默认会自动裁剪掉内容外的所有空白区域,你给TikZ节点设置的坐标偏移对应的空白会被直接裁掉,最终输出的PDF边界会对齐到图片的边缘,看起来就像图片永远固定在左上角,和你设置的坐标无关。
解决方法
有两种常用的可落地方案:
方案1:给TikZ环境手动指定固定画布大小(推荐保留standalone的场景用)
直接给tikzpicture环境设置固定的宽高,避免standalone自动裁剪,同时给节点设置south west锚点,让你指定的坐标对应图片左下角的位置,逻辑更直观。
修改后的代码如下:
from pylatex import (Document, TikZ, TikZNode, TikZCoordinate, TikZOptions, StandAloneGraphic, NoEscape) geometry_options = {"margin": "0cm"} doc = Document(documentclass='standalone',document_options=('tikz'), geometry_options=geometry_options) doc.append(NoEscape(r'\noindent')) # 给TikZ环境设置A4大小的固定画布,锚点对齐左下角 with doc.create(TikZ(options=TikZOptions('minimum width=210mm', 'minimum height=297mm', 'anchor=south west'))) as pic: img = TikZNode(text=StandAloneGraphic('example-image-a', image_options='width=0.8\\textwidth').dumps(), at = TikZCoordinate(10,20), # 此处坐标会正常生效,对应图片左下角的位置 options=TikZOptions('inner sep=0pt', 'anchor=south west') ) pic.append(img) doc.generate_pdf('basic',compiler='lualatex', clean_tex=False)
方案2:更换为普通的article文档类
如果不需要standalone的特性,直接换成article文档类即可,普通文档类不会自动裁剪页面空白,坐标会直接生效,只需要保留margin=0的配置就能得到无边距的效果:
# 仅需要修改Document初始化这一行即可 doc = Document(documentclass='article', geometry_options={"margin": "0cm"})
补充说明
TikZ节点默认的锚点是中心位置,如果你不设置anchor=south west,你写的坐标会对应图片的中心坐标,需要根据自己的使用场景选择合适的锚点参数。
内容的提问来源于stack exchange,提问作者AlbrechtL
相关产品推荐
相关产品推荐

