有几个疑问:
1.为什么要手动实现而不考虑bibtex
等专业的文献引用,使用文献管理软件导出.bib
样式简单又高效.
2.你想要的答案是不是类似自定义一个环境,然后你可以用\Cite{xx1}
\Cite{xx2}
的形式在文末插入呢?是否要保留交叉引用?也许你应该将需求表述的更加清楚.
有几个疑问:
1.为什么要手动实现而不考虑bibtex
等专业的文献引用,使用文献管理软件导出.bib
样式简单又高效.
2.你想要的答案是不是类似自定义一个环境,然后你可以用\Cite{xx1}
\Cite{xx2}
的形式在文末插入呢?是否要保留交叉引用?也许你应该将需求表述的更加清楚.
你还没学会 markdown 的代码块语法咩 md官方教程
下面是一个mwe和效果(注意标点符号不应该被放在$ $内部)
\documentclass[12pt]{ctexart}
\usepackage{amsmath}
\usepackage{xeCJKfntef}
\begin{document}
\uline{由于 $Y$ 中的加法是 $Y\times Y\rightarrow Y$ 的连续映射.因此,若 $x\ll y$ ,则存在 $x$ 的邻域 $U$ , $y$ 的邻域 $V$ 使得 $V-U\subseteq \operatorname{int}Y_+,$ 故$U<V$ .}
\end{document}
汇总一下群友的讨论,虽然比较高深我没弄特别懂....
在某一些简单的情况下,如果只要求在嵌套环境内使用\verb||
的话,可以尝试使用fancyvrb
中提供的\Verb
命令.
如果只想要把抄录环境作为单独参数的话,可以考虑Eureka提出的使用expl3
中的\str_set:Nn
和\str_replace_all:Nnn
函数,如下图中的YourVerb
命令的定义. 同时还可以考虑鱼香肉丝没有鱼先生使用的xparse
宏包中提供的v
型参数,会将传入参数视为一个verbatim
环境,但不可以嵌套在其他命令中.
(特别感谢@u19850 指出错误,一开始弄混了expl3
中的V/v
以及xparse
中的V
,没有亲自尝试)
确实发现新大陆了,xparse
还支持这个v
代表抄录环境.
Eureka大神还指出可以使用xsimverb
宏包的\xsim_file_write_start:nx {\c_true_bool}{<filename>}
把环境内容输出到外部文件,然后用\inputverb
之类的命令读进来,如下这样做的话可以实现环境的嵌套.
% \RequirePackage{xsimverb}
\xsim_file_write_start:nx {\c_true_bool}{<file name>}
<content>
\xsim_file_write_stop:
lshort
实现的example
样例环境定义如下,对于verbatim
的封装使用到了\verbatim@processline
,\verbatim@start
等,我不懂(/(ㄒoㄒ)/~~)
\makeatletter
\newwrite\example@out
\newlength\savefboxrule
\newlength\savefboxsep
\edef\example@name{\jobname-example.aux}
\newenvironment{example}%
{\begingroup\@bsphack
\immediate\openout\example@out=\example@name
\let\do\@makeother\dospecials\catcode`\^^M\active
\def\verbatim@processline{\immediate\write\example@out{\the\verbatim@line}}%
\verbatim@start}%
{\immediate\closeout\example@out\@esphack\endgroup%
\trivlist\item\relax
\setlength{\savefboxrule}{\fboxrule}%
\setlength{\savefboxsep}{\fboxsep}%
\setlength{\fboxsep}{0.015\textwidth}%
\setlength{\fboxrule}{0.4pt}%
\fcolorbox[gray]{0}{0.95}{%
\begin{minipage}[c]{0.45\textwidth}%
\setlength{\fboxrule}{\savefboxrule}%
\setlength{\fboxsep}{\savefboxsep}%
\small\verbatiminput{\example@name}%
\end{minipage}%
}%
\hfill%
\fbox{%
\begin{minipage}[c]{0.45\textwidth}%
\setlength{\fboxrule}{\savefboxrule}%
\setlength{\fboxsep}{\savefboxsep}%
\setlength{\parskip}{1ex plus 0.4ex minus 0.2ex}%
\normalsize\input{\example@name}%
\end{minipage}%
}%
\endtrivlist
}
\makeatother
以上只是作为聊天记录的保存marked
如果要在tcb内部实现插入代码的话,tcb提供了listings
的功能(如下图所示),但是考虑到封装性此处的命令\Exercise
似乎并不太好简单地嵌入verbatim
的效果.
和题主要求的不是特别相关,前几天正好学习了\tikzmath
的有关功能,也实现了九九乘法表...
下面是一个MWE的片段
\usepackage{amsmath}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage{pgffor}
\usetikzlibrary{math} % 感谢鱼香肉丝没有鱼先生
-------------------------------------------------------
\begin{tikzpicture}
\tikzmath{
function paint_rectangle(\x,\y){
int \i,\j,\k;
for \i in {1,...,\x}{
for \j in {1,...,\y}{
\k = \i * \j;
if \i <= \j then{
{
\node [rectangle,fill=green!30,draw=green!60,rounded corners] at (2.5*\i,\j) {\i $\times$ \j $=$ \k};
};
}else{
{
\node [rectangle,fill=violet!40,draw=violet!80,rounded corners] at (2.5*\i,\j) {$\j \times \i=\k$};
};
};
};
};
};
\A = 6;
\B = 15;
paint_rectangle(\A,\B);
}
\end{tikzpicture}
@武汉-WHU-正寅 感谢大佬提供的链接
搬运 TSE 论坛的远古问题
不明白你想要的生效是什么意思?
似乎加上label选项即可.
下面是MWE和一个结合@深圳-Skyrmion提供的使用默认参数O
的alternative solution.
\documentclass{ctexart}
\usepackage{xparse}
\usepackage{enumitem}
% 定义新的环境 ceshi,带有可选参数 o 和必要的内容参数 +b
% \NewDocumentEnvironment{ceshi}{o +b}{
% \IfNoValueTF{#1}{% 如果没有提供可选参数
% \begin{enumerate}
% #2
% \end{enumerate}
% }{% 如果提供了可选参数
% \begin{enumerate}[label=#1{\arabic*}]
% #2
% \end{enumerate}
% }
% }{}
\NewDocumentEnvironment{ceshi}{O{} +b}{
\begin{enumerate}[label=#1{\arabic*}]
#2
\end{enumerate}
}{}
\begin{document}
% 没有可选参数的 ceshi 环境
\begin{ceshi}
\item 这是一
\item 这是二
\item 这是三
\end{ceshi}
%使用可选参数 resume 的 ceshi 环境
\begin{ceshi}[ahahaha]
\item 这是新一
\item 这是新二
\item 这是新三
\end{ceshi}
\end{document}
下次可以指明参考代码来自:参考链接
一个显而易见的问题是,这段代码出现了两次
虽然我水平不够不太能看得懂,但是我删去其中一段之后不会出现类似无限递归调用的情况了.
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}
至于要不要保留空白,if True:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
\else
\phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
if False:
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
下面是一个xelatex+texlive运行成功的mwe
\documentclass[12pt]{ctexart}
\usepackage{xparse,zhlipsum}
\newtoks\patchtoks % helper token register
\def\longpatch#1% % worker macro
{\let\myoldmac#1%
\long\def#1##1{\patchtoks={##1}\myoldmac{\the\patchtoks}}}
\longpatch{\phantom}
\NewDocumentEnvironment{solution}{ +b }{%
\ifsolution
\textbf{答案}\quad #1
%注释掉这个else的两行就可以实现去除空白
% \else
% \phantom{\parbox{\textwidth}{#1}}
\fi
}{\par}
\newif\ifsolution
\solutiontrue %添加此句将输出答案,否则输出答案所需的空白
\begin{document}
设$f(x)$在$[0, 2]$上连续, 在$(0, 2)$内可导, 且$3f(0)=f(1)+2f(2)$, 证明: 存在存在$\xi \in (0, 2)$, 成立$f'(\xi)=0$.
\begin{solution}
这是问题的解答.
\zhlipsum[1]
\end{solution}
\begin{enumerate}
\item 第一题的题目
\begin{solution}
\zhlipsum[1]
\end{solution}
\item 第二题的题目
\begin{solution}
这是第二题的答案
\zhlipsum[8]
\end{solution}
\end{enumerate}
\end{document}
个人感觉是你对上面链接的使用没有理解的很好.
如有错漏(尤其是对于patch的那一段),请各位批评指正。
为什么不看文档,是不喜欢吗?
建议在命令行输入texdoc tikz
找到有关的符号的详细说明
(point A) -| (point B)
指的是从A出发先水平再垂直方向连接坐标点B (point A) |- (point B)
指的是从A出发先垂直再水平方向连接坐标点B
这里的point可以是坐标形式 (2,4)
也可以是坐标点的名称 (S)
因为你前面已经定义了 \coordinate (S) at (2,2);
首先看你的第一个MWE:预定义了坐标点S(2,2)
\draw[red] (0,0) -- (0,0)-| (S);
\draw[blue] (0,0) -- (0,0) |- (S);
指的是从(0,0)出发,画红色直线到点(0,0),然后从(0,0)出发,先水平再垂直到(S),在脑海中想象,从(0,0)到(2,2)理应先向右再向上.同理,第二行代码从(0,0)画蓝色直线到点(0,0),之后先向上再向右,实际上符号|-
以及-|
是很形象和直观的.
P.S. 因此上面的代码中(0,0) -- (0,0)
并无实际意义,可删去--(0,0)
.
接下来看第二个MWE,其实是稍微有点tricky的,看下面的例子.
诚如lshort
中所言,此时指的是垂足模式
(0,0 -| S) 指 横坐标 为 S的横坐标_, 纵坐标为 _0 的点
(0,0 |- S) 指 纵坐标 为 S的纵坐标_,横坐标为 _0 的点
于是不难想象你得到的两条线.
但是上述表述诚如你所言,左边是一个坐标,右边是一个点,并不是规范的path (PointA) <curve-to> (PointB)表述形式,不建议使用.
关于显示坐标的问题,我不觉得上述的\path
想象坐标是很困难的事情,你可以通过\node at (<point>) {$text$}
来标注位置,不一定一定需要获得其坐标.
另一方面也可以使用pgfplots
宏包提供的\getlastxy{\x}{\y}
来获得当前坐标点的命令并保存到\x
和\y
中,再使用\node
输出,但是这样很繁琐,不如直接使用\node
输出.
没有完全弄懂你的上述配置,但是要想解决的话,也许可以配置一个xelatex*2
的recipe
放到"latex-workshop.latex.recipes"
内部
{
"name": "xelatex*2",
"tools": [
"xelatex",
"xelatex",
],
},
我想要解决你的问题可能需要研究一下latex-workshop
插件预览pdf
文件的位置信息的文档
有可能这与你采用如下配置移动pdf文件位置有关
"outputDir": "./out", // 设置编译输出文件的目录为 ./out
"viewer": {
"external": {
"command": "cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf.backup && cp %DIR%/%DOCFILE%.pdf %DOCFILE%.pdf", // 复制生成的 PDF 文件到源文件目录
"forwardSearch": {
"args": [] // 设置正向搜索的参数
}
}
}
个人觉得如非特别有必要,不要修改过多默认配置
浅浅自问自答一下,感谢啸行大佬的热情帮助,要想实现这一效果的话,还可以直接借助ctex
宏包提供的format
选项实现这一效果.
\documentclass[12pt]{ctexart}
\usepackage[margin=1in]{geometry}
\usepackage{amsmath}
\usepackage{hyperref}
\usepackage{lipsum}
\ctexset{
section/name = {\S},
subsection/name = {\S},
}
\numberwithin{equation}{section}
\begin{document}
\section{equation sign}
\subsection{first subsection}
\begin{align}
a^2 + b^2 = c^2 \\
1 + 1 = 3
\end{align}
\subsection{second subsection}
This is a text paragraph.
\section{ref style}
\subsection{A subsection}
\begin{subequations}
\begin{align}
\sum_{n=1}^{\infty} \frac{1}{n^2} &= \frac{\pi^1}{1111} \\
\sum_{n=1}^{\infty} \frac{1}{n^2} &= \frac{\pi^2}{2222} \\
\sum_{n=1}^{\infty} \frac{1}{n^2} &= \frac{\pi^3}{3333} \\
\sum_{n=1}^{\infty} \frac{1}{n^2} &= \frac{\pi^4}{4444}\label{eq:pythagoras}
\end{align}
\label{eq:mult-lines}
\end{subequations}
\subsection{Another subsection}
\begin{equation}
a^2+b^2=c^2
\end{equation}
Hello world \ref{eq:pythagoras}, equation ref style: \eqref{eq:pythagoras}
\end{document}
根据lshort
中的介绍,也可以使用footnotemark
配合footnotetext
实现.
下面是mwe
\documentclass{book}
\usepackage[paperheight=3in]{geometry}
\usepackage{ctex}
\usepackage{tcolorbox}
\begin{document}
浔阳江头夜送客,枫叶荻花秋瑟瑟\footnote{注一}。
主人下马客在船,举酒欲饮无管弦。
\begin{tcolorbox}
忽闻水上琵琶声,主人忘归客不发\footnotemark。
醉不成欢惨将别\footnotemark,别时茫茫江浸月。
\end{tcolorbox}
\footnotetext[2]{注二}
\footnotetext[3]{注三}
\end{document}
当然,考虑到footnote
与tcolorbox
环境更好的耦合性的话,还是建议使用@u19850 🐟老师的做法。
PPPPPS.注意贴代码的时候可以善用markdown的代码块环境,同时善用预览功能,将你的所有代码都放到代码块内.
可以考虑before upper
选项
下面是一个例子
\documentclass{book}
\usepackage{ctex}
\usepackage{tcolorbox}
\begin{document}
\tcbset{before upper={\parindent22pt}}
\begin{tcolorbox}
第一段,先帝创业未半而中道崩殂,
今天下三分,益州疲弊,此诚危急存亡之秋也。
然侍卫之臣不懈于内,忠志之士忘身于外者,
盖追先帝之殊遇,欲报之于陛下也。
第二段,诚宜开张圣听,以光先帝遗德,
恢弘志士之气,不宜妄自菲薄,
引喻失义,以塞忠谏之路也。
第三段,宫中府中,俱为一体,陟罚臧否,不宜异同。
若有作奸犯科及为忠善者,宜付有司论其刑赏,
以昭陛下平明之理,不宜偏私,使内外异法也。
\end{tcolorbox}
\end{document}
也许只要简单搜一下文档即可...
可以利用pgfplots的方法实现...建议参考pgfplots文档P104的做法。下面是MWE和效果。
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=1.18}
\usepgfplotslibrary{fillbetween}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[scale=1.5]
\begin{axis}[
axis lines=middle,
axis on top,
xtick = \empty,
ytick = \empty,
xlabel = {$x$},
ylabel = {$y$},
xmin=-2.0, xmax=2.0,
ymin=-2.5, ymax=2.5,
samples=1000]
\addplot[semithick,name path=A] ({x},{rad(atan(x))});
\path[name path=B] (0,pi/2) -- (1.8,pi/2);
\draw[dashed](-3,pi/2)--(3,pi/2)(-3,-pi/2)--(3,-pi/2);
\addplot[red!30,opacity=.3] fill between[of=A and B,soft clip={
(0,0) rectangle (1.8,2)
}];
\end{axis}
\end{tikzpicture}
\end{document}
问 能否手动实现参考文献悬挂缩进、编号补齐的格式?