\includegraphics Seitenbox ohne Clipping

\includegraphics Seitenbox ohne Clipping

Ich habe einige PDF-Symbole mit einer TrimBox, die sich von der MediaBox unterscheidet.Zum Beispiel:

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

Ich möchte das Bild so einbinden, dass die TrimBox für die Positionierung und Abmessungen verwendet wird und der gesamte Inhalt aus der MediaBox angezeigt wird. Da ich aber faul bin, möchte ich dies ohne bbmanuelle Einstellungen tun \includegraphics.

Was ich versucht habe, aber bisher nicht funktioniert hat:

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

Was funktioniert, aber zu spezifisch ist (nicht alle Symbole sind gleich):

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

Welche Möglichkeiten gibt es, dies zu tun, ohne die Grafiken im LaTeX-Quellcode manuell zuschneiden zu müssen?


Ich verwende LuaLaTeX, daher könnte eine Option darin bestehen, die Symbole in einer Schriftart als Glyphen zu speichern, aber einige von ihnen haben Formen, die bei der Konvertierung verstümmelt werden (versuchtSchriftart Benutzerdefiniert) und einer davon hat zwei Farben (ja, ich weißdas ist möglicherweise kein Problem mehr).

Antwort1

Folgendes scheint für pdflatex zu funktionieren (ich habe Ihre Datei in trimbox.pdf umbenannt):

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

Bildbeschreibung hier eingeben

\l_tmpa_intist wohl nicht nötig, \pdflastximagescheint auch zu funktionieren, allerdings fand ich es etwas mutig, mitten in einem neuen Bild auf das letzte zuzugreifen.

lualatex kennt den Befehl nicht \pdfximagbbox, daher lässt sich ein bisschen Lua-Code nicht vermeiden, um die Viewport-Werte zu erhalten:

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

Antwort2

Auf David Carlisles Empfehlung hin, einen Blick in die epdfBibliothek zu werfen, habe ich etwas gefunden, das meinen Anforderungen entspricht, und poste es daher als Antwort. Ich bin jedoch bereit, etwas Allgemeineres zu akzeptieren, das nicht nur Lua unterstützt oder einfach besser ist.

Hier ist ein funktionierender Code:

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

Die Ausgabe ist wie folgt (unter Verwendung derBild aus der Frage):

Ausgabe des obigen Codes; die erste Grafik ist abgeschnitten, die zweite nicht

verwandte Informationen