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 17 Aug '15, 20:44

sandwich's gravatar image

sandwich
223
Akzeptiert: 100%

bearbeitet 17 Sep '15, 05:02

Clemens's gravatar image

Clemens
19.0k112960


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, 07:15

saputello's gravatar image

saputello
18.4k22352

bearbeitet 18 Aug '15, 07:47

Super, danke!

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

(18 Aug '15, 07: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, 08:28) saputello
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×19
×15
×6
×5
×2

Frage gestellt: 17 Aug '15, 20:44

Frage wurde angeschaut: 1,563 Mal

Zuletzt aktualisiert: 17 Sep '15, 05:02