50 如何实现正字计数法的效果?

发布于 2025-04-28 08:15:46

预期效果如下:

图片1.png

要求:

  • 最好是实现简单一点
  • 不用加载任何其他复杂的宏包
  • 字字体可以不需要笔锋(其实是衬线)

查看更多

关注者
0
被浏览
109
3 个回答
远方不远
远方不远 10小时前
Hello, LuaLaTeX!

要实现“不用加载任何其他”这个需求对我来说有点难,除非你更喜欢用雾月老师的方法在底层用vrule画正字。

在unicode编码表的算筹字符区(Counting Rod Numerals),就有你需要的五个字符,然而不是所有的字库文件都会收录它们。要想直接使用它们,你必须使用已经收录了它们的字体,所以你就必须加载“这种字体”才能在文档中写正字。例如开源的霞鹜文楷字体,就收录了它们。字体千千万,所以如果采用unicode字符的方法,需要你自己去考察你所希望的字体对这些字符的收录情况。

image.png


(这段更新被删除了)


最新更新)又测试了下,这样就可以了。因为全部使用ASCII字符,所以不怕编辑器显示不出来:

\documentclass[UTF8]{ctexart}
\usepackage[hscale=.8,papersize={10cm,5cm},showframe]{geometry}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\usepackage{etoolbox}
\newfontfamily{\XWWKen}{LXGW WenKai}
\NewDocumentCommand{\zheng}{ O{} }{%
    \ifstrequal{#1}{1}{\symbol{"1D372}}{%
        \ifstrequal{#1}{2}{\symbol{"1D373}}{%
            \ifstrequal{#1}{3}{\symbol{"1D374}}{%
                \ifstrequal{#1}{4}{\symbol{"1D375}}{%
                    \ifstrequal{#1}{5}{\symbol{"1D376}}{%
                        \ifstrempty{#1}{\symbol{"6B63}}{%
                            \GenericError{}%  
                                {(zheng command) Invalid argument '#1'}%
                                {You should use '1' or '2' or '3' or '4' or '5' or leave empty.}%
                        }%
                    }%
                }%
            }%
        }%
    }%
}

\begin{document}

\huge\XWWKen

\zheng \quad \zheng[]

\zheng[1] \quad \zheng[2] \quad \zheng[3] \quad \zheng[4] \quad \zheng[5] 

%\zheng[6] %输入阿拉伯数字"1""2""3""4""5"之外的任何内容,都将报错。

\end{document}

image.png

Sagittarius Rover
Sagittarius Rover 9小时前
我要成为Typst糕手/(ㄒoㄒ)/~~

基线我没调整好...其实是不会调(bushi)...

\documentclass{ctexart}
\usepackage{tikz}
\newcommand\myzheng[1][5]{%
    \begin{tikzpicture}[every node/.style={inner sep=0pt,outer sep=0pt,font=\heiti,baseline=-3.5pt}]%
        \node {正};%
        \ifnum#1<5\relax%
        \fill[white] (-.45em,-.68ex) rectangle ++(.9em,-.25ex);%
        \fi%
        \ifnum#1<4\relax%
        \fill[white] (-.3em,-.7ex) rectangle ++(.1em,1.1ex);%
        \fi%
        \ifnum#1<3\relax%
        \fill[white] (.058em,-.01em) rectangle ++(.33em,.2ex);%
        \fi%
        \ifnum#1<2\relax%
        \fill[white] (-.05em,-.7ex) rectangle ++(.12em,1.428ex);%
        \fi%
    \end{tikzpicture}%
}
\begin{document}

% \begin{tikzpicture}
% \node {正};
% \end{tikzpicture}

% \begin{tikzpicture}
%     \node {正};
%     \fill[white] (-.45em,-.68ex) rectangle ++(.9em,-.25ex);
% \end{tikzpicture}

