Нарисуйте короткую вертикальную линию между буквами, не изменяя интервал между буквами.

Нарисуйте короткую вертикальную линию между буквами, не изменяя интервал между буквами.

Я хочу нарисовать маленькие, тонкие разделители между буквами, не меняя интервал между буквами (трекинг) в Xetex. Вот неудачная попытка с \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}

Результат:

рендеринг отслеживания в xetex с \rule

Я бы хотел, чтобы буквы в двух строках выше точно совпадали друг с другом, несмотря на дополнительные разделители в нижней строке. Я открыт для альтернативных решений, таких как рисование на tikz, пока результат может быть использован в строке, в середине текста (не в строке, скажем, в табличном виде).

решение1

Приведенный ниже код определяет команду \vlines[optional position]{letter sequence}таким образом, что ввод

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.

результаты в

введите описание изображения здесь

\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}

Редактировать:Согласно комментариям, нужна только одна строка равноотстоящих букв с разделителями между ними. Это немного упрощает код.

введите описание изображения здесь

\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}

Связанный контент