Laut tikz-uml-Doku sollen abstrakte Klassen mit \umlabstract bzw. \umlclass[type=abstract] dargestellt werden. Wenn ich aber den folgenden Code verwende

\documentclass{scrartcl}
\usepackage{tikz-uml}
\begin{document}
    \begin{tikzpicture}
        \umlabstract{Eingabe}{}{}
    \end{tikzpicture}
\end{document}

bekomme ich (aktuelle MiKTeX unter Windows 10) die Meldung:

Class scrartcl Error: undefined old font command `\it'.

See the scrartcl class documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.5             \umlabstract{Eingabe}{}{}

Auch bei \umlclass[type=abstract] kommt die gleiche Fehlermeldung. Es scheint also mit der Italics-Schriftart ein Problem zu geben. Was kann ich tun, um im UML-Diagramm abstrakte Klassen auch mit kursiver Beschriftung darzustellen?

gefragt 28 Jun '20, 12:27

Spartacus's gravatar image

Spartacus
1611
Akzeptiert-Rate: 0%

bearbeitet 29 Jun '20, 10:04

gast3's gravatar image

gast3
(ausgesetzt)

2

Schritt 1 wäre sicher eine liebe E-Mail an den Betreuer von tikz-uml mit diesem Minimalbeispiel und der Bitte, zu überprüfen, ob es möglich wäre von den seit 25 Jahren veralteten Befehlen \it und Freunden zu den LaTeX2e-Versionen umzusteigen (https://texfaq.org/FAQ-2letterfontcmd). Diese Befehle sind im LaTeX-Kern nämlich seit 1994 nicht mehr definiert und werden nur durch die Klassen am Leben gehalten. Die KOMA-Script-Klassen haben sich aber entschieden \it und Co. nicht weiter zu unterstützen.

(28 Jun '20, 12:48) moewe
1

Das kann man mit der offenbar undokumentierten Option enabledeprecatedfontcommands (\documentclass[enabledeprecatedfontcommands]{scrartcl}) wieder rückgängig machen. Glücklich ist scrartcl darüber aber nicht, siehe .log-Datei.

(28 Jun '20, 12:49) moewe

BTW: Als freie Pakete gibt es übrigens auch pgf-umlcd und pgf-umlsd. Die beiden sind in MiKTeX und TeX Live verfügbar.

(28 Jun '20, 13:51) gast3

Als quick and dirty hack habe ich mal versuchsweise in der tikz-uml.sty (v1.0-2016-03-29) in den Zeilen 462 und 2483 das \it durch ein \textit ersetzt. Vielleicht nicht schön, und mit Sicherheit nicht einfach verteilbar, führt aber ohne weitere Fehlermeldungen zum gewünschten Ergebnis. Natürlich alles ohne Gewähr.

(28 Jun '20, 18:25) Spartacus

"Äquivalenter" wäre es, \it durch \itshape zu ersetzen. \it ist nämlich ein Schriftumschalter, der nicht wie \textit{...} sein Argument kursiv setzt, sondern (von hier an) alles in der aktuellen Gruppe. Man Vergleiche Lorem \itshape ipsum dolor mit Lorem {\itshape ipsum} dolor und Lorem \textit{ipsum} dolor. Siehe auch https://tex.stackexchange.com/q/8053/35864

(28 Jun '20, 20:17) moewe

Der Autor hat mir gestern Abend noch geantwortet, dass er das Paket korrigeren möchte, allerdings keine weiteren Aussagen zu Zeitdauer etc. gemacht. Abwarten...

(29 Jun '20, 18:56) Spartacus
Ergebnis 5 von 6 show 1 more comments

Wie bereits in einem Kommentar @moewe und unter »Macht es einen Unterschied, ob ich \it oder \itshape verwende?« erklärt, ist die Verwendung von \it seit mehr als einem Vierteljahrhundert überholt. LaTeX selbst stellt diese Befehle nicht mehr zur Verfügung. Es bleibt daher den Klassen überlassen, ob sie die veraltete Methode unterstützen oder nicht. Als beim Wechsel von KOMA-Script 2 zu KOMA-Script 3 die Unterstützung für den LaTeX-2.09-Kompatibilitätsmodus fiel, wurde auch die Unterstützung für dessen alte Font-Auswahlbefehle schrittweise zurückgefahren. Seit einigen Jahren gibt es eine Fehlermeldung, die einschließlich der verfügbaren Hilfe wie folgt lautet:

! Class scrartcl Error: undefined old font command `\it'.

