芒果不盲
芒果不盲
学好TiKZ和tcolorbox!

注册于 3年前

回答
51
文章
1
关注者
2

函数拟合,不太好想

Bézier 凑合凑合

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
  \begin{tikzpicture}
    \draw[-latex] (-2,0) -- (2,0)node[right]{$x$};
    \draw[-latex] (0,-1.8) -- (0,1.8)node[above]{$y$};
    \draw[rounded corners] (0,0) ..controls (0.19,0.2) .. (0.4,1) ..controls(1.13,0.58).. (1.7,0)node[below]{$\pi$};
    \draw[rounded corners] (0,0) ..controls (-0.19,0.2) .. (-0.4,1) ..controls(-1.13,0.58).. (-1.7,0)node[below]{$-\pi$};
  \end{tikzpicture}
\end{document}

1.png

分开关都做好了不会做总开关,加一个不就可以了吗

\documentclass{ctexart}
\usepackage{xparse}
\newif\ifprint
\newcommand{\tk}[1]{\underline{
\ifprint
#1
\else
\hspace*{5em}
\fi}}
\newif\ifzhengming
\NewDocumentEnvironment{zhengming}{ +b }{
\ifzhengming
\par
{\bfseries 证明}\, #1
\else
{\vspace{3cm}}
\fi
}{\par}

\newif\ifshowanswer
\showanswertrue %看这里
\ifshowanswer
\printtrue
\zhengmingtrue
\else
\printfalse
\zhengmingfalse
\fi 
\begin{document}

填空题\tk{答案}

解答题
\begin{zhengming}
这是证明
\end{zhengming}

\end{document}

  • 很抱歉,我不熟悉 xkeyval 包的使用方法,短时间内我不愿意花时间去阅读这个包
  • 我将以 l3keys 为您演示,给您提供另一个方案

testclass.cls

\ProvidesClass{testclass}
\NeedsTeXFormat{LaTeX2e}

\RequirePackage{l3keys2e}
\ExplSyntaxOn
%定义 keyval,第一个参数为模块名,第二个参数为所要设置的 keyval 列表
\keys_define:nn{family} 
{
  name.tl_set:N = \l_name_tl,
  age.int_set:N = \l_age_int,
}


\def\myname{\textbf{\tl_use:N \l_name_tl}}
\def\myage{\textbf{\int_use:N \l_age_int}} 
% 设置默认值
\keys_set:nn{family}
{
  name = ljguo,
  age  = 21,
}
\ExplSyntaxOff
% 传递 family 模块的 keyval list 给 class
\ProcessKeysOptions{family}
\LoadClass{ctexbook}

main.tex

\documentclass{testclass}
\begin{document}
my name is \myname, and i am \myage ~years old.
\end{document}

这将得到:
2.png

\documentclass[name = zhangsan,age = 81]{testclass}
\begin{document}
my name is \myname, and i am \myage ~years old.
\end{document}

这将得到:
1.png

  • 请使用 texdoc interface3 了解更详细的用法

  • 提供最小工作示例,删除无关代码最好
  • 学会使用代码块
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
    \draw[red,-latex] (-2.5*pi,0) -- (2.5*pi,0);
    \draw[red,-latex] (0,-1) -- (0,2);
    \draw[blue,domain = -2*pi:2*pi] plot[samples = 1000] (\x,{abs(sin(\x r))}); 
\end{tikzpicture}
\end{document}

1.png

这字体太多了~

唉~你的文件进出我的回收站三次了,还是帮帮你吧,谁让你 ,而我正好 不盲

  • 首先,加图片是肯定可以的,但是我不知道你要加在什么地方
  • 我用 minipage 随便加了些,你参考一下吧
