exam-zh 模板师生两版中使用圆圈数字的问题

发布于 2024-11-21 16:36:31

2024 年 11 月 19 日,在论坛上面发起了一个关于 exam-zh 师生两版编译的问题,单编译一个无答案的版本,是正常的;但使用 -shell-escape 编译师生两版时,就会报错

论坛中的 Sagittarius Rover 以及 QQ 群里面的其它一些热心的大佬参与了解惑。

现在把这次“简单”的讨论过程记录下来,供遇到类似问题的同志们参考。

TeX 版本:texlive 2022
exam-zh 版本:0.2.3

师生两版编译过程中始终出现 ! Undefined control sequence.,后 Sagittarius Rover 提出来 texlive 2022 版本下需要打个补丁:

\ExplSyntaxOn
\cs_new_eq:NN \IfBlankTF \tl_if_blank:nTF
\ExplSyntaxOff

Sagittarius Rover这里 做了答复和解释工作。

在我的机器上面按照大佬的MWE,编译正确,但回到我自己的文档中还是出现了这个问题。群里面的辵彳亍 2020 指出了一个问题,即我在文件中为了显示圆圈数字,使用了 \pifont 宏包。

我一直以来学会的是 \pifont 这个宏包,请教大家还有哪些圈数的方法。

查看更多

关注者
0
被浏览
96
1 个回答
Sagittarius Rover
我要成为TikZ糕手/(ㄒoㄒ)/~~

添加圈圈的方法可以参考 @u19850 鱼香肉丝没有鱼先生 的文章

另外,每一个问题都应该是独立而且高度focus的,关于前面"师生两版"功能的使用,应该在前一个问题网页下面的评论或者回答补充。本问题更好的问法,是给出你使用pifont宏包添加带圈数字然后xelatex可以编译而xelatex -shell-escape不可以实现的具体实现例子。

关于 下划线与带圈数字:

