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 bb
manualmente \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}
\l_tmpa_int
Probablemente no sea necesario, \pdflastximage
parece 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 epdf
biblioteca, 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):