要实现“不用加载任何其他”这个需求对我来说有点难,除非你更喜欢用雾月老师的方法在底层用vrule
画正字。
在unicode编码表的算筹字符区(Counting Rod Numerals),就有你需要的五个字符,然而不是所有的字库文件都会收录它们。要想直接使用它们,你必须使用已经收录了它们的字体,所以你就必须加载“这种字体”才能在文档中写正字。例如开源的霞鹜文楷字体,就收录了它们。字体千千万,所以如果采用unicode字符的方法,需要你自己去考察你所希望的字体对这些字符的收录情况。
(这段更新被删除了)
(最新更新)又测试了下,这样就可以了。因为全部使用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}
基线我没调整好...其实是不会调(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}
由于赶时间,细节没有做调整,请自行微调。
且...这个想法比较trivial,不知道是否有更好的实践。
无需任何宏包:
\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}
有的字体比如 Noto Unicode、霞骛文楷、Plangothic P1 等有这些字形,下载这些字体后直接用 \fontspec{..} \symbol{"1D372}
即可。
(我刚问了deepseek,他告诉我没有这几个对应的unicode字符)还得是远老师见多识广啊
简单试了一下,似乎并不行,这可能与
xeCJK
是否添加此区块有关,related:远老师和雾月老师都给了更完整的解答啦😊😊😊!
@u70550 我是在word中测试的。word能显示这个字符,那么TeX一定可以!
@u70550 实际上并不是中文字符,中文字符应该叫CJK统一表意文字
@u101077 好嘟,谢谢远老师科普,我对CJK并不了解/(ㄒoㄒ)/~~
@u70550 我也不了解,这些算筹符号在unicode码表中的位置我也是临时查的。
一个中文字库文件,在unicode编码条件下,不可能把所有的unicode字符全部收录,而是有选择地收录,大多数中文字库文件都会收CJK统一表意文字区(CJK Unified Ideographs)的字符,而算筹字符区(Counting Rod Numerals)大概鲜有收录的。