PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Makro aus einer Klasse in anderer Klasse verwenden



hipokamp
10-06-2012, 13:12
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. <scrartcl>Klasse) bleiben.

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

bobmalaria
10-06-2012, 18:58
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.



\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

hipokamp
10-06-2012, 20:46
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.

sommerfee
10-06-2012, 20:59
Bin gespannt, wie's weiter geht.

Mit einem Minimalbeispiel deinerseits?

hipokamp
10-06-2012, 21:19
... wird wohl morgen Abend, entschuldige

Kaspar

ctansearch
10-06-2012, 21:29
Vermutlich hast Du nicht die ganze Sektion aus exam.cls kopiert



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

ctansearch
10-06-2012, 22:59
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.

hipokamp
11-06-2012, 20:48
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