绘制一条短的字母间垂直线而不影响字母间距

绘制一条短的字母间垂直线而不影响字母间距

我想在字母之间绘制小而细的分隔符,而不改变 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}

结果:

使用 \rule 在 xetex 中渲染跟踪

我希望上面两行的字母能够完全对齐,尽管底行有额外的分隔符。我愿意接受其他解决方案,比如在 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}

相关内容