Sie sind hier

Unterstrich zu weit unten

Hallo zusammen,

der Unterstrich wird im LaTeX Text ja bekanntlich mit \_ eingegeben. Allerdings wird er dann meiner Meinung nach deutlich zu tief gesetzt (s. Beispiel). Kann man den Unterstrich auch so setzen, dass seine Oberkante mit der Unterkannte des Textes uebereinstimmt? (oder zumindest naeherungsweise).

\documentclass{scrreprt}

\usepackage[T1]{fontenc}
\usepackage[USenglish]{babel}

\begin{document}
test\_test
\end{document}

Viele Gruesse

marius

forum: 
Bild von Markus Kohm

Das mit \_ gesetzte Zeichen ist üblicherweise \textunderscore. Dieses wiederum ist im LaTeX-Kern als:

\DeclareTextCommandDefault{\textunderscore}{%
  \leavevmode \kern.06em\vbox{\hrule\@width.3em}}

definiert. Das heißt, dass es fontspezifisch definiert ist (näheres zu \DeclareTextCommandDefault siehe fntguide). Obige Definition findet nur Anwendung, wenn das Zeichen im Font nicht enthalten ist. Bei anderen Fonts wird es aus dem Font genommen und seine Position und Form unterliegen dann den Entscheidungen des Fontdesigners. Dies ist bei T1-codierten Schriften normalerweise immer der Fall (siehe T1enc.def). So ist auch zu erklären, dass sich Position und Aussehen des Zeichens beispielsweise ändern, wenn in deinem Beispiel noch ein \ttfamily eingefügt wird.

Zeichen sind für TeX auch nur Boxen und Boxen wiederum lassen sich ggf. mit \raisebox vertikal verschieben. Wie nach obiger Erklärung klar sein sollte, hängt der Wert mit Du Dein Ziel erreichst von der verwendeten Schrift ab. Es könnte daher sinnvoller sein, eine selbst definierte Anweisung an Stelle von \_ oder \textunderscore zu verwenden, die von der Schrift unabhängig ist. Der Preis ist dann, dass das Ergebnis von der Form eventuell nicht zur verwendeten Schrift passt. Natürlich verwendet man bei der eigenden Definition dann nicht \DeclareTextCommandDefault, sondern \newcommand oder \DeclareRobustCommand.

So etwas könnte beispielsweise so aussehen:

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\newcommand{\lowrule}{%
  \leavevmode \kern.06em\vbox{\hrule width.5em}}
\begin{document}
test\lowrule test
\end{document}

Hallo Herr Kohm,

erst einmal vielen Dank fuer die ausfuehrliche Antwort. Ihr Beispiel funktioniert auch hervorragend. Ich habe versucht noch mit einer \raisebox die vertikale Ausrichtung etwas zu aendern, d.h. ich habe versucht den Unterstich noch eine kleine Idee tiefer zu setzen. Im Text funktionierte das auch, nur an zwei Stellen nicht mehr:
1. In Section-headings
2. Im Zeilenkopf (\chead)
Das duerfte in beiden Faellen das gleiche Problem sein. Einmal bekomme ich "...missing \endcsname inserted" und im anderen Fall "...you can't use \hrule here except with leaders"
Wie macht man das?

Viele Gruesse!

marius

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\newcommand{\lowrule}{\leavevmode \kern0.05em\raisebox{-1pt}{\vbox{\hrule width0.6em height0.02em}}} %versuch 1
\newcommand{\lowrule}{\leavevmode \kern0.05em\raisebox{-1pt}{\hrule width0.6em height0.02em}} %versuch 2
\begin{document}
\section{test\lowrule test}
test\lowrule test
\end{document}

Bild von Markus Kohm

Du kannst \DeclareRobustCommand an Stelle von \newcommand verwenden, damit die Definition von \lowrule nicht mehr zerbrechlich ist, oder du arbeitest an den Stellen, an denen es zerbrechen könnte mit \protect. Zum Thema zerbrechliche Befehle siehe bitte auch die De-TeX-FAQ.

mit \protect\lowrule hatte ich das auch probiert, aber es kam immer eine Klammerungs-Fehlermeldung... aber mit
\DeclareRobustCommand{\lowrule}{\leavevmode \kern0.06em\raisebox{-1pt}{\vbox{\hrule width0.6em}}}
hat alles super gepasst! Vielen Dank, Herr Kohm

Noch was.... hyperref scheint Probleme mit dieser Definition zu haben. Mit...

\documentclass{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[USenglish]{babel}
\usepackage{hyperref}
\DeclareRobustCommand{\lowrule}{\leavevmode \kern0.06em\raisebox{-1pt}{\vbox{\hrule width0.5em}}}

\begin{document}
\section{test\lowrule test}
\end{document}

... kommt eine etwas kryptische 'undefined control sequence' Fehlermeldung. Betaetigt man ENTER, dann sieht man, dass hyperref warnings verursacht und kern, vbox und hrule entfernt...

Gibt es eine Loesung, die hyperref akzeptiert?

Vielen Dank

marius

Bild von Markus Kohm

hyperref bietet einen Befehl mit dem man in Bookmarks etwas anderes erzeugen kann als im laufenden Text. Steht irgendwo in der hyperref Doku. Da ich auch nie auswenig weiß, wie die Anweisung heißt, überlasse ich das Nachschauen dir.

Also ich hab nur eine "Loesung" gefunden, die heisst

\texorpdfstring{...}{...}

Allerdings kann man da nur alternative Text zu den mathematischen Formel (und was man sonst noch in den section-headings usw. haben mochte) angeben, der dann in den bookmarks auftaucht. Mathematische Formel bekommt man wohl gar nicht hin (in die bookmarks), schade, sehr schade.

Comments for "Unterstrich zu weit unten" abonnieren