Referenzierung auf Fussnote erzeugt ungewolltes Leerzeichen

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Basti
Forum-Newbie
Forum-Newbie
Beiträge: 4
Registriert: Fr 24. Aug 2012, 11:04

Referenzierung auf Fussnote erzeugt ungewolltes Leerzeichen

Beitrag von Basti »

Hi, ich habe aus dem netz folgenden Code, welcher eine Fussnote "speichert" und referenzieren lässt.
%---Fußnoten mehrfach referenzieren
\newcommand{\footnoteremember}[2]{%
  \footnote{#2}
  \newcounter{#1}
  \setcounter{#1}{\value{footnote}}
}
\newcommand{\footnoterecall}[1]{%
  \footnotemark[\value{#1}]
}
Die Commands funktionieren auch soweit, mit der Ausnahme, dass im Text selbst nach der hochgestellten Fussnote ein ungewolltes Leerzeichen auftaucht.
Weiss jemand wie ich dieses entfernen kann?

Anbei ein Bild des Phänomens.
Dateianhänge
ungewolltesLeerzeichen.jpg
ungewolltesLeerzeichen.jpg (3.94 KiB) 2068 mal betrachtet

Speravir
Forum-Anfänger
Forum-Anfänger
Beiträge: 15
Registriert: Di 4. Sep 2012, 22:00
Wohnort: Potsdam
Kontaktdaten:

Beitrag von Speravir »

Du warst ja etwas schweigsam darüber, ob das ungewollte Leerzeichen bei Verwendung von „\footnoterember“ oder „\footnoterecall“ oder bei beiden auftritt. Ohne selbst Experte zu sein, vermute ich, dass Du mindestens ein signifikantes Leerzeichen übersehen hast. Als Test noch ein paar Prozentzeichen einzufügen, hätte nichts geschadet (mit „<--“ markiert):
%---Fußnoten mehrfach referenzieren
\newcommand{\footnoteremember}[2]{%
  \footnote{#2}% <--
  \newcounter{#1}% <--
  \setcounter{#1}{\value{footnote}}% <--
}
\newcommand{\footnoterecall}[1]{%
  \footnotemark[\value{#1}]% <--
}

Es gibt übrigens auch ein LaTeX-Paket für diesen Zweck namens „savefnmark“. Da es die Dokumentation dazu in MiKTeX leider fehlt, hier eine (tex-live-basierte) Online-Quelle:

http://texdoc.net/texmf-dist/doc/latex/ ... fnmark.pdf
Steffen „Speravir“
-----
Spiro, ergo sum.

Benutzeravatar
Sepp99
Forum-Meister
Forum-Meister
Beiträge: 1569
Registriert: So 29. Aug 2010, 17:26
Wohnort: Offenhausen/OÖ

Beitrag von Sepp99 »

Leider kein vollständiges Minimalbeispiel [4] - bei den KOMA-Script-Klassen gibt es den Befehle
\footref{Referenz}
Näheres in scrguide.pdf mit Beispiel.

Gruß, Sepp.-

Benutzeravatar
cgnieder
Forum-Meister
Forum-Meister
Beiträge: 730
Registriert: Fr 22. Okt 2010, 18:37
Wohnort: Herrenberg
Kontaktdaten:

Beitrag von cgnieder »

Wie hoffentlich bekannt ist wird das Ende einer Zeile von TeX als Leerzeichen interpretiert. Da in der Definition mehrere Zeilenenden vorhanden sind, werden diese als Leerzeichen eingefügt. Daher müssen die Zeilenenden versteckt werden:
\newcommand{\footnoteremember}[2]{%
  \footnote{#2}% <= hier fehlte %
  \newcounter{#1}% <= hier fehlte %
  \setcounter{#1}{\value{footnote}}% <= hier fehlte %
}
\newcommand{\footnoterecall}[1]{%
  \footnotemark[\value{#1}]% <= hier fehlte %
}
Zeilenenden treten nicht auf, wenn ein Makro ohne Argument endet:
\documentclass{article}
\newcommand*\blubber{blubber}
\newcommand*\test{%
 % nach blubber braucht man kein % da nach Makros Leerzeichen ignoriert werden:
  \blubber
}

\newcommand*\Blubber[1]{#1}
\newcommand*\Test[1]{%
  \Blubber{#1}% jetzt muss versteckt werden
}
\begin{document}

Text \test{} Text \Test{bla} Text

\end{document}
Es ist übrigens keine gute Idee, für jede mehrfach referenzierte Fußnote einen neuen Zähler zu definieren. Besser wäre etwas derartiges:
\makeatletter
\newcommand{\footnoteremember}[2]{%
  \footnote{#2}%
  \@namedef{remember@fn@#1}{\arabic{footnote}}%
}
\newcommand{\footnoterecall}[1]{%
  \footnotemark[\@nameuse{remember@fn@#1}]%
}
\makeatother
Einfacher ist es aber, bestehende Lösungen zu verwenden, wie das schon erwähnte \footref von KOMA-Script:
% mindestens zweimal kompilieren
\documentclass{article}
\usepackage{scrextend}% nicht nötig mit einer KOMA-Klasse
\begin{document}

Text\footnote{blub\label{fn:bla}}
Text\footref{fn:bla}

\end{document}
oder bei vielen immer wieder kehrenden Fußnoten vielleicht das »fixfoot« Paket:
% mindestens zweimal kompilieren
\documentclass{article}
\usepackage{fixfoot}
\DeclareFixedFootnote\bla{blub}
\begin{document}

Text\bla{}
Text\bla

\end{document}
Grüße
Clemens
Paketauthor

Besserwisser

Beitrag von Besserwisser »

Zu der Geschichte mit den Leerzeichen kann ich übrigens diese Seite empfehlen: http://www.komascript.de/signifikanteLeerzeichen

Antworten