雾月
雾月
这家伙很懒,什么也没写!

注册于 4年前

回答
223
文章
2
关注者
23

\documentclass{article}
\usepackage{pgfplots}
\begin{document}

\begin{tikzpicture}
\begin{axis}[axis lines=middle,
  unit vector ratio=1 1,
  enlarge x limits=0.1,
  ymax=1.9,ymin=-1.6,
  xlabel={$x$},ylabel={$y$},
  xlabel style={below},ylabel style={left},
  very thick, tick style={very thick,black},
  ytick={1},xtick={-2,2},
]
\addplot+[samples=201,mark=none,domain=-2:2] {(2*x^2-exp(abs(x))};
\node[below left] at (axis cs:0,0) {$O$};
\end{axis}
\end{tikzpicture}

\end{document}

image.png

mtpro2 是商业字体,TeXLive 中不包含 mtpro2,overleaf 自然也不会有。你需要将所有字体、宏包上传至你的目录中。

NotoSansMathRM 没有相应的虚拟字体(vf)。notosansmia 是与 notosansmi 对应的 upright 字体。

\documentclass{beamer}
\usefonttheme{professionalfonts}
\usepackage[T1]{fontenc}

\DeclareSymbolFont{letters}{OML}{notosansmi}{m}{it}
\DeclareSymbolFont{operators}{OT1}{NotoSans-TLF}{m}{n}

\DeclareFontFamily{OML}{notosansmia}{}
\DeclareFontShape{OML}{notosansmia}{m}{n}{<-> notosansmia}{}
\DeclareSymbolFont{upgrl}{OML}{notosansmia}{m}{n}
\DeclareMathSymbol{\upxi}{\mathord}{upgrl}{24}
\DeclareMathSymbol{\uppi}{\mathord}{upgrl}{25}

\begin{document}
\frame{
    \large
\[ \frac{n!}{\Big(\dfrac{n}{\mathrm e}\Big)^n\sqrt{2\uppi n}}
\sim {\mathrm e}^{\frac{1}{12+\upxi}}
\]
vs
\[ \frac{n!}{\Big(\dfrac{n}{\mathrm e}\Big)^n\sqrt{2\pi n}}
\sim {\mathrm e}^{\frac{1}{12+\xi}}
\]
}
\end{document}

image.png

另外,数学中常数一般用直立体(upright),这里 \xi 应该不是常数,不必用直立体。

设 c_i 为第 i 列的宽度,n 为列数,则
width = sum(i*c_i) + 2n*\tabcolsep
如果还有表格竖线,未加载 array 宏包时,表格竖线的宽度不予考虑。
如果加载了 array 宏包,则还要加上 vln*\arrayrulewidth,其中 vln 为竖线个数。
如果使用了双竖线(||),则还要加上 dvln*\doublerulesep,其中 dvln 为双竖线的个数。

几乎所有表格宏包都加载了 array 宏包,除了 tabularraytblr 表格的宽度不在讨论的范围之内。

\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{caption}

\begin{document}
\begin{table}[!htb]\small   
    \setlength{\tabcolsep}{8mm}
    \centering
    \renewcommand\arraystretch{1} 
    \caption{table}
    \begin{tabular}{p{3cm}<{\centering} p{3cm}<{\centering} p{3cm}<{\centering}}
        \toprule[1.5pt]
        parameter & unit & number\\
        \midrule[0.5pt]
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        \bottomrule[1.5pt]
    \end{tabular}
    \label{table}
\end{table}    

\setbox0=\hbox{%
    \setlength{\tabcolsep}{8mm}%
    \renewcommand\arraystretch{1}%
    \begin{tabular}{p{3cm}<{\centering} p{3cm}<{\centering} p{3cm}<{\centering}}
        \toprule[1.5pt]
        parameter & unit & number\\
        \midrule[0.5pt]
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        diameter &\unit{\mm} & 100  \\
        \bottomrule[1.5pt]
    \end{tabular}}
    
\noindent{\centering\copy0\par \vrule width \wd0 height 5pt\par}

\the\wd0 ~=
\the\dimexpr3cm+3cm+3cm+8mm+8mm+8mm+8mm+8mm+8mm\relax

\end{document}

image.png

\documentclass{article}
\usepackage[scheme=plain]{ctex}
\usepackage{pgfplots}
\usetikzlibrary{arrows.meta}
\tikzset{>={Stealth[scale=1.4]}}
\pgfplotsset{compat=latest, 
  sdt/.style={
  ymin=460, ymax=620,
  ytick distance=20,
  xmin=34, xmax=56,
  xtick={34,36,...,56},
  axis lines =left,
  tick align=inside,
  tick style={black,major tick length=3},
  tick label style={font=\footnotesize},
  enlarge y limits={upper, abs value=6mm},
  enlarge x limits={upper, abs value=10mm},
  font=\small,
  scatter/use mapped color={draw=black},
  xlabel={年宣传费/千元},ylabel={年销售量/t},
  xlabel style={at={(0.5,-0.06)},below,font=\kaishu\small},
  ylabel style={at={(-0.08,0.5)},font=\kaishu\small},
  every outer x axis line/.append style={->,red},
  every outer y axis line/.append style={->,red},
}}
\begin{document}
    \centering
    \begin{tikzpicture}
        \begin{axis}[sdt]
            \addplot[scatter,only marks] coordinates {%
(38,500) (40,540) (44,560) (46,570) (48,580) (50,590) (56,600)};
        \end{axis}
    \end{tikzpicture}

\end{document}

image.png

(1)、(2)

\documentclass{ctexart}
\usepackage{linegoal}

\makeatletter
\def\suppskip{\vskip\baselineskip \vskip-\f@size\p@\relax}
\makeatother

\begin{document}

第一段文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
文字文字文字

第二段\begin{minipage}[t]{\linegoal}
文字字文字文字文字文字文字文字文字文字文字文字文字文字文字文
字文字文字文字文字文字字文字文字文字文字文字文字文字文字文字
文字文字文字文字文字文字文字文字文字文字
\end{minipage}\suppskip

文字字文字文字文字字文字文字文字字文字文字文字字文字文字文字字文字文字
文字字文字文字文字字文字文字文字字文字文字文字字文字文字文字字文字文字

\end{document}

image.png

(3) 不能用这种方法。

更新:
缩放盒子到指定倍数,

% usepackage{amsmath,scalerel}
\makeatletter
\DeclareRobustCommand\zsqrt[2][]{%
 \setbox\zbox=\hbox{\ignoremathstyle
  \savebox\zbox{$#2\rule{0pt}{.45\baselineskip}$}%
  \@ifempty{#1}
    {\stretchrel*{\sqrt{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
    {\stretchrel*{\sqrt[#1]{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}%
  \kern-\wd\zbox \box\zbox}%
 \mathchoice{\copy\zbox}{\copy\zbox}
   {\scalebox{.7}{\copy\zbox}}{\scalebox{.5}{\box\zbox}}
}
\makeatother

即使使用 pdflatex 编译也会很慢:

$
\zsqrt[\uproot{3}5]{2+\zsqrt[4]{2+\zsqrt[3]{2+\zsqrt[2]{2}}}}
\log_{\zsqrt{2}} x 
\log_{\zsqrt[\uproot{3}5]{2+\zsqrt[4]{2+\zsqrt[3]{2+\zsqrt[2]{2}}}}} x
\log_{\sqrt2}
\zsqrt[3]{2}
$ 

image.png


第一个,上下标的问题,代码中使用了 \ignoremathstyle 即表示忽略上下标的样式(TeX 通过 \displaystyle(D)、\textstyle(T)、\scriptstyle(S)、\scriptscriptstyle(SS) 来控制上下标的样式),在多次嵌套使用时,这一般是必须的,因为如果考虑这些 style,TeX 会生成在不同 style 下的盒子,如果嵌套使用,TeX 将生成 4 的指数个盒子,编译会非常慢,这是写在 TeX 源码中的,无法在宏层面更改,只能避免(避免方式就是忽略 style,统一使用 T)。
如果要在上下标中使用,可以使用 \scalebox 缩放固定比例,TeX 中默认的数学字体比例为 T:S:SS = 10:7:5。

根指数的情况也是如此,如果使用根指数,则指数也会生成额外的盒子,但是也不难实现。

% usepackage...
\makeatletter
\DeclareRobustCommand\zsqrt[2][]{%
  \ignoremathstyle
  \savebox\zbox{$#2\rule{0pt}{.45\baselineskip}$}%
  \@ifempty{#1}
    {\stretchrel*{\sqrt{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
    {\stretchrel*{\sqrt[#1]{\phantom{#2}\kern0.5pt}}%
      {\rule[-\dimexpr\dp\zbox+\depthgrowth]{0pt}{%
        \dimexpr\ht\zbox+\dp\zbox+\depthgrowth+\heightgrowth}}}
  \kern-\wd\zbox#2%
}
\makeatother
$
\zsqrt{2+\zsqrt{2+\zsqrt{2+\zsqrt{2}}}} 
\log_{\scalebox{.7}{$\zsqrt{2}$}} x 
\log_{\sqrt2}
\zsqrt[3]{2}
$ 

image.png

\def\myleft #1#2\myright #3{\leftright{#1}{#2}{#3}}

就是使用 \myright 作为第二个参数的定界符,使用方式:

$ \myleft( \dfrac{2\pi}{ \dfrac{1}{3} } \myright) $

或者使用

\usepackage{xparse} % 必须
\NewDocumentCommand\myleft{ O{\displaystyle} m u{\myright} m}
  {\leftright[#1]{#2}{#3}{#4}}

以支持可选参数

\myleft[\textstyle] ( \dfrac{2\pi}{\dfrac{1}{3}} \myright)

当然对于方括号 [ 的情况就必须使用

\myleft{[} \dfrac{2\pi}{\dfrac{1}{3}} \myright]

否则,LaTeX 将会把 [ 视为可选参数的开始标志。

使用时,参数之间的空格是无关紧要的。

方法是构造一个对称的 wrapfigure,这一步必须在确定的位置手动实现。

\documentclass[twocolumn]{ctexart}
\usepackage{zhlipsum}

\usepackage{wrapfig2}

\begin{document}


\begin{wrapfigure}[18]{r}[\dimexpr 20mm+.5\columnsep\relax]{40mm}
\centering\unitlength=1mm
\begin{picture}(40,100)
\polygon(0,0)(40,0)(40,100)(0,100)
\Line(0,0)(40,100)\Line(0,100)(40,0)
\end{picture}
\end{wrapfigure}

\zhlipsum[1,4-8,12,13][name=zhufu]

% “18” 行,为了构造对称的 wrapfigure,这个参数必须和与之对称的那个 wrapfigure 相近,
\begin{wrapfigure}[18]{l}[\dimexpr 20mm+.5\columnsep\relax]{40mm}
\vfill
\end{wrapfigure}

\zhlipsum[2]


\end{document}

image.png

参考:http://tug.ctan.org/tex-archive/macros/latex/contrib/wrapfig/multiple-span.txt
https://tex.stackexchange.com/questions/53073
https://tex.stackexchange.com/questions/473478

第二个链接中还提到了 pullquote 宏包,它也能实现类似的效果,不过不能分页。
(CTAN 未收录 pullquote 宏包,需要自行编译。)

\documentclass{article}
\usepackage{ctex,zhlipsum}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{tikz}

\usepackage[nomicrotype,noimageshapes]{pullquote}

\begin{document}

\begin{pullquote}{object={\tikz\draw (0,0)--(4cm,12cm)--(4cm,0cm)--(0cm,12cm)--(0,0);},
  objvalign=top}
\zhlipsum[1-14][name=zhufu]
\end{pullquote}

\end{document}

image.png

另外,使用 tcolorbox 宏包的 magazineposter)库,只能实现类似于三栏的排版效果,而且也不能分页。

\documentclass{article}
\usepackage{ctex}
\usepackage[poster]{tcolorbox}

\usepackage{zhlipsum}
\usepackage[a4paper,margin=2cm]{geometry}

\begin{document}

\noindent
\begin{tcbposter}[poster={spacing=2mm,columns=3,rows=2},]
\begin{posterboxenv}[blankest]{name=pic,column=2,below=top}
\centering
\tikz\draw (0,0)--(4cm,12cm)--(4cm,0cm)--(0cm,12cm)--(0,0);
\end{posterboxenv}

\begin{posterboxenv}[blankest]{sequence=1 between top and bottom then
                              2 between pic and bottom then
                              3 between top and bottom}
\setlength\parindent{2\ccwd}
%
\zhlipsum[1-14][name=zhufu]
%
\end{posterboxenv}
\end{tcbposter}

\end{document}

image.png

更新:

我 fork 了一份,增加了简单的解析功能,https://github.com/Sophanatprime/Polynomial-division

\PolySet{a}{1,-12,0,-42}
\PolySet{b}{1,-3}
$ \PolyLongDiv{a}{b} $
\quad
\PolySet{a}{1,-4,6,-4}
\PolySet{b}{1,-2}
$ \PolyLongDiv{a}{b} $

\PolySet*{a}{x^3-12x^2-42}
\PolySet*{b}{x-3}
$ \PolyLongDiv{a}{b} $\quad
$ \PolyLongDiv*[stage=4]{x^3-12x^2-42}{x-3} $

$ \PolyLongDiv*{-4x^2+x^3+6x-4x^0}{-2+x} $\quad
$ \PolyLongDiv*[var=y]{y^3-3y^2+3y-1}{y-1} $

$ \PolyPrint*{-4x^2+x^3+6x-4x^0} $

\PolySet{p}{1,0,1,1}
\PolySet{q}{2,1}
\PolySet{r}{1,0,1,0}

$ \PolyLongDiv[base=3]{r}{q} \quad \PolyLongDiv[base=3]{p}{q} $

https://github.com/loopspace/Polynomial-division 的基础上,判断最高次系数是否为负,而不是将 \l__poly_uline_tl 直接修改:
image.png

\documentclass{article}
%\url{http://tex.stackexchange.com/q/79411/86}
%\RequirePackage{xparse,expl3}
\ExplSyntaxOn
\bool_new:N \l__poly_zeros_bool
\bool_new:N \l__poly_first_bool
\bool_new:N \l__poly_trailing_bool
\bool_new:N \l__poly_ptrailing_bool
\bool_new:N \l__poly_stage_bool
\bool_new:N \l__poly_mod_bool
\bool_set_true:N \l__poly_stage_bool
\tl_new:N \l__poly_var_tl
\tl_new:N \l__poly_sep_tl
\tl_new:N \l__poly_longdiv_sep_tl
\tl_new:N \l__poly_oline_tl
\tl_new:N \l__poly_uline_tl
\tl_new:N \l__poly_neguline_tl
\tl_set:Nn \l__poly_var_tl {x}
\tl_set:Nn \l__poly_sep_tl {}
\tl_set:Nn \l__poly_longdiv_sep_tl {}
\int_new:N \l__poly_deg_int
\int_new:N \l__poly_pad_int
\int_new:N \l__poly_base_int
\int_new:N \l__poly_tmpa_int
\int_new:N \l__poly_tmpb_int
\int_new:N \l__poly_mod_tmpa_int
\int_new:N \l__poly_mod_tmpb_int
\int_new:N \l__poly_mod_tmpc_int
\int_new:N \l__poly_mod_tmpd_int
\int_new:N \l__poly_trailing_int
\int_new:N \l__poly_stage_int
\int_new:N \l__poly_cstage_int
\int_set:Nn \l__poly_pad_int{3}
\seq_new:N \l__poly_gtmpa_seq
\seq_new:N \l__poly_mod_seq

\keys_define:nn { polynomial }
{
  stage .code:n = {
    \bool_set_false:N \l__poly_stage_bool
    \int_set:Nn \l__poly_stage_int {#1}
  },
  base .code:n = {
    \bool_set_true:N \l__poly_mod_bool
    \int_set:Nn \l__poly_base_int {#1}
    \cs_set_eq:NN \poly_int_div:Nnn \poly_mod_int_div:Nnn
  },
  zeros .bool_set:N = \l__poly_zeros_bool,
  separator .tl_set:N = \l__poly_sep_tl,
  variable .tl_set:N = \l__poly_var_tl,
  var .tl_set:N = \l__poly_var_tl,
%  trailing .bool_set:N = \l__poly_trailing_bool
}

\cs_new_nopar:Npn \poly_print:N #1 {
  \int_gset:Nn \l__poly_deg_int {\seq_count:N #1}
  \int_gdecr:N \l__poly_deg_int
  \int_gset:Nn \l__poly_tmpa_int {\l__poly_deg_int -
    \l__poly_trailing_int+1}
  \bool_gset_eq:NN \l__poly_ptrailing_bool \l__poly_trailing_bool
  \bool_gset_true:N \l__poly_first_bool
  \int_compare:nT {\l__poly_deg_int < \l__poly_pad_int} {
    \prg_replicate:nn {2*(\l__poly_pad_int -
      \l__poly_deg_int)}{\tl_use:N \l__poly_sep_tl}
  }
  \seq_map_inline:Nn #1 {
    \bool_if:nTF {\int_compare_p:n {##1 == 0} && \l__poly_first_bool}
    {
      \tl_use:N \l__poly_sep_tl
      \int_compare:nT {\l__poly_deg_int == 0}{0}
      \tl_use:N \l__poly_sep_tl
    }
    {
      \bool_if:nTF {\int_compare_p:n {##1 != 0} || \l__poly_zeros_bool}
      {
    \int_compare:nTF {##1 < 0} 
    {
          \bool_if:NF \l__poly_first_bool {
        \tl_use:N \l__poly_sep_tl
          }
          - \tl_use:N \l__poly_sep_tl
      \bool_if:nF {\int_compare_p:n {##1 == -1} && \int_compare_p:n {\l__poly_deg_int > 0}}
      {
        \int_eval:n {-##1}
      }
    }
    {
      \bool_if:NF \l__poly_first_bool {\tl_use:N \l__poly_sep_tl+} \tl_use:N \l__poly_sep_tl
      \bool_if:nF {\int_compare_p:n {##1 == 1} && \int_compare_p:n {\l__poly_deg_int > 0}}
      {
        ##1
      }
    }
    \int_compare:nT {\l__poly_deg_int > 0}
    {
      \tl_use:N \l__poly_var_tl
      \int_compare:nT {\l__poly_deg_int > 1} {^{\int_use:N \l__poly_deg_int}}
    }
      }
      {
    \tl_use:N \l__poly_sep_tl
    \tl_use:N \l__poly_sep_tl
      }
      \bool_gset_false:N \l__poly_first_bool
    }
    \int_gdecr:N \l__poly_deg_int
    \bool_if:nT {\l__poly_ptrailing_bool && \int_compare_p:n {\l__poly_deg_int < \l__poly_tmpa_int}} {
      \seq_map_break:
    }
  }
}
\cs_generate_variant:Nn \poly_print:N {c}

\cs_new_nopar:Npn \poly_reduce_mod:N #1 {
  \bool_if:NT \l__poly_mod_bool
  {
    \seq_clear_new:N \l__poly_mod_seq
    \int_step_inline:nnnn {1} {1} {\seq_count:N #1} {
      \seq_put_left:Nx \l__poly_mod_seq {\int_mod:nn {\int_mod:nn {\seq_item:Nn #1 { - ##1}+0} {\l__poly_base_int} + \l__poly_base_int}{\l__poly_base_int}}
    }
    \seq_set_eq:NN #1 \l__poly_mod_seq
  }
}

\cs_new_nopar:Npn \poly_add:NNN #1#2#3 {
  \seq_clear_new:N #1
  \int_step_inline:nnnn {1} {1} {\int_max:nn {\seq_count:N #2} {\seq_count:N #3}} {
    \seq_put_left:Nx #1 {\int_eval:n {\seq_item:Nn #2 { - ##1} + \seq_item:Nn #3 { - ##1}+0}}
  }
  \poly_reduce_mod:N #1
}
\cs_generate_variant:Nn \poly_add:NNN {Ncc,ccc}

\cs_new_nopar:Npn \poly_sub:NNN #1#2#3 {
  \seq_clear_new:N #1
  \int_step_inline:nnnn {1} {1} {\int_max:nn {\seq_count:N #2} {\seq_count:N #3}} {
    \seq_put_left:Nx #1 {\int_eval:n {\seq_item:Nn #2 { - ##1} - \seq_item:Nn #3 { - ##1}+0}}
  }
  \poly_reduce_mod:N #1
}
\cs_generate_variant:Nn \poly_sub:NNN {Ncc,ccc}
\cs_new_nopar:Npn \poly_shift:Nn #1#2 {
  \prg_replicate:nn {#2} {
    \seq_put_right:Nn #1 {0}
  }
}
\cs_new_nopar:Npn \poly_mul:NNN #1#2#3 {
  \seq_clear_new:N #1
  \group_begin:
  \seq_clear_new:N \l__poly_tmpa_seq    
  \seq_clear_new:N \l__poly_tmpb_seq    
  \seq_clear_new:N \l__poly_tmpc_seq    
  \int_set:Nn \l__poly_tmpa_int {\seq_count:N #2 - 1}
  \seq_map_inline:Nn #2 {
    \seq_clear:N \l__poly_tmpa_seq
    \seq_map_inline:Nn #3 {
      \seq_put_right:Nx \l__poly_tmpa_seq {\int_eval:n {##1 * ####1}}
    }
    \poly_shift:Nn \l__poly_tmpa_seq {\l__poly_tmpa_int}
    \poly_add:NNN \l__poly_tmpc_seq \l__poly_tmpb_seq \l__poly_tmpa_seq
    \seq_set_eq:NN \l__poly_tmpb_seq \l__poly_tmpc_seq
    \int_decr:N \l__poly_tmpa_int
  }
  \seq_gset_eq:NN \l__poly_gtmpa_seq \l__poly_tmpb_seq
  \group_end:
  \seq_set_eq:NN #1 \l__poly_gtmpa_seq
  \seq_clear:N \l__poly_gtmpa_seq
  \poly_reduce_mod:N #1
}
\cs_generate_variant:Nn \poly_mul:NNN {Ncc, ccc}

\cs_new_nopar:Npn \poly_int_div:Nnn #1#2#3
{
  \int_set:Nn #1 {#2 / #3}
}

\cs_new_nopar:Npn \poly_mod_int_div:Nnn #1#2#3
{
  \int_zero:N \l__poly_mod_tmpa_int
  \int_set_eq:NN \l__poly_mod_tmpb_int #2
  \int_set:Nn \l__poly_mod_tmpc_int { \l__poly_base_int - #3 }
  \bool_while_do:nn {
    \int_compare_p:n { \l__poly_mod_tmpa_int < \l__poly_base_int }
    &&
    \int_compare_p:n {\l__poly_mod_tmpb_int != 0 }
  }
  {
    \int_incr:N \l__poly_mod_tmpa_int
    \int_set:Nn \l__poly_mod_tmpb_int {
      \int_mod:nn { \l__poly_mod_tmpb_int + \l__poly_mod_tmpc_int }
      { \l__poly_base_int }
    }
  }
    
  \int_set_eq:NN #1 \l__poly_mod_tmpa_int
}

\cs_new_nopar:Npn \poly_div:NNN #1#2#3 {
  \seq_clear_new:N #1
  \poly_int_div:Nnn \l__poly_tmpa_int {\seq_item:Nn #2 {1} } { \seq_item:Nn #3 {1}}
  \seq_put_left:NV #1 \l__poly_tmpa_int
  \poly_shift:Nn #1 {\seq_count:N #2 - \seq_count:N #3}
  \poly_reduce_mod:N #1
}
\cs_generate_variant:Nn \poly_div:NNN {Ncc, ccc}
\prg_new_conditional:Npnn \poly_is_divisible:NN #1#2 {p,T,F,TF} {
  \int_compare:nTF {\seq_count:N #1 < \seq_count:N #2}
  {
    \prg_return_false:
  }
  {
    \prg_return_true:
  }
}
\cs_new_nopar:Npn \poly_trim:N #1 {
  \bool_do_while:nn {
    \int_compare_p:n {\seq_count:N #1 > 1}
    &&
    \int_compare_p:n {\seq_item:Nn #1 {1} == 0}
  } {
    \seq_pop_left:NN #1 \l_tmpa_tl
  }
}
\cs_new_nopar:Npn \poly_longdiv:NN #1#2 {
  \group_begin:
  \seq_clear_new:N \l__poly_quotient_seq
  \seq_clear_new:N \l__poly_remainder_seq
  \seq_clear_new:N \l__poly_factor_seq
  \seq_set_eq:NN \l__poly_remainder_seq #1
  \seq_clear_new:N \l__poly_lines_seq
  \int_zero:N \l__poly_cstage_int
  \bool_do_while:nn {
    \poly_is_divisible_p:NN \l__poly_remainder_seq #2
    &&
    (\l__poly_stage_bool || \int_compare_p:n {\l__poly_stage_int > \l__poly_cstage_int})
  }
  {
    \poly_div:NNN \l__poly_factor_seq \l__poly_remainder_seq #2
    \poly_add:NNN \l__poly_tmpa_seq \l__poly_factor_seq \l__poly_quotient_seq
    \seq_set_eq:NN \l__poly_quotient_seq \l__poly_tmpa_seq
    \poly_mul:NNN \l__poly_tmpa_seq \l__poly_factor_seq #2
    \seq_put_right:NV \l__poly_lines_seq \l__poly_tmpa_seq
    \int_incr:N \l__poly_cstage_int

    \bool_if:nT {\l__poly_stage_bool || \int_compare_p:n
      {\l__poly_stage_int > \l__poly_cstage_int}}
    {
      \poly_sub:NNN \l__poly_tmpb_seq \l__poly_remainder_seq \l__poly_tmpa_seq
      \seq_set_eq:NN \l__poly_remainder_seq \l__poly_tmpb_seq
      \poly_trim:N \l__poly_remainder_seq
      \seq_put_right:NV \l__poly_lines_seq \l__poly_remainder_seq
      \int_incr:N \l__poly_cstage_int
    }
  }

  \int_set:Nn \l__poly_pad_int {\seq_count:N #1 + \seq_count:N
    #2-1}
  \tl_set:Nn \l__poly_sep_tl {&}
  \tl_set:Nn \l__poly_longdiv_sep_tl {\cr}
  \bool_set_true:N \l__poly_zeros_bool
  \int_set:Nn \l__poly_tmpa_int {2*\seq_count:N #1+1}
  \tl_set:Nx \l__poly_oline_tl {\exp_not:N\multispan {\int_use:N \l__poly_tmpa_int}\exp_not:N\hrulefill\exp_not:N\cr}
  \tl_set:Nx \l__poly_uline_tl {\exp_not:N\multispan {\int_eval:n {2*\seq_count:N #2 -1}}\exp_not:N\hrulefill\exp_not:N\cr}
  \tl_set:Nx \l__poly_neguline_tl {\exp_not:N\multispan {\int_eval:n {2*\seq_count:N #2}}\exp_not:N\hrulefill\exp_not:N\cr}
  \int_set:Nn \l__poly_trailing_int {\seq_count:N #2}
  \leavevmode\vbox{\halign {  $##$&&$\>##$ \crcr
    &
    \bool_if:NTF \l__poly_stage_bool
    {
      \bool_set_false:N \l__poly_trailing_bool
    }
    {
      \bool_set_true:N \l__poly_trailing_bool
      \int_set:Nn \l__poly_trailing_int {\l__poly_stage_int/2}
    }
    \poly_print:N \l__poly_quotient_seq
    \tl_use:N \l__poly_longdiv_sep_tl
    \noalign{\vskip-\normalbaselineskip\vskip\jot}
    \prg_replicate:nn {2*\seq_count:N #2} {&}
    \tl_use:N \l__poly_oline_tl
    \int_set:Nn \l__poly_pad_int {0}
    \bool_set_true:N \l__poly_trailing_bool
    \poly_print:N #2
    &
    \smash{\!\Bigr)}
    &
    \int_set:Nn \l__poly_pad_int {0}
    \bool_set_false:N \l__poly_trailing_bool
    \poly_print:N #1
    \tl_use:N \l__poly_longdiv_sep_tl
    \int_gzero:N \l__poly_tmpb_int
    \seq_map_inline:Nn \l__poly_lines_seq {
      \tl_gset:Nn \l__poly_tmpa_seq {##1}
      \int_gincr:N \l__poly_tmpb_int
      &
      \bool_set_true:N \l__poly_trailing_bool
      \poly_print:N \l__poly_tmpa_seq
      \bool_if:nT {\int_compare_p:n
        {\int_mod:nn{\l__poly_tmpb_int}{2} == 1} &&
        \int_compare_p:n {
          \l__poly_tmpb_int < 2*(\seq_count:N #1 - \seq_count:N #2)
        }
        &&
        \int_compare_p:n {
          \l__poly_tmpb_int != \seq_count:N \l__poly_lines_seq
        }
      } {
        &&\hfill\downarrow\hfill
      }
      \tl_use:N \l__poly_longdiv_sep_tl
      \int_compare:nT {\int_mod:nn{\l__poly_tmpb_int}{2} == 1} {
        \noalign{\vskip-\normalbaselineskip\vskip\jot}
        \int_compare:nNnTF { \seq_item:Nn \l__poly_tmpa_seq 1 } < 0
          {
            \prg_replicate:nn {2*\seq_count:N #2 + \l__poly_tmpb_int } {&}
            \tl_use:N \l__poly_neguline_tl
          }
          {
            \prg_replicate:nn {2*\seq_count:N #2 + \l__poly_tmpb_int + 1} {&}
            \tl_use:N \l__poly_uline_tl
          }
      }
    }
    \cr
  }}
  \group_end:
}
\cs_generate_variant:Nn \poly_longdiv:NN {cc}
\NewDocumentCommand \PolyPrint { O{} m } {
  \group_begin:
  \keys_set:nn { polynomial }
  {
    #1
  }
  \poly_print:c {polynomial #2}
  \group_end:
}
\NewDocumentCommand \PolySet { m m } {
  \seq_set_from_clist:cn {polynomial #1} {#2}
}
\NewDocumentCommand \PolyLongDiv {O{} m m } {
  \group_begin:
  \keys_set:nn { polynomial }
  {
    #1
  }
  \poly_longdiv:cc {polynomial #2} {polynomial #3}
  \group_end:
}
\ExplSyntaxOff

\begin{document}

\PolySet{a}{1,-12,0,-42}
\PolySet{b}{1,-3}
\(\PolyLongDiv{a}{b}\)

\PolySet{a}{1,-4,6,-4}
\PolySet{b}{1,-2}
\(\PolyLongDiv{a}{b}\)

\end{document}

这个实现比较简易,想要完全兼容 caption 宏包不是那么容易,你可以试试新的 wrapfig2 宏包,它兼容 wrapfig 宏包的接口,并且兼容 caption 宏包,也提供了的一些新的东西。

先给出修改后的代码:

\makeatletter
\def\@subtitle{}
%% 下面两行一般是不用的
%\def\@title{}
%\newcommand*{\title}[1]{\gdef\@title{#1}} %定义主标题变量
\newcommand*{\subtitle}[1]{\gdef\@subtitle{\relax #1}} %定义副标题变量
\NewDocumentCommand{\PrintTitle}{mg}
  {%
    \IfNoValueTF {#2}
    {#1}%
    {#1 \\ \flushright ——#2}%
  }
\newcommand{\TITLE}
  {%
    \ifx\@subtitle\@empty
      \PrintTitle{\@title}\relax
    \else
      \PrintTitle{\@title}{\@subtitle}%
    \fi
  }
\makeatother

使用时

\title{主标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

image.png

或,

\title{主标题}
\subtitle{副标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

image.png

\title\subtitle 的作用是存储其参数到 \@title\@subtitle 中,\ifx\@subtitle\@empty 是检测 subtitle 是否为空。

TeX 不使用“重载”这一概念,甚至没有“函数”这一概念,TeX 是一门宏语言,与其它编程语言的工作方式并不相同。

完整示例:

\documentclass{ctexart}
%\usepackage{xparse}

\makeatletter
\def\@subtitle{}
%\newcommand\@title{}
%\newcommand*{\title}[1]{\gdef\@title{#1}} %定义主标题变量
\newcommand*{\subtitle}[1]{\gdef\@subtitle{\relax #1}} %定义副标题变量
\NewDocumentCommand{\PrintTitle}{mg}
  {%
    \IfNoValueTF {#2}
    {#1}%
    {#1 \\ \flushright ——#2}%
  }
\newcommand{\TITLE}
  {%
    \ifx\@subtitle\@empty
      \PrintTitle{\@title}\relax
    \else
      \PrintTitle{\@title}{\@subtitle}%
    \fi
  }
\makeatother

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%输出文本
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\title{主标题}
\subtitle{副标题}
\flushleft \zihao{-2} \heiti 题\quad 目:\TITLE \\

\end{document}

设置 \ctexset{chapter/fixskip=false}

目录名称可以通过 \ctexset{contentsname={...}} 修改,或者重定义 \contentsname,一般不必直接修改 \tableofcontents 命令。

另外,你给的这个问题的代码是不能直接编译的,文档类、\usepackage 部分没有给,最重要的是 \abs@chapter 的定义没有给。

  1. \fancypagestyle 只是定义样式,需要使用 \pagestyle 应用样式,\thispagestyle 只是在当前页面应用样式;
  2. 你可能根本就没编译成功,这行代码
\renewcommand\contentsname{\textbf{目\quad录}}

xeCJKluatex-ja 下一般是无法编译的,应该写成

\renewcommand\contentsname{\textbf{目\quad 录}}

空格是必不可少的。
这是因为在 xeCJKluatex-ja 下,中文字符的类别码被设置为了 letter。

另外,使用了 ctexart 文档类就不必再使用 \usepackage{ctex} 了,UTF8 在 2.5 版(2020 年 5 月起)成为默认选项,一般也不必显示指定。

\documentclass[a4paper,12pt]{ctexart}
\usepackage{fancyhdr}
\usepackage{zhlipsum}
%--目录页眉页脚
\fancypagestyle{mulu}
  {
    \fancyhf{}
    \fancyhead[c]{**硕士学位论文\quad 目录} 
    \fancyfoot[c]{\thepage}
    \renewcommand{\headrulewidth}{1.5pt}
    \renewcommand{\footrulewidth}{1.5pt}
  }
%-目录页眉页脚
\begin{document}

%-----目录部分
\clearpage
\pagestyle{mulu}%--调用上面定义的\fancypagestyle{mulu}
\renewcommand\contentsname{\textbf{目\quad 录}}
    \addcontentsline{toc}{section}{目录}
    \begin{center}
    \tableofcontents%增加章节目录...
\end{center}

\clearpage
\pagestyle{headings}

\section{sec 1}
\zhlipsum[1-3]
\section{sec 2}
\zhlipsum[4-7]
\end{document} 

image.png

使用 hyperref 宏包提供的 \texorpdfstring 命令:

\section{\texorpdfstring{$\varphi$}{φ}}

发布
问题