Hallo!

Ich möchte innerhalb des Definitionsteiles von newcommand den Befehl hhline verwenden und innerhalb dessen das #-Zeichen für die "Doppelkreuzung" von den vertikalen und horizontalen Doppellinien:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{hhline}
\newcommand{\hl}{\hhline{|=#=#=|}} % hier kommt's zum Problem
\begin{document}
\begin{tabular}{|c||c||c|}
  \hline
  1 & 2 & 3 \\
  \hl
  4 & 5 & 6 \\
  \hl
  7 & 8 & 9 \\
  \hline
\end{tabular}
\end{document}

Nun wird aber das #-Zeichen als Teil der Parameternummer für newcommand interpretiert und die Fehlermeldung

Open in Online-Editor
! Illegal parameter number in definition of \hl.
<to be read again> 
                   =
l.3 \newcommand{\hl}{\hhline{|=#=#=|}}

? 
! Illegal parameter number in definition of \hl.
<to be read again> 
                   =
l.3 \newcommand{\hl}{\hhline{|=#=#=|}}

?

ausgegeben.

Diese kann zwar (durch - 2-maliges - Drücken von Enter/Return) ignoriert werden und das Ergebins ist wie gewünscht, aber was wäre denn die korrekte/saubere Lösung?

Danke!

gefragt 18 Aug '15, 02:44

sandwich's gravatar image

sandwich
22113
Akzeptiert-Rate: 0%

bearbeitet 17 Sep '15, 11:02

cgnieder's gravatar image

cgnieder
22.1k253463


TeX interpretiert # innerhalb einer Makrodefinition immer als Start eines Arguments und erwartet danach eine einzelne Ziffer für die Argumentnummer. Es gibt eine Ausnahme von dieser Regel: Folgt stattdessen ein weiteres #, so wird ## als einzusetzendes # interpretiert. Daher muss man nicht nur bei der Definition von Makros innerhalb von Makros bei jeder Schachtelungstiefe die Anzahl der # verdoppeln:

Open in Online-Editor
% TeX-Beispiel für Insider
\def\aussen#1{%
  \def\innen##1{Argument aussen: #1, Argument innen ##1}%
}
\aussen{aussen}\innen{innen}
\bye

sondern auch in Deinem Fall:

Open in Online-Editor
\documentclass{scrartcl}
\usepackage{hhline}
\newcommand{\hl}{\hhline{|=##=##=|}} % hier kommt's nicht mehr zum Problem
\begin{document}
\begin{tabular}{|c||c||c|}
  \hline
  1 & 2 & 3 \\
  \hl
  4 & 5 & 6 \\
  \hl
  7 & 8 & 9 \\
  \hline
\end{tabular}
\end{document}

Ergebnis mit viel zu vielen Linien

Es sei mir hoffentlich gestattet, darauf hinzuweisen, dass bei echten Tabellen vertikale Linien fast immer mehr stören als sie nützen, da die Hauptleserichtung einer Tabelle horizontal sein sollte und diese dadurch behindert wird. Horizontale Linien können nützlich sein, sollten aber auf ein notwendiges Maß beschränkt werden.

Permanenter link

beantwortet 18 Aug '15, 13:15

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 18 Aug '15, 13:47

Super, danke!

Ja, ist gestattet; in meinem Fall (sieht etwas anders aus als das Minimalbeispiel) hat das schon seinen Grund.

(18 Aug '15, 13:50) sandwich

@sandwich: Danke für die zusätzlichen Punkte. Aber statt Deine raren Pünktchen zu verschenken, solltest Du einfach auf den Daumen nach oben und ggf. auf den Haken klicken. Dafür bekomme ich dann genügend Punkt – ganz davon abgesehen, dass ich davon schon mehr als genug habe.

(18 Aug '15, 14:28) saputello
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:

×20
×18
×13
×5
×2

gestellte Frage: 18 Aug '15, 02:44

Frage wurde gesehen: 10,129 Mal

zuletzt geändert: 17 Sep '15, 11:02