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

注册于 3年前

回答
184
文章
2
关注者
19

首先你需要打一个 patch:

\makeatletter
\protected\def\makeparacolrule#1{\def\@pcolmakeparacolrule##1##2{\hb@xt@##2{\hss#1\hss}}}
\makeparacolrule{\vrule\@height#1\@width#2} % 默认, #1:=height, #2:=width
\def\pcol@buildcolseprule#1#2#3#4{%
  \@tempdima#1\relax \dimen@#4\relax
  \let\pcol@bg@from#2\relax \let\pcol@bg@to#3\relax
  \setbox\pcol@tempboxa\vbox{}\setbox\@tempboxa\vbox{}%
  \let\@elt\pcol@buildcselt@S \pcol@sptextlist
  \@tempdimb\z@ \let\@elt\pcol@buildcselt \pcol@sptextlist
  \let\@elt\relax \advance\@tempdima-\@tempdimb
  \ifdim\@tempdima>\z@
    \setbox\pcol@tempboxa\vbox{\unvbox\pcol@tempboxa
      \nointerlineskip
      \vbox{\@pcolmakeparacolrule{\@tempdima}{\columnseprule}\vss}}%
    \setbox\@tempboxa\vbox{\unvbox\@tempboxa
      \let\@elt\relax
      \edef\pcol@bg@columntop{\number\@tempdimb sp}%
      \edef\pcol@bg@columnheight{%
        \@elt{\number\@tempdima sp}\@elt{\number\dimen@ sp}}%
      \pcol@bg@paintcolumns}%
  \fi}
