\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}
原始产品
放大倍数是任意的,但只能在原始厚度的 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}
答案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
意味着“不改变当前值”。