\includegraphics クリッピングなしのページボックス

\includegraphics クリッピングなしのページボックス

MediaBox とは異なる TrimBox を持つ PDF アイコンがいくつかあります。例えば:

Page size:      23.2441 x 20.6929 pts (rotated 0 degrees)
MediaBox:           0.00     0.00    23.24    20.69
CropBox:            0.00     0.00    23.24    20.69
BleedBox:           0.00     0.00    23.24    20.69
TrimBox:            0.00     4.25    21.26    20.69
ArtBox:             0.00     4.25    21.26    20.69

TrimBox を使用して位置と寸法を設定し、MediaBox からコンテンツ全体を表示する方法で画像を含めたいと思います。しかし、面倒なので、 でbb手動で設定せずに実行したいと思います\includegraphics

これまで試してみたがうまくいかなかったこと:

\includegraphics[pagebox=trimbox, clip=false]{my-picture}

機能しているが、あまりに具体的すぎるもの (すべてのアイコンが同じではない):

\includegraphics[bb=0 4.25 21.26 20.69, clip=false]{my-picture}

LaTeX ソースでグラフィックを手動でトリミングせずにこれを行う方法は何ですか?


私はLuaLaTeXを使用しているので、アイコンをフォントにグリフとして保存するという選択肢もありますが、変換時に形が崩れてしまうものもあります(試してみました)フォントカスタム)そしてそのうちの1つは2色あります(はい、知っていますこれはもう問題ではないかもしれない)。

答え1

以下は pdflatex で機能するようです (ファイル名を trimbox.pdf に変更しました):

\documentclass[a4paper]{article}

\usepackage{graphicx,expl3}

\begin{document}
\fbox{\includegraphics{trimbox}}
\ExplSyntaxOn
\fbox{%
\pdfpagebox=4 ~ %force use of trimbox
\pdfximage{trimbox.pdf}
\int_set:Nn\l_tmpa_int{\pdflastximage} 
\includegraphics[viewport=
\dim_to_decimal:n{\pdfximagebbox\l_tmpa_int~1}~ % Returns lower-left x
\dim_to_decimal:n{\pdfximagebbox\l_tmpa_int~2}~ % Returns lower-left y
\dim_to_decimal:n{\pdfximagebbox\l_tmpa_int~3}~ % Returns upper-right x
\dim_to_decimal:n{\pdfximagebbox\l_tmpa_int~4}  % Returns upper-right y
]{trimbox}}
\ExplSyntaxOff

\end{document}

ここに画像の説明を入力してください

\l_tmpa_intおそらく必要ありませんが、\pdflastximage動作するようです。ただし、新しい画像の途中で最後の画像にアクセスするのは少し勇気がいると感じました。

lualatex はコマンドを認識しない\pdfximagbboxため、ビューポート値を取得するために少し lua コードを回避することはできません。

\documentclass[a4paper]{article}

\usepackage{graphicx,expl3}

\begin{document}
\fbox{\includegraphics{trimbox}}
\directlua{
a = img.new({filename='trimbox.pdf',pagebox='trim'})
img.scan(a)
}
\fbox{\includegraphics[viewport=\directlua{tex.print(a.bbox[1]/ 65536)}
                                \directlua{tex.print(a.bbox[2]/ 65536)}
                                \directlua{tex.print(a.bbox[3]/ 65536)}
                                \directlua{tex.print(a.bbox[4]/ 65536)}]{trimbox}}
\end{document}

答え2

David Carlisle のライブラリを調べるという推奨に従って、epdf自分のニーズを満たすものを入手したので、回答として投稿します。ただし、lua 専用ではなく、より一般的なものや、より優れたものでも受け入れるつもりです。

動作するコードは次のとおりです:

\documentclass{article}

\usepackage{graphicx}

\usepackage{luacode}

\begin{luacode*}
function bbTrimBox(options,docname)
  tex.print("\\includegraphics")
  if options ~= "" then
    tex.print("["..options)
  end
  local doc = epdf.open(docname)
  if doc == nil then
    doc = epdf.open(docname .. ".pdf")
  end
  if doc == nil then
    tex.error("Could not find PDF file \""..docname.."\"")
    if options ~= "" then
      tex.print("]")
    end
  else
    if options ~= "" then
      tex.print(",")
    else
      tex.print("[")
    end
    local box = doc:getCatalog():getPage(1):getTrimBox()
    local bb = "bb=" .. box.x1 .. " " .. box.y1 .. " " .. box.x2 .. " " .. box.y2
    tex.print(bb)
    tex.print("]")
    -- doc:close() -- cannot call this, "attempt to call method 'close' (a nil value)"
  end
  tex.print("{"..docname.."}")
end
\end{luacode*}

\newcommand\includegraphicsbb[2][]{\directlua{bbTrimBox("#1", "#2")}}

\begin{document}
\fontsize{30}{40}\selectfont
This a test text \includegraphics[height=1em, pagebox=trimbox, clip=false]{mwe} \includegraphicsbb[height=1em]{mwe}
\end{document}

出力は次のようになります(質問からの画像):

上記のコードの出力。最初のグラフィックは切り取られ、2番目のグラフィックは切り取られない。

関連情報