这是论坛中的第一个问题,所以请对我宽容一点 :) 我为我的公司制作了一些会议记录文件,我想要一个自定义命令来在文档中添加注释。我希望文本的颜色和文本框宽度是可选的。此外,我希望这是一个我可以调用的包,而不是在每个我想使用它的文档中都放入这个命令代码。下面是我尝试的解决方案。
这是我的 .sty 文件
\ProvidesPackage{pnutscommands}
\usepackage{color}
\usepackage{seqsplit}
\usepackage{xargs}
\usepackage{xstring}
\newcommandx{\colornote}[3][1=red, 2=3in]{%
\begin{minipage}{#2}
\textcolor{#1}{\seqsplit{\StrSubstitute{#3}{ }{~}}}
\end{minipage}
}
这是我的 .txt
\documentclass{article}
\usepackage{pnutscommands}
\begin{document}
\colornote[blue][5in]
{17823941dsfdsfdsf 23471239047123 9407123408917234890123748912034712985712389012351}
\colornote
{17823941237490812347123904712389 dsdsfdsfdsfdfs 23748912034712985712389012351}
\end{document}
\StrSubstitute{#3}{ }{~}}
如果您用替换,此代码将有效#3
。问题是\seqsplit
删除了字符串中的空格。因此我尝试了 \StrSubstitute,但它返回了一个我不熟悉的错误。
% Console output:
! Use of \@xs@StrSubstitute@@ doesn't match its definition.
\kernel@ifnextchar ...rved@d =#1\def \reserved@a {
#2}\def \reserved@b {#3}\f...
l.7 ...408917234890123748912034712985712389012351}
有人能帮我修复这个错误或者给我一个更好的解决方案吗?
答案1
这个问题与 无关\newcommandx
。您必须先进行替换,然后将其应用于\seqsplit
获得的字符串。
还有避免xstring
过度扩张的复杂情况。
\documentclass{article}
\usepackage{color}
\usepackage{seqsplit}
\usepackage{xargs}
\usepackage{xstring}
\newcommandx{\colornote}[3][1=red, 2=3in]{%
\begin{minipage}{#2}
\noexpandarg
\StrSubstitute{#3}{ }{~}[\TEMP]%
\textcolor{#1}{\expandafter\seqsplit\expandafter{\TEMP}}%
\end{minipage}
}
\begin{document}
\colornote[blue][5in]
{17823941dsfdsfdsf 23471239047123 9407123408917234890123748912034712985712389012351}
\colornote
{17823941237490812347123904712389 dsdsfdsfdsfdfs 23748912034712985712389012351}
\end{document}
强制expl3
实施:
\documentclass{article}
\usepackage{color}
\usepackage{seqsplit}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\colornote}{O{red}O{3in}m}
{
\begin{minipage}{#2}
\tl_set:Nn \l_tmpa_tl { #3 }
\tl_replace_all:Nnn \l_tmpa_tl { ~ } { \nobreakspace }
\breslend_color_seqsplit:Vn \l_tmpa_tl { #1 }
\end{minipage}
}
\cs_new_protected:Nn \breslend_color_seqsplit:nn
{
\textcolor{#2}{\seqsplit{#1}}
}
\cs_generate_variant:Nn \breslend_color_seqsplit:nn { V }
\ExplSyntaxOff
\begin{document}
\colornote[blue][5in]
{17823941dsfdsfdsf 23471239047123 9407123408917234890123748912034712985712389012351}
\colornote
{17823941237490812347123904712389 dsdsfdsfdsfdfs 23748912034712985712389012351}
\end{document}