垂直双星号与双匕首完美对齐

垂直双星号与双匕首完美对齐

LaTeX 文本脚注符号序列以 开头∗ † ‡ § ¶ ∥我想定义一个垂直双星号\textastdbl)以便我可以将其插入到序列中:(* ⁑ † ‡ § ¶ ∥注意:对脚注符号序列的实际修改不是我要求的一部分)。

下面是一些近似于实际情况的代码:

\documentclass{article}

\newcommand*{\textastdbl}{*\llap{\raisebox{-1.35ex}{*}}}
\newcommand*{\textastdbltight}{\raisebox{-0.1ex}{*}\llap{\raisebox{-1.25ex}{*}}}

\begin{document}

A new footnote symbol sequence with a vertical double asterisk:
*\textastdbl(\textastdbltight)\dag\ddag\S\P\textbardbl

\end{document}

近似预期外观

我的对称要求是符号的中间\textastdbl应该\ddag处于同一高度。我认为这\textastdbl太宽了,所以我的代码中的类似内容\textastdbltight看起来差不多,只是ex- 值没有精确选择,而应该根据*\ddag符号的垂直尺寸计算。生成的符号应该是普通的文本模式符号。如果*不是上下对称的,另一个挑战是翻转它的下半部分。

更新:对于使用此类符号的用户,Unicode 代码点是U+2051。加载包accsupp并将宏定义括在\BeginAccSupp{method=hex,unicode,ActualText=2051}[...]中\EndAccSupp{},以便在粘贴时生成正确的代码点。

答案1

重新修改的解决方案(使星号的中心与 的中心相匹配\ddag):

此修订解决方案允许灵活地指定星号之间的间隙,这必然会相应地缩小星号。在此 MWE 中,我分别在裁剪后的星号之间放置 0pt、3pt 和 6pt(并在其上方和下方放置一半),然后将\scalerel它们调整为裁剪后的 的精确垂直尺寸\ddag。该解决方案的唯一主观方面是\cropast\cropddag用户必须使用 裁剪星号和双击周围的多余空间\addvbuffer。但这种方法的好处是,如果您更改字体,只需在新字体中重新进行裁剪,其余的解决方案直接遵循此操作,不变。我在下面使用此代码展示了该功能:

\documentclass{article}
\usepackage{stackengine}
\usepackage{verbatimbox}
\usepackage{scalerel}
\parindent 0in
%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\cropast{\addvbuffer[-0.008ex -0.744ex]{*}}
\def\cropddag{\raisebox{-.02ex}{\addvbuffer[0.02ex 0.02ex]{\ddag}}}
%% for TeX Gyre Schola %%%
%\usepackage{tgschola}
%\usepackage{textcomp}
%\def\cropast{\addvbuffer[0.02ex -0.64ex]{*}}
%\def\cropddag{\raisebox{.35ex}{\addvbuffer[-0.12ex -0.35ex]{\ddag}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%

\newlength\tmplength
\def\stackedcropast#1{%
  \stackengine{#1}{\cropast}{\cropast}{O}{c}{T}{F}{S}%
  \tmplength=#1%
  \tmplength=.5\tmplength%
  \stackengine{\tmplength}{\usebox{\stackedbox}}{}{O}{c}{T}{F}{S}%
  \stackengine{\tmplength}{\usebox{\stackedbox}}{}{U}{c}{F}{F}{S}%
}
\newcommand\textastdbl[1][0pt]{\scalerel*{$\stackedcropast{#1}$}{$\cropddag$}}
\begin{document}
\tiny cropast cropddag ddag\\
\Huge
\fboxsep=0pt\fboxrule=.02pt
\fbox{\cropast}~~\fbox{\cropddag}~~\fbox{\ddag}

\ddag\textastdbl\textastdbl[3pt]\textastdbl[6pt]\ddag x
\end{document}

下面的初始图像按原样运行代码:

在此处输入图片描述

但是,如果取消注释注释行,则要激活 Tex Gyre Schola 字体,稍微复杂一点的重新裁剪会为新字体提供修改后的结果,即使原始字体\ddag下方有较大的缓冲空间。由于 Gyre 的中心部分相\ddag对于外部部分不对称,因此需要将中心置于\ddag裁剪框垂直位置的 25% 和 75% 处。

在此处输入图片描述

答案2

将测量留给 TeX:

\documentclass{article}
\usepackage{graphicx,calc}

\DeclareRobustCommand\textastdbl{%
  \leavevmode
  {\sbox0{\ddag}%
   \ooalign{\raisebox{\ht0-\height}{*}\cr
            \raisebox{\depth-\dp0}{\scalebox{1}[-1]{*}}\cr}%
  }%
}

\begin{document}
\fboxsep=0pt    % frame with no space
\fboxrule=0.1pt % thin frame
\fbox{\ddag\textastdbl\ddag\dag}
\end{document}

在此处输入图片描述

当然,这取决于当前字体中字形的实现方式。如果我们使用 TeX Gyre Schola ( tgschola) 和textcomp,结果将是

在此处输入图片描述

这是因为\ddag符号具有深度,但它并没有真正延伸到覆盖它,因为它在框住符号时清晰地显示出来:

在此处输入图片描述

结论是,这取决于字体;人们可以在计算中设计一些自动化功能,但必须考虑到字体设计师的选择。

答案3

应提问者要求提供第二个答案的要求,我对另一个答案采用了类似的方法,但目标是使双星号的外边缘与 的范围相匹配\ddag。在另一个答案中,我让星号的中心与十字的中心相匹配\ddag。这种方法实际上更简单,因为它不依赖于两个\ddag十字元素是否围绕中点垂直对称。

和之前一样,我裁剪了星号和\ddag以将其范围封闭起来。这样,\scalerel将使堆叠的星号适合 的实际范围(裁剪)\ddag

方法如下。与其他解决方案一样,用户控制星号之间的预缩放间隙间距。

\documentclass{article}
\usepackage{stackengine}
\usepackage{verbatimbox}
\usepackage{scalerel}
\def\cropast{\addvbuffer[-0.008ex -0.744ex]{*}}
\def\cropddag{\raisebox{-.04ex}{\addvbuffer[-0ex 0.04ex]{\ddag}}}
\def\stackedcropast#1{%
  \stackengine{#1}{\cropast}{\cropast}{O}{c}{F}{F}{S}}
\newcommand\textastdbl[1][0pt]{\scalerel*{$\stackedcropast{#1}$}{$\cropddag$}}
\begin{document}
\Huge
\fboxsep=0pt\fboxrule=.02pt
\fbox{\cropast}\fbox{\cropddag}

\ddag\textastdbl\textastdbl[2pt]\textastdbl[4pt]\ddag
\end{document}

在此处输入图片描述

答案4

只需调整垂直高度我得到:

示例输出

\documentclass{article}

\newcommand*{\dblast}{\ooalign{\raisebox{-.134ex}{*}\cr\raisebox{-1.184ex}{*}}}

\begin{document}
\dblast \ddag \dblast\kern-0.473em\ddag
\end{document}

通过使用最后一个构造将符号相互叠放来找到值。更精确的方法是返回字体源并创建一个新符号...

相关内容