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

注册于 2年前

回答
109
文章
0
关注者
3

不建议使用xkeyval宏包了,latex2e kernel setup (based on l3keys)已经足够支持键值对的选项。

从你的代码来说,只要删除testclass.cls\ExecuteOptionsX{text={key1=12345, key2=abcde}}的命令即可,\ExecuteOptionsX用于声明默认选项,不应该放在\ProcessOptionsX之后。但即使如此做,虽然可以传递option,但仍会导致出现LaTeX Warning: Unused global option(s):[text={key1=67890}]的提示,这也是不推荐使用的原因。

一个简陋的办法是在\begin{document}后使用\setlength{\oddsidemargin}{-3pt}(不一定准确,我的pdf-viewer没有标尺)微调。

个人认为你这个问题的本质是revtex4-2的双栏布局和单栏的figure之间的冲突。当你使用article文档类时代码并没有什么问题;而使用revtex4-2出错,说明是revtex4-2的问题。好的问题题目会方便其他人检索到。

\caption*用法说明

image.png

要想引用必须有内容
(我不是太理解为什么你一定要藏起来subcaption的(a)(b)(c)(d)?这样读者很难快速定位到Fig.4(d)和Fig.8(e)指的是哪个吧)

https://www.latexstudio.net/index/details/index/mid/3922.html

源代码中的 \onecolumngrid\twocolumngrid 进行切换 (但我不是太懂revtex4-2...)

\documentclass[reprint,aps,amsmath,amssymb,]{revtex4-2}
\usepackage{graphicx}% Include figure files
\usepackage{subcaption} % For subfigure
\usepackage{float}
\usepackage{lipsum}
\usepackage{hyperref}% add hypertext capabilities
\begin{document}

\lipsum[1-9]

\onecolumngrid

\begin{figure*}[htbp]
    \centering
    % First row of images (subfigure 1 and subfigure 2)
    \begin{subfigure}[b]{0.45\textwidth}
        \centering
        \includegraphics[width=\textwidth, keepaspectratio]{example-image-a}
        \caption{}\label{a}
    \end{subfigure}%
    \hspace{0.1cm}
    \begin{subfigure}[b]{0.45\textwidth}
        \centering
        \includegraphics[width=\textwidth, keepaspectratio]{example-image-b}
        \caption{}\label{b}
    \end{subfigure}
    % Second row of images (subfigure 3 and subfigure 4)
    \begin{subfigure}[b]{0.45\textwidth}
        \centering
        \includegraphics[width=\textwidth, keepaspectratio]{example-image-c}
        \caption{}\label{c}
    \end{subfigure}%
    \hspace{0.1cm}
    \begin{subfigure}[b]{0.45\textwidth}
        \centering
        \includegraphics[width=\textwidth, keepaspectratio]{example-image}
        \caption{}\label{d}
    \end{subfigure}
    \caption{Overall caption for the entire figure.}
    \label{fig2:mainfig}
\end{figure*}

\twocolumngrid

In Fig.~\ref{fig2:mainfig}~(\ref{a}), (\ref{b}), and (\ref{c}), we show ...

\lipsum[10-12]

\end{document}

image.png

我不太知道你的图片是如何实现的,我只提供昨晚群里讨论出来的一种代码实现(应该算是回答了你的问题标题)。

By S老师@u79794:

图片中是行内公式,在enumerate环境中使用,并且使用t(top)参数,即:$\begin{align}[t] … \end{align}$,然后再使用类似dotfill那种评分的东西,exam-zh模板有相应的模块

我借鉴了李清和xdyy用于exam-zh的方法,一个实现和效果如下:

\documentclass[12pt]{ctexart}
\usepackage[a4paper,showframe]{geometry}
\usepackage{amsmath,mathtools}
\usepackage{zref-savepos}
\makeatletter
\ExplSyntaxOn
\zref@require@unique

