Archiv verlassen und diese Seite im Standarddesign anzeigen : Optionales Argument bei multicolumn
Hallo,
zuerst wieder mein Minimalbeispiel:
\documentclass{scrartcl}
\newcommand{\mcolA}[2]{\multicolumn{2}{l}{\textbf{#1}: #2}}
\newcommand{\mcolB}[2][Test]{\multicolumn{2}{l}{\textbf{#1}: #2}}
\newcommand{\mcolC}[2][Test]{%
\begin{tabular}{ll}
\multicolumn{2}{l}{\textbf{#1}: #2}
\end{tabular}
}
\begin{document}
\begin{tabular}{ll}
\mcolA{Kein Test}{Hallo}
\end{tabular}
\mcolC[Kein Test]{Hallo}
% Hier ist das Problem.
%\begin{tabular}{ll}
%\mcolB[Kein Test]{Hallo}
%\end{tabular}
\end{document}
Nun zur Frage: Wenn ich den Code für \mcolB einkommentiere und pdflatex laufen lassen, erhalte ich
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.23 \mcolB[Kein Test]{Hallo}
Ich sehe leider den Fehler nicht. Eigentlich will ich für den Befehl nur ein optionales Argument angeben.
Sieht jemand, was ich falsch mache?
Gruß
Dee
Möglicherweise liegt hier des Pudels Kern begraben:
http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2008-11/msg00085.html
u_fischer
07-10-2011, 14:28
Möglicherweise liegt hier des Pudels Kern begraben:
Ja, genau das ist das Problem.
Danke, so etwas hatte ich mir gedacht, aber ich habe es noch nicht ganz verstanden. Bei der Methode mit \input (siehe Link von LuPi) ist es mir ja noch klar, wieso es Probleme gibt. Aber wo ist das Problem, wenn ich aus einem festen LaTeX-Argument ein optionales mache? Wieso erkennt er die Klammern [] als Befehl für \multicolumn? Das klingt für mich ja nach einem Bug, schließlich stehen die Klammern nicht vor \multicolumn, oder?
Gruß Dee
u_fischer
07-10-2011, 17:11
\multicolumn muss am Anfang einer Zelle stehen. Es muss das erste sein, was nach dem Beginn der Zelle ausgeführt wird. Da darf sich weder ein Buchstabe, noch ein \input-Befehl, noch - wie bei dir hier - ein \mcolB-Befehl dazwischen mogeln.
Denn nun lautet der Ablauf: "Anfang der Zelle, führe \mcolB aus, \multicolumn" und prompt bekommst du einen "hier kein \multicolumn (\omit)-Befehl"-Fehler.
Es kommt nicht darauf an, dass die Befehl vor dem \multicolumn-Befehl nichts "richtiges" tun. Nicht einmal ein \relax-Befehl ist möglich:
\documentclass{article}
\begin{document}
\begin{tabular}{ll}
\relax\multicolumn{2}{c}{abc}\\
\end{tabular}
\end{document}
Hallo Ulrike, wieso geht dann \mcolA? Weil dort stände nach Deiner Aussage ja auch "Anfang der Zelle, führe \mcolA aus, \multicolumn".
Ich vermute, dass Du meinst, dass bei \mcolB durch das optionale Argument vor dem \multicolumn-Befehl noch irgendwas LaTeX-internes gemacht wird (wie z.B. schauen, ob das optionale Argument existiert und falls, entsprechend übernehmen). Das würde die Fehlermeldung erklären. Sehe ich das richtig?
Gruß Dee
Schweinebacke
07-10-2011, 17:32
Ja. Optionale Argumente sind keine echten Argumente. Stattdessen testet LaTeX bei Befehlen mit optionalen Argumenten erst einmal, ob noch ein [ folgt und interpretiert dann alles bis zum ersten ] auf gleicher Ebene als optionales Argument. Während also Dein \mcolA zu etwas expandiert, das direkt mit \multicolumn beginnt, expandiert Dein \mcolB zu etwas, das erst auf eine nachfolgende [ testet, bevor es dann irgendwann auch noch zu \multicolumn expandiert.
Befehle mit optionalem Argument verhalten sich auch in manch anderer Hinsicht anders als Befehle nur mit nicht optionalen Argumenten.
Danke für die Erklärung. Dann baue ich mir mal einen Workaround ohne multicolumn. :)
Gruß Dee
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.