![如何用其他文本(例如双连字符)替换单连字符?](https://linux22.com/image/467922/%E5%A6%82%E4%BD%95%E7%94%A8%E5%85%B6%E4%BB%96%E6%96%87%E6%9C%AC%EF%BC%88%E4%BE%8B%E5%A6%82%E5%8F%8C%E8%BF%9E%E5%AD%97%E7%AC%A6%EF%BC%89%E6%9B%BF%E6%8D%A2%E5%8D%95%E8%BF%9E%E5%AD%97%E7%AC%A6%EF%BC%9F.png)
我想-
用替换--
。我可以使用以下代码\\
替换:--
{\def \\ {--\ } #3}
但如果我尝试:
{\def - {--\ } #3} %Option 1
{\def- {--\ } #3} %Option 2
{\def-{--\ } #3} %Option 3
{\def - {{--\ }} #3} %Option 4
或上述任何组合,都会导致
Missing control sequence inserted.
<inserted text>
\inaccessible
l.77 \begin
{rItemize}
在文件的部分中.tex
:
\begin{rESubsection}
{text}
{text}
{\def \\ {--\ }{Start Date \\ End Date}}
\begin{rItemize} % here
\item text
\end{rItemize}
\end{rESubsection}
ChatGPT 即使提供了运行代码也无济于事。我在不同的编译器版本pdflatex
(2022、2021、2020)上尝试了上述所有代码,但无济于事。
根据评论请求,这是 overleaf 上编译器版本 2020(旧版)的完整最小工作.tex
文件。pdflatex
\documentclass[11pt,letterpaper]{article} % Font size and paper type
\usepackage[parfill]{parskip} % Remove paragraph indentation
\usepackage{xparse} % used for any mmooo...
\usepackage{enumitem} % For rItemize left margin
\usepackage[left=0.4 in,top=0.4in,right=0.4 in,bottom=0.4in]{geometry} % Document margins
%\usepackage[margin=0.4in]{geometry}
\NewDocumentEnvironment{rSubsection}{mmmo}{
\textbf{#1}, {#2}\IfValueT{#4}{, \textit{#4}}. \hfill {\def \\ {--\ } #3}
\par
}{}
\NewDocumentEnvironment{rItemize}{
\begin{itemize}
\raggedright
}{
\end{itemize}
}
\begin{document}
%----------------------------------------------------------------------------------------
% Professional Experience
%----------------------------------------------------------------------------------------
\begin{rSubsection}
{Role}
{Company Name}
{Date - Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\begin{rSubsection}
{Role}
{Company Name}
{Date \\ Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
\end{rSubsection}
\end{document}
答案1
如果您想要替换某些内容,请使用分隔参数定义低级 TeX 宏。
例如
\newcommand{\replaceminus}[1]{\doreplaceminus #1-\relax} \newcommand{\docreplaceminus}{}% 确保此辅助宏尚未定义 \def\doreplaceminus#1-#2\relax{% \ifx\放松#2\放松 #1% \别的 #1--\doreplaceminus#2\relax % 替换下一个 - (或删除额外的 -) \fi}
\replaceminus
然后可以在显示的环境替换开始文本中使用宏rSubsection
来替换-
第三个参数中的每个文本\replaceminus{#3}
。
辅助宏\doreplaceminus
假定一个带有减号字符标记(非活动,类别代码为其他)的参数,并且\relax
作为参数的结尾。宏\replaceminus
被定义为默认提供这两个标记。在第一步中,检查我们是否达到这两个标记,即参数#2
为空,并且我们已完成。否则,-
将被两个减号字符标记替换,并且一切重新开始。(宏使用递归!为了避免输入堆栈溢出,如果有两个减号,您必须使用一些众所周知的技巧,例如\def\EndFi#1\fi{\fi #1}
使宏扩展以递归方式结束。)
请注意输入和宏/环境定义中的空格!我的宏\replaceminus
不会添加或删除空格。
答案2
我不确定是什么阻止你输入
date -- date
如果你想要的话。无论如何,你可以“标准化”输入。
\documentclass[11pt,letterpaper]{article} % Font size and paper type
\usepackage[parfill]{parskip} % Remove paragraph indentation
\usepackage{enumitem} % For rItemize left margin
\usepackage[left=0.4 in,top=0.4in,right=0.4 in,bottom=0.4in]{geometry} % Document margins
\NewDocumentEnvironment{rSubsection}{mmmo}{%
\par
\textbf{#1}, {#2}\IfValueT{#4}{, \textit{#4}}.\hfill\parsedates{#3}%
\par
}{}
\NewDocumentEnvironment{rItemize}{}
{\begin{itemize}\raggedright}
{\end{itemize}}
\ExplSyntaxOn
\NewDocumentCommand{\parsedates}{m}
{
\tl_set:Nn \l_tmpa_tl { #1 }
\regex_replace_once:nnN { \s* (\c{\\}|\-)+ \s* } {\ --\ } \l_tmpa_tl
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{document}
%----------------------------------------------------------------------------------------
% Professional Experience
%----------------------------------------------------------------------------------------
% double hyphen with spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date -- Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double hyphen with no spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date--Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double hyphen with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date-- Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double hyphen with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date --Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% single hyphen with spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date - Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% single hyphen with no spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date-Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% single hyphen with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date- Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% single hyphen with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date -Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double backslash with spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date \\ Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double backslash with no spaces
\begin{rSubsection}
{Role}
{Company Name}
{Date\\Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double backslash with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date\\ Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
% double backslash with one space
\begin{rSubsection}
{Role}
{Company Name}
{Date \\Date}
[Location]
\begin{rItemize}
\item Text.
\end{rItemize}
\end{rSubsection}
\end{document}
如您所见,输出总是相同的。