Zeichnen Sie eine kurze vertikale Linie zwischen den Buchstaben, ohne den Buchstabenabstand zu beeinträchtigen

Zeichnen Sie eine kurze vertikale Linie zwischen den Buchstaben, ohne den Buchstabenabstand zu beeinträchtigen

Ich möchte kleine, dünne Trennlinien zwischen Buchstaben zeichnen, ohne den Buchstabenabstand (Laufweite) in Xetex zu ändern. Hier ist ein fehlgeschlagener Versuch mit \rule:

\documentclass{minimal}
\setlength{\parindent}{0cm}

\usepackage{fontspec}
\setromanfont[LetterSpace=50.0]{Noto Serif}
\newcommand{\mysep}{\rule[0.125em]{1pt}{0.5em}}

\begin{document}
HLHHLLH\\
HL\mysep{}HHL\mysep{}LH

\end{document}

Ergebnis:

Darstellung des Trackings in xetex mit \rule

Ich möchte, dass die Buchstaben in den beiden Zeilen oben genau aufeinander ausgerichtet sind, trotz der zusätzlichen Trennzeichen in der unteren Zeile. Ich bin offen für alternative Lösungen wie das Zeichnen von Inhalten in Tikz, solange das Ergebnis inline, mitten im Text verwendet werden kann (nicht inline, z. B. in einer Tabelle).

Antwort1

Der folgende Code definiert einen Befehl, \vlines[optional position]{letter sequence}so dass die Eingabe

Some text \vlines{HL|HHL|LH} some more text.

Some text \vlines[t]{HL|HHL|LH} some more text.

Some text \vlines[b]{HL|HHL|LH} some more text.

führt zu

Bildbeschreibung hier eingeben

\documentclass{minimal}
\setlength{\parindent}{0cm}

% \usepackage{fontspec}
% \setromanfont[Scale=2,LetterSpace=50.0]{Noto Serif}
\newcommand{\mysep}{\rule[0.125em]{1pt}{0.5em}}

\makeatletter
\newcommand\vloop{\@ifnextchar|{\vloopa}{\vloopb}}
\makeatother
\newcommand\vloopa[1]{\let\sep\vline\vloop}
\newcommand\vloopb[1]%
  {\ifx\relax#1%
   \else
     \sep
     \let\sep\NoVline
     #1%
     \expandafter\vloop
   \fi
  }
\newcommand\sep{}
\newcommand\NoVline{\makebox[0.5em]{}}
\newcommand\Vline{\makebox[0.5em]{\mysep}}
\newcommand\vlines[2][]%
  {\begin{tabular}[#1]{@{}l@{}}%
     \let\vline\NoVline\def\sep{}\vloop#2\relax\\
     \let\vline\Vline\def\sep{}\vloop#2\relax
   \end{tabular}%
  }
\begin{document}
Some text \vlines{HL|HHL|LH} some more text.
\bigskip

Some text \vlines[t]{HL|HHL|LH} some more text.
\bigskip

Some text \vlines[b]{HL|HHL|LH} some more text.
\end{document}

Bearbeiten:Laut den Kommentaren wird nur eine Zeile mit gleichmäßig verteilten Buchstaben und Trennzeichen dazwischen benötigt. Dies vereinfacht den Code ein wenig.

Bildbeschreibung hier eingeben

\documentclass{minimal}
\newcommand{\mysep}{\rule[0.125em]{1pt}{0.5em}}

\makeatletter
\newcommand\vloop{\@ifnextchar|{\vloopa}{\vloopb}}
\makeatother
\newcommand\vloopa[1]{\let\sep\Vline\vloop}
\newcommand\vloopb[1]%
  {\ifx\relax#1%
   \else
     \sep
     \let\sep\NoVline
     #1%
     \expandafter\vloop
   \fi
  }
\newcommand\sep{}
\newcommand\NoVline{\makebox[0.5em]{}}
\newcommand\Vline{\makebox[0.5em]{\mysep}}
\newcommand\vlines[1]{\def\sep{}\vloop#1\relax}
\begin{document}
Some text \vlines{HL|HHL|LH} some more text.
\end{document}

verwandte Informationen