Anzeige:
Ergebnis 1 bis 14 von 14

Thema: Anzahl Zeilen für einen Text berechnen

  1. #1
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82

    Anzahl Zeilen für einen Text berechnen

    Hallo,

    ich hab ein eher ungewöhnliches Problem, vielleicht weiß aber dennoch jemand eine Lösung.

    Man stelle sich vor, ich habe ein Umgebung, die mit Text gefüllt wird:

    Code:
    \begin{myenvironment}
    ... viel Text ...
    \end{myenvironment}
    Die Umgebung ist so definiert, dass sie hinter den Text eine Grafik setzt. Die Höhe der Grafik berechnet sich aus der Anzahl der benötigten Zeilen.

    Und genau hier ist mein Problem: Zur Zeit gebe ich an meine Umgebung per

    Code:
    \begin{myenvironment}{10}
    ... viel Text ...
    \end{myenvironment}
    die Anzahl der Zeilen (hier 10) mit, damit die Größe berechnet wird.

    Geht dies irgendwie automatisch? Sprich ein Befehl der Art

    Code:
    \calcheight{KOMPLEXER_LATEX_BEFEHL}
    der berechnet, wie viel Höhe der KOMPLEXE_LATEX_BEFEHL im Text einnehmen würde?

    Viele Grüße
    Dee

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

    du kannst die Umgebung linenumbers für deine Zwecke verwenden. Ist Bestandteil des lineno-Paketes.

    Gruß
    Marco

  3. #3
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Hm, ich habe nun mal so was versucht:

    Code:
    \begin{linenumbers}
    Hallo\\
    Wie geht es\\
    Dir
    \end{linenumbers}
    Da sehe ich dann vor jeder Zeile die Zeilennummer. Ich sehe aber noch nicht ganz, wie ich die Anzahl dann automatisch weiter benutzen kann. Und vor allem will ich ja nicht, dass dieser berechnete Text ausgegeben wird (zumindest nicht mit Zeilennummern).

    Gruß Dee

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.07.2004
    Beiträge
    2.365
    Wenn du eine Höhe berechnen willst, um mit ihr zu arbeiten, kannst du den Prozess imo nur in zwei Schritten generieren:
    1. du musst die Berechnungen vornehmen, indem du den Text in eine fiktive Box packst,
    2. du kannst die Masze der Box einbauen.

    Code:
    \documentclass[paper=a5,pagesize,halfparskip,10pt]{scrartcl}
    \usepackage{showframe}% just_4_demo
    
    \usepackage[utf8]{inputenc}
    \usepackage[T1]{fontenc}
    \usepackage[sc,osf]{mathpazo}
    \usepackage[scaled=.8]{beramono}
    
    \usepackage{calc,graphicx,settobox}
    
    
    \begin{document}
    
    \section{Die Hilfs-Box berechnen}
    
    \newsavebox{\mybox}
    \savebox{\mybox}{% 
    \begin{tabular}{@{}p{\linewidth}@{}} 
    Wir vergleichen das Genom von gesunden Probanden mit dem von kranken und suchen jene Biomarker, die die psychische Krankheit anzeigen. Die Messungen nimmt ein Roboter vor. Da rattert es, und heraus kommt die Aktivität Tausender Gene. Tatsächlich wissen wir jetzt, dass bei denjenigen, die krank wurden, einige Gene anders reguliert werden.
    \end{tabular}
    }
    Die Box um eine nicht sichtbare, fiktive Tabelle hat folgende Masze:\par
    \the\wd\mybox -- Breite der Box\par
    \the\ht\mybox -- Hoehe der Box\par
    \the\dp\mybox -- Tiefe der Box\par
    
    
    \clearpage\newpage
    \section{Die Seite bauen}
    
    \parbox{\the\wd\mybox}{%
    \begin{tabular}{@{}p{\linewidth}@{}} 
    Wir vergleichen das Genom von gesunden Probanden mit dem von kranken und suchen jene Biomarker, die die psychische Krankheit anzeigen. Die Messungen nimmt ein Roboter vor. Da rattert es, und heraus kommt die Aktivität Tausender Gene. Tatsächlich wissen wir jetzt, dass bei denjenigen, die krank wurden, einige Gene anders reguliert werden.
    \end{tabular}
    }
    
    \includegraphics[height=\ht\mybox+\dp\mybox]{bild}
    
    \end{document}
    edico

  5. #5
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von edico Beitrag anzeigen
    Wenn du eine Höhe berechnen willst, um mit ihr zu arbeiten, kannst du den Prozess imo nur in zwei Schritten generieren:
    1. du musst die Berechnungen vornehmen, indem du den Text in eine fiktive Box packst,
    2. du kannst die Masze der Box einbauen.

    Code:
    \parbox{\the\wd\mybox}{%
    \begin{tabular}{@{}p{\linewidth}@{}} 
    Wir vergleichen das Genom von gesunden Probanden mit dem von kranken und suchen jene Biomarker, die die psychische Krankheit anzeigen. Die Messungen nimmt ein Roboter vor. Da rattert es, und heraus kommt die Aktivität Tausender Gene. Tatsächlich wissen wir jetzt, dass bei denjenigen, die krank wurden, einige Gene anders reguliert werden.
    \end{tabular}
    }
    \usebox\mybox macht dasselbe

    Herbert

  6. #6
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Hallo,

    das klingt sehr gut. Vielen Dank dafür. Ich habe es jetzt per

    Code:
    \newsavebox{\mybox}
    
    \newcommand{\boxhoehe}[1]
    {
    \savebox{\mybox}{% 
    \begin{tabular}{@{}p{\linewidth}@{}} 
    #1
    \end{tabular}
    }
    Die Box um eine nicht sichtbare, fiktive Tabelle hat folgende Masze:\par
    \the\wd\mybox -- Breite der Box\par
    \the\ht\mybox -- Hoehe der Box\par
    \the\dp\mybox -- Tiefe der Box\par
    }
    umgesetzt.

    Ist es jetzt noch möglich, das ganze als Environment zu schreiben? Hat denn das, was zwischen dem \begin und \end steht einen Zugriffsbezeichner? Sprich, kann von

    Code:
    \begin{myenvironment}
    ... viel Text ...
    \end{myenvironment}
    die Höhe über die obige Box berechnet werden?

    Wenn nicht, muss ich wohl auf ein simples Kommando umsteigen.

    Viele Grüße
    Dominik

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

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox{\mybox}
    \newenvironment{myenv}{%
       \begin{lrbox}{\mybox}\begin{minipage}{\textwidth}
        }{%
       \end{minipage}\end{lrbox}%
       \usebox{\mybox}
       \par Die Box um eine nicht sichtbare, fiktive Tabelle hat folgende Masze:\par
       \the\wd\mybox -- Breite der Box\par
       \the\ht\mybox -- Hoehe der Box\par
       \the\dp\mybox -- Tiefe der Box\par}
    \begin{document}
    \begin{myenv}
     \blindtext[1]
    
       \rule{4cm}{2cm}
    \end{myenv}
    
    \end{document}
    Gruß
    Marco

  8. #8
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Vielen Dank. Wir nähern uns langsam meinem Ziel.

    Ich habe noch ein Problem, wenn ich die Minipage zentrieren will:

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox{\mybox}
    \newenvironment{myenv}
    {%
        \begin{lrbox}{\mybox}
            \begin{center}
            \begin{minipage}{0.5\textwidth}
    }{%
            \end{minipage}
            \end{center}
        \end{lrbox}%
        \usebox{\mybox}
        \par Die Box hat folgende Hoehe: \the\ht\mybox
    }
       
    \begin{document}
    \begin{myenv}
        \blindtext[1]
    \end{myenv}
    \end{document}
    So kompiliert es leider nicht wegen "! LaTeX Error: Something's wrong--perhaps a missing \item." Ohne die Box drumherum würde es klappen.

    Mit \centering habe ich es auch probiert, das gibt zwar keinen Fehler, die Minipage ist aber auch nicht zentriert.

    Viele Grüße
    Dominik

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

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox{\mybox}
    \newenvironment{myenv}
    {%
        \begin{lrbox}{\mybox}
            \begin{minipage}{0.5\textwidth}\centering
    }{%
            \end{minipage}
        \end{lrbox}%
        \usebox{\mybox}
        \par Die Box hat folgende Hoehe: \the\ht\mybox
    }
       
    \begin{document}
    \begin{myenv}
        \blindtext[1]
    \end{myenv}
    \end{document}
    Gruß
    Marco

  10. #10
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    man möchte wahrscheinlich die Werte außerhalb der Box haben:

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox{\mybox}
    \newenvironment{myenv}{%
      \global\lrbox{\mybox}
      \minipage{0.5\textwidth}
    }{\endminipage\endlrbox}
    
    \begin{document}
    \begin{myenv}
        \blindtext[1]
    \end{myenv}
    
    Die Box hat folgende Hoehe: \the\ht\mybox
    \par Die Box hat folgende Tiefe: \the\dp\mybox
    \par Die Box hat folgende Breite: \the\wd\mybox
    
    \end{document}
    Herbert

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

    um den Text in myenv auszugeben, benötigt man eigentlich usebox. Doch es will nicht:
    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox{\mybox}
    \newenvironment{myenv}{%
      \global\lrbox{\mybox}
      \minipage{0.5\textwidth}
    }{\endminipage\endlrbox\usebox{\mybox}}
    
    \begin{document}
    \begin{myenv}
        \blindtext[1]
    \end{myenv}
    
    Die Box hat folgende Hoehe: \the\ht\mybox
    \par Die Box hat folgende Tiefe: \the\dp\mybox
    \par Die Box hat folgende Breite: \the\wd\mybox
    
    \end{document}
    Gruß
    Marco

  12. #12
    Registrierter Benutzer Avatar von voss
    Registriert seit
    10.04.2005
    Beiträge
    5.045
    Zitat Zitat von mechanicus Beitrag anzeigen
    um den Text in myenv auszugeben, benötigt man eigentlich usebox. Doch es will nicht:
    dann muss man die Werte global festlegen:

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext}
    \newsavebox\mybox
    \newenvironment{myenv}[1][\textwidth]{%
      \begin{lrbox}{\mybox}
      \minipage{0.5\textwidth}
    }{\endminipage\end{lrbox}\usebox\mybox%
      \xdef\Hoehe{\the\ht\mybox}%
      \xdef\Tiefe{\the\dp\mybox}%
      \xdef\Breite{\the\wd\mybox}}
    
    \begin{document}
    \begin{myenv}[0.5\linewidth]
        \blindtext[1]
    \end{myenv}
    
    Die Box hat folgende Hoehe: \Hoehe
    \par Die Box hat folgende Tiefe: \Tiefe
    \par Die Box hat folgende Breite: \Breite
    
    \end{document}
    Herbert

  13. #13
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    @Marco: Ich möchte nicht den Text in der Minipage zentrieren, sondern die Minipage selbst. Es geht aber, wenn ich das \begin{center} oder das \centering vor das \begin{myenv} schreibe. Es wäre für mich natürlich weniger Schreibarbeit, wenn das Environment das selbst machen könnte.

    @Herbert: Eine Benutzung der Box innerhalb der Umgebung ist für mich vollkommen ausreichend.

    Woran liegt es denn aber, dass
    Code:
    \newenvironment{myenv}{%
      \begin{lrbox}{\mybox}
      \minipage{0.5\textwidth}
    }{\endminipage\end{lrbox}\usebox\mybox}
    die Box darstellt,

    Code:
    \newenvironment{myenv}{%
      \lrbox{\mybox}
      \minipage{0.5\textwidth}
    }{\endminipage\endlrbox\usebox{\mybox}}
    aber nicht?

    Viele Grüße
    Dominik

  14. #14
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    So, ich glaub, ich hab's. Hier mein Ergebnis:

    Code:
    \documentclass[ngerman]{article}
    \usepackage{babel,blindtext,xcolor,calc}
    \newsavebox{\mybox}
    \newlength{\BoxHoehe}
    
    \newenvironment{MyBoxEnv}
    {
        \lrbox{\mybox}
            \begin{minipage}{0.5\linewidth}
    }
    {
            \end{minipage}
        \endlrbox
    }
    
    \newenvironment{MyEnv}
    {
        \begin{MyBoxEnv}
    }
    {
        \end{MyBoxEnv}
        \setlength{\BoxHoehe}{\ht\mybox+\dp\mybox}
        \begin{center}
            \begin{minipage}{0.5\linewidth}
                \color{red}\rule{\linewidth}{\BoxHoehe}
            \end{minipage}\\[-\BoxHoehe] 
            \usebox{\mybox}
        \end{center}
    }
       
    \begin{document}
        \begin{MyEnv}
            \blindtext[1]
        \end{MyEnv}
    \end{document}
    Die berechnete Höhe ist zwar nicht ganz exakt (es fehlen ein paar Pixel am Ende), aber da kann ich auch einfach was draufrechnen.

    Vielen Dank für Eure Hilfe
    Dominik

Lesezeichen

Berechtigungen

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