\begin{minipage}{0.5\textwidth}
    \begin{educations}
    \education%
    {2013.09}%
    [2019.09]%
    {上海交通大学}%
    {物理与天文学院}%
    {物理学}%
    {博士}

  \separator{0.5ex}
  \education%
    {2009.09}%
    [2013.06]%
    {上海交通大学}%
    {物理与天文系}%
    {应用物理学}%
    {学士}  
   \end{educations} 
\end{minipage}
\begin{minipage}{0.5\textwidth}
  \centering
  \includegraphics[width = 0.4\textwidth]{example-image-b}
\end{minipage}

效果如下
1.png

  • 只需要为 node 加上 align = <center|left|right> 参数, 然后在内容中使用 \\即可
\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
    这是一句这也是一句话这也是一句话\tikzmarknode{a}{话}
    
    \bigskip
    这也是一句话这也是一句话这也是一句话这也是一句话这也是\tikzmarknode{b}{一句话}
    
    \begin{tikzpicture}[overlay,remember picture,cyan]
        \draw ([xshift=1em] a -| b.east) -- ++ (1em,0) 
        |- ([xshift=1em] b.east) coordinate[pos=0.25] (c);
        \draw[->]  (c) -- ++ (1em,0) node[right,align = left] {我要归纳一下这\\两句话的主要内容};
    \end{tikzpicture}
\end{document}

1.png

  • 你也可以使用 text width = <dim> 为你的内容指定宽度,使其自动换行
\documentclass{ctexart}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}
    这是一句这也是一句话这也是一句话\tikzmarknode{a}{话}
    
    \bigskip
    这也是一句话这也是一句话这也是一句话这也是一句话这也是\tikzmarknode{b}{一句话}
    
    \begin{tikzpicture}[overlay,remember picture,cyan]
        \draw ([xshift=1em] a -| b.east) -- ++ (1em,0) 
        |- ([xshift=1em] b.east) coordinate[pos=0.25] (c);
        \draw[->]  (c) -- ++ (1em,0) node[right,align = left,text width = 6em] {我要归纳一下这两句话的主要内容};
    \end{tikzpicture}
\end{document}

2.png

  • 首先,提问请提供完整的最小工作示例,即包含文档类,导言区,正文区等等
  • 其次,代码请用代码块包裹起来,具体用法请了解 md 语法
  • 你的问题报错 Dimension too large,是的, tikz(或者说tex里面的dimexpr) 本身算不了这么大的数值
  • 猜测 plot 是在你的 domain = x:y 中,按 samples = 300, 等距离取点(或许是),然后光滑曲线连接起来即可.
  • 也就所说,如下代码
...
\draw[] plot[domain = 0:1,samples = 10] plot(\x,2*\x);
...

其实就是在取点 (0,0),(0.1,0.2),(0.2,0.4),..., 然后连接即可

  • 问题在于 tikz 算不了那么大的数值,我们可以改用 l3fp 来为其作计算,这里直接使用 xfp 包提供的\fpeval 命令,代码如下
\documentclass[margin = 1cm]{standalone}
\usepackage{tikz,xfp}
\begin{document}
\begin{tikzpicture}[x = 0.2cm,very thin]
  \draw[-latex] (-1,0) -- (5,0);
  \draw[-latex] (0,-0.2) -- (0,1.5);
  \draw [blue]
  plot [domain=0:4.25, samples=144, smooth] (\x,\fpeval{1/(1+0.015*10^{\x})});
\end{tikzpicture}
\end{document}

1.png


当然,你也可以选择 tkz-fct 宏包,它是借助 gnuplot 来绘图的,所以你的电脑必须装有这个软件,并且需要启用 --shell-escape 参数编译,代码如下

\documentclass[margin = 1cm]{standalone}
\usepackage{tkz-fct}
\begin{document}
\begin{tikzpicture}
\tkzInit[xmax=6,ymax=1.2,ystep=0.2]
\tkzAxeXY
\tkzFct[color=blue,domain=0:6.5]{1/(1+0.015*10**x)}  
\end{tikzpicture}
\end{document}