% https://blog.ljguo.top/2024/06/textcircled-numbers
\documentclass[12pt]{ctexart}
\usepackage{zhnumber}
\usepackage{amsmath}
\usepackage[margin = 2cm]{geometry}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{pifont}
\usepackage{circledsteps}
\usepackage{circledtext}
\usepackage{zhlipsum}
\usepackage{soul}
\usepackage{xeCJKfntef}
\newcounter{method}
\setcounter{method}{0}
\newcommand{\method}{
    \stepcounter{method}
    \textbf{方法\zhnum{method}: }
}
\newcommand*\circled[1]{
    \tikz[baseline=(char.base)]{\node[circle, draw, inner sep=2pt] (char) {#1};}
}
\newcommand*\circleploygensix[1]{
        \tikz[baseline=(char.base)]{\node[regular polygon, regular polygon sides = 6, draw, inner sep=0pt, minimum size = 1.3em] (char) {#1};}
    }
\newcommand*\circleploygensixplus[1]{
    \tikz[baseline=(char.base)]{
        \node[inner xsep = 5.5pt, inner ysep = 0pt, minimum size = 1.3em] (char) {#1};
        \draw ([xshift = 4pt]char.north west) -- ([xshift = -4pt]char.north east) -- (char.east) -- ([xshift = -4pt]char.south east) -- ([xshift = 4pt]char.south west) -- (char.west) -- cycle;
        }
}
\def\newtextcircled#1{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt}{#1}}}}

\linespread{2.0}
\setlength{\parindent}{0pt}
\begin{document}

\method{使用\LaTeX{}自带的\verb|\textcircled|命令实现}

\textcircled{3} \quad \textcircled{5} \quad  \textcircled{7}

\textcircled{11} \quad \textcircled{15} \quad  \textcircled{27}

此时发现数字在垂直方向上并未居中, 下面可以尝试通过\verb|\raisebox|改进, 但是在处理多位数时仍不能实现较好的排版效果.

\method{使用\verb|\raisebox|改进\verb|\textcircled|命令}



\newtextcircled{3} \quad \newtextcircled{5} \quad  \newtextcircled{7}

\newtextcircled{11} \quad \newtextcircled{15} \quad  \newtextcircled{27}

\method{使用pifont宏包提供的\verb|\ding|命令实现}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 171+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 181+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 191+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 201+\x\relax},}

pifont宏包提供了\verb|\ding{number}|命令, 只需要填入一个数字就能得到对应的符号, 当number介于172-211时分别是不同样式的带圈数字. 不过也有一个明显的缺陷,两位数及以上的数字无法表示.并且里面的字体字形是固定的, 没有办法更换.

\method{使用tikz宏包自定义绘制}

\circled{3} \quad \circled{5} \quad  \circled{7}

\circled{11} \quad \circled{15} \quad  \circled{27}

\method{基于circledsteps宏包提供的\verb|\Circled|命令绘制}

\Circled{1} \quad \Circled[inner color = red]{2} \quad \Circled[outer color = green]{5} \quad \Circled[fill color = cyan]{9} \quad \Circled{12} \quad \Circled{123} \quad \Circled[inner xsep = 8pt]{12}


\method{基于circledtext宏包提供的\verb|\circletext|命令绘制}

\circledtextset{charf = \LARGE}
\foreach \x in {1,2,...,5,10,100}
{
    \circledtext{\x}\,
}

\foreach \x in {1,2,...,5,10,100}
{
    \circledtext[boxcolor=cyan,boxtype=ox,boxfill = red!20]{\x}\,
}

更进一步\verb|circledtext|宏包还实现了缩放字符的效果

\circledtext[boxtype=o]{甲}\quad
\circledtext[boxtype=o+]{乙}\quad
\circledtext[boxtype=ox]{丙}\quad
\circledtext[boxtype=ox+]{丁}\quad
\circledtext[boxtype=x+]{戊}

\circledtext[boxtype=O]{甲}\quad
\circledtext[boxtype=O+]{乙}\quad
\circledtext[boxtype=OX]{丙}\quad
\circledtext[boxtype=OX+]{丁}\quad
\circledtext[boxtype=X+]{戊}

\circledtextset{boxcolor=red}
\circledtext[boxtype=oo]{车}\quad
\circledtext[boxtype=Oo]{马}\quad
\circledtext[boxtype=OO]{炮}\quad
\circledtext*[boxtype=oo]{车}\quad
\circledtext*[boxtype=Oo]{马}\quad
\circledtext*[boxtype=OO]{炮}\quad

\method{更一般的需求,修改TIKZ方法实现}

\circleploygensix{1} \quad \circleploygensix{12} \quad \circleploygensix{123} \quad \circleploygensix{1234} \quad 

\circleploygensixplus{1} \quad \circleploygensixplus{12} \quad \circleploygensixplus{123} \quad \circleploygensixplus{1234} \quad

下面是一个补充: 加下划线的方法据我所知大致有两种。

对于纯英文,可以考虑使用\verb|soul|宏包提供的\verb|\ul|功能来实现.

This is some text here. \ul{This is \LaTeX{} which is elegant} There are \ul{some} text.

对于中文语境或者中英混合语境,可以考虑使用\verb|xeCJKfentf|提供的功能.

\CJKunderline{虚室\LaTeX{}生白,吉祥止止。} 虚室生白,吉\CJKunderline{祥止}止。这是一个\CJKunderline{中-English mixed 的}句子。

那么对于上面的带圈数字,在中英混合的case下的表现如何呢?

使用\verb|\textcircled|:我\CJKunderline{是English and \textcircled{3} 个中文}的例子example。

使用\verb|\newtextcircled|:我\CJKunderline{是English and \newtextcircled{8} 个中文}的例子example。

使用\verb|pifont|提供的\verb|\ding|命令:我\CJKunderline{是English and \ding{176} 个中文}的例子example。

使用\verb|\Circled|命令实现:我\CJKunderline{是English and \Circled{12} 以及(and) \Circled{123} 个中文}的例子example。

使用\verb|\circledtext|命令实现:我\CJKunderline{是English and \circledtext{12} 个中文}的例子example。

使用自己用TikZ定义的\verb|\circled|命令子:我\CJKunderline{是Eng \circled{2} lish \circleploygensix{55} 以及 \circleploygensixplus{123} and个中文}的例子example。

\end{document}

image.png

"谁主张,谁举证。"所有问题的处理都是case by case的,当遇到\LaTeX上的问题,最省事最有效的的处理方式就是给出MWE,同时也很方便潜在回答者的测试。

关于exam-zh下师生两版使用pifont宏包是否会报错,下面再补充。
我下面的代码例子顺利执行,请你给出可以体现你的问题的MWE!!!!

\documentclass{exam-zh}
\usepackage{pifont}
\usepackage{xeCJKfntef}
\usepackage{circledtext}
\examsetup{
  style/student-version-suffix=第二版,
  page/size=a4paper,
  paren/show-paren=true,
  paren/show-answer=false,
  fillin/show-answer=false,
}
\ExamPrintAnswerSet[
  \geometry{showframe}
]{
  paren/show-answer=true,
  fillin/show-answer=true,
}

\begin{document}

% 1.
\begin{question}[points = 2]
  设集合 $A = \{x \mid -2 < x < 4\}$,$B = \{2, 3, 4, 5\}$,则 $A \cap B = $ \paren[A]
  \begin{choices}
    \item $\{2\}$我喜\CJKunderline{欢pifont混\ding{172}合Eng}lish
    \item $\{2, 3\}$我喜欢pifont混\ding{172}合English
    \item $\{3, 4\}$我喜\CJKunderline{欢pifont混\ding{172}合Eng}lish
    \item $\{2, 3, 4\}$我喜欢pifont混\ding{172}合English
  \end{choices}
\end{question}

% 14.
\begin{question}
  已知 $O$ 为坐喜\CJKunderline{欢pifont混\circledtext{12}合Eng}lish为 $x$ 轴上一点,且 $PQ \perp OP$,若 $|FQ| = 6$,则 $C$ 的准线方程为 \fillin[$\dfrac{1}{3}$] 。
\end{question}

\end{document}

image.png

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览