刪除多餘的花括號

刪除多餘的花括號

在此 MWE 中,我示範了我的問題:

\documentclass{article}
\usepackage{seqsplit}
\newcommand{\dosomething}[1]{\uppercase{#1}}
\newcommand{\dosomethingelse}[1]{\seqsplit{#1}}
\begin{document}
    \dosomething{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}

    % works with extra {...}
    \dosomething{{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}}

    \dosomethingelse{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}

    % does not work with extra {...}
    \dosomethingelse{{looooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooong}}
\end{document}

有些指令需要使用額外的花括號,有些則不需要。為什麼會這樣?

答案1

如果參數不為空並且可以刪除起始空格,則以下技巧會有所幫助:

\makeatletter
\newcommand{\dosomethingelse}[1]{%
  \expandafter\seqsplit\expandafter{\@firstofone#1}%
}
\makeatother

\@firstofone在 LaTeX 核心中定義為:

\long\def\@firstofone#1{#1}

它獲取第一個標記作為參數並再次輸出它,因此它“什麼也不做”。但如果參數不是單一標記,而是大括號中的標記組,則刪除一層大括號。

答案2

這主要取決於什麼你正在處理的命令。

如果有\textit{{xyz}},附加的大括號只是添加一個分組層級;因為\seqsplit這是一個完全不同的遊戲,因為該指令一次掃描一個項目的參數,而支撐組是單一項目。

手冊第 2.3 節對此進行了描述seqsplit

2.3 分組和命令

此指令\seqsplit不會在大括號內的字母之間插入斷點{...}

[...(省略的例子)...]

周圍的大括號{kahg}防止了這個群體的分裂。此效果可用於排版序列內的特殊子字串。

大括號具有非常重要的文法意義,不應該隨意使用。

相關內容