\def\pcol@buildcselt#1#2{%
  \@tempdimc#1sp \advance\@tempdimc-\@tempdimb
  \setbox\pcol@tempboxa\vbox{\unvbox\pcol@tempboxa
    \ifdim\@tempdimc>\z@
      \nointerlineskip
      \vbox{\@pcolmakeparacolrule{\@tempdimc}{\columnseprule}\vss}%
    \fi
    \vskip#2sp}%
  \setbox\@tempboxa\vbox{\unvbox\@tempboxa
    \let\@elt\relax
    \edef\pcol@bg@columntop{\number\@tempdimb sp}%
    \edef\pcol@bg@columnheight{\@elt{\number\@tempdimc sp}}%
    \ifdim\@tempdimc>\z@ \pcol@bg@paintcolumns \fi
    \def\pcol@bg@spanningtop{\@elt{#1sp}}%
    \advance\@tempdima-#1sp\relax \advance\@tempdima-#2sp\relax
    \advance\dimen@\@tempdima
    \edef\pcol@bg@spanningheight{\@elt{#2sp}%
      \ifdim\@tempdima>\z@\else \@elt{\number\dimen@ sp}\fi}%
    \pcol@bg@paintbox{s}}%
  \@tempdimb#1sp \advance\@tempdimb#2sp\relax}
\makeatother

或者直接 patch:

\usepackage{etoolbox}
\makeatletter
\protected\def\makeparacolrule#1{\def\@pcolmakeparacolrule##1##2{\hb@xt@##2{\hss#1\hss}}}
\makeparacolrule{\vrule\@height#1\@width#2} % 默认, #1:=height, #2:=width
\patchcmd\pcol@buildcolseprule{\hrule\@height\@tempdima\@width\columnseprule}
  {\nointerlineskip\vbox{\@pcolmakeparacolrule{\@tempdima}{\columnseprule}\vss}}{}{\err}
\patchcmd\pcol@buildcselt{\hrule\@height\@tempdimc\@width\columnseprule}
  {\nointerlineskip\vbox{\@pcolmakeparacolrule{\@tempdimc}{\columnseprule}\vss}}{}{\err}
\makeatother

它是把原来划线的命令替换为 \@pcolmakeparacolrule,然后可以用 \makeparacolrule{...} 来画自己的命令。

\usepackage{tikz}
% #1:=height, #2:=width
\makeparacolrule{\tikz\draw[dashed,line width=#2](0pt,0pt)--(0pt,#1);}

image.png

完整代码:

\documentclass{ctexart}
\usepackage{zhlipsum}
\usepackage{paracol}
\setlength{\columnseprule}{0.7pt}
\columnratio{0.6}

\usepackage{etoolbox}
\makeatletter
\protected\def\makeparacolrule#1{\def\@pcolmakeparacolrule##1##2{\hb@xt@##2{\hss#1\hss}}}
\makeparacolrule{\vrule\@height#1\@width#2} % 默认, #1:=height, #2:=width
\patchcmd\pcol@buildcolseprule{\hrule\@height\@tempdima\@width\columnseprule}
  {\nointerlineskip\vbox{\@pcolmakeparacolrule{\@tempdima}{\columnseprule}\vss}}{}{\err}
\patchcmd\pcol@buildcselt{\hrule\@height\@tempdimc\@width\columnseprule}
  {\nointerlineskip\vbox{\@pcolmakeparacolrule{\@tempdimc}{\columnseprule}\vss}}{}{\err}
\makeatother

\usepackage{tikz}

\begin{document}

\makeparacolrule{\tikz\draw[dashed,line width=#2](0pt,0pt)--(0pt,#1);}

\begin{paracol}{2}
\zhlipsum[1]
\switchcolumn
\zhlipsum[2]
\end{paracol}
\end{document}

\tableofcontents 前加上 \pagestyle{headings} 即可。

改成这样:

...
%
%\frontmatter

\cleardoublepage
\pagestyle{headings}
%正文目录
\tableofcontents
%插图目录
\listoffigures
%表格目录
\listoftables
...

\ExplSyntaxOn
\cs_new_protected_nopar:Npn \autoCenterstack #1
  {
    \group_begin:
    \dim_zero:N \l_tmpa_dim
    \tl_clear:N \l_tmpa_tl
    \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
    \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
    \seq_map_inline:Nn \l_tmpa_seq
      {
        \hbox_set:Nn \l_tmpa_box {##1}
        \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
          { \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
        \tl_put_right:Nn \l_tmpa_tl { \makebox[\l_tmpa_dim][s]{##1} \\ }
      }
    \hbox_set:Nn \l_tmpa_box { \l_tmpb_tl }
    \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
      { \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
    \tl_put_right:Nx \l_tmpa_tl { \exp_not:N \makebox [\l_tmpa_dim] [s] { \exp_not:o \l_tmpb_tl } }
    \exp_args:No \Centerstack { \l_tmpa_tl }
    \group_end:
  }
\ExplSyntaxOff

基本思路是按 \\ 分割 tl,然后计算这些 tl 的构成的盒子的最大宽度,然后使用这个最大宽度。

如果要保留 \\ 前后的空格,将 \seq_set_split:Nnn 换成 \seq_set_split_keep_spaces:Nnn

\documentclass{ctexart}
\usepackage[usestackEOL]{stackengine}
\def\stacktype{L}
\strutlongstacks{T}
\begin{document}

\ExplSyntaxOn
\cs_new_protected_nopar:Npn \autoCenterstack #1
  {
    \group_begin:
    \dim_zero:N \l_tmpa_dim
    \tl_clear:N \l_tmpa_tl
    \seq_set_split:Nnn \l_tmpa_seq { \\ } { #1 }
    \seq_pop_right:NN \l_tmpa_seq \l_tmpb_tl
    \seq_map_inline:Nn \l_tmpa_seq
      {
        \hbox_set:Nn \l_tmpa_box {##1}
        \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
          { \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
        \tl_put_right:Nn \l_tmpa_tl { \makebox[\l_tmpa_dim][s]{##1} \\ }
      }
    \hbox_set:Nn \l_tmpa_box { \l_tmpb_tl }
    \dim_compare:nNnT { \box_wd:N \l_tmpa_box } > \l_tmpa_dim
      { \dim_set:Nn \l_tmpa_dim { \box_wd:N \l_tmpa_box } }
    \tl_put_right:Nx \l_tmpa_tl { \exp_not:N \makebox [\l_tmpa_dim] [s] { \exp_not:o \l_tmpb_tl } }
    \exp_args:No \Centerstack { \l_tmpa_tl }
    \group_end:
  }
\ExplSyntaxOff

{\Large
朋友!%
\autoCenterstack{诸葛八卦村\\ 地下长河\\ 芝堰水库}%
欢迎您去游览!
}

{\Large
朋友!%
\Centerstack{诸葛八卦村\\\makebox[5em][s]{地下长河}\\\makebox[5em][s]{芝堰水库}}%
欢迎您去游览!
}

\end{document}

image.png

这里再给出几种方法。

由于使用 \begin{<env>} 时,LaTeX 将会(在该命令执行的最末尾)展开 \csname <env>\endcsname
使用 \end{<env>},将会展开 \csname end<env>\endcsname,我们可以在 \<env> 中定义 \end<env>

\newcommand\weizi[2][c]{%
  \strcase{#1}
    {{c}{\def\endweizi{\end{minipage}\end{center}}%
         \begin{center}}
     {l}{\def\endweizi{\end{minipage}\end{flushleft}}%
         \begin{flushleft}}
     {r}{\def\endweizi{\end{minipage}\end{flushright}}%
         \begin{flushright}}}
     {}
     {\def\endweizi{\end{minipage}\end{center}}%
      \begin{center}}%
  \begin{minipage}{#2\textwidth}}

也就是根据相应的可选参数,定义对应的 \end<env>。这里的 \strcase 对应于 LaTeX3 的 \str_case_e:nnTF

% \strcase := LaTeX3 \str_case_e:nnTF
\expandafter\let\expandafter\strcase\csname str_case_e:nnTF\endcsname

使用方式为:

\begin{weizi}[c]{0.5}
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

这样的定义是可以嵌套使用的,因为每一对 \begin ... \end 都放在一个组中。

另一种方式涉及到 centerflushleftflushright 环境的实现。这三个环境都是使用 trivlist 环境实现的,它们的 \end<...> 都是 \endtrivlist。(具体细节可以在 source2e.pdf 中找到。)

因此实际上可以写得更加简单,不论 clr\endweizi 都可以定义为 \def\endweizi{\endminipage\endtrivlist}

包装成一个环境就是:

\newenvironment{weizi}[2][c]
  {\strcase{#1}
      {{c}{\center}
        {l}{\flushleft}
        {r}{\flushright}}
      {}
      {\center}
    \minipage{#2\textwidth}}
  {\endminipage\endtrivlist}

使用方式是完全相同的。

另一个就是使用 cmdxparse),我们可以方便的使用可选参数:

\DeclareDocumentEnvironment {weizi} { !D(){} !O{c} !D(){#1} }
  {\strcase{#2}
      {{c}{\center}
        {l}{\flushleft}
        {r}{\flushright}}
      {}
      {\center}
    \minipage{#3\textwidth}}
  {\endminipage\endtrivlist}

这样,

\begin{weizi}
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}(0.5)
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}[c]
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}[c](0.5)
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}(0.5)[c]
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

都是可以的。

汇总:

\documentclass{ctexart}

% \strcase := LaTeX3 \str_case_e:nnTF
\expandafter\let\expandafter\strcase\csname str_case_e:nnTF\endcsname

\begin{document}

\newenvironment{weizi}[2][c]
  {\strcase{#1}
      {{c}{\center}
        {l}{\flushleft}
        {r}{\flushright}}
      {}
      {\center}
    \minipage{#2\textwidth}}
  {\endminipage\endtrivlist}

\begin{weizi}[c]{0.5}
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\renewcommand\weizi[2][c]{%
  \strcase{#1}
    {{c}{\def\endweizi{\end{minipage}\end{center}}%
         \begin{center}}
     {l}{\def\endweizi{\end{minipage}\end{flushleft}}%
         \begin{flushleft}}
     {r}{\def\endweizi{\end{minipage}\end{flushright}}%
         \begin{flushright}}}
     {}
     {\def\endweizi{\end{minipage}\end{center}}%
      \begin{center}}%
  \begin{minipage}{#2\textwidth}}

\begin{weizi}[c]{0.5}
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}


\DeclareDocumentEnvironment {weizi} { !D(){} !O{c} !D(){#1} }
  {\strcase{#2}
      {{c}{\center}
        {l}{\flushleft}
        {r}{\flushright}}
      {}
      {\center}
    \minipage{#3\textwidth}}
  {\endminipage\endtrivlist}

\begin{weizi}
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}(0.5)
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}[c]
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}[c](0.5)
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\begin{weizi}(0.5)[c]
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
  文字文字文字文字文字文字文字文字文字文字文字文字文字文字文字
\end{weizi}

\end{document}

传统方式:

\documentclass{article}
\usepackage{ctex}
\usepackage{makecell}
\usepackage{float}
\usepackage{multirow}
\usepackage{booktabs}

\usepackage[margin=2cm]{geometry}
\usepackage{caption}
\begin{document}
\begin{table}[H]
\renewcommand\arraystretch{1.35}
\linespread{1.2}\selectfont
\centering
\caption{子女学业负担变量测量}
\label{table:academic_burden}
\begin{tabular}{p{2cm}<{\centering}|m{2cm}<{\centering}|m{5.5cm}<{\centering}|c|c}
\specialrule{0.08em}{0pt}{0pt}
变量 & 维度 & 题项 & 变量类型 & 赋值 \\
\hline
\multirow[b]{7}{2cm}[-1.2cm]{\centering 子女\\学业负担} & \multirow[b]{3}*[-.2cm]{学习时间} & 孩子平均每天完成学校布置的作业的时间为? & 连续型变量 & \\

\cline{3-5}
~ & ~ & 孩子平均每周参加补课的时间为?&连续型变量 & \\

\cline{3-5}
~ & ~ & 孩子平均每周完成课外辅导班(家教、家长)布置的作业的时间为? & 连续型变量 & \\
\cline{3-5}
~ & ~ & 孩子上学期间平均每天的睡眠总时间(包含午睡)为?& 连续型变量 & \\

\cline{2-5}
~ & \multirow[b]{3}*[-1.3cm]{学业压力} & 孩子在学习时对自身感到满足和喜悦的程度?& 多分类变量
& \makecell{1--程度很高 \\ 2--程度较高 \\ 3--程度一般 \\ 4--程度较低 \\ 5--程度很低 }\\

\cline{3-5}
~ & ~ & 学生在学习中感到焦虑、厌倦的程度?&    多分类变量    &\makecell{1--程度很低 \\ 2--程度较低 \\ 3--程度一般 \\ 4--程度较高 \\ 5--程度很高} \\

\cline{3-5}
~ & ~ & 学生在学习时出现对学习的抵触行为?&    多分类变量    &\makecell{1--很少 \\ 2--较少 \\ 3--一般 \\ 4--较多 \\ 5--很多} \\
\specialrule{0.08em}{0pt}{0pt}
\end{tabular}
\end{table}
\end{document}

image.png

使用 \intertext 即可。

但是这样的“点画线”并不是等长的。还需要使用 \makebox 制作一个定宽的。

\newcommand*\fixeddot{\hfill\makebox[4cm]{\dotfill}}

\documentclass[UTF8,11pt]{ctexart}
\usepackage{amsmath}
\def\fixeddotpoint#1{\hfill\allowbreak\hspace*{\fill}\makebox[4cm]{\dotfill #1}}
\begin{document}
    \begin{align*}
    & \lim_{x\rightarrow 0} \frac{f\left( e^{x^2} \right) -3f\left( 1+\sin ^2x \right)}{x^2}=\lim_{x\rightarrow 0} \frac{f\left( e^{x^2} \right) -f\left( 1 \right) +3f\left( 1 \right) -3f\left( 1+\sin ^2x \right)}{x^2}
    \\
    &=\lim_{x\rightarrow 0} \frac{f\left( e^{x^2} \right) -f\left( 1 \right)}{e^{x^2}-1}\frac{e^{x^2}-1}{x^2}-3\lim_{x\rightarrow 0} \frac{f\left( 1+\sin ^2x \right) -f\left( 1 \right)}{\sin ^2x}\frac{\sin ^2x}{x^2}  
\intertext{\fixeddotpoint{6分}}
    &=\lim_{x\rightarrow 0} \frac{f\left( e^{x^2} \right) -f\left( 1 \right)}{e^{x^2}-1}\lim_{x\rightarrow 0} \frac{e^{x^2}-1}{x^2}-3\lim_{x\rightarrow 0} \frac{f\left( 1+\sin ^2x \right) -f\left( 1 \right)}{\sin ^2x}\lim_{x\rightarrow 0} \frac{\sin ^2x}{x^2}
    \\
    &=f'\left( 1 \right) -3f'\left( 1 \right) =-2f'\left( 1 \right) 
    \end{align*}
    
    这是一个666的操作\fixeddotpoint{6分}
\end{document}

image.png

\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

发布
问题