Anzeige:
Ergebnis 1 bis 8 von 8

Thema: Optionales Argument bei multicolumn

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

    Optionales Argument bei multicolumn

    Hallo,

    zuerst wieder mein Minimalbeispiel:

    Code:
    \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

    Code:
    ! 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

  2. #2
    Registrierter Benutzer
    Registriert seit
    17.02.2010
    Beiträge
    685
    Möglicherweise liegt hier des Pudels Kern begraben:
    http://newsgroups.derkeiler.com/Arch.../msg00085.html

  3. #3
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    Möglicherweise liegt hier des Pudels Kern begraben:
    Ja, genau das ist das Problem.

  4. #4
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    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

  5. #5
    Registrierter Benutzer
    Registriert seit
    19.05.2009
    Beiträge
    4.045
    \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:

    Code:
    \documentclass{article}
    \begin{document}
    \begin{tabular}{ll}
    \relax\multicolumn{2}{c}{abc}\\
    \end{tabular}
    
    \end{document}

  6. #6
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    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

  7. #7
    Registrierter Benutzer
    Registriert seit
    31.03.2010
    Beiträge
    1.039
    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.

  8. #8
    Registrierter Benutzer
    Registriert seit
    03.03.2008
    Beiträge
    82
    Danke für die Erklärung. Dann baue ich mir mal einen Workaround ohne multicolumn.

    Gruß Dee

Stichworte

Lesezeichen

Berechtigungen

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