如何用其他文本(例如双连字符)替换单连字符?

如何用其他文本(例如双连字符)替换单连字符?

我想-用替换--。我可以使用以下代码\\替换:--

{\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}

在此处输入图片描述

如您所见,输出总是相同的。

相关内容