See the scrartcl class documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.5             \umlabstract{Eingabe}{}{}

? h
You should note that since 1994 LaTeX2e provides a new font selection scheme
called NFSS2 with several new, combinable font commands. KOMA-Script
classes had defined the old font commands like `\it' only for compatibility
with old LaTeX 2.09 document styles of Script 2.0. Nevertheless, these
commands are deprecated and undocumented at least since 2003. Since 2013
KOMA-Script classes warned about soon removement of these deprecated commands.
Now, after two decades of LaTeX2e and NFSS2, these commands will not work any
more. If loading a package results in this error message, you should contact
the author of that package and ask him to replace the deprecated font command
`\it', e.g., by `\normalfont \itshape `. Otherwise you should reconfigure
or replace the package. If you have used the old font command `\it' yourself,
you should replace it, e.g., by `\normalfont \itshape '.
To make it work for now, you can use the already also deprecated class option
`enabledeprecatedfontcommands'.

In der Hilfe steht also sehr genau, was der Grund für die Fehlermeldung ist und was dagegen zu tun ist.

Im Fall von tikz-uml verlässt sich der Autor des Pakets darauf, dass alle Klassen die alten Font-Anweisungen bereitstellen. Wie bereits erwähnt, ist das eine Fehlannahme, die übrigens nicht nur bei KOMA-Script-Klassen zu Fehlern führen kann. Daher sollte man den Weg gehen, den Paket-Autor auf seinen Fehler hinzuweisen. Bei der Gelegenheit wäre es gut, den Autor außerdem zu bitten, Lizenzinformationen im Paket (vorzugsweise im Eingangskommentar und einem README) zu ergänzen und das Paket auf CTAN anzubieten. Bei der Wahl einer freien Lizenz stehen die Chancen gut, dass sein Paket dann auch in gängigen TeX-Distributionen wie MiKTeX oder TeX Live verteilt wird.

Als Notlösung, bis der Autor von tikz-uml hoffentlich tätig wird, kann man, wie in der oben gezeigten Hilfe erwähnt, die Klassenoption enabledeprecatedfontcommands setzen:

\documentclass[enabledeprecatedfontcommands]{scrartcl}
\usepackage{tikz-uml}
\begin{document}
    \begin{tikzpicture}
        \umlabstract{Eingabe}{}{}
    \end{tikzpicture}
\end{document}

Statt der Fehlermeldung erhält man dann zwei Warnungen:

Class scrartcl Warning: deprecated option `enabledeprecatedfontcommands'.
(scrartcl)              Note, that this option was already depreacted when
(scrartcl)              it has been defined. Support for old font commands
(scrartcl)              has been removed from KOMA-Script more than one
(scrartcl)              decade ago. It is not recommended to use them any
(scrartcl)              longer. Therefore usage of this class option also
(scrartcl)              is not recommended.

und

Class scrartcl Warning: deprecated old font command `\it' used.
(scrartcl)              You should note, that since 1994 LaTeX2e provides a
(scrartcl)              new font selection scheme called NFSS2 with several
(scrartcl)              new, combinable font commands. New KOMA-Script classes
(scrartcl)              defined the old font commands like `\it' only for
(scrartcl)              compatibility with LaTeX 2.09 document styles of
(scrartcl)              Script 2.0. These commands are deprecated and
(scrartcl)              undocumented at least since 2003. Since 2013,
(scrartcl)              KOMA-Script classes warned about soon removement of
(scrartcl)              these deprecated commands. Now, after two decades of
(scrartcl)              LaTeX2e, NFSS2, and KOMA-Script these commands will
(scrartcl)              not work any longer. If loading a package results in
(scrartcl)              this message you should contact the author of that
(scrartcl)              package and ask him to replace the depracted font
(scrartcl)              command `\it', e.g., by `\normalfont \itshape '.
(scrartcl)              Otherwise you should reconfigure or replace the
(scrartcl)              package. If you have used the old font command
(scrartcl)              `\it' yourself you should replace it, e.g., by
(scrartcl)              `\normalfont \itshape ' on input line 5.

Wenn auch diese Erinnerung, dass da noch ein Problem vorliegt, stört oder falls KOMA-Script die laut erster Warnung als überholt eingestufte Option entfernt, kann man die notwendige, veraltete Font-Anweisung selbst definieren. Für alle veralteten Font-Anweisungen zusammen wäre das:

