\includegraphics pagebox sin recorte

\includegraphics pagebox sin recorte

Tengo algunos íconos de PDF con un TrimBox diferente al MediaBox.Por ejemplo:

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

Me gustaría incluir la imagen de una manera que utilice TrimBox para el posicionamiento y las dimensiones y muestre todo el contenido de MediaBox. Pero, como soy vago, quiero hacerlo sin configurarlo bbmanualmente \includegraphics.

Lo que he probado pero no funciona hasta ahora:

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

Lo que funciona pero es demasiado específico (no todos los íconos son iguales):

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

¿Cuáles son las formas de hacerlo sin tener que recortar los gráficos manualmente en la fuente LaTeX?


Yo uso LuaLaTeX, por lo que una opción podría ser almacenar los íconos en una fuente como glifos, pero algunos de ellos tienen formas que se estropean en la conversión (probéFuente personalizada) y uno de ellos tiene dos colores (sí, lo séPuede que esto ya no sea un problema.).

Respuesta1

Lo siguiente parece funcionar para pdflatex (cambié el nombre de su archivo a 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}

ingrese la descripción de la imagen aquí

\l_tmpa_intProbablemente no sea necesario, \pdflastximageparece funcionar también, pero me pareció un poco valiente acceder a la última imagen en medio de una nueva.

lualatex no conoce el comando \pdfximagbbox, por lo que no se puede evitar un poco de código lua para obtener los valores de la ventana gráfica:

\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}

Respuesta2

Siguiendo la recomendación de David Carlisle de echar un vistazo a la epdfbiblioteca, obtuve algo que satisface mis necesidades, así que lo publico como respuesta. Sin embargo, estoy dispuesto a aceptar algo que sea más general, no solo lua o simplemente mejor.

Aquí hay un código de trabajo:

\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}

El resultado es el siguiente (usando elimagen de la pregunta):

Salida del código anterior; El primer gráfico está recortado, el segundo no.

información relacionada