远方不远
远方不远
Hello, LuaLaTeX!

注册于 2年前

回答
35
文章
0
关注者
0

\NewTColorBox 定义的 theobox 盒子和由 \NewDocumentEnvironment 定义的 theorem 环境,二者的参数格式是完全一致的,都是 o m +o

要把三个参数改为两个参数,并去除参数 #2 ,那么只需要把 theobox 盒子的定义中的 #2 全部改为固定文本 考点 ,然后把 #3 全部改为 #2 ;同时将 theorem 环境的定义中的 [#2] 删除,并将 #3 改为 #2 。最后将两个定义中的参数格式对应定义分别改为 o +o 即可。

然而此时还有可优化空间。修改后的 theorem 环境中定义的 #2 实际上是环境的主体,应当使用 +b ,需要将 [#2] 改为 #2 ,参数仍然为 2 个,这样一来,修改后的 theobox 盒子的定义中的 #2 的空值判断也就没有意义了,应当删除这行空值判断代码,所以参数被优化为仅有 1 个。

主要修改代码如下:

\NewTColorBox{theobox}{o}{%
  enhanced,
  frame empty,
  interior empty,
  coltitle                       = white,
  fonttitle                      = \bfseries,
  colbacktitle                   = mygreen,
  extras broken                  = {frame empty,interior empty},
  borderline                     = {0.25mm}{0mm}{mygreen},
  rounded corners,
  breakable                      = true,
  top                            = 4mm,
  before skip                    = 3.5mm,
  attach boxed title to top left = {yshift=-3mm,xshift=5mm},
  boxed title style              = {boxrule=0pt,sharp corners=all},varwidth boxed title,
  IfNoValueTF                    = {#1}{title=考点~\thetheorem.}{title=考点~\thetheorem\kern1em~#1}}

\NewDocumentEnvironment{theorem}{o +b}{%
  \refstepcounter{theorem}\begin{theobox}[#1]#2}{\end{theobox}}

代码测试:

\begin{theorem}[素质教育的内涵]
  \begin{enumerate}
    \item 素质教育以提高国民素质为根本宗旨。
    \item 素质教育是面向全体学生的教育。
    \item 素质教育是促进学生全面地、生动活泼地、可持续地发展的教育。
    \item 素质教育是促进学生个性发展的教育。
    \item 素质教育要着力提高学生的社会责任感、创新精神和实践能力。
  \end{enumerate}
\end{theorem}

效果图如下:

image.png

补充:调用本地字体的关键是:把『字体名』写对

\documentclass{article}
\usepackage[a6paper,margin=2cm,landscape]{geometry}
\usepackage[AutoFallBack]{xeCJK}
\setCJKmainfont{SimSun}
\newCJKfontfamily%
  {\puhui}%
  {Alibaba PuHuiTi 3.0}%                           family
  [FallBack={AlibabaPuHuiTi_3_55_Regular_L3}]%     postscriptname  
%  [FallBack={Alibaba PuHuiTi 3 55 Regular L3}]%   fullname  
%  [FallBack={AlibabaPuHuiTi-3-55-RegularL3.otf}]% file
\begin{document}          

  \huge “骨”和“盾”都是常用字。
  
  \puhui 而“𩩻”是生僻字。

\end{document}

image.png

没研究过tikz-qtree这个包,只测试了下原生的写法。或许有更好的实践。晚点再测试下。
Root

\documentclass[tikz,border=2pt]{standalone}
% \usepackage{tikz-qtree}
\begin{document}
\begin{tikzpicture}[grow=right,
                    growth parent anchor=east,
                    every node/.style={draw,
                                       inner sep=0pt, 
                                       outer sep=0pt},
                    level 1/.style={anchor=west,
                                    level distance=2cm,
                                    sibling distance=2cm},
                    level 2/.style={anchor=west,
                                    level distance=2cm,
                                    sibling distance=1cm},
                    edge from parent path={(\tikzparentnode.east) |- 
                                           (\tikzchildnode.west)}
]
    \node [anchor=east] {Root}
        child {node {A}
            child {node {a1}}
            child {node {a2}}}
        child {node {BBBB}
            child {node {b1}}
            child {node {b2}}};
    \draw [step=1cm,help lines] (0,-2) grid (6,2);
\end{tikzpicture}
\end{document}

从零开始定制一份“毕业(设计)论文LaTeX模板”,从宏观上说,你需要考虑的东西可能是:

  1. 该模板的用户是哪些人群?你所在的学校的每一个学院,对毕业(设计)论文的排版要求都是一样的吗?如果不一样,那么,在模板的哪些地方,需要留出一些灵活性?
  2. 该模板应该定制为一个文档类,还是定制为一个宏包?不同的顶层规划将产生不同的定制难度,并且二者的通用性也是不同的。
  3. 学院或学校是否接受使用LaTeX模板?
  4. ……

清楚了这些问题之后,你才能具体地开始模板的开发工作。为此,你可能需要一些必要的知识:

  1. 如何创建一个文档类或宏包?参考资料举例:report.clsclsguide.pdfclasses.pdf《LATEX2e文类和宏包学习手册》
  2. 该模板需要考虑设计哪些排版元素?哪些排版元素存在可以借鉴或直接使用的现成代码?哪些元素需要重新设计或全新设计?参考资料举例:lshort-zh-cn.pdfctex.pdf《LaTeX入门》xeCJK.pdfpgfmanual.pdffancyhdr.pdfgeometry.pdftitlesec.pdf,其他学校提供的官方或非官方模板。
  3. LaTeX新用户如何快速搭建模板的使用环境?是否需要编写一份模板的使用说明?是否需要编写一份配合毕业(设计)论文使用的答辩模板?参考资料举例:install-latex-guide-zh-cn.pdfbeameruserguide.pdf
  4. 一些“高级”的东西,例如:键值对,TeX的底层知识,e-TeX工具,L3语法。参考资料举例:TeXbook.pdfetoolbox.pdfinterface3.pdf
  5. ……

未完待续……

在下面这则article文档类的示例文档中,你将得到一个section条目从3开始编号的目录:

% mwe-article.tex
\documentclass{article}
\addtocounter{section}{2}
\begin{document}
\tableofcontents
\section{section one}   text one.
\section*{section two}  text two.
\section{section three} text three.
\end{document}

在下面这则beamer文档类的示例文档中,你将得到一个section条目从1开始编号的目录:

% mwe-beamer.tex
\documentclass{beamer}
\setbeamertemplate{section in toc}[sections numbered]
\addtocounter{section}{2}
\begin{document}
\frame{ \frametitle{\contentsname} \tableofcontents }
\section{section one}
\frame{ \frametitle{section one}   text one. }
\section*{section two}
\frame{ \frametitle{section two}   text two. }
\section{section three}
\frame{ \frametitle{section three} text three. }
\end{document}

尽管两份示例文档都在导言区使用\addtocounter{section}{2},但是预期效果只在artile文档类中实现,而在beamer文档类中没有实现。出现这种情况的原因是,虽然这两个文档类都定义了名字相同的\section命令及其星号版本,但这两个文档类对\section命令及其星号版本的定义方式不同。更具体地说,是两个文档类各自的\section命令及其星号版本对写入目录的要求不同。

beamer.cls中,有以下代码:

%% line 79 
\newcount\beamer@tocsectionnumber

其含义是,新分配一个名为\beamer@tocsectionnumber且缺省值为0count型寄存器count型寄存器能够储存一个数值的浮点数部分和整数部分。要对该寄存器赋值,可以使用<count型寄存器>=<数值>。要打印它的当前数值,可以使用\the<count型寄存器>。当浮点数部分不存在时,只会打印整数部分。在TeX中,可以使用\advance <count型寄存器> by <数值>,来使<count型寄存器>内部储存的数值加或减<数值>。通过这种方式,这类寄存器可以被用于计数,所以可以也可以叫它“计数器”。

现在,要找到beamer目录的section条目编号的具体症结,需要查看.toc文件:

% mwe-article.toc
\contentsline {section}{\numberline {3}section one}{1}{}%
\contentsline {section}{\numberline {4}section three}{1}{}%
% mwe-beamer.toc
\beamer@sectionintoc {3}{section one}{2}{0}{1}
\beamer@sectionintoc {5}{section three}{4}{0}{2}

mwe-article.toc中,第一则目录条目的构成是(见source2e.pdf\contentsline条目):

\contentsline 
    {<该标题的标题类型:section>}
    {\numberline {<该标题在正文中的计数器section的当前值:3>}<该标题的正文内容:section one>}
    {<该标题所在页面的计数器page的当前值:1>}
    {<该标题的超链接锚点:>}`%

mwe-beamer.toc中,第一则目录条目的构成是(见beamerbasesection.sty的代码行\addtocontents{toc}{\protect\beamer@sectionintoc{...}}中省略号处的内容):

\beamer@sectionintoc 
    {<该标题在正文中的计数器section的当前值:3>}
    {<该标题的正文内容:section one>}
    {<该标题所在的页面的计数器page的当前值:2>}
    {<该标题所在的部分的计数器part的当前值:0>}
    {<该标题在目录中的计数器\beamer@tocsectionnumber的当前值:1>}

从中可见,命令\section及其星号版本,在写入目录时,其在beamer文档类中的行为与在标准文档类中的行为不同。

mwe-article.toc中,写入目录的是该标题在正文中的计数器section的值,而在mwe-beamer.toc中,写入目录的是该标题在目录中的计数器\beamer@tocsectionnumber的值。也就是说,在beamer中,由\section命令及其星号版本给出的标题,其在正文中和目录中的编号采用的是不同的编号方法。

那么二者是否存在数值上的依赖关系?我的答案是:我没找到,所以我认为目前二者不存在数值依赖关系。

那么二者具有怎么样的关系?答案是:在beamer中,

  1. 默认情况下,计数器\beamer@tocsectionnumber只给由\section给出的标题从1开始编号——换言之,它是一个“纯粹”且全局连续的计数器。所以在mwe-beamer.toc中,我们看到的两个条目的第5个参数,是连续的从1开始的编号12——因为\addtocounter{section}{2}没有对计数器\beamer@tocsectionnumber产生影响,所以服从默认情况,从1开始编号;而“连续”是显然的,因为计数器\beamer@tocsectionnumber只给由\section给出的标题编号。
  2. 而计数器section既会给由\section给出的标题编号,也会给由\section*给出的标题编号——换言之,它是一个“不纯粹”且全局连续的计数器。由于\addtocounter{section}{2}对计数器section产生影响,所以从3开始编号。所以在mwe-beamer.toc中,我们看到的两个条目的第1个参数,是连续的从3开始的编号35——遇到\section*{section two}时,计数器section为其编号为4,但beamer默认不让由\section*给出的标题进入目录,所以\section*{section two}没有被写入.toc文件,不过本质上3,4,5是连续的。如果使\section*{section two}进入目录,我们将看到:
% (如果允许星号标题进入目录的)mwe-beamer.toc
\beamer@sectionintoc {3}{section one}{2}{0}{1}
\beamer@sectionintoc {4}{section two}{3}{0}{}%%这是我的预测和想象,不一定准确
\beamer@sectionintoc {5}{section three}{4}{0}{2}

最后,解决办法是:

% way 1:
\makeatletter
\beamer@tocsectionnumber=2\relax
\makeatother

% way 2:
\makeatletter
\advance\beamer@tocsectionnumber by 2\relax
\makeatother

...\texmf-dist\tex\latex\beamer\beamerbasesection.sty文件的第176行附近,似乎提供了beamer的section的相关定义。有如下表述:

\beamer@tocsectionnumber=0\relax

虽然不知道其含义,但是,只要将其放在导言区,并重新赋值,即可将第二份演示文稿的目录中的section的起始编号设置为问题所需。即,在导言区添加:

\makeatletter
\beamer@tocsectionnumber=2\relax
\makeatother

即可得到:
image.png

命令\circledtext{<arg>}中的<arg>可以是“普通”的未经处理的阿拉伯数字,也可以是经过处理的阿拉伯数字。
这样的话,就可以使用由\graphicx宏包提供的\scalebox{<h-scale>}[<v-scale>]{<arg>}命令作为命令\circledtext{<arg>}的参数——可能\scalebox命令是健壮的,所以无需保护而不报错。
总之,效果大概是这样:
image.png
image.png

\documentclass[tikz,border=2pt]{standalone}
\usepackage{ctex}
\usepackage{graphicx}
\usepackage{circledtext}
\begin{document}
\tikz{
    \foreach \x in {0,...,9} {
        \node 
            at (\x,0)
            [scale=2.75] 
            {\circledtext{\x}};
    }
    \foreach \x in {10,...,19} {
        \node 
            at (\x-10,1)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {20,...,29} {
        \node 
            at (\x-20,2)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {30,...,39} {
        \node 
            at (\x-30,3)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {40,...,49} {
        \node 
            at (\x-40,4)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {50,...,59} {
        \node 
            at (\x-50,5)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {60,...,69} {
        \node 
            at (\x-60,6)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {70,...,79} {
        \node 
            at (\x-70,7)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {80,...,89} {
        \node 
            at (\x-80,8)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
    \foreach \x in {90,...,99} {
        \node 
            at (\x-90,9)
            [scale=2.75] 
            {\circledtext{\scalebox{1.25}[2]{\x}}};
    }
}
\tikz{
        \foreach \x in {100,...,109} {
        \node 
            at (\x-100,10)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {110,...,119} {
        \node 
            at (\x-110,11)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {120,...,129} {
        \node 
            at (\x-120,12)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {130,...,139} {
        \node 
            at (\x-130,13)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {140,...,149} {
        \node 
            at (\x-140,14)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {150,...,159} {
        \node 
            at (\x-150,15)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {160,...,169} {
        \node 
            at (\x-160,16)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {170,...,179} {
        \node 
            at (\x-170,17)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {180,...,189} {
        \node 
            at (\x-180,18)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
    \foreach \x in {190,...,199} {
        \node 
            at (\x-190,19)
            [scale=2.75] 
            {\circledtext{\scalebox{1}[2]{\x}}};
    }
}
\end{document}

最懒惰的方法,当二维图画。
自己改一下

\documentclass[border=2pt, tikz]{standalone} 
\usetikzlibrary{calc}
\begin{document} 
\begin{tikzpicture}[scale=5]
    \coordinate (B) at (0,0);
    \coordinate (A) at ($(B)+(45:1)$);
    \coordinate (D) at ($(B)+(0:1.25)$);
    \coordinate (C) at ($(B)+(-20:1)$);
    \draw [thick] (B)--(A)--(D)--(C)--cycle (A)--(C);
    \coordinate (B') at ($(B)!.5!(A)$);
    \coordinate (C') at ($(A)!.45!(C)$);
    \coordinate (D') at ($(A)!.5!(D)$);
    \coordinate (F)  at ($(D)!.5!(C)$);
    \coordinate (E)  at ($(C)!.5!(B)$);
    \coordinate (G)  at ($(B)!.55!(D)$);
    \coordinate (M)  at ($(B')!.5!(F)$);
    \draw [dashed] (B)--(D) (B')--(F) (D')--(E);
    \foreach \x in {C',G,M} \fill (\x) circle (.25pt);
    \node at (A) [above] {$A$};
    \node at (B') [above left,inner sep=0pt] {$B'$};
    \foreach \x in {B,C'} \node at (\x) [left] {$\x$};
    \node at (E) [below left] {$E$};
    \node at (M) [left=.1cm] {$M$};
    \node at (D') [above right] {$D'$};
    \node at (D) [right] {$D$};
    \node at (F) [below right] {$F$};
    \foreach \x in {C,G} \node at (\x) [below] {$\x$};
\end{tikzpicture}
\end{document} 

凑个热闹
MWE中凡与此问题无关联的内容都应该酌情删改,否则可能影响潜在答题者的解答质量。
实际上,你的导言区只需要这几句代码:

% !TEX program = pdflatex
\documentclass[openany]{book}
\usepackage[many]{tcolorbox}
\usepackage{hyperref}

应该等你确实需要了,再往导言区加东西。例如,添加你的额外需求实现\Doubleref

% !TEX program = pdflatex
\documentclass[openany]{book}
\usepackage[many]{tcolorbox}
\usepackage{hyperref}
\NewDocumentCommand{\Doubleref}{m}{{\color{red}Definition \ref{#1} (\nameref{#1})}}

总之,做MWE时秉持越少越好原则,才能更方便地排查错误。
然后我也浅答一个,完全用tcolorbox实现的效果:
image.png
image.png
image.png
image.png
而要实现这个效果,只需如下定制即可:

\newtcbtheorem
    [number within=chapter]
    {definition}
    {Definition}
    {
        fonttitle=\bfseries\color{black},
        opacityback=0,
        left=.25em,
        right=.25em,
        top=.45ex,
        bottom=.45ex,
        before skip=2pt plus 2pt minus 1pt,
        after skip =6pt plus 2pt minus 4pt,
        arc=0pt,
        enhanced,
        breakable,
        boxrule=0pt,
        frame hidden,
        borderline south={1pt}{0mm}{black},
        borderline west ={1pt}{0mm}{black},
        borderline east ={1pt}{0mm}{black},
        attach boxed title to top left={
            yshift=-3mm,
            yshifttext=-1mm,
            xshift=3em 
        },
        overlay unbroken and first={
            \draw [line width=1pt] (title.west) -- ++(-3em+.5pt,0pt) -- ++(down:\baselineskip);
            \draw [line width=1pt] (title.east) -- ++( 3em,0pt);
        },
        overlay middle and last={},
        boxed title style={
            frame style   ={fill=none},
            interior style={fill=none},
            left=.25em,
            right=.25em,
            top=.45ex,
            bottom=.45ex
        }
    }
    {def}

其中参数的含义是:

\newtcbtheorem
    [<初始化选项>]            %上面用到了计数器关联,也可以在此处理cleveref兼容问题
    {<新环境的name>}          %用于\begin{}...\end{}的环境名
    {<用于展示的name>}        %用于排版结果中展示的环境名
    {<定制tcb的选项>}         %主要是操纵外观
    {<标签的前缀>}            %人为将标签分为前缀、分隔符(默认使用英文冒号)和主体

然后在正文区使用

\begin{<新环境的name>}{<定理的标题文本>}{<标签的主体>}
    ...
\end{<新环境的name>}

例如

\begin{definition}{GouGu}{gougu}
    ...
\end{definition}

即可创建一个基于定制tcolorbox的新定理。
然后在正文区其他地方使用

\Doubleref{<标签的前缀>:<标签的主体>}

例如

\Doubleref{def:gougu}

即可交叉引用。
如需兼容cleveref宏包,需注意导言区的代码顺序,且需要在\newtcbtheorem的可选参数[<初始化选项>]里增加,Crefname={Definition}{Definitions}。然后即可采用由cleveref宏包提供的交叉引用类型。


原题没有提出断页需求,因此未进行测试,代码已修改。原来使用的frame code app在不断页的条件下的确可以正常工作,但是当分页发生时,主盒子会被保存到一个寄存器中,所以原先的主盒子会消失,这将导致原先的盒子的追加代码失效。在tcb手册中对此问题有专门叙述,解决方案之一是分别定制盒子的前中后部分以及不可断页共四种类型的皮肤。完整代码在此。

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

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

image.png


(第一次更新被删除了)


(第二次更新)又测试了下,这样就可以了。核心包是etoolbox,主要用途是进行判断。因为全部使用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


第三次更新)稍微改造和拓展了下这个命令,第一,通常的命令\zheng[#1]只能绘制一个正字,但是有5种形态,以及可以使可选参数为空为0或不带方括号(这三种形态将什么也不做,并且取消掉原来输出U+6b63字符的效果,这是因为直接用输入法打出那个字更方便),而新的\zhengs[#1]可以指定正字的笔画数量,最大1024(当然是可以直接改成更大的笔画上限),还需要更多的话请用循环语句,第二,添加了一个粘连,这个值使用的是xeCJKCJKglue默认值,这样可以支持自动换行,像雾月老师那样可以把正字装在高高窄窄的盒子里,第三,就命令本身而言,使用了数值比较函数而不是字符串比较函数,减轻了命令的参数判断的严格程度,第四,核心包新增使用了expl3,但其实是内核的东西,算不上额外的包,这是我第一次接触L3,写的不好。
image.png
image.png

\documentclass[UTF8]{ctexart}
\usepackage[hscale=.8,papersize={18cm,12cm},showframe]{geometry}
\pagestyle{empty}
\setlength{\parindent}{0pt}
\newfontfamily{\XWWKen}{LXGW WenKai}
\usepackage{etoolbox}
\usepackage{xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\zheng}{ O{} }
{
    \ifstrempty{#1}
    {}
    {
        \ifnumequal{#1}{0}
        {}
        {
            \ifnumequal{#1}{1}
            {\symbol{"1D372}}
            {
                \ifnumequal{#1}{2}
                {\symbol{"1D373}}
                {
                    \ifnumequal{#1}{3}
                    {\symbol{"1D374}}
                    {
                        \ifnumequal{#1}{4}
                        {\symbol{"1D375}}
                        {
                            \ifnumequal{#1}{5}
                            {\symbol{"1D376}}
                            {
                                \message{zheng~command~Warning:~The~parameter~'#1'~was~too~large.
                                ~I~replaced~it~with~the~remainder~of~the~parameter~divided~by~5}%信息会显示在.log文件中 
                                \int_set:Nn \l_tmpa_int { \int_div_truncate:nn { #1 } { 5 } }%相除后向下取整,得到商 \l_tmpa_int
                                \int_set:Nn \l_tmpb_int { #1 - \l_tmpa_int * 5 }%参数除以5得到的余数 \l_tmpb_int
                                \ifnumequal{\l_tmpb_int}{0}%判断余数为几,然后输出对应的正字
                                {\zheng[5]}
                                {
                                    \ifnumequal{\l_tmpb_int}{1}
                                    {\zheng[1]}
                                    {
                                        \ifnumequal{\l_tmpb_int}{2}
                                        {\zheng[2]}
                                        {
                                            \ifnumequal{\l_tmpb_int}{3}
                                            {\zheng[3]}
                                            {
                                                \ifnumequal{\l_tmpb_int}{4}
                                                {\zheng[4]}
                                                {}
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
\NewDocumentCommand{\zhengs}{ O{} }
{
    \ifstrempty{#1}
    {}
    {
        \ifnumcomp{#1}{<}{1}
        {}
        {
            \ifnumcomp{#1}{<}{1025}
            {
                \int_set:Nn \l_tmpa_int { \int_div_truncate:nn { #1 } { 5 } }
                %相除后向下取整,得到应该重复使用\zheng[5]的次数 \l_tmpa_int
                \int_step_inline:nn { \l_tmpa_int } { \zheng[5] \hskip 0pt plus 0.08\baselineskip }
                %重复使用\zheng[5],总共 \l_tmpa_int 次,并插入一个粘连,使它可以自动换行
                \int_set:Nn \l_tmpb_int { #1 - \l_tmpa_int * 5 }%参数除以5得到的余数 \l_tmpb_int
                \ifnumequal{\l_tmpb_int}{0}%判断余数为几,然后输出对应的正字
                {\zheng[0]}
                {
                    \ifnumequal{\l_tmpb_int}{1}
                    {\zheng[1]}
                    {
                        \ifnumequal{\l_tmpb_int}{2}
                        {\zheng[2]}
                        {
                            \ifnumequal{\l_tmpb_int}{3}
                            {\zheng[3]}
                            {
                                \ifnumequal{\l_tmpb_int}{4}
                                {\zheng[4]}
                                {}
                            }
                        }
                    }
                }
            }
            {\GenericError{}{(zhengs~command)~Argument~'#1'~is~too~large.
             ~The~maximum~parameter~value~only~accepts~1024.}{}{}}
        }
    }
}
\ExplSyntaxOff 

\begin{document}

\newcounter{myline}
\newcommand{\myline}{\color{black}\stepcounter{myline}\themyline.\,}

\huge\XWWKen

\addtocounter{myline}{-4}\myline\color{red}\zheng\color{cyan}\zhengs

\myline\color{red}\zheng[]\color{cyan}\zhengs[]

\myline\color{red}\zheng[0]\color{cyan}\zhengs[0]

\addtocounter{myline}{1}\myline\color{red}\zheng[1]\color{cyan}\zhengs[1]

\myline\color{red}\zheng[2]\color{cyan}\zhengs[2]

\myline\color{red}\zheng[3]\color{cyan}\zhengs[3]

\myline\color{red}\zheng[4]\color{cyan}\zhengs[4]

\myline\color{red}\zheng[5]\color{cyan}\zhengs[5]

\myline\color{red}\zheng[6]\color{cyan}\zhengs[6]

\myline\color{red}\zheng[7]\color{cyan}\zhengs[7]

\myline\color{red}\zheng[8]\color{cyan}\zhengs[8]

\myline\color{red}\zheng[9]\color{cyan}\zhengs[9]

\myline\color{red}\zheng[10]\color{cyan}\zhengs[10]

\myline\color{red}\zheng[11]\color{cyan}\zhengs[11]

\myline\color{red}\zheng[12]\color{cyan}\zhengs[12]

\addtocounter{myline}{1011}\myline\color{red}\zheng[1024]\color{cyan}\zhengs[1024]

\myline\color{red}\zheng[1025]%\color{cyan}\zhengs[1025]

\end{document}

因为你输入的是英文的括号,所以tex就给你排版英文括号
image.png
而作为英文字符,使用的是times new roman字体
image.png

哪儿错了?
关于编译TeX源文档这种入门级问题,请阅读lshort.
9bc32b9ce078c7c2c4b5dcef0f3e356f.png

发布
问题