\DeclareOldFontCommand{\rm}{\normalfont\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sf}{\normalfont\sffamily}{\mathsf}
\DeclareOldFontCommand{\tt}{\normalfont\ttfamily}{\mathtt}
\DeclareOldFontCommand{\bf}{\normalfont\bfseries}{\mathbf}
\DeclareOldFontCommand{\it}{\normalfont\itshape}{\mathit}
\makeatletter
\DeclareOldFontCommand{\sl}{\normalfont\slshape}{\@nomath\sl}
\DeclareOldFontCommand{\sc}{\normalfont\scshape}{\@nomath\sc}
\makeatother

Im Fall von tikz-uml gibt es auch die Möglichkeit, das Paket mit Hilfe von xpatch selbst zu patchen:

\documentclass{scrartcl}
\usepackage{tikz-uml}
\usepackage{xpatch}
\xpatchcmd{\umlclass}{% Ersetze:
  \def\tikzumlClassName{{\it \tikzumlClassNameOld}}%
}{% Durch:
  \def\tikzumlClassName{\textit{\tikzumlClassNameOld}}%
}{%
  \typeout{\string\umlclass\space patched}%
}{%
  \tyepout{Seems the \string\umlclass\space patch is not needed any
    longer}%
}%
\xpatchcmd{\umlassocclass}{% Ersetze:
  \def\tikzumlAssocClassName{{\it \tikzumlAssocClassNameOld}}%
}{% Durch:
  \def\tikzumlAssocClassName{\textit{\tikzumlAssocClassNameOld}}%
}{%
  \typeout{\string\umlassocclass\space patched}%
}{%
  \tyepout{Seems the \string\umlassocclass\space patch is not needed any
    longer}%
}%
\begin{document}
    \begin{tikzpicture}
        \umlabstract{Eingabe}{}{}
    \end{tikzpicture}
\end{document}

Die hier nachträglich vorgenommenen Änderung sind übrigens genau die, die auch dem Paketautor zu empfehlen wären. Durch Verwendung von \textit wird dann bei Bedarf auch automatisch die passende Italic-Korrektur eingefügt, was bei \it und \itshape nicht der Fall wäre.

Man erhält auf allen genannten Wegen als Ergebnis dann ein fehlerfreies Dokument mit der Ausgabe:

UML-Klassendiagramm mit tikz-uml

Eine Alternative wäre übrigens auch, die Verwendung von pgf-umlcd:

\documentclass{scrartcl}
\usepackage{pgf-umlcd}
% Optional: abstractclass ändern, damit statt der Präfixzeile <<abstract>>
%           der Klassenname kursiv gesetzt wird:
\renewenvironment{abstractclass}[3][]%
{
  \begin{classAndInterfaceCommon}{#1}{#2}{#3}
}%
{\calcuateNumberOfParts{}
  \node[this umlcd style, anchor=north] (\umlcdClassName) at (\umlcdClassPos)
  {\textit{\textbf{\umlcdClassName}}
    \insertAttributesAndOperations{}
  };

  \end{classAndInterfaceCommon}
}

\begin{document}
  \begin{tikzpicture}
    \begin{abstractclass}{Eingabe}{0,0}
    \end{abstractclass}
  \end{tikzpicture}
\end{document}

Die Ausgabe ist dann:

UML-Klassendiagramm mit kursiver abstrakter Klasse und pdf-umlcd

Ohne die optionale Umdefinierung (die man natürlich auch mit xpatch hätte vornehmen können) wäre es übrigens:

UML-Klassendiagramm mit pdf-umlcd

In entsprechender Weise bietet das Paket auch eine interface-Umgebung. Siehe dazu die Anleitung des Pakets. Das Paket pgf-umlcd hat den Vorteil, dass es mit einer klaren geregelten freien Lizenz auf CTAN verbreitet wird und damit auch in gängigen TeX-Distributionen wie MiKTeX und TeX Live enthalten ist.

Permanenter link

beantwortet 29 Jun '20, 09:53

gast3's gravatar image

gast3
(ausgesetzt)
Akzeptiert-Rate: 53%

bearbeitet 29 Jun '20, 21:38

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×131
×128
×1
×1

gestellte Frage: 28 Jun '20, 12:27

Frage wurde gesehen: 8,758 Mal

zuletzt geändert: 29 Jun '20, 18:56