我想在字母之间绘制小而细的分隔符,而不改变 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}
结果:
我希望上面两行的字母能够完全对齐,尽管底行有额外的分隔符。我愿意接受其他解决方案,比如在 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}