模板为什么放在texworks上能被编译,在texstudio上就不行

发布于 2024-12-19 19:50:43
关注者
0
被浏览
223
Sagittarius Rover
我要成为TikZ糕手/(ㄒoㄒ)/~~

请提供模板链接或者压缩包文件,同时建议你检查TeXStudio的配置,是否使用了正确的编译命令。

下面的问题都将基于该链接下载的压缩文件。

解压之可以得到一份117行的template_exam_A_utf8.tex文件

%
% 说明:使用 xelatex 编译,在 texlive 2017 中编译通过
%
\documentclass[UTF8]{ctexart}
\usepackage[a4paper,top=2.0cm,bottom=2.5cm,left=2.8cm,right=2.8cm,%
            includehead,includefoot]{geometry}
\usepackage{amsmath,amssymb,amsfonts,bm}
\usepackage{graphicx,xcolor}
\usepackage[xetex,colorlinks,linkcolor=blue]{hyperref}
\usepackage{makecell,interfaces-makecell}
\usepackage{calc}
\renewcommand{\baselinestretch}{1.3}

%%%%% ===== 自定义命令 ===========================================================
\newcommand{\ul}[1]{\underline{\makebox[#1]{}}}
\newcommand{\ull}[2]{\underline{\makebox[#1]{\kaishu #2}}}
\newcommand{\ulaa}[1]{\underline{\makebox[3em]{\Large\textcircled{\normalsize #1}}}}
\newcommand{\dis}{\displaystyle}

\pagestyle{plain}

\begin{document}
\zihao{-4} % 小四号字体

%%%%% ===== 试卷头 ===============================================================
\begin{center}
{\heiti\LARGE 华东师范大学期末试卷 (A)} \bigskip

$20xx-20xx$ 学年第 X 学期

\bigskip\bigskip

%%%%% ===== 课程信息,包括课程名,课程性质等
\setlength{\tabcolsep}{1mm}
\renewcommand{\arraystretch}{1.4}
\begin{tabular}{p{7.5cm}p{6.5cm}}
  课程名称:\ull{4.0cm}{\zihao{4} 数~值~分~析} & \\
  学生姓名:\ul{4.0cm}          &
  学\hspace{10.5mm}号:\ul{4.0cm} \\
  专\hspace{2em}业:\ull{4.0cm}{数学与应用数学}  &
  年级/班级:\ull{4.0cm}{20xx级} \\
  课程性质:\ {\kaishu 专业X修} \\
\end{tabular}\smallskip

%%%%% ===== 得分表,其中 numexer 表示题号个数,这里设为 8,可根据实际需要修改,其他可以不用修改。
\newcounter{numexer}\setcounter{numexer}{8} % 题号个数,这里为 8
\newcounter{numcol}\setcounter{numcol}{\value{numexer}+2}
\newlength{\cellwidth}\setlength{\cellwidth}{\textwidth*\ratio{0.6pt}{\value{numexer} pt}}
\begin{tabular}{|*{\thenumcol}{c|}} \hline
  \repeatcell{\thenumexer}{rows=1,text=\makebox[\cellwidth]{\zhnumber{\column}}}
   & \makebox[0.12\textwidth]{总分} &\makebox[0.16\textwidth]{阅卷人签名} \\ \hline
  \repeatcell{\thenumcol}{rows=1,end=\\ \hline} \\ \hline
\end{tabular}
\end{center}

\medskip
\noindent\dotfill
\medskip

\linespread{1.5}\selectfont
\noindent{\heiti 一、填充题} (每空 2 分,共 24 分)

\newcounter{forlist}
\begin{list}{\arabic{forlist}.}
            {\setlength{\topsep}{2mm}
             \setlength{\listparindent}{0pt}
             \setlength{\labelsep}{5pt}
             \setlength{\itemsep}{0.8em}
             \setlength{\parsep}{5pt}
             \usecounter{forlist}}

\item
十进制数与二进制数的转换: $(123)_{10}= (\ulaa{1})_2$,
$(110)_2 = (\ulaa{2})_{10}$。

\item
十进制数与二进制数的转换: $(123)_{10}= (\ulaa{3})_2$,
$(110)_2 = (\ulaa{4})_{10}$。

\item
十进制数与二进制数的转换: $(123)_{10}= (\ulaa{5})_2$,
$(110)_2 = (\ulaa{6})_{10}$。


\end{list}


\newpage
\linespread{1.3}\selectfont

\begin{list}{\heiti\Chinese{forlist}、}
            {\setlength{\topsep}{1mm}
             \setlength{\listparindent}{0pt}
             \setlength{\itemsep}{2em}
             \setlength{\labelsep}{0pt}
             \usecounter{forlist}
             \setcounter{forlist}{1}}

\item (15 分) % ========================================================
设 $x_0,x_1,\ldots,x_n$ 为互异节点,求证: \\[1ex]
(1)$\dis\sum\limits_{j=0}^n x_j^k l_j(x) \equiv x^k $\quad ($k=0,1,\ldots,n$); \\
(2)$\dis\sum\limits_{j=0}^n (x_j-x)^k l_j(x) \equiv 0$\quad ($k=0,1,\ldots,n$)。

\item (15 分) % ========================================================
设 $x_0,x_1,\ldots,x_n$ 为互异节点,求证: \\[1ex]
(1)$\dis\sum\limits_{j=0}^n x_j^k l_j(x) \equiv x^k $\quad ($k=0,1,\ldots,n$); \\
(2)$\dis\sum\limits_{j=0}^n (x_j-x)^k l_j(x) \equiv 0$\quad ($k=0,1,\ldots,n$)。

\item (15 分) % ========================================================
设 $x_0,x_1,\ldots,x_n$ 为互异节点,求证: \\[1ex]
(1)$\dis\sum\limits_{j=0}^n x_j^k l_j(x) \equiv x^k $\quad ($k=0,1,\ldots,n$); \\
(2)$\dis\sum\limits_{j=0}^n (x_j-x)^k l_j(x) \equiv 0$\quad ($k=0,1,\ldots,n$)。


\end{list}

\end{document}

按照文档说明: 使用xelatexTeXLive2017下可以顺利编译。但当我们用TeXLive2024在命令行下用xelatex编译时却会发现得到如下错误,无法编译成功:

! Package etoolbox Error: \scr@load@hook undefined.

See the etoolbox package documentation for explanation.
Type  H <return>  for immediate help.
 ...

l.55 \renewrobustcmd*\scr@load@hook
                                   [2]{%
?

通过反向检索该错误,我们不难发现这是因为interfaces-makecell宏包因为过期在TeXLive2021中已经正式弃用,这导致了下面的代码中的\repeatcell失效:

\begin{tabular}{|*{\thenumcol}{c|}} \hline
  \repeatcell{\thenumexer}{rows=1,text=\makebox[\cellwidth]{\zhnumber{\column}}}
   & \makebox[0.12\textwidth]{总分} &\makebox[0.16\textwidth]{阅卷人签名} \\ \hline
  \repeatcell{\thenumcol}{rows=1,end=\\ \hline} \\ \hline
\end{tabular}

参考了以下两个链接:
https://tex.stackexchange.com/questions/625226/alternative-to-repeatcell-from-the-interfaces-package-since-texlive-2021
https://tex.stackexchange.com/questions/297919/create-tabular-depending-on-counter

我简单封装了一个命令\scorebox用于绘制得分框(不建议题号数量过大)

\ExplSyntaxOn
\NewDocumentCommand{\scorebox}{m}
 {
  \newcounter{numexer}\setcounter{numexer}{#1}
  \newcounter{numcol}\setcounter{numcol}{\value{numexer}+2}
  \dim_new:N \cellwidth
  \fp_set:Nn \l_tmpa_fp { .6 * \textwidth / \value{numexer} }
  \dim_set:Nn \cellwidth { \fp_to_dim:N \l_tmpa_fp }
    \begin{tabular}{|*{\int_eval:n { #1 + 2 }}{c|}} \hline
    \int_zero:N \g_tmpa_int
    \prg_replicate:nn { #1 } {%
    \int_gincr:N \g_tmpa_int \makebox[\cellwidth]{\zhnumber{\int_to_arabic:n { \g_tmpa_int }}} & } \makebox[.12\textwidth]{总分} & \makebox[.16\textwidth]{阅卷人签名}\\
    \hline
    \prg_replicate:nn { \int_eval:n { #1 + 1 } } {&}\\
    \hline
  \end{tabular}
}
\ExplSyntaxOff

至此..在TeXLive2024下可以编译...

\documentclass[UTF8]{ctexart}
\usepackage[a4paper,top=2.0cm,bottom=2.5cm,left=2.8cm,right=2.8cm,includehead,includefoot]{geometry}
\usepackage{amsmath,amssymb,amsfonts,bm}
\usepackage{graphicx,xcolor}
\usepackage[xetex,colorlinks,linkcolor=blue]{hyperref}
\usepackage{makecell}
% \usepackage{interfaces-makecell}
\usepackage{calc}
\renewcommand{\baselinestretch}{1.3}

%%%%% ===== 自定义命令 ===========================================================
\newcommand{\ul}[1]{\underline{\makebox[#1]{}}}
\newcommand{\ull}[2]{\underline{\makebox[#1]{\kaishu #2}}}
\newcommand{\ulaa}[1]{\underline{\makebox[3em]{\Large\textcircled{\normalsize #1}}}}
\newcommand{\dis}{\displaystyle}

% https://tex.stackexchange.com/questions/625226/alternative-to-repeatcell-from-the-interfaces-package-since-texlive-2021
% https://tex.stackexchange.com/questions/297919/create-tabular-depending-on-counter

\ExplSyntaxOn
\NewDocumentCommand{\scorebox}{m}
 {
  \newcounter{numexer}\setcounter{numexer}{#1}
  \newcounter{numcol}\setcounter{numcol}{\value{numexer}+2}
  \dim_new:N \cellwidth
  \fp_set:Nn \l_tmpa_fp { .6 * \textwidth / \value{numexer} }
  \dim_set:Nn \cellwidth { \fp_to_dim:N \l_tmpa_fp }
    \begin{tabular}{|*{\int_eval:n { #1 + 2 }}{c|}} \hline
    \int_zero:N \g_tmpa_int
    \prg_replicate:nn { #1 } {%
    \int_gincr:N \g_tmpa_int \makebox[\cellwidth]{\zhnumber{\int_to_arabic:n { \g_tmpa_int }}} & } \makebox[.12\textwidth]{总分} & \makebox[.16\textwidth]{阅卷人签名}\\
    \hline
    \prg_replicate:nn { \int_eval:n { #1 + 1 } } {&}\\
    \hline
  \end{tabular}
}
\ExplSyntaxOff

\pagestyle{plain}

\begin{document}
\zihao{-4} % 小四号字体

%%%%% ===== 试卷头 ===============================================================
\begin{center}
{\heiti\LARGE 华东师范大学期末试卷 (A)} \bigskip

$20xx-20xx$ 学年第 X 学期

\bigskip\bigskip

%%%%% ===== 课程信息,包括课程名,课程性质等
\setlength{\tabcolsep}{1mm}
\renewcommand{\arraystretch}{1.4}
\begin{tabular}{p{7.5cm}p{6.5cm}}
  课程名称:\ull{4.0cm}{\zihao{4} 数~值~分~析} & \\
  学生姓名:\ul{4.0cm}          &
  学\hspace{10.5mm}号:\ul{4.0cm} \\
  专\hspace{2em}业:\ull{4.0cm}{数学与应用数学}  &
  年级/班级:\ull{4.0cm}{20xx级} \\
  课程性质:\ {\kaishu 专业X修} \\
\end{tabular}\smallskip

%%%%% ===== 得分表,其中 numexer 表示题号个数,这里设为 8,可根据实际需要修改,其他可以不用修改。
% \newcounter{numexer}\setcounter{numexer}{8} % 题号个数,这里为 8
% \newcounter{numcol}\setcounter{numcol}{\value{numexer}+2}
% \newlength{\cellwidth}\setlength{\cellwidth}{\textwidth*\ratio{0.6pt}{\value{numexer} pt}}
% \begin{tabular}{|*{\thenumcol}{c|}} \hline
%   \repeatcell{\thenumexer}{rows=1,text=\makebox[\cellwidth]{\zhnumber{\column}}}
%    & \makebox[0.12\textwidth]{总分} &\makebox[0.16\textwidth]{阅卷人签名} \\ \hline
%   \repeatcell{\thenumcol}{rows=1,end=\\ \hline} \\ \hline
% \end{tabular}

%%%%%%%%%%%%%
\scorebox{8}
%%%%%%%%%%%%%

\end{center}

\medskip
\noindent\dotfill
\medskip
%%% The rest of the exercise...

image.png

2 个回答
六石磊磊
六石磊磊 6天前
这家伙很懒,什么也没写!

撰写答案

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

发布
问题

分享
好友

手机
浏览

扫码手机浏览