2.png

elegantbook.cls 中扒拉出该盒子的源码,做点小修改即可

\documentclass{ctexart}
\usepackage[most]{tcolorbox}
\usepackage{zhlipsum}
\definecolor{structurecolor}{RGB}{60,113,183}
\tcbset{
  introductionsty/.style={
    enhanced,
    breakable,
    colback=structurecolor!10,
    colframe=structurecolor,
    fonttitle=\bfseries,
    colbacktitle=structurecolor,
    attach boxed title to top center={yshift=-3mm,yshifttext=-1mm},
    boxrule=0pt,
    toprule=0.5pt,
    bottomrule=0.5pt,
    top=8pt,
    before skip=8pt,
    sharp corners
  },
}
\NewDocumentEnvironment{mybox}{O{内容提要}+b}
{
  \begin{tcolorbox}[introductionsty,title = {#1}]
    #2
  \end{tcolorbox} 
}
{}
\begin{document}

\begin{mybox}
  \zhlipsum[1]
\end{mybox}

\begin{mybox}[这是题目]
  \zhlipsum[2]
\end{mybox}
\end{document}

1.png

  • 可以使用 everypage 包为每一页画上边框,使用 geometry 包调整页边距等等.
  • 也可以找人定制模板

  • 通过 latexdef -s \author 命令查看 \author 命令的定义

QQ截图20220310111514.png

  • 可以看到,我们使用 \author{name} 命令就是将 name 保存到 \@author 这个宏里面
  • 再使用 latexdef -s \maketitle 命令可以看到 \maketitle 命令的定义

1.png

  • 可以发现,其中有一个 \@maketitle 的宏,追根溯源,我们使用 latexdef -s \@maketitle 来查看其定义

2.png

  • 可以发现,这里调用了 \@author 这个宏
  • 总的来说,\author{name} 命令将 name 保存\@author 宏里面,以便 \@maketitle 来调用它,进而传递给我们熟悉的 \maketitle 命令
  • 简而言之,放导言区还是放正文区都是可以的,但是一定要在 \maketitle 命令之前,以便该命令能够获取到所需的值

  • 首先,你需要知道你这个命令由哪个宏包提供的
  • 其次,知道宏包名后,例如该命令由 amsmath 宏包提供,你可以在命令行输入 texdoc amsmath 来阅读其宏包说明手册,以查看该命令的详细用法
  • 如果不知道由什么宏包提供,建议搜索一下,推荐使用 google 或者 bing 引擎
  • 更好的是到 TeX.se 搜索关键词,查看需要的宏包

只需给\foreach命令加上参数[parse=true]即可

\documentclass{standalone}
\usepackage{tikz}
\begin{document}

\begin{tikzpicture}
    %Circle
    \draw[blue] (0,0) circle (8);
    \def\n{36};%定义圆等分的份数
    %Line
    \foreach[parse=true] \i in {{360.0/\n},{360.0*2/\n},...,360.0}
    \foreach[parse=true] \j in {{360.0/\n},{360.0*2/\n},...,360.0}
    \draw[red,thin] (\j:8)--(\i:8);
\end{tikzpicture}

\end{document}

另外,循坏也可以使用l3fp来做,但不建议

\documentclass{standalone}
\usepackage{expl3,tikz}
\begin{document}

\ExplSyntaxOn
\begin{tikzpicture}
    %Circle
    \draw[blue] (0,0) circle (8);
    \def\n{36};%定义圆等分的份数
    %Line
    \fp_step_inline:nnnn{360/\n}{360/\n}{360}
    {
        \fp_step_inline:nnnn{360/\n}{360/\n}{360}
        {\draw[red,thin]({##1} \c_colon_str 8)--({#1}\c_colon_str 8);} 
    }
\end{tikzpicture}
\ExplSyntaxOff

\end{document}

这两个宏包都是texlive自带的,在命令行使用
texdoc ifthen texdoc hlist 即可调出其宏包手册

提供一种使用tikz pagenode的方法.绘制了一个封面

% 从fduthesis.dtx中抽取的
% 排版论文封面作者信息栏的代码
% (分散对齐代码)
\documentclass{ctexart}

% 导言区
\usepackage{expl3}
\usepackage{xparse}
\usepackage{tikz}

\ExplSyntaxOn
% 获取文本长度函数,#1用于保存长度,#2是被检测的文字
\cs_new:Npn \l_get_text_width:Nn #1#2
  {
    % 将文字内容存入变量
    \hbox_set:Nn \l_tmpa_box {#2}
    % 用\box_wd:N函数获取盒子宽度,并存入长度变量
    \dim_set:Nn #1 { \box_wd:N \l_tmpa_box }
  }
% 文本长度函数变体
\cs_generate_variant:Nn \l_get_text_width:Nn { NV }

% 获取clist中各个成员长度是大值,
% #1用于保存长度变量,#2是被检测clist变量
\cs_new:Npn \l_get_max_text_width:NN #1#2
  {
    \group_begin:
      % 将长度设置为小值
      \dim_set:Nn #1 {-999pt}
      \clist_set_eq:NN \l_tmpa_clist #2
      % 循环检测每个tl的长度,并更新是大值
      \bool_until_do:nn { \clist_if_empty_p:N \l_tmpa_clist }
        {
          \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
          \l_get_text_width:NV \l_tmpa_dim \l_tmpa_tl
          \dim_gset:Nn #1 { \dim_max:nn {#1} { \l_tmpa_dim } }
        }
    \group_end:
  }

% 分散对齐盒子,
% #1是盒子长度变量,#2是需要排版的文字
\cs_new_protected:Npn \l_spread_box:nn #1#2
  {
    \mode_leave_vertical:
    \hbox_to_wd:nn {#1}
      { \tl_map_inline:xn {#2} { ##1 \hfil } \unskip }
  }
% 分散对齐盒子函数变体
\cs_generate_variant:Nn \l_spread_box:nn  { Vn }
\cs_generate_variant:Nn \l_spread_box:nn  { nV }

% 居中对齐盒子,
% #1是盒子长度变量,#2是需要排版的文字
\cs_new_protected:Npn \l_center_box:nn #1#2
  {
    \mode_leave_vertical:
    \dim_set:Nn \l_tmpa_dim {#1}
    \dim_add:Nn \l_tmpa_dim {0.6em}
    \makebox[0cm][l]{\rule[-0.5ex]{\l_tmpa_dim}{0.4 pt}}
      {\hbox_to_wd:nn {\l_tmpa_dim} { \hfil #2 \hfil }}
  }
% 居中对齐盒子函数变体
\cs_generate_variant:Nn \l_center_box:nn { Vn }

% 为文字添加下划线
\cs_new:Npn \l_text_uline:n #1
  {
    \l_get_text_width:Nn \l_tmpa_dim {#1}
    \dim_add:Nn \l_tmpa_dim {0.6em}
    % 将标尺盒子放到宽度为0的左右盒子中实现下划线
    \makebox[0pc][l]{\rule[-0.5ex]{\l_tmpa_dim}{0.4 pt}}
      % 用高度为0的标尺盒子在文字两端添加空白
      \rule{.3em}{0cm}#1\rule{.3em}{0cm}
  }

% 定义需要的tl变量
\clist_map_inline:nn
  {
    major, researchfield, author, supervisor, date
  }
  { \tl_new:c { l_info_ #1 _tl } }

% 设置tl变量值的辅助函数
\cs_new_protected:Npn \__set_info_var:nn #1#2
  { \tl_set:cn { l_info_ #1 _tl } {#2} }
% 循环设置tl变量值
\clist_map_inline:nn
  {
    { major         } {         },
    { researchfield } { 教育学   },
    { author        } {         },
    { supervisor    } {         },
    { date          } {         },
  }
  { \__set_info_var:nn #1 }

% 定义tl常量的辅助函数
\cs_new_protected:Npn \__define_name:nn #1#2
  { \tl_const:cn { c_name_ #1 _tl } {#2} }

% 循环定义需要的tl常量
\clist_map_inline:nn
  {
    { major         } { 专业教学部  },
    { researchfield } { 专业名称    },
    { author        } { 指导教师    },
    { supervisor    } { 研究生      },
    { date          } { 提交时间    },
  }
  { \__define_name:nn #1 }

% 排版封面中的作者等信息
\cs_new_protected:Npn \l_cover_info:
{
  \begin{minipage} [ c ] { \textwidth }
    \centering
    % 构造各信息标识名称clist
    \clist_set:Nx \l_tmpa_clist
      {
        \c_name_major_tl,
        \c_name_researchfield_tl,
        \c_name_author_tl,
        \c_name_supervisor_tl,
        \c_name_date_tl,
      }
    % 构造各信息标识值clist
    \clist_set:Nx \l_tmpb_clist
      {
        { \l_info_major_tl         },
        { \l_info_researchfield_tl },
        { \l_info_author_tl        },
        { \l_info_supervisor_tl    },
        { \l_info_date_tl          }
      }
    % 计算最大长度
    \l_get_max_text_width:NN \l_tmpb_dim \l_tmpb_clist
    % 循环输出各字段
    \bool_until_do:nn { \clist_if_empty_p:N \l_tmpa_clist }
      {
        \clist_pop:NN \l_tmpa_clist \l_tmpa_tl
        \clist_pop:NN \l_tmpb_clist \l_tmpb_tl
        \heiti
        % 定宽分散对齐
        \l_spread_box:nn {7em} { \l_tmpa_tl }
        :
        \songti
        % 定宽居中对齐
        \l_center_box:Vn \l_tmpb_dim { \l_tmpb_tl }
        \par
      }
  \end{minipage}
}

% 定义用户接口
\NewDocumentCommand \txtuline { m }
  {
    \l_text_uline:n {#1}
  }
\NewDocumentCommand \makecover { }
  {
    \begin{titlepage}
        \begin{tikzpicture}[remember~picture,overlay]
        \node[scale=2,font=\Huge\bfseries] (title) at ([shift={(0,-0.3\paperheight)}]current~page.north){沈阳师范大学};
        \node[scale=2,font=\LARGE] (subtitle) at ([shift={(0,-0.1\paperheight)}]title){硕士学位论文};
        \node[align=center,scale=1.5] (info) at ([shift={(-0.08\paperwidth,-0.05\paperheight)}]current~page.center)
        {
          \l_cover_info:      
        };
        \node[scale=1.5,font=\bfseries]  at ([shift={(3,-3)}]current~page.north~west){编号:};
        \node[scale=1.5,font=\bfseries] at ([shift={(-5,-3)}]current~page.north~east)
        {
            \begin{tabular}{|c|c|c|}
              \hline  
              类 & 全日制教育硕士 & \\ \cline{2-3}
              别 & 非全日制教育硕士 & \\ \hline
            \end{tabular}
        };
        \end{tikzpicture}    
    \end{titlepage}
  }
\ExplSyntaxOff

% 正文区(有且只能有一个)
\begin{document}

  \makecover

\end{document}

效果如图:
QQ图片20220122143838.png

  1. 1表示第二层参数,例如

\newcommand{\foo}[1]{this is #1.\newcommand{\fooo}[1]{that is ##1.}}

在使用\foo的同时创建一个\fooo命令,由于是内层参数,使用##1.
以此类推

  1. \if@twocolumn <true >else<false >\fi这是一个判断语句,依名称应该是判断是否为双栏,如果条件满足,执行true, 否则 false.

发布
问题