Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Makro aus einer Klasse in anderer Klasse verwenden

  1. #1
    Registrierter Benutzer
    Registriert seit
    02.06.2012
    Beiträge
    9

    Makro aus einer Klasse in anderer Klasse verwenden

    Liebes Forum

    Aus der exam-Klasse möchte ich das Makro \fillwithlines{length} in der scrartcl-Klasse nutzen. In der exam-Klasse hat es noch weitere tolle Befehle, aber ich möchte für alle meine Dokumente bei KOMA (i.d.R. Klasse) bleiben.

    Wie kann ich Makros aus einer Klasse in die andere übertragen?

  2. #2
    Registrierter Benutzer Avatar von bobmalaria
    Registriert seit
    28.11.2006
    Ort
    Düsseldorf
    Beiträge
    4.174
    hi,

    in der exam.cls ist der befehl definiert. kopiere ihn in die preambel deines dokumentes und schaue ob es funktioniert. da die definition da @ zeichen beinhaltet, musst du denn befehl mit \makeatletter \makeatother unschließen. bin nicht sicher ob \@totalleftmargin ein befehl ist den es auch in koma klassen gibt.

    Code:
    \makeatletter
    \def\fillwithlines#1{%
      \begingroup
      \ifhmode
        \par
      \fi
      \hrule height \z@
      \nobreak
      \setbox0=\hbox to \hsize{\hskip \@totalleftmargin
              \vrule height \linefillheight depth \z@ width \z@
              \linefill}%
      % We use \cleaders (rather than \leaders) so that a given
      % vertical space will always produce the same number of lines
      % no matter where on the page it happens to start:
      \cleaders \copy0 \vskip #1 \hbox{}%
      \endgroup
    }
    \makeatother
    ich denke mal der befehl sollte auch in scr klassen gehen. allerdings gibt es keine garantie das das immer funktioniert, dan manchmal klassen gewisse dinge anders lösen und verwendetet makros anders oder überhaupt nicht definiert sind
    Geändert von bobmalaria (10-06-2012 um 18:01 Uhr)
    Mein Ball ist umgefallen

  3. #3
    Registrierter Benutzer
    Registriert seit
    02.06.2012
    Beiträge
    9
    Vielen Dank für den Tipp

    -gleich ausprobiert:
    * die Makrodefinition selbst wird geschluckt, ohne Fehlermeldung
    * will ich den Befehl \fillwithlines{2cm} ausführen, gibt's folgenden FehlerUndefined control sequence \fillwithlines{2cm} (auch dann, wenn Längenoption geändert oder weggelassen wird)

    Als Nichtprogrammierer stellt sich für mich nun das Problem, wie ich den Fehler eingrenzen und (schliesslich) beheben kann.

    Bin gespannt, wie's weiter geht.

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Zitat Zitat von hipokamp Beitrag anzeigen
    Bin gespannt, wie's weiter geht.
    Mit einem Minimalbeispiel deinerseits?

  5. #5
    Registrierter Benutzer
    Registriert seit
    02.06.2012
    Beiträge
    9
    ... wird wohl morgen Abend, entschuldige

    Kaspar

  6. #6
    ctansearch
    Gast
    Vermutlich hast Du nicht die ganze Sektion aus exam.cls kopiert

    Code:
    \documentclass[a4paper,10pt,twoside]{scrbook}
    \usepackage[ngerman]{babel}
    \usepackage[utf8]{inputenc}
    
    %                            \fillwithlines
    
    
    % \fillwithlines takes one argument, which is either a length or \fill,
    % and it fills that much vertical space with horizontal lines that run
    % the length of the current line.  That is, they extend from the
    % current left margin (which depends on whether we're in a question,
    % part, subpart, or subsubpart) to the right margin.
    %
    % The distance between the lines is \linefillheight, whose default value
    % is set with the command
    %
    % \setlength\linefillheight{.25in}
    %
    % This value can be changed by giving a new \setlength command.
    %
    % The thickness of the lines is \linefillthickness, whose default value
    % is set with the command
    %
    % \setlength\linefillthickness{.1pt}
    %
    % This value can be changed by giving a new \setlength command.
    
    \makeatletter
    \newlength\linefillheight
    \newlength\linefillthickness
    \setlength\linefillheight{.25in}
    \setlength\linefillthickness{0.1pt}
    
    \newcommand\linefill{\leavevmode
        \leaders\hrule height \linefillthickness \hfill\kern\z@}
    
    
    \def\fillwithlines#1{%
      \begingroup
      \ifhmode
        \par
      \fi
      \hrule height \z@
      \nobreak
      \setbox0=\hbox to \hsize{\hskip \@totalleftmargin
              \vrule height \linefillheight depth \z@ width \z@
              \linefill}%
      % We use \cleaders (rather than \leaders) so that a given
      % vertical space will always produce the same number of lines
      % no matter where on the page it happens to start:
      \cleaders \copy0 \vskip #1 \hbox{}%
      \endgroup
    }
    \makeatother
    %--------------------------------------------------------------------
    \begin{document}
    \fillwithlines{2cm}
    fhfuffzfhfffbff fbfgffbf fbffgffbf f
    
    \end{document}
    Geändert von ctansearch (10-06-2012 um 20:31 Uhr)

  7. #7
    ctansearch
    Gast
    Nachtrag
    Die Fehlermeldung komm daher, daß \linefill in \fillwithlines abgerufen wird, aber dadurch, daß Du nicht die ganze Sektion kopiert hast, \linefill noch nicht definiert ist.

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.06.2012
    Beiträge
    9
    prima!!

    jetzt habe ich zwei Dinge gelernt - wie mit den @ in einem Makro umzugehen ist, und darauf zu achten die ganze Chose zu kopieren: jetzt klappts' und ich kann in jedem Doku so viele Linien Zeichnen lassen wie ich Platz z.V. habe

    das "solution" Makro aus dem exam.cls herauszuholen scheint etwas aufwendiger - aber wird wohl schon gehen.

    also, nochmals vielen Dank für die "makeatletter"-Nachhilfe!

    K

Lesezeichen

Berechtigungen

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