Magger
25-06-2012, 21:07
Hallo,
ich möchte eine Funktion schreiben, welche die \includegraphics-Funktion so neudefiniert, dass die per width angebene Breite stets verdoppelt wird, ohne aber die Textbreite zu überschreiten. (Hintergrund ist, dass ich aus exakt dem gleichen Quellcode ein A4-Dokument und ein Dokument ist Smartphone-Displaygröße erstellen möchte.) Alle anderen Parameter sollen trotzdem angegeben und weitergereicht werden können.
Folgendes Minimalbeispiel funktioniert noch nicht so ganz, ich weiß aber nicht warum.
\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage{ifthen}
\usepackage{calc}
% alten Befehl umbenennen
\let\includegraphicsold\includegraphics
% Längenvariablen anlegen
\newlength{\largerwidth}
\newlength{\givenwidth}
\makeatletter
\def\includegraphics{\@ifnextchar[\@includegraphics{\@includegraphics[]}}
\def\@includegraphics[#1]#2{
\ifthenelse{\equal{#1}{}}{%
% keine Parameter gegeben
\includegraphicsold{#2}
}{%
% die Breite bestimmen
\setkeys{ignew}{#1}
% die doppelte Breite bestimmen
\setlength{\largerwidth}{0pt}
\addtolength{\largerwidth}{\givenwidth * \real{2}}
\ifthenelse{\lengthtest{\largerwidth<\textwidth}}{%
% Abbildung mit der doppelten Breite einfügen
%\includegraphicsold[#1,width=\largerwidth]{#2}
\includegraphicsold[width=\largerwidth,\setkeys{igold}{#1}]{#2}
}{%
% Abbildung mit der maximal möglichen Breite eingefügt
%\includegraphicsold[#1,width=\textwidth]{#2}
\includegraphicsold[width=\textwidth,\setkeys{igold}{#1}]{#2}
}
}
}
% neue Schlüssel definieren
\define@key{ignew}{width}{\setlength{\givenwidth}{ #1}}
\define@key{ignew}{height}{}
\define@key{ignew}{bb}{}
\define@key{ignew}{bbllx}{}
\define@key{ignew}{bblly}{}
\define@key{ignew}{bburx}{}
\define@key{ignew}{bbury}{}
\define@key{ignew}{hiresbb}[true]{}
\define@key{ignew}{viewport}{}
\define@key{ignew}{trim}{}
\define@key{ignew}{angle}{}
\define@key{ignew}{origin}{}
\define@key{ignew}{height}{}
\define@key{ignew}{totalheight}{}
\define@key{ignew}{keepaspectratio}[true]{}
\define@key{ignew}{scale}{}
\define@key{ignew}{draft}[true]{}
\define@key{ignew}{clip}[true]{}
\define@key{ignew}{type}{}
\define@key{ignew}{ext}{}
\define@key{ignew}{read}{}
\define@key{ignew}{command}{}
% alte Schlüssel definieren
\define@key{igold}{height}{height=#1,}
\define@key{igold}{bb}{bb=#1,}
\define@key{igold}{bbllx}{bbllx=#1,}
\define@key{igold}{bblly}{bblly=#1,}
\define@key{igold}{bburx}{bburx=#1,}
\define@key{igold}{bbury}{bbury=#1,}
\define@key{igold}{hiresbb}[true]{hiresbb=#1,}
\define@key{igold}{viewport}{viewport=#1,}
\define@key{igold}{trim}{trim=#1,}
\define@key{igold}{angle}{angle=#1,}
\define@key{igold}{origin}{origin=#1,}
\define@key{igold}{height}{height=#1,}
\define@key{igold}{width}{}
\define@key{igold}{totalheight}{totalheight=#1,}
\define@key{igold}{keepaspectratio}[true]{keepaspectratio=#1,}
\define@key{igold}{scale}{scale=#1,}
\define@key{igold}{draft}[true]{draft=#1,}
\define@key{igold}{clip}[true]{clip=#1,}
\define@key{igold}{type}{type=#1,}
\define@key{igold}{ext}{ext=#1,}
\define@key{igold}{read}{read=#1,}
\define@key{igold}{command}{command=#1,}
\makeatother
\begin{document}
\begin{center}
\includegraphics[width=0.3\textwidth,draft]{figurefile}
\end{center}
\end{document}
Beim Kompilieren erhält man zwei Fehler
! Missing \endcsname inserted.
und
! Extra \endcsname.
Die oben auskommentierten Zeilen funktionieren aber ganz gut, erscheinen mir aber programmiertechnisch nicht so sauber.
Kann mir jemand helfen?
ich möchte eine Funktion schreiben, welche die \includegraphics-Funktion so neudefiniert, dass die per width angebene Breite stets verdoppelt wird, ohne aber die Textbreite zu überschreiten. (Hintergrund ist, dass ich aus exakt dem gleichen Quellcode ein A4-Dokument und ein Dokument ist Smartphone-Displaygröße erstellen möchte.) Alle anderen Parameter sollen trotzdem angegeben und weitergereicht werden können.
Folgendes Minimalbeispiel funktioniert noch nicht so ganz, ich weiß aber nicht warum.
\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage{ifthen}
\usepackage{calc}
% alten Befehl umbenennen
\let\includegraphicsold\includegraphics
% Längenvariablen anlegen
\newlength{\largerwidth}
\newlength{\givenwidth}
\makeatletter
\def\includegraphics{\@ifnextchar[\@includegraphics{\@includegraphics[]}}
\def\@includegraphics[#1]#2{
\ifthenelse{\equal{#1}{}}{%
% keine Parameter gegeben
\includegraphicsold{#2}
}{%
% die Breite bestimmen
\setkeys{ignew}{#1}
% die doppelte Breite bestimmen
\setlength{\largerwidth}{0pt}
\addtolength{\largerwidth}{\givenwidth * \real{2}}
\ifthenelse{\lengthtest{\largerwidth<\textwidth}}{%
% Abbildung mit der doppelten Breite einfügen
%\includegraphicsold[#1,width=\largerwidth]{#2}
\includegraphicsold[width=\largerwidth,\setkeys{igold}{#1}]{#2}
}{%
% Abbildung mit der maximal möglichen Breite eingefügt
%\includegraphicsold[#1,width=\textwidth]{#2}
\includegraphicsold[width=\textwidth,\setkeys{igold}{#1}]{#2}
}
}
}
% neue Schlüssel definieren
\define@key{ignew}{width}{\setlength{\givenwidth}{ #1}}
\define@key{ignew}{height}{}
\define@key{ignew}{bb}{}
\define@key{ignew}{bbllx}{}
\define@key{ignew}{bblly}{}
\define@key{ignew}{bburx}{}
\define@key{ignew}{bbury}{}
\define@key{ignew}{hiresbb}[true]{}
\define@key{ignew}{viewport}{}
\define@key{ignew}{trim}{}
\define@key{ignew}{angle}{}
\define@key{ignew}{origin}{}
\define@key{ignew}{height}{}
\define@key{ignew}{totalheight}{}
\define@key{ignew}{keepaspectratio}[true]{}
\define@key{ignew}{scale}{}
\define@key{ignew}{draft}[true]{}
\define@key{ignew}{clip}[true]{}
\define@key{ignew}{type}{}
\define@key{ignew}{ext}{}
\define@key{ignew}{read}{}
\define@key{ignew}{command}{}
% alte Schlüssel definieren
\define@key{igold}{height}{height=#1,}
\define@key{igold}{bb}{bb=#1,}
\define@key{igold}{bbllx}{bbllx=#1,}
\define@key{igold}{bblly}{bblly=#1,}
\define@key{igold}{bburx}{bburx=#1,}
\define@key{igold}{bbury}{bbury=#1,}
\define@key{igold}{hiresbb}[true]{hiresbb=#1,}
\define@key{igold}{viewport}{viewport=#1,}
\define@key{igold}{trim}{trim=#1,}
\define@key{igold}{angle}{angle=#1,}
\define@key{igold}{origin}{origin=#1,}
\define@key{igold}{height}{height=#1,}
\define@key{igold}{width}{}
\define@key{igold}{totalheight}{totalheight=#1,}
\define@key{igold}{keepaspectratio}[true]{keepaspectratio=#1,}
\define@key{igold}{scale}{scale=#1,}
\define@key{igold}{draft}[true]{draft=#1,}
\define@key{igold}{clip}[true]{clip=#1,}
\define@key{igold}{type}{type=#1,}
\define@key{igold}{ext}{ext=#1,}
\define@key{igold}{read}{read=#1,}
\define@key{igold}{command}{command=#1,}
\makeatother
\begin{document}
\begin{center}
\includegraphics[width=0.3\textwidth,draft]{figurefile}
\end{center}
\end{document}
Beim Kompilieren erhält man zwei Fehler
! Missing \endcsname inserted.
und
! Extra \endcsname.
Die oben auskommentierten Zeilen funktionieren aber ganz gut, erscheinen mir aber programmiertechnisch nicht so sauber.
Kann mir jemand helfen?