使用 ooalign 的 expl3 宏中的字体和间距问题

使用 ooalign 的 expl3 宏中的字体和间距问题

所以我在看省略下划线并希望有一个可以控制下划线粗细的版本。使用那里的答案中的基本思想,我想出了一个方法,但有几个我不明白的问题。

  1. 如果我在一个单词下划线,间距似乎没问题,但是如果我在一个较长的句子下划线,似乎文本会向右移动(即,下划线在句子结束之前结束)
  2. 如果我改变字体(取消注释\usepackage{tgheros}),事情就会变得一团糟
  3. \usepackage[T1]{fontenc}如果我使用像素化文本,事情会变得更加混乱。

有人能指出我哪里做错了吗?我会包括输出,但我不确定如何将其放大到足以清楚地显示问题而不会看起来很糟糕。

\documentclass{article}
%\usepackage{tgheros}
%\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault}
\usepackage{xcolor}
\usepackage{xparse}
\ExplSyntaxOn

\box_new:N \text_box
\fp_new:N \l_tmpa_fp

    %1st optional is width of gap, 2nd is thickness of rule, 3rd is vertical height of rule
    \NewDocumentCommand \gapul {O{10} D<>{.05} D(){.2} m}
    {
        \tl_gset:Nn \g_tmpa_tl {#4}
        \hbox_set:Nn \text_box {#4}
        {
        \ooalign{
            \rule[-#3ex]{\box_wd:N \text_box}{#2ex}\cr
            \prg_stepwise_function:nnnN {1}{1}{#1}\write_white_text:n
            \box_use:N \text_box\cr}
        }
    }

    \cs_new:Npn \write_white_text:n #1
    {
        \fp_set:Nn \l_tmpa_fp {.05}
        \fp_mul:Nn \l_tmpa_fp {#1}
        \hspace{\fp_to_dim:N \l_tmpa_fp}\textcolor{white}{\g_tmpa_tl}\cr
        \hspace{-\fp_to_dim:N \l_tmpa_fp}\textcolor{white}{\g_tmpa_tl}\cr
    }
\ExplSyntaxOff

\begin{document}
\gapul{japan}
\gapul{japan giddy quid japan}
\end{document}

write_white_text编辑:有人能解释一下当更改为以下内容时会发生什么吗:

\cs_new:Npn \write_white_text:n #1
{
    \fp_set:Nn \l_tmpa_fp {.05}
    \fp_mul:Nn \l_tmpa_fp {#1}
    \hspace{\fp_to_dim:N \l_tmpa_fp}\textcolor{red}{\g_tmpa_tl}\cr
    %\hspace{-\fp_to_dim:N \l_tmpa_fp}\textcolor{white}{\g_tmpa_tl}\cr
}

尽管\hspace是正数 (??),开头的单词会同时向正方向和负方向偏移,并且负方向的偏移在单词之间会减小。将文本装箱会导致偏移在单词之间保持一致。

答案1

您必须一步完成取消。

\documentclass{article}
%\usepackage{tgheros}
%\usepackage[T1]{fontenc}
\renewcommand*\familydefault{\sfdefault}
\usepackage{xcolor}
\usepackage{xparse}
\ExplSyntaxOn

\box_new:N \l_gapul_text_box
\fp_new:N \l_gapul_gap_fp
\tl_new:N \l_gapul_text_tl
%1st optional is width of gap, 2nd is thickness of rule, 3rd is vertical height of rule
\NewDocumentCommand \gapul {O{10} D<>{.05} D(){.2} m} 
 {
  \gapul_make:nnnn { #1 } { #2 } { #3 } { #4 }
 }

\cs_new_protected:Npn \gapul_make:nnnn #1 #2 #3 #4
 {
  \tl_set:Nn \l_gapul_text_tl {#4}
  \hbox_set:Nn \l_gapul_text_box {#4}
  \group_begin:
  \fp_set:Nn \l_gapul_gap_fp {.05}
  \fp_mul:Nn \l_gapul_gap_fp {#1}
  \leavevmode\vphantom{\l_gapul_text_tl} % so TeX knows the real height and depth
  \ooalign{
           \rule[-#3ex]{\box_wd:N \l_gapul_text_box}{#2ex}\cr
           \gapul_cancel:nn { + } { - }
           \hspace{-\box_wd:N \l_gapul_text_box}
           \gapul_cancel:nn { - } { + }
           \cr
           \box_use:N \l_gapul_text_box\cr
  }
  \group_end:
 }
\cs_new_protected:Npn \gapul_cancel:nn #1 #2
 {
  \hspace{#1\fp_to_dim:N \l_gapul_gap_fp}
  \textcolor{white}{\l_gapul_text_tl}
  \hspace{#2\fp_to_dim:N \l_gapul_gap_fp}
 }
\ExplSyntaxOff

\begin{document}
\gapul{japan}

\gapul{j} \gapul{n}

\gapul{abcde}

\gapul{japan giddy quid japan}
\end{document}

明显的超调是由 TeX 对字符边界框的看法引起的。

在此处输入图片描述

我还尝试修复 LaTeX3 名称的使用。

相关内容