% \begin{tikzpicture}
%     \node{正};
%     \fill[white] (-.45em,-.68ex) rectangle ++(.9em,-.25ex);
%     \fill[white] (-.3em,-.7ex) rectangle ++(.1em,1.1ex);
% \end{tikzpicture}

% \begin{tikzpicture}
%     \node {正};
%     \fill[white] (-.45em,-.68ex) rectangle ++(.9em,-.25ex);
%     \fill[white] (-.3em,-.7ex) rectangle ++(.1em,1.1ex);
%     \fill[white] (.058em,-.01em) rectangle ++(.33em,.2ex);
% \end{tikzpicture}

% \begin{tikzpicture}
%     \node {正};
%     \fill[white] (-.45em,-.68ex) rectangle ++(.9em,-.25ex);
%     \fill[white] (-.3em,-.7ex) rectangle ++(.1em,1.1ex);
%     \fill[white] (.058em,-.01em) rectangle ++(.33em,.2ex);
%     \fill[white] (-.05em,-.7ex) rectangle ++(.12em,1.428ex);
% \end{tikzpicture}

你\begin{tikzpicture}[baseline=-3.5pt,inner sep=0pt,outer sep=0pt,font=\heiti]
    \node[draw=cyan] {正};
\end{tikzpicture}好

\foreach \i in {1,...,5}{%
    \myzheng[\i] \quad
}

你是\foreach \i in {1,...,5}{第\myzheng[\i]个}猫娘小蛋糕

\end{document}

image.png

由于赶时间,细节没有做调整,请自行微调。

且...这个想法比较trivial,不知道是否有更好的实践。

雾月
雾月 9小时前
这家伙很懒,什么也没写!

无需任何宏包:

\documentclass{article}

\makeatletter
\def\@zheng@i{\vrule height2ex depth-1.8ex width2ex\relax} % U+1D372
\def\@zheng@ii{\@zheng@i\kern-2ex\hbox to2ex
  {\hfil\vrule height2ex depth-.2ex width.2ex\hfil}} % U+1D373
\def\@zheng@iii{\@zheng@ii\kern-1ex\hbox to1ex
  {\vrule height1.1ex depth-0.9ex width0.8ex\hfil}} % U+1D374
\def\@zheng@iv{\@zheng@iii\kern-2ex\hbox to2ex
  {\hskip 0.3ex\vrule height1.3ex depth-0.2ex width0.2ex\hfill}} % U+1D375
\def\@zheng@v{\@zheng@iv\kern-2ex\vrule height0.2ex width2ex\relax} % U+1D376
\protected\def\@zheng#1{%
  \edef\x{\ifcase#1 \or\noexpand\@zheng@i\or\noexpand\@zheng@ii\or\noexpand\@zheng@iii
    \or\noexpand\@zheng@iv\or\unexpanded{\@zheng@format{\@zheng@v}}%
    \else\unexpanded{\@zheng@format{\@zheng@v}\zheng{#1-5}}\fi}\x}
\protected\def\zheng#1{\leavevmode\expandafter\@zheng\expandafter{\the\numexpr#1}}
\long\def\@zheng@format#1{\mbox{#1}\ }
\protected\long\def\zhengformat#1{\long\def\@zheng@format##1{#1}}
\makeatother

\begin{document}

12345 \zheng{1} \zheng{2} \zheng{3} \zheng{4} \zheng{5}

12345 \zheng{1}\zheng{2}\zheng{3}\zheng{4}\zheng{5}

6 \zheng{6}

horizontal 42:
\zhengformat{\mbox{#1}\ }
\zheng{42}

vertical 42:
\zhengformat{\mbox{#1}\\}
\begin{tabular}[t]{c}
\zheng{42}
\end{tabular}

\end{document}

image.png

有的字体比如 Noto Unicode、霞骛文楷、Plangothic P1 等有这些字形,下载这些字体后直接用 \fontspec{..} \symbol{"1D372} 即可。

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览