Sagittarius Rover
Sagittarius Rover
我要成为TikZ糕手/(ㄒoㄒ)/~~

注册于 2年前

回答
95
文章
0
关注者
2

Thanks to Eureka and 小狮子

使用diff工具的比较结果如下:在TeXLive2024发行版(texlive20240312.iso)三月份的版本中,关于latex3的部分宏包出现bug,这导致hanzibox表现异常。此时通过tlmgr更新宏包版本(2024.11.21更新后实测正常)即可正常编译。

image.png

image.png

另外据OsbertWang回忆证实:hanzibox在TeXLive2023发行版完全正常,而在TeXLive2024发行版表现存在异常。希望找到是哪一个包的具体实现出现了该bug,同时如有可能,希望定位在texlive上hanzibox出现异常的"空挡"期,并已为此增加了悬赏积分。

我完全不懂原理....REF:https://tex.stackexchange.com/questions/388594/how-to-reduce-the-spacing-above-and-below-math-symbols/388694#388694

\documentclass{article}
\usepackage{stix}
\usepackage{amsmath}
\begin{document}
\setbox0=\hbox{$\relax$}% trigger math font setup
\typeout{xi_9: \the\fontdimen9\textfont3}
\typeout{xi_11: \the\fontdimen11\textfont3}
\typeout{xi_10: \the\fontdimen10\textfont3}
\typeout{xi_12: \the\fontdimen12\textfont3}
\[\sum_{n=0}^{m} x_{nn} \sum_{n}^{g} y_{nn}\]

\begin{align*}
    \Sigma_{n \mathbf{k}}(\eta)=\sum_{\mathbf{q}, \nu}^{\ \!\text {coarse }}[\Sigma_{n \mathbf{k} \mathbf{;} 
    \mathbf{q} \nu}^{\text {upep Fan }}+\Sigma_{n \mathbf{k} \mathbf{;} \mathbf{q} \nu}^{\text {upper DW }}]+
    \sum_{\mathbf{q}, \nu}^{\text {fine }}{}[\Sigma_{n \mathbf{k}, \mathbf{q} \nu}^{\text {lower Fan }}(\eta)+
    \Sigma_{n \mathbf{k}, \mathbf{q} \nu}^{\text {lower DW }}]
 \end{align*}

\fontdimen9\textfont3=1pt
\fontdimen11\textfont3=1pt
\fontdimen10\textfont3=1pt
\fontdimen12\textfont3=1pt
\[\sum_{n=0}^{m} x_{nn} \sum_{n}^{g} y_{nn}\]
\begin{align*}
    \Sigma_{n \mathbf{k}}(\eta)=\sum_{\mathbf{q}, \nu}^{\ \!\text {coarse }}[\Sigma_{n \mathbf{k} \mathbf{;} 
    \mathbf{q} \nu}^{\text {upep Fan }}+\Sigma_{n \mathbf{k} \mathbf{;} \mathbf{q} \nu}^{\text {upper DW }}]+
    \sum_{\mathbf{q}, \nu}^{\text {fine }}{}[\Sigma_{n \mathbf{k}, \mathbf{q} \nu}^{\text {lower Fan }}(\eta)+
    \Sigma_{n \mathbf{k}, \mathbf{q} \nu}^{\text {lower DW }}]
 \end{align*}
 %
\end{document}

image.png

略作尝试,还得靠你自己微调。

\documentclass[border=8pt]{standalone}
\usepackage{tikz}
\usepackage{tkz-euclide}
\usepackage{xfp}
\begin{document}
\newcommand*{\threerectangles}[2]{
    \pgfmathsetmacro\x{\fpeval{#1+0.64*(#2-#1)}}
    \pgfmathsetmacro\y{\fpeval{0+0.48*(#2-#1)}}
    \tkzDefPoints{#1/0/A,#2/0/B,\x/\y/C}
    % \tkzDrawPolygon(A,B,C)
    \tkzDefSquare(B,A) \tkzDrawPolygon(B,A,tkzFirstPointResult,tkzSecondPointResult)
    \tkzDefSquare(A,C) \tkzDrawPolygon(A,C,tkzFirstPointResult,tkzSecondPointResult)
    \tkzDefSquare(C,B) \tkzDrawPolygon(C,B,tkzFirstPointResult,tkzSecondPointResult)
}
% https://tex.stackexchange.com/questions/164476/how-to-add-a-global-before-pgfmathsetmacro
\begin{tikzpicture}
    \pgfmathsetmacro\posa{0}
    \pgfmathsetmacro\posb{5}
    \foreach \i in {1,...,5}{
        \threerectangles{\posa}{\posb}
        \pgfmathsetmacro\tmp{\posb}
        \pgfmathparse{\fpeval{\tmp+0.6*(\tmp-\posa)*1.25}}
        \global\let\posb\pgfmathresult
        \global\let\posa\tmp
        % \node at (\i,\i) {(\posa,\posb,\tmp)};
    }
\end{tikzpicture}
\end{document}

image.png

请你首先保证你.tex文件调用的exam-zh.cls的版本是v0.2.1及以上....

因为你的代码有点乱,版本也有点乱,MWE也太长,下面的介绍将告诉你如何在TeXLive2024下编译exam-zh v0.2.1实现所谓的师生两版.

下面是我构造的一个最简单的MWE:

% TeXLive2024 其下的 texmf 树的 exam-zh版本是v0.2.1
\documentclass{exam-zh}
\examsetup{
  style/student-version-suffix=第二版, % default value = "_student_version"
  page/size=a4paper,
  paren/show-paren=true,
  paren/show-answer=false,
  fillin/show-answer=false,
  solution/show-solution=hide,
}
% 下面\ExamPrintAnswerSet的设置会继承\examsetup之后补充上面的设置
\ExamPrintAnswerSet[
  \geometry{showframe}
]{
  page/size=a4paper,
  paren/show-answer=true,
  fillin/show-answer=true,
  solution/show-solution=show-stay, 
}
% \ExamPrintAnswer % 可以省略 -shell-escape选项命令已经实现了这一行

\title{Exam-zh使用考试招生全国统一考试}

\subject{\LaTeX{}}

\begin{document}

% 1.
\begin{question}[points = 2]
  设集合 $A = \{x \mid -2 < x < 4\}$,$B = \{2, 3, 4, 5\}$,则 $A \cap B = $ \paren[A]
  \begin{choices}
    \item $\{2\}$
    \item $\{2, 3\}$
    \item $\{3, 4\}$
    \item $\{2, 3, 4\}$
  \end{choices}
\end{question}

% 14.
\begin{question}
  已知 $O$ 为坐标原点,抛物线 $C \colon y^2 = 2px$($p > 0$)的焦点为 $F$,
  $P$ 为 $C$ 上一点,$PF$ 与 $x$ 轴垂直,$Q$ 为 $x$ 轴上一点,且 $PQ \perp OP$,
  若 $|FQ| = 6$,则 $C$ 的准线方程为 \fillin[$\dfrac{1}{3}$] 。
\end{question}

% 22.
\begin{problem}[points = 12]
  已知函数 $f(x) = x (1 - \ln x)$。
  \begin{enumerate}
    \item 讨论 $f(x)$ 的单调性;
    \item 设 $a$,$b$ 为两个不相等的正数,且 $b \ln a - a \ln b = a - b$,
      证明:$2 < \frac{1}{a} + \frac{1}{b} < \eu$。
  \end{enumerate}
\end{problem}

\begin{solution}
  函数的定义域为 $(0, +\infty)$,
  又 \[f^{\prime}(x) = 1 - \ln x-1 = -\ln x, \score{2}\]
  当 $x \in(0, 1)$ 时, $f^{\prime}(x) > 0$, 当 $x \in(1, +\infty)$ 时, $f^{\prime}(x) < 0$,
  故 $f(x)$ 的递增区间为 $(0,1)$, 递减区间为 $(1, +\infty)$.
\end{solution}

\end{document}

如果使用latexmk -xelatex mwe编译,效果是出现一个仅有三道题的mwe.pdf文件如下:
image.png

请仔细理解文档中关于师生两版的内容:
image.png

一言以蔽之:\ExamPrintAnswerSet的设置会继承\examsetup的内容之后补充(append)其设置

如果使用latexmk -xelatex -shell-escape mwe编译,效果是在当前目录下出现的两个mwe.pdf以及mwe-第二版.pdf文件如下:

image.png

按照文档默认值的说明:
student-version-suffix = 〈suffix〉
师生两版的第二个版本的 PDF 名称的后缀。即第二个 PDF 的名称为 <jobname><suffix>.pdf。
默认值为 _student_version
这意味着夏老师设计的时候本身是希望
\examsetup生成的第一版是带答案的"老师版",附加上\ExamPrintAnswerSet之后的第二版是不带答案的"学生版"
上面的情况,需要在\examsetup中设置show-answer,之后在\ExamPrintAnswerSet中设置hide-answer,这样后面hide-answer的命令会覆盖前面的配置,实现原版是教师版,新版是学生版的效果。

以上面MWE代码设置为例:

\examsetup{
  style/student-version-suffix=第二版, % default value = "_student_version"
  page/size=a4paper,
  paren/show-paren=true,
  paren/show-answer=false,
  fillin/show-answer=false,
  solution/show-solution=hide,
}
% 下面\ExamPrintAnswerSet的设置会继承\examsetup之后补充上面的设置
\ExamPrintAnswerSet[
  \geometry{showframe}
]{
  page/size=a4paper,
  paren/show-answer=true,
  fillin/show-answer=true,
  solution/show-solution=show-stay, 
}

这意味着对于第一份文件mwe.pdf,他的设置为:

  page/size=a4paper,
  paren/show-paren=true,
  paren/show-answer=false,
  fillin/show-answer=false,
  solution/show-solution=hide,

对于第二份,注意\ExamPrintAnswerSet会覆盖前面的信息,其配置等价于

\geometry{showframe}
------继承第一份pdf的配置--------
page/size=a4paper,
paren/show-paren=true,
paren/show-answer=false,
fillin/show-answer=false,
solution/show-solution=hide,
-------在其后追加第二份pdf的补充配置----------
page/size=a4paper, % 其实这行可以省略,因为已经继承了page/size=a4paper
paren/show-answer=true, % 覆盖上面的 false
fillin/show-answer=true,  % 覆盖上面的 false
solution/show-solution=show-stay,  % 覆盖上面的 hide

只要你弄懂上面不同设置的区别和逻辑,就可以自行灵活调整和设置,想怎么出题怎么出题,想让什么文档呈现什么效果都行(【第一份老师-第二份学生】或者【第一份学生-第二份老师】),当然,不要忘记使用-shell-escape选项编译。

明确使用的版本,仔细研究所使用版本的文档,用正确版本的正确选项,多用最小的例子去尝试,提问给严格规范的MWE

如果你弄懂了最简单的例子实现了师生两版,那么用到你庞大的工程中想必是事半功倍的。希望以上对你有所帮助。

为什么不看文档(?) 实际上你只要看tblr文档的第一面即可实现。

image.png

另外, tabularray库也提供了\UseTblrLibrary{booktabs}, 没有引用该库也许是你注释\bottomrule的原因吧.

在三线表的绘制中建议不要使用\hlines命令, 使用booktabs库提供的toprule,midrule,cmidrulebottomrule可以使代码更具有一致性。

P.S. 你的MWE缺少\documentclass{}\usepackage{amsmath,amssymb}\usepackage{amsthm}与本问题并无关联.

非常感谢Eureka老师的详细回答以及对@恐惧症患者的鼓励.

下面有一个小小的疑惑,如果采用重定义\chapter*定义的操作是不是会影响后续如果需要使用\chapter*的功能,虽然可以在局部修改,但是个人觉得这种方式远不如修改\tableofcontenst(将\chapter*替换为\@schapter)来得优雅简单.

\documentclass[landscape,openany]{book}
\usepackage[a6paper]{geometry}
\begin{document}
\pagestyle{empty}
\begingroup
\makeatletter
\renewcommand\chapter{\if@openright\cleardoublepage\else\clearpage\fi
            %\thispagestyle{plain}%
            \global\@topnum\z@
            \@afterindentfalse
            \secdef\@chapter\@schapter
            }
\makeatother
\tableofcontents 
\endgroup
% \mainmatter % 读源码的力量 get!
\cleardoublepage 
\pagenumbering{arabic}
\chapter{First}
\chapter{Second}
\chapter{Third}
\chapter*{First}
\chapter*{Second}
\chapter*{Third}
\chapter{First}
\chapter{Second}
\chapter{Third}
\end{document}

image.png

顺便补充几个命令定义(其实看macro名称也能大致看出它的含义):

\pagenumbering:
macro:#1->\global \c@page \@ne \gdef \thepage {\csname @#1\endcsname \c@page }

\secdef:
macro:#1#2->\@ifstar {#2}{\@dblarg {#1}}

\@starttoc:
macro:#1->\begingroup \makeatletter \@input {\jobname .#1}\if@filesw \expandafter \newwrite \csname tf@#1\endcsname \immediate \openout \csname tf@#1\endcsname \jobname .#1\relax \fi \@nobreakfalse \endgroup
\def\@schapter#1{\if@twocolumn
                   \@topnewpage[\@makeschapterhead{#1}]%
                 \else
                   \@makeschapterhead{#1}%
                   \@afterheading
                 \fi}
\def\@makeschapterhead#1{%
  \vspace*{50\p@}%
  {\parindent \z@ \raggedright
    \normalfont
    \interlinepenalty\@M
    \Huge \bfseries  #1\par\nobreak
    \vskip 40\p@
  }}

对于补充的思考练习:

  • case1:如果注释去\thispagestyle{plain}行,则可以去除所有ToC标题:

image.png

这是因为和正确的结果相比,上面的操作相当于用更底层的\@schapter命令排版了无编号的标题,同时不改变页码设置,相当于跳过了原有\chapter*中设定为plain的步骤,并且直接将当前section的信息写入.toc文件读取并刷新缓存;
  • case2:变式(指定\thispagestyle{plain}

image.png

虽然\@schapter在排版标题时并没有页码样式仍为empty,但由于首页还未自然结束,故而会继续进行ToC的排版,而在进行\@schapter排版之前已经指定了\thispagestyle{plain},因此首页ToC会出现页码而后续ToC不出现页码。
  • case3:自行测试使用\clearpage断页

image.png
[上图有个typo,正文是被\chapter设置为plain....]

录屏文件上传没成功,请点击修改问题按钮再次上传。

这个问题上知乎或者MSE问可能会更好吧......
既然你会画A,D.那么问题不在画图,而在于函数形式的确定.

不难注意到:
image.png

In Return, 希望你顺便把上图的绘图代码也贴一下, 除了gnuplot,我没想到什么比较方便或者优雅的方法. Thanks~!

怎们不行呢?我没有经过什么其他的设置,可以使用Ctrl+/实现如下:
res.gif

建议你检查插件冲突,以及可能的快捷键冲突,可以着重检查一下keybindings.json中的when选项是否正常或者被修改,也可以参照文档自定义其行为。

另附:
image.png

本人在windows11 professionalTeXLive2024编译

当我使用xelatex mwe编译时,顺利执行:
image.png

当我使用pdflatex mwe时,由于其默认会使用epstopdf程序,此时可见左侧目录出现了uu.eps对应的.pdf文件,同样可以顺利执行,无需使用-shell-escape选项:

image.png

但OsbertWang @u40在聊天记录中也指出过在编辑器中使用有可能需要打开-shell-escape选项,同时我也曾在交流群中看到过使用TeXLive2023插入.eps图片提示epstopdf编译出错的情况,但由于我没有TeXLive2023环境,无法进行测试。

请你补充你的TeXLive版本,并且最好花点时间学习一下markdown语法以美化你的问题。另附有关不同引擎插入图片的简单介绍:

image.png

学会规范提问是更快解决你问题的必经之路, Happy TeXing!

MWE不规范,预期效果图也没有,甚至还要手动帮你调整代码,还要run一下之后再理解你的"调整宽度和行高。内容居中"是什么意思,对回答者极不友好

代码请用代码块包裹,你这个问题必须需要提供符合你排版的文章layout要求的具体情况的代码才好调整具体样式和大小。

不然我在我的电脑画的表格和尺寸大小,放到你的所谓"模板"里面还是会很不好看,你还得接着提问。

提供一份基于tabularray的解答

\documentclass[a4paper,landscape]{article}
\usepackage[margin=.5in]{geometry}
\usepackage{lipsum}
\usepackage{tabularray}
\UseTblrLibrary{booktabs} 
\begin{document}
\begin{tblr}{
        vlines,cells={valign=m},
        colspec = {*{2}{Q[2cm,c]}*{6}{Q[3cm,c]}},
        row{1,2}={font=\bfseries\small},
        column{1}={font=\bfseries\small},
        abovesep=0pt, belowsep=2pt, rowsep=2pt,
    }
    \toprule
    \SetCell[r=2]{m} Dataset & \SetCell[r=2]{m} Embedding Capacity (bits) & \SetCell[c=6]{m} Extraction Error (\%) \\
    \midrule
    & & Addition and Deletion of Punctuation Marks & Addition and Deletion of Stop Words & Synonym Replacement & Random Word Insertion & Character Deletion and Swapping & Word Order Reversal \\
    \midrule
    AG News & 30,000     & 0    & 0   & 0  & 0  & 2.92 & 0.26 \\
    \midrule
    Dbpedia & 90,000     & 0    & 0   & 0  & 1.27  & --  & -- \\
    \bottomrule
\end{tblr}
\end{document}

image.png

MWE定义
image.png

一个不一定优雅的解决方式是:

\documentclass[10pt,a4paper]{ctexart}
\usepackage{enotez}
\setenotez{
    list-name = {\small\noindent【注释】},
    }
\ExplSyntaxOn
\cs_set:Npn \theendnote {【\zhnum{endnote}】}
\ExplSyntaxOff

\begin{document}
    This is\endnote{With an endnote.} some text.\endnote{With two endnotes.}
    \printendnotes
\end{document}

这是由于在enotez.sty中如下定义了l3keys-coices

% Line 150
    counter-format   .choice: ,
    counter-format / arabic  .code:n = \cs_set:Npn \theendnote {\arabic{endnote}} ,
    counter-format / alph    .code:n = \cs_set:Npn \theendnote {\alph{endnote}} ,
    counter-format / Alph    .code:n = \cs_set:Npn \theendnote {\Alph{endnote}} ,
    counter-format / roman   .code:n = \cs_set:Npn \theendnote {\roman{endnote}} ,
    counter-format / Roman   .code:n = \cs_set:Npn \theendnote {\Roman{endnote}} ,
    counter-format / symbols .code:n = \cs_set:Npn \theendnote {\fnsymbol{endnote}} ,

另外要注意\zhnumber\zhnum区别,前者作用于数字,后者作用于计数器.

image.png

应该有更优雅(妥当)的修改方式, 无奈本人不善latex3也不善仔细研究文档...

一个可能的答案是:

\documentclass{article}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage{nicematrix}
\usepackage{tikz}
\newcommand*{\BB}[1][]{\mathscr{B}^{#1}}
\begin{document}
    \[ 
        \begin{NiceMatrix}[create-medium-nodes]
            \phantom{0} & \alpha_1 & \alpha_2 & \cdots & \alpha_t & \phantom{0}  \\
            \phantom{0} & \BB \alpha_1 & \BB \alpha_2 & \cdots & \BB \alpha_t & \phantom{0} \\
            \phantom{0} & \BB[2] \alpha_1 & \BB[2] \alpha_2 & \cdots & \BB[2] \alpha_t &\phantom{0}  \\
            \phantom{0} & \vdots & \vdots & \ddots & \vdots &\phantom{0}  \\
            \phantom{0} & \BB[k_1-1] \alpha_1 & \BB[k_2-1] \alpha_2 & \cdots & \BB[k_n-1] \alpha_t &\phantom{0}  \\
            \phantom{0} & \BB[k_1] \alpha_1 & \BB[k_2] \alpha_2 & \cdots & \BB[k_n] \alpha_t & \phantom{0} \\
        \CodeAfter
            \tikz[name suffix=-medium]{
                \draw[cyan,dashed] (1-2.north west) rectangle (5-5.south east);
                \draw[magenta!60] (2-1.north west) rectangle (6-6.south east);
            }
        \end{NiceMatrix}
    \]
\end{document}

image.png

-------------------------补充回答-------------------------

\documentclass{article}
\usepackage{amsmath,amssymb,mathrsfs}
\usepackage{nicematrix}
\usepackage{tikz}
\newcommand*{\BB}[1][]{\mathscr{B}^{#1}}
\begin{document}
    \[ 
        \begin{NiceMatrix}[create-medium-nodes]
            \phantom{1} & \alpha_1 & \alpha_2 & \cdots & \alpha_t & \phantom{1}  \\
            \phantom{1} & \BB \alpha_1 & \BB \alpha_2 & \cdots & \BB \alpha_t & \phantom{1} \\
            \phantom{1} & \BB[2] \alpha_1 & \BB[2] \alpha_2 & \cdots & \BB[2] \alpha_t &\phantom{1}  \\
            \phantom{1} & \vdots & \vdots & \ddots & \vdots &\phantom{1}  \\
            \phantom{1} & \BB[k_1-1] \alpha_1 & \BB[k_2-1] \alpha_2 & \cdots & \BB[k_n-1] \alpha_t &\phantom{1}  \\
            \phantom{1} & \BB[k_1] \alpha_1 & \BB[k_2] \alpha_2 & \cdots & \BB[k_n] \alpha_t & \phantom{1} & \alpha_{t+1} & \cdots & \alpha_s \\
        \CodeAfter
            \tikz[name suffix=-medium]{
                \draw[cyan,dashed] (1-2.north west) rectangle (5-5.south east);
                \draw[magenta!60] (2-1.north west) rectangle (6-6.south east);
            }
        \end{NiceMatrix}
    \]
\end{document}

image.png

TikZ的技巧性实在是太强了,我还有很长的路要走(落泪)

非常感谢外国网友的帮助,但我微调了一下,感觉下面的代码还是有些"不优雅"的问题(哎)

另外,请你查看围栏代码块语法,学会讲代码放到代码块里,以便他们正确的高亮。 (Un)Happy TikZing!

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\begin{document}
    \begin{tikzpicture}[rotate=120,]% rotate=120
    \foreach \i [
      count=\j from -1, % trick to start from -1
      evaluate=\i as \invi using int(11-\i),
      evaluate=\j as \invj using int(11-\j),
    ] in {0,...,11} {
        \node[
          fill, circle, 
          inner sep=1pt, outer sep=3pt,
          label={
            [inner sep=0pt, minimum width=.5em,] % <angle:label-text>
            {360/12*(\i-1/2)+120}:{\footnotesize $a_{1,\invi}$}
          }
        ] (a\i) at ({360/12*(\i-1/2)}:2.5) {};
        \ifnum\i=0\else
            \draw[<-] (a\i) -- node[inner sep=0pt, circle, label={
                [circle, inner sep=0pt]{360/12*(\i-1)+120}:{\footnotesize$\alpha_{1,\invj}$}
            }] {} (a\j);
        \fi
    }
    \draw[<-] (a0) -- node[
      inner sep=0pt, circle,
      label={
        [circle, inner sep=0pt, swap]
        {-360/12+120}:{\footnotesize$\alpha_{1,0}$}
    }] {} (a11);
    \end{tikzpicture}
\end{document}

image.png

发布
问题