下划线宽度

下划线宽度

\setul{}{ pt}看起来,通过使用包中的命令soul,我们可以更改下划线宽度。但我不想使用这个包。有没有其他命令可以将下划线宽度更改为任意大小,而无需使用任何特定包?

答案1

修订方法

这是\dunderline[<offset of line top>]{<thickness>}{<content>}

编辑:我采纳了 Harald 的建议,将宏放在一个组内,因为\ooalign更改了\lineskiplimit。如果没有额外的组,下划线可能会在下一行碰到下面的内容。有了额外的组,如 MWE 中所示,会插入额外的垂直空间以防止重叠。

编辑后使用 egreg 的建议\sbox0{},而不是\setbox0=\hbox{}

\documentclass{article}
\usepackage{lipsum,xcolor}
\newcommand\dunderline[3][-1pt]{{%
  \sbox0{#3}%
  \ooalign{\copy0\cr\rule[\dimexpr#1-#2\relax]{\wd0}{#2}}}}
\begin{document}
\dunderline{1pt}{This is a test}

\dunderline{2pt}{This is a test}

\dunderline[-.5pt]{2pt}{This is a test}

\dunderline[-6pt]{2pt}{This is a test} \lipsum[1]
\end{document}

enter image description here

原始产品

放大倍数是任意的,但只能在原始厚度的 1 倍到 2 倍之间。它使用双下划线执行结果。由于下划线厚度为 .4pt,因此第一个参数偏移量只能在 0pt(1 倍放大)到 .4pt(2 倍放大)之间变化。

\documentclass{article}
\newcommand\dunderline[2][.4pt]{%
  \raisebox{-#1}{\underline{\raisebox{#1}{\smash{\underline{#2}}}}}}
\begin{document}
\underline{This is a normal thickness}

\dunderline[.2pt]{This is 1.5x thickness}

\dunderline{This is 2x thickness}

\end{document}

enter image description here

答案2

当然,soul允许在带下划线的材料中换行。如果您需要,请使用soul。但您应该完全避免下划线。

否则,这里有一个可定制的版本,类似于\setul

\documentclass{article}

\newlength{\myuldp}
\newlength{\myulthickness}
\newcommand{\setmyul}[2]{%
  \if\relax\detokenize{#1}\relax\else
    \setlength{\myuldp}{#1}%
  \fi
  \setlength{\myulthickness}{#2}%
}
\newcommand{\setmyuldepth}[1]{%
  \settodepth{\myuldp}{%
    \if\relax\detokenize{#1}\relax\myulalphabet\else#1\fi
  }%
  \addtolength{\myuldp}{0.9pt}% clearance
}
\newcommand{\myulalphabet}{abcdefghijklmnopqrstuvwxyz}
\newcommand{\myulline}{%
  \leaders\hrule
    height -\myuldp
    depth \dimexpr\myuldp+\myulthickness
  \hfil
}
% initialize
\setmyul{0pt}{0.4pt}
\setmyuldepth{}
%%%

\newcommand{\myul}[1]{{\ooalign{#1\cr\myulline\cr}}}


\begin{document}

\myul{Abcdefghi} \myul{abcyj}

\setmyul{}{2pt}

\myul{Abcdefghi} \myul{abcyj}

\setmyul{1pt}{0.4pt}

\myul{Abcdefghi} \myul{abcyj}

\end{document}

中的空参数\setmyuldepth使用整个小写字母来决定深度;中的第一个参数为空\setmyul意味着“不改变当前值”。

enter image description here

相关内容