Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 20

Thema: Bildhöhe und -breite in Caption mit anzeigen

  1. #1
    TeacherMC
    Gast

    Bildhöhe und -breite in Caption mit anzeigen

    Hallo,

    ich suche nach einer Lösung für folgende
    Darstellung einer Bildunterschrift:

    xxxxxxxxxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxxxxxxxxxx
    xxx Bild xxxxxxxxxxxxxxxxxx
    xxxxxxxxxxxxxxxxxxxxxxxxxx
    Abbilung 1: Bildtitel (70x40)

    Dabei soll hinter dem Bildtitel in Klammern
    die tatsächliche Bildhöhe und -breite in mm
    mit angezeigt werden.

    Kann mir da jemand helfen?

  2. #2
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    ist gar nicht so einfach. Hier mal mit ein wenig geschustert:

    Code:
    \documentclass[fontsize=11pt,paper=a4,pagesize,demo]{scrartcl}
    
    \usepackage[utf8]{inputenc}
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \makeatletter
    \newlength\BreiteBild
    \newlength\LaengeBild
    \newcommand*\BreiteBildAusgabe{}
    \newcommand*\LaengeBildAusgabe{}
    
    \let\includegraphicsOld\includegraphics
    \renewcommand{\includegraphics}[2][]{%
        \def\@TEMPA{\includegraphicsOld[#1]{#2}}%
        \settowidth{\BreiteBild}{\@TEMPA}%
        \settoheight{\LaengeBild}{\@TEMPA}%
        \edef\BreiteBildAusgabe{\strip@pt\dimexpr\BreiteBild * 25400 / 72270 \relax mm}
        \edef\LaengeBildAusgabe{\strip@pt\dimexpr\LaengeBild * 25400 / 72270 \relax mm}
        \@TEMPA%
        }
    \let\captionOld\caption
    \renewcommand{\caption}[1]{%
         \captionOld[#1]{#1\relax\ (\BreiteBildAusgabe, \LaengeBildAusgabe)}}
    \makeatother
    
    \begin{document}
    \begin{figure}[ht]\centering
    \includegraphics[height=3cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    \begin{figure}[ht]\centering
    \includegraphics[width=8cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    
    \end{document}
    Gruß
    Marco

  3. #3
    TeacherMC
    Gast

    Thumbs up

    Hallo Marco,

    echt der Wahnsinn.

    Ich muss nun erst mal in Ruhe nachvollziehen,
    was du da gebaut hast.

    Im Minibeispiel siehts super aus.


    Vielen Dank
    für Deine Mühe

    Gruß

    Nico

  4. #4
    TeacherMC
    Gast
    Hallo Marco

    ich habe Dein Minibeispiel noch etwas verändert,
    so dass die mm-Werte gerundet werden.

    Code:
    \documentclass[fontsize=11pt,paper=a4,pagesize,demo]{scrartcl}
    
    \usepackage{fp} %runden
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \addto\captionsngerman{\renewcommand{\figurename}{Bild}}
    \usepackage[bf]{caption}
    \makeatletter
    \newlength\BreiteBild
    \newlength\LaengeBild
    \newcommand*\BreiteBildAusgabe{}
    \newcommand*\LaengeBildAusgabe{}
    
    \let\includegraphicsOld\includegraphics
    \renewcommand{\includegraphics}[2][]{%
        \def\@TEMPA{\includegraphicsOld[#1]{#2}}%
        \settowidth{\BreiteBild}{\@TEMPA}%
        \settoheight{\LaengeBild}{\@TEMPA}%
        \edef\BreiteBildAusgabe{\strip@pt\dimexpr\BreiteBild * 25400 / 72270 \relax}
        \edef\LaengeBildAusgabe{\strip@pt\dimexpr\LaengeBild * 25400 / 72270 \relax}
        
        \FPround{\BreiteBildAusgabe}{\BreiteBildAusgabe}{0}
        \FPround{\LaengeBildAusgabe}{\LaengeBildAusgabe}{0}
        
        \@TEMPA%
        }
    \let\captionOld\caption
    \renewcommand{\caption}[1]{%
         \captionOld[#1]{#1\relax\ (\BreiteBildAusgabe x\LaengeBildAusgabe)}}
    \makeatother
    
    \begin{document}
    \begin{figure}[ht]\centering
    \includegraphics[height=3cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    \begin{figure}[ht]\centering
    \includegraphics[width=8cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    
    \end{document}

  5. #5
    ctansearch
    Gast
    ..oder so?
    Code:
    \documentclass[fontsize=11pt,paper=a4,demo,pagesize]{scrartcl}
    \usepackage{graphicx,xcolor}
    \newcommand{\mypicture}[4]
    {
    \begin{figure}
    	\centering 
    	\includegraphics[width=#1mm,height=#2mm]{#3}
    	\caption{#4 \textcolor{red}{(#1 x #2)}}
    \end{figure}
    }
    \begin{document}
    \mypicture{50}{40}{test}{Titel}
    \end{document}
    Geändert von ctansearch (16-01-2010 um 01:09 Uhr)

  6. #6
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Zitat Zitat von ctansearch Beitrag anzeigen
    ..oder so?
    Code:
    \documentclass[fontsize=11pt,paper=a4,demo,pagesize]{scrartcl}
    \usepackage{graphicx,xcolor}
    \newcommand{\mypicture}[4]
    {
    \begin{figure}
    	\centering 
    	\includegraphics[width=#1mm,height=#2mm]{#3}
    	\caption{#4 \textcolor{red}{(#1 x #2)}}
    \end{figure}
    }
    \begin{document}
    \mypicture{50}{40}{test}{Titel}
    \end{document}
    Das wird wohl nicht funktionieren. So hast du das Problem, dass dein Bild verzerrt wird.

    Gruß
    Marco

  7. #7
    ctansearch
    Gast
    Zitat Zitat von mechanicus Beitrag anzeigen
    Das wird wohl nicht funktionieren. So hast du das Problem, dass dein Bild verzerrt wird.
    Gruß Marco
    Ja, das kommt dann darauf an , ob man die Daten eingibt oder berechnen läßt. Kennst Du eine einfache Möglichkeit \linewidth, keepaspectratio etc in Werte umzuwandeln?

  8. #8
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    Zitat Zitat von ctansearch Beitrag anzeigen
    Ja, das kommt dann darauf an , ob man die Daten eingibt oder berechnen läßt. Kennst Du eine einfache Möglichkeit \linewidth, keepaspectratio etc in Werte umzuwandeln?
    ich könnte mir vorstellen, es als Kombination meines ersten Versuches mit dem xkeyval-Paket. Du gibt also an: width=XXX und der rest wird dementsprechend errechnet. (dito für die Höhe)

    Gruß
    Marco

  9. #9
    ctansearch
    Gast
    Zitat Zitat von mechanicus Beitrag anzeigen
    Hi,
    ich könnte mir vorstellen, es als Kombination meines ersten Versuches mit dem xkeyval-Paket. Du gibt also an: width=XXX und der rest wird dementsprechend errechnet. (dito für die Höhe)
    In meinem Beispiel kann man \height, \width,\linewidth, keepaspectratio etc verwenden, das Bild wird dann auch korrekt berechnet, aber man bekommt in den Klammern (höhe x breite) keine Werte.

  10. #10
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von ctansearch Beitrag anzeigen
    In meinem Beispiel kann man \height, \width,\linewidth, keepaspectratio etc verwenden, das Bild wird dann auch korrekt berechnet, aber man bekommt in den Klammern (höhe x breite) keine Werte.
    die Werte sind doch sowieso bekannt. Man braucht sie aber auch nicht.

    Code:
    \documentclass[fontsize=11pt,paper=a4,pagesize,demo]{scrartcl}
    
    \usepackage{fp} %runden
    \usepackage[ngerman]{babel}
    \usepackage{graphicx}
    \addto\captionsngerman{\renewcommand{\figurename}{Bild}}
    \usepackage[bf]{caption}
    \makeatletter
    \newsavebox\BBox
    \def\strip@#1.#2\@nil{#1}
    \def\mm#1{\@tempdima=0.3515#1\relax
      \expandafter\strip@\the\@tempdima\@nil}
    \let\includegraphicsOld\includegraphics
    \renewcommand{\includegraphics}[2][]{%
      \sbox\BBox{\includegraphicsOld[#1]{#2}}\usebox\BBox}
    \let\captionOld\caption
    \renewcommand{\caption}[1]{%
         \captionOld[#1]{#1~(\mm{\wd\BBox}$\times$\mm{\ht\BBox})}}
    \makeatother
    
    \begin{document}
    \begin{figure}[ht]\centering
    \includegraphics[height=3cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    \begin{figure}[ht]\centering
    \includegraphics[width=8cm]{picture} 
    \caption{Bildunterschrift}
    \end{figure}
    
    \end{document}
    Herbert

  11. #11
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    kannst du bitte mal folgendes erklären:
    Zitat Zitat von voss Beitrag anzeigen
    Code:
    \def\strip@#1.#2\@nil{#1}
    \def\mm#1{\@tempdima=0.3515#1\relax
      \expandafter\strip@\the\@tempdima\@nil}
    speziell das rote Codesegment
    Ich habe zwar gefunden, dass \@nil ein Makrobegrenzer ist, jedoch kriege ich kein einfaches Beispiel hin, um es zu verstehen.

    Gruß
    Marco

  12. #12
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von mechanicus Beitrag anzeigen
    speziell das rote Codesegment
    Ich habe zwar gefunden, dass \@nil ein Makrobegrenzer ist, jedoch kriege ich kein einfaches Beispiel hin, um es zu verstehen.
    \@nil muss man nicht nehmen, man kann es auch durch etwas ersetzen, was
    definitiv nicht im Argument auftreten kann. Man nimmt nur gerne \@nil,
    weil das wohl eher nicht in einem Argument auftaucht und somit gut als
    Argumentbegrenzer funktioniert. Will ich z. B. wissen, ob ein Argument
    ein Komma enthält, so kann ich das so feststellen:

    Code:
    \documentclass{minimal}
    \makeatletter
    \def\hatKomma#1{\expandafter\hat@Komma#1,,\@nil}
    \def\hat@Komma#1,#2,#3\@nil{%
      \ifx\relax#2\relax kein Komma \else Komma\fi}
    \begin{document}
    
    \hatKomma{1234}
    
    \hatKomma{1,234}
    
    \end{document}
    Damit könnte man dann auch Argumente zulassen wie
    \color{Farbe}{RGB}{12,13,88} bzw. \color{Farbe}{RGB}{12 13 88}
    Beides kann verarbeitet werden und gibt keinen Fehler, weil ich feststellen
    kann, ob ein Komma da ist oder nicht. Wenn ja mache ich mit A sonst mit
    B weiter. Das \expandafter ist oben prophylaktisch, falls man ein Argument
    hat, was erst noch zerlegt werden muss, für das einfache Beispiel wäre
    es überflüssig.

    Herbert

  13. #13
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    so lange geht das Licht an, aber ich habe leider keinen Schalter, sondern nur einen Dimmer

    Ich habe dein Beispiel mal für mich erweitert:
    Code:
    \documentclass{minimal}
    \makeatletter
    \def\hatKomma#1{\expandafter\hat@Komma#1,,\@nil}
    \def\hat@Komma#1,#2,#3\@nil{%
      Neue Eingabe\par Vor dem Komma #1\par Nach dem Komma #2\par
      Das Komma #3\par Ergebnis:
      \ifx\relax#2\relax kein Komma \else Komma\fi}
    \begin{document}
    
    \hatKomma{1234}
    \vskip3em
    \hatKomma{1,34245}
    
    \end{document}
    Somit ist das @nil verständlich. Jetzt kommt gleich die nächste Frage hinterher. Ich finde es faszinierend, dass LaTeX aus:
    Code:
    \def\hatKomma#1{\expandafter\hat@Komma#1,,\@nil}
    direkt die einzelnen Segmente in \hat@Komma heraus filtert. In dem gezeigtem MB entspricht es den Eingaben #2 und #3.
    Das würde ich gerne auch noch verstehen.

    Danke
    Marco

  14. #14
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von mechanicus Beitrag anzeigen
    Somit ist das @nil verständlich. Jetzt kommt gleich die nächste Frage hinterher. Ich finde es faszinierend, dass LaTeX aus:
    Code:
    \def\hatKomma#1{\expandafter\hat@Komma#1,,\@nil}
    direkt die einzelnen Segmente in \hat@Komma heraus filtert. In dem gezeigtem MB entspricht es den Eingaben #2 und #3.
    Das würde ich gerne auch noch verstehen.
    es gibt beispielsweise die Eingaben für \hat@Komma
    Code:
    1,,\@nil -> #1=1; #2=; #3=;
    1,1,,\@nil -> #1=1; #2=1; #3=,;
    ,,\@nil -> #1=; #2=; #3=; % alles leer
    Wenn ich nur wissen will, ob ein Komma da ist und keine Zerlegung brauche,
    dann geht auch
    Code:
    \def\hatKomma#1{\expandafter\hat@Komma#1,\@nil}
    \def\hat@Komma#1,#2\@nil{%
    ...
    Was also bewirkt das zweite Komma in \hat@Komma#1,,\@nil ?

    Herbert

  15. #15
    Registrierter Benutzer Avatar von mechanicus
    Registriert seit
    10.07.2008
    Ort
    Hamburg
    Beiträge
    3.944
    Hi,

    Zitat Zitat von voss Beitrag anzeigen
    Was also bewirkt das zweite Komma in \hat@Komma#1,,\@nil ?
    Jetzt schimmert es:
    Mit der Definition:
    Code:
    \def\hat@Komma#1,#2,#3\@nil
    Mit der Anweisung gibst du an, dass die Eingabeparameter von \hat@Komma kommasepariert sind.
    Das hat zur folge, dass bei der Eingabe eines Strings XY ohne Komma
    Code:
    #1,#2,#3
    Nur #1 belegt wird und #2 und #3 bleiben leer.
    Gebe ich nun einen String X,Y mit Komma ein, so verschiebt sich die Sequenz:
    Aus der Darstellung
    Code:
    #1,#2,#3
    wird
    Code:
    X,Y,,
    Somit ist die Eingabe #1 mit dem Vorkommawert belegt. Die Eingabe #2 mit dem Nachkommawert. und der Wert #3 ist das Komma selbst.

    Würde nun der letzte Eingabeparameter #3 fehlen, so ergibt sich auf Grund der Verschiebung durch den String X,Y, dass der Eingabewert #2 die Darstellung: Y, hat. (Zu beachten das Komma bei Y)

    Habe ich das soweit richtig verstanden?

    Gruß
    Marco

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •