클리핑 없이 \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

다음은 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}

출력은 다음과 같습니다(질문의 이미지):

위 코드의 출력; 첫 번째 그래픽이 잘렸지만 두 번째 그래픽은 잘리지 않았습니다.

관련 정보