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