操作系统
TeX 发行版
下面是MWE
\documentclass{ctexart}
\usepackage[a4paper]{geometry}
\usepackage{amsmath}
\makeatletter
\ExplSyntaxOn
\NewDocumentCommand { \score } { O{} m }
{
\mode_if_math:TF
{ \__examzh_cdotfill: \tag*{#2 \text{~分}} }
{ \__examzh_cdotfill: #2 分 }
\mode_if_math:F
{
\par \noindent \ignorespaces
}
}
% 仿照 latex.ltx, line 651 的 \dotfill
\cs_new:Npn \__examzh_cdotfill:
{
\mode_leave_vertical:
\cleaders \hb@xt@ .44em {\hss $\cdot$ \hss} \hfill
\kern\z@
}
\ExplSyntaxOff
\makeatother
\begin{document}
\begin{enumerate}
\item 事实上,由于 $x_1 < 2$,且 $x_k < 2$ 时
\[
x_{k + 1} = \sqrt{2 + x_k} < \sqrt{2 + 2} = 2,
\]
由数学归纳法知对所有 $n$ 都有 $x_n < 2$,即数列有上界.\score{2}
又由于
\[
\frac{x_{n + 1}}{x_n} = \sqrt{\frac{2}{x_n^2} + \frac{1}{x_n}} > \sqrt{\frac{2}{2^2} + \frac{1}{2}} = 1,\score{2}
\]
\begin{equation}
\frac{x_{n + 1}}{x_n} = \sqrt{\frac{2}{x_n^2} + \frac{1}{x_n}} > \sqrt{\frac{2}{2^2} + \frac{1}{2}} = 1,\score{2}
\end{equation}
\begin{align}
\frac{x_{n + 1}}{x_n} = \sqrt{\frac{2}{x_n^2} + \frac{1}{x_n}} > \sqrt{\frac{2}{2^2} + \frac{1}{2}} = 1,\score{2}
\end{align}
\begin{gather}
\frac{x_{n + 1}}{x_n} = \sqrt{\frac{2}{x_n^2} + \frac{1}{x_n}} > \sqrt{\frac{2}{2^2} + \frac{1}{2}} = 1,\score{2}
\end{gather}
所以数列单调增加.由极限存在准则II,数列必定收敛.\score{2}
\end{enumerate}
\end{document}
效果如下:
文本部分正常,但是数学模式的 \cdotfill
没有出现,也没有报错。
想请教一下有没有什么办法可以实现数学行间模式的引导线效果,不用 \tag
也行,只要能实现都可以
查到一个 https://tex.stackexchange.com/questions/587933/equation-dotfill-between-index
但是他改了 \place@tag
,这样的话 align
环境什么的也会被影响,而我想要的只是在使用 \score
的时候有 dotfill
效果,但不希望影响任何环境的原有效果。
我参考了 jnuexam
和 simplexam
但是它们的处理都是没有用 fill
类,而是用了两个 $\cdot$
,我暂时没找到其它相关的。
李清大神的方案:https://github.com/CTeX-org/forum/issues/256
可以用 zref-savepos 记录位置,然后手动填充,需要编译两次。
\documentclass{ctexart}
\usepackage[a4paper]{geometry}
\usepackage{amsmath}
\usepackage{zref-savepos}
\makeatletter
\ExplSyntaxOn
\zref@require@unique
\NewDocumentCommand { \score } { O{} m }
{
\mode_if_math:TF
{ \@@_math_cdotfill:n { #2 \text { ~ 分 } } }
{ \__examzh_cdotfill: #2 分 }
\mode_if_math:F
{
\par \noindent \ignorespaces
}
}
% 仿照 latex.ltx, line 651 的 \dotfill
\cs_new:Npn \__examzh_cdotfill:
{
\mode_leave_vertical:
\cleaders \hb@xt@ .44em {\hss $\cdot$ \hss} \hfill
\kern\z@
}
\cs_new_protected:Npn \@@_math_cdotfill:n #1
{
\stepcounter { zref@unique }
\hbox_overlap_right:n
{
\zsaveposx { \thezref@unique L }
\zref@ifrefundefined { \thezref@unique R }
{ }
{
\cleaders
\hbox_to_wd:nn { .44em } { \hss $\cdot$ \hss }
\skip_horizontal:n
{
\zposx { \thezref@unique R } sp
- \zposx { \thezref@unique L } sp
}
}
}
\tag * { \zsaveposx { \thezref@unique R } #1 }
}
\ExplSyntaxOff
\makeatother