Ich habe mir ein command definiert, das prüft, ob der erste optuonale Parameter gesetzt wird und dann entsprechend anders expandieren soll. Konkret definiere ich für eine mit tikz gesetzte Node ein Label und möchte es dann im Text referenzieren und zur Node springen. Das Problem, was ich habe ist, dass nun bei der Referenzierung im Text davor Leerzeichen bzw. Freiraum gesetzt wird. Wenn ich "manuell" referenziere, erscheint kein Freiraum. Warum passiert das und wie kann ich das verhindern? Hier mein Beispiel: Open in writeLaTeX
\documentclass{scrartcl} \usepackage{tikz} \usepackage{hyperref} \newcommand{\labelNode}[2][]{ % \def\empty{} \def\temp{#1} \ifx\temp\empty \node[draw] {#2}; \else \node[draw] (#1) {\raisebox{2ex}[0pt]{\hypertarget{meta:\detokenize{#1}}{}}#2 \label{lbl:meta:\detokenize{#1}}}; \fi } \newcommand{\nodeRef}[2][]{ \def\empty{} % \def\temp{#1} % \ifx\temp\empty % \texttt{#2} % \else % \hyperlink{meta:\detokenize{#1}}{\texttt{#2}} % \fi % } \begin{document} \section{First} \subsection{Second} \begin{tikzpicture} \labelNode[foobar]{FooBar}; \end{tikzpicture} Und im Text wird \nodeRef[foobar]{FooBar} nun mit Leerzeichen referenziert. Nun aber die nodeRef ohne Verwendung des Kommandos: \hyperlink{meta:foobar}{\texttt{FooBar}}. Liegt auf Seite \pageref{lbl:meta:foobar}, im Abschnitt \ref{lbl:meta:foobar} . \end{document} |
Das hier könnte Dir helfen: http://texwelt.de/wissen/fragen/16/was-sollen-die-kommentar-zeichen-am-ende-der-zeilen
\def\empty{}
scheint ziemlich nutzlos: so ist\empty
schon von vornherein definiert.@Clemens, vielen Dank. Durch Entfernen der Leerzeichen vor den %-Zeichen verschwindet der Freiraum, wie erwartet nach Lesen des von dir verlinkten Posts. Das mit den Leerzeichen wusste ich bisher noch nicht. Ich habe immer gedacht, die %-Zeichen werden benutzt, um sicherzustellen, dass Inhalt auf einer Zeile, der aus Versehen im nicht-sichtbaren Bereich des Editors hinzugefügt wurde, nicht berücksichtigt wird. Sowas kann ja mal passieren wenn die Katze über die Tastatur läuft ;) Wie machen wir das jetzt mit der Lösung? Du sollst ja für die Antwort belohnt werden.
@ErnstZ wenn Du mich belohnen willst, dann gib doch einfach bei der anderen Frage Deine Stimme ab. (Da kannst Du sogar zweimal für mich stimmen...) Diese Frage können wir dann vielleicht am besten als Duplikat der anderen schließen.