\NewDocumentCommand { \score } { O{} m }
  {
    \mode_if_math:TF
      { \@@_math_cdotfill:n { #2 \text { ~ 分 } } }
      { \__examzh_cdotfill: #2 分 }
    \mode_if_math:F
      {
        \par \noindent \ignorespaces
      }
  }
% 仿照 latex.ltx, line 651 的 \dotfill
\cs_new:Npn \__examzh_cdotfill:
  {
    \mode_leave_vertical:
    \cleaders \hb@xt@ .44em {\hss $\cdot$ \hss} \hfill
    \kern\z@
  }

\cs_new_protected:Npn \@@_math_cdotfill:n #1
  {
    \stepcounter { zref@unique }
    \hbox_overlap_right:n
      {
        \zsaveposx { \thezref@unique L }
        \zref@ifrefundefined { \thezref@unique R }
          { }
          {
            \cleaders
              \hbox_to_wd:nn { .44em } { \hss $\cdot$ \hss }
              \skip_horizontal:n
                {
                    \zposx { \thezref@unique R } sp
                  - \zposx { \thezref@unique L } sp
                }
          }
      }
    \tag * { \zsaveposx { \thezref@unique R } #1 }
  }

\ExplSyntaxOff
\makeatother

\begin{document}

    \begin{flalign*}
        & a^2 +b^2+c^2 = d^2&\\
        & \sum_{n=1}^\infty \frac{1}{n^2}=\frac{\pi^2}{6}&\\
    \end{flalign*}

    \begin{flalign*}
        &\frac{x_{n + 1}}{x_n} = \sqrt{\frac{2}{x_n^2} + \frac{1}{x_n}} > \sqrt{\frac{2}{2^2} + \frac{1}{2}} = 1,\score{2}&&\\
        &a^2+b^2+c^2=d^2,\score{4}&&\\
        &\sum_{n=1}^\infty \frac{1}{n^2}=\frac{\pi^2}{6},\score{8}&&
    \end{flalign*}

\end{document}

image.png

有几个问题

  • 卡住运行不了很不严谨,请提供命令行的报错信息
  • table,tabularcaption还是没弄明白 reference 体会一下插入-编号-浮动的过程
  • 请查看围栏代码块的用法,并使用完善问题的功能

效果对比:
image.png

\documentclass[a4paper,11pt]{article}
\usepackage{amsmath}
\usepackage{ctex}
\begin{document}
\section{Start}
\listoftables
\begin{table}
\begin{tabular}{l@{阿巴巴}|c|c|r}
    \hline
    1 & 2 & 3 & 4 \\
    \hline
    2 &2&3&4 \\
    \hline
    3&2&3&4\\
    \hline
\end{tabular}
\caption[这是一个短标题]{这是一个长查查尝长长惆怅长岑长惆怅长岑长擦擦擦擦擦擦擦擦擦擦擦擦标题}
\end{table}

\begin{table}
\begin{tabular}{l@{阿巴巴}|c|c|r}
    \hline
    1&2&3&4 \\
    \hline
    2 &2&3&4 \\
    \hline
    3&2&3&4\\
    \hline
\end{tabular}
\caption[这是一个短标题2]{这是一个长查查尝长长惆怅长岑长惆怅长岑长擦擦擦擦擦擦擦擦擦擦擦擦标题}
\end{table}
\begin{table}
\begin{tabular}{l@{阿巴巴}|c|c|r}
    \hline
    1 & 2 & 3 & 4 \\
    \hline
    2 &2&3&4 \\
    \hline
    3&2&3&4\\
    \hline
\end{tabular}
\caption[这是一个短标题3]{这是一个长查查尝长长惆怅长岑长惆怅长岑长擦擦擦擦擦擦擦擦擦擦擦擦标题}
\end{table}
\end{document}

image.png

彩蛋:请思考为何\listoftable出现在这个位置?什么是浮动体?

我来给一个非常不成熟的做法。直接搬!
my related question and discussion here~

我的做法是,将l3doc.cls复制一份,将其后缀名修改为l3doc.sty,之后注释去Line402的\LoadClass{article}语句后,将l3doc.sty置于工作目录下即正常使用\usepackage{l3doc}.

当然上述的操作是有缺陷的,例如和texmf树中的l3doc官方文档类可能存在一定的命名<namespace>冲突,cfr在上面的链接中指出也是建议修改.sty名称的(例如将l3doc改为mydoc),但在l3doc.cls中存在较多以l3doc为类名称的\message,此处我并没有做修改。

当将修改过后的l3doc.sty文档放到工作目录后,可以得到:

\documentclass{book}
\usepackage{l3doc}
\usepackage{lipsum}
\begin{document}

\cs{lipsum} some text \cmd{zhlipsum} some text \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code} some text you can use \cmd{l3doc} like that

\lipsum[1]

\begin{function}{\package_function_one:N, \package_function_two:n}
    \begin{syntax}
    \cs{package_function_one:N} \meta{cs}
    \cs{package_function_two:n} \marg{Argument}
    \end{syntax}
    Descriptive~text~here~...\lipsum[2]
\end{function}

\vspace*{2ex}
\lipsum[3]

\end{document}

image.png

当然,如果你的目标是all stuffs in l3doc,上面的做法是可行的,你可以使用\cs,syntax,function等所有命令;但是如果你的目标仅仅是提取出function,上面的不完美做法会存在大量的冗余定义,并不优雅。对于后者的需求需要对l3doc.cls的代码有更深的认识,之后可以从\DeclareDocumentEnvironment { function } 开始考虑"逆向工程",提取出和此有关的所有代码(但我不会latex3.....短时间内也没空....)另附MWE压缩文件。

l3doc-MWE.zip

该问题的另一个版本出现在The TeXBook的练习18.43:
image.png

image.png

我觉得平移很难操作,而且存在浮点计算误差....
另外scope环境是用于多个画面的,在你这个case下我个人觉得不太适合...

打小就不会找规律,提供一个我觉得非常丑陋的做法...
当然封装成函数便于复用同时加上scope这些得你自己来了,本问题的关键在于找到循环的pattern...

\documentclass[border=1.2cm]{standalone}
\usepackage{tkz-euclide}
\usetikzlibrary{calc}
\pgfmathtruncatemacro{\NN}{10}
\newcommand*{\stepfurther}[2]{
    \ifodd#1
        \tkzDefSquare(B#1,A#1)\tkzGetPoints{A#2}{C#2}
        \tkzDrawPolygon[fill=gray!20](B#1,A#1,A#2,C#2)
        \tkzDefTriangle[equilateral](C#2,A#2)\tkzGetPoint{B#2}
        \tkzDrawPolygon(A#2,C#2,B#2)
        \tkzDefTriangle[equilateral](B#1,C#2)\tkzGetPoint{E#2}
        \tkzDrawPolygon(B#1,C#2,E#2)
        \tkzDefTriangle[equilateral](A#2,A#1)\tkzGetPoint{D#2}
        \tkzDrawPolygon(A#2,A#1,D#2)
    \else
        \tkzDefSquare(B#1,A#1)\tkzGetPoints{C#2}{B#2}
        \tkzDrawPolygon[fill=gray!20](B#1,A#1,C#2,B#2)
        \tkzDefTriangle[equilateral](B#1,B#2)\tkzGetPoint{D#2}
        \tkzDrawPolygon(B#1,B#2,D#2)
        \tkzDefTriangle[equilateral](C#2,A#1)\tkzGetPoint{E#2}
        \tkzDrawPolygon(C#2,A#1,E#2)
        \tkzDefTriangle[equilateral](B#2,C#2)\tkzGetPoint{A#2}
        \tkzDrawPolygon(C#2,B#2,A#2)
    \fi
    % \node at (A#2) {$A_#2$};
    % \node at (B#2) {$B_#2$}; 
}
\begin{document}
    \begin{tikzpicture}
        \tkzDefPoint(0,0){B0}
        \tkzDefPoint(-120:1){A0}
        \tkzDefPoint(-1,0){C0}
        \tkzDrawPolygon(A0,B0,C0)
        \foreach \i[count = \cnt from 0] in {1,...,\NN}{
            \stepfurther{\cnt}{\i}
        }
    \end{tikzpicture}
\end{document}

image.png

https://ask.latexstudio.net/ask/question/17531.html 请看一下这个连接下回答的要求...
同时你的图片和文件都没上传成功...
试问:看到这样的提问内容要让人怎么帮你...

image.png

请你看这个链接,用三个```包裹,不然上面的代码观感不行,而且缺少首个\,不方便复制。另外,上面的代码还缺少图片,这将导致潜在的回答者无法复现。

另外,不应该只提供 表格图片 的插入代码,表格和图片在当前页面的位置信息对于实现你的目标也是很重要的,你需要补充你的代码(可以使用补充问题功能),使其从\documentclass开始到end{document}结束,同时页面位置和你的截图相同。

还真不能,我试了一下:

如果已被采纳,则回答彻底被锁定,无法修改补充。

如果未被采纳,允许补充但不允许彻底删除。(也许补充回答替换成假文也算是一种删除吧。)

此建议可@u30 反馈

其实这是一位群友的问题,按照惯例来自答一下...

一个可能的答案来自 link
进行如下设置即可:

\makeatletter
\def\ttl@useclass#1#2{%
  \@ifstar
    {\ttl@labelfalse\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
    {\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother

下面是实现的效果:

\documentclass{ctexart}
\usepackage{nameref}
\usepackage{xcolor}
\usepackage{titlesec}
\titleformat{\section}[frame]
{\normalfont\color{magenta}}
{\footnotesize \enspace \Large \textcolor{magenta}{\S \,\thesection}\enspace}{6pt}
{\Large\filcenter \bf \songti }
\makeatletter
\def\ttl@useclass#1#2{%
  \@ifstar
    {\ttl@labelfalse\@dblarg{#1{#2}}}% {\ttl@labelfalse#1{#2}[]}%
    {\ttl@labeltrue\@dblarg{#1{#2}}}}
\makeatother
\begin{document}
\section{第一章AAA}\label{sec:A}
我要引用section C: \nameref{sec:C}
\section*{第二章BBB}\label{sec:B}
我要引用section A: \nameref{sec:A}
\section{第三章CCC}\label{sec:C}
我要引用section B: \nameref{sec:B}
\end{document}

image.png

这个titleformat感觉有点子眼熟,fncychap宏包提供了类似的样式..如下
image.png

添加圈圈的方法可以参考 @u19850 鱼香肉丝没有鱼先生 的文章

另外,每一个问题都应该是独立而且高度focus的,关于前面"师生两版"功能的使用,应该在前一个问题网页下面的评论或者回答补充。本问题更好的问法,是给出你使用pifont宏包添加带圈数字然后xelatex可以编译而xelatex -shell-escape不可以实现的具体实现例子。

关于 下划线与带圈数字:

% https://blog.ljguo.top/2024/06/textcircled-numbers
\documentclass[12pt]{ctexart}
\usepackage{zhnumber}
\usepackage{amsmath}
\usepackage[margin = 2cm]{geometry}
\pagestyle{empty}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\usepackage{pifont}
\usepackage{circledsteps}
\usepackage{circledtext}
\usepackage{zhlipsum}
\usepackage{soul}
\usepackage{xeCJKfntef}
\newcounter{method}
\setcounter{method}{0}
\newcommand{\method}{
    \stepcounter{method}
    \textbf{方法\zhnum{method}: }
}
\newcommand*\circled[1]{
    \tikz[baseline=(char.base)]{\node[circle, draw, inner sep=2pt] (char) {#1};}
}
\newcommand*\circleploygensix[1]{
        \tikz[baseline=(char.base)]{\node[regular polygon, regular polygon sides = 6, draw, inner sep=0pt, minimum size = 1.3em] (char) {#1};}
    }
\newcommand*\circleploygensixplus[1]{
    \tikz[baseline=(char.base)]{
        \node[inner xsep = 5.5pt, inner ysep = 0pt, minimum size = 1.3em] (char) {#1};
        \draw ([xshift = 4pt]char.north west) -- ([xshift = -4pt]char.north east) -- (char.east) -- ([xshift = -4pt]char.south east) -- ([xshift = 4pt]char.south west) -- (char.west) -- cycle;
        }
}
\def\newtextcircled#1{\raisebox{.5pt}{\textcircled{\raisebox{-.9pt}{#1}}}}

\linespread{2.0}
\setlength{\parindent}{0pt}
\begin{document}

\method{使用\LaTeX{}自带的\verb|\textcircled|命令实现}

\textcircled{3} \quad \textcircled{5} \quad  \textcircled{7}

\textcircled{11} \quad \textcircled{15} \quad  \textcircled{27}

此时发现数字在垂直方向上并未居中, 下面可以尝试通过\verb|\raisebox|改进, 但是在处理多位数时仍不能实现较好的排版效果.

\method{使用\verb|\raisebox|改进\verb|\textcircled|命令}



\newtextcircled{3} \quad \newtextcircled{5} \quad  \newtextcircled{7}

\newtextcircled{11} \quad \newtextcircled{15} \quad  \newtextcircled{27}

\method{使用pifont宏包提供的\verb|\ding|命令实现}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 171+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 181+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 191+\x\relax},}

\foreach \x in {1, 2, ..., 10}{\ding{\numexpr 201+\x\relax},}

pifont宏包提供了\verb|\ding{number}|命令, 只需要填入一个数字就能得到对应的符号, 当number介于172-211时分别是不同样式的带圈数字. 不过也有一个明显的缺陷,两位数及以上的数字无法表示.并且里面的字体字形是固定的, 没有办法更换.

\method{使用tikz宏包自定义绘制}

\circled{3} \quad \circled{5} \quad  \circled{7}

\circled{11} \quad \circled{15} \quad  \circled{27}

\method{基于circledsteps宏包提供的\verb|\Circled|命令绘制}

\Circled{1} \quad \Circled[inner color = red]{2} \quad \Circled[outer color = green]{5} \quad \Circled[fill color = cyan]{9} \quad \Circled{12} \quad \Circled{123} \quad \Circled[inner xsep = 8pt]{12}


\method{基于circledtext宏包提供的\verb|\circletext|命令绘制}

\circledtextset{charf = \LARGE}
\foreach \x in {1,2,...,5,10,100}
{
    \circledtext{\x}\,
}

\foreach \x in {1,2,...,5,10,100}
{
    \circledtext[boxcolor=cyan,boxtype=ox,boxfill = red!20]{\x}\,
}

更进一步\verb|circledtext|宏包还实现了缩放字符的效果

\circledtext[boxtype=o]{甲}\quad
\circledtext[boxtype=o+]{乙}\quad
\circledtext[boxtype=ox]{丙}\quad
\circledtext[boxtype=ox+]{丁}\quad
\circledtext[boxtype=x+]{戊}

\circledtext[boxtype=O]{甲}\quad
\circledtext[boxtype=O+]{乙}\quad
\circledtext[boxtype=OX]{丙}\quad
\circledtext[boxtype=OX+]{丁}\quad
\circledtext[boxtype=X+]{戊}

\circledtextset{boxcolor=red}
\circledtext[boxtype=oo]{车}\quad
\circledtext[boxtype=Oo]{马}\quad
\circledtext[boxtype=OO]{炮}\quad
\circledtext*[boxtype=oo]{车}\quad
\circledtext*[boxtype=Oo]{马}\quad
\circledtext*[boxtype=OO]{炮}\quad

\method{更一般的需求,修改TIKZ方法实现}

\circleploygensix{1} \quad \circleploygensix{12} \quad \circleploygensix{123} \quad \circleploygensix{1234} \quad 

\circleploygensixplus{1} \quad \circleploygensixplus{12} \quad \circleploygensixplus{123} \quad \circleploygensixplus{1234} \quad

下面是一个补充: 加下划线的方法据我所知大致有两种。

对于纯英文,可以考虑使用\verb|soul|宏包提供的\verb|\ul|功能来实现.

This is some text here. \ul{This is \LaTeX{} which is elegant} There are \ul{some} text.

对于中文语境或者中英混合语境,可以考虑使用\verb|xeCJKfentf|提供的功能.

\CJKunderline{虚室\LaTeX{}生白,吉祥止止。} 虚室生白,吉\CJKunderline{祥止}止。这是一个\CJKunderline{中-English mixed 的}句子。

那么对于上面的带圈数字,在中英混合的case下的表现如何呢?

使用\verb|\textcircled|:我\CJKunderline{是English and \textcircled{3} 个中文}的例子example。

使用\verb|\newtextcircled|:我\CJKunderline{是English and \newtextcircled{8} 个中文}的例子example。

使用\verb|pifont|提供的\verb|\ding|命令:我\CJKunderline{是English and \ding{176} 个中文}的例子example。

使用\verb|\Circled|命令实现:我\CJKunderline{是English and \Circled{12} 以及(and) \Circled{123} 个中文}的例子example。

使用\verb|\circledtext|命令实现:我\CJKunderline{是English and \circledtext{12} 个中文}的例子example。

使用自己用TikZ定义的\verb|\circled|命令子:我\CJKunderline{是Eng \circled{2} lish \circleploygensix{55} 以及 \circleploygensixplus{123} and个中文}的例子example。

\end{document}

image.png

"谁主张,谁举证。"所有问题的处理都是case by case的,当遇到\LaTeX上的问题,最省事最有效的的处理方式就是给出MWE,同时也很方便潜在回答者的测试。

关于exam-zh下师生两版使用pifont宏包是否会报错,下面再补充。
我下面的代码例子顺利执行,请你给出可以体现你的问题的MWE!!!!

\documentclass{exam-zh}
\usepackage{pifont}
\usepackage{xeCJKfntef}
\usepackage{circledtext}
\examsetup{
  style/student-version-suffix=第二版,
  page/size=a4paper,
  paren/show-paren=true,
  paren/show-answer=false,
  fillin/show-answer=false,
}
\ExamPrintAnswerSet[
  \geometry{showframe}
]{
  paren/show-answer=true,
  fillin/show-answer=true,
}

\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\}$我喜\CJKunderline{欢pifont混\ding{172}合Eng}lish
    \item $\{2, 3\}$我喜欢pifont混\ding{172}合English
    \item $\{3, 4\}$我喜\CJKunderline{欢pifont混\ding{172}合Eng}lish
    \item $\{2, 3, 4\}$我喜欢pifont混\ding{172}合English
  \end{choices}
\end{question}

% 14.
\begin{question}
  已知 $O$ 为坐喜\CJKunderline{欢pifont混\circledtext{12}合Eng}lish为 $x$ 轴上一点,且 $PQ \perp OP$,若 $|FQ| = 6$,则 $C$ 的准线方程为 \fillin[$\dfrac{1}{3}$] 。
\end{question}

\end{document}

image.png

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出现异常的"空挡"期,并已为此增加了悬赏积分。

发布
问题