我想为我的文档生成如下标题:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\noindent \colorbox{red}{\expandafter\MakeUppercase\expandafter{\Huge My example title}} \\[-0.1em]
\noindent \colorbox{red}{\expandafter\MakeUppercase\expandafter{\Huge is very long}} \\[-0.1em]
\end{document}
- 它可以跨越多行
- 我想手动决定换行的位置
我想用一个命令输入标题的文本。例如
\myTitle = {My example title \\ goes here}
我可以在其中指定换行符的位置(可以有多个)。
我想要的是将该字符串拆分成单独的行,然后使用 for 循环生成标题。以下是一些不起作用的伪代码:
\documentclass{article}
\usepackage{tikz}
\newtoks\myTitle
% THIS IS PSEUDO-CODE
\newcommand{\printTitle}{%
\foreach \line in \numberOfLines {%
\noindent \colorbox{red}{\expandafter\MakeUppercase\expandafter{\Huge \line}} \\[-0.1em]
}
}
%~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\myTitle = {My example title \\ goes here}
\printTitle
\end{document}
答案1
由于您使用 标记了问题,因此这里有一个使用变量和循环遍历项目的expl3
解决方案。标题的每一行都使用 打印,其中行可用作。也替换为,因为它更好 ;-)seq
\seq_map_function:NN
\TitleLine
#1
\MakeUppercase
\text_uppercase:n
\documentclass{article}
\usepackage{xcolor}
\usepackage{xparse}
\newtoks\myTitle
\ExplSyntaxOn
\seq_new:N \l__mike_title_seq
\NewDocumentCommand \printTitle { }
{
\seq_set_split:NnV \l__mike_title_seq { \\ } \myTitle
\seq_map_function:NN \l__mike_title_seq
\TitleLine
}
\cs_new_eq:NN \TextUppercase \text_uppercase:n
\ExplSyntaxOff
\newcommand\TitleLine[1]{%
\noindent
\colorbox{red}{\TextUppercase{\Huge #1}}\par\vspace{-0.1em}}
\begin{document}
\myTitle = {My example title \\ goes here}
\printTitle
\end{document}
答案2
您可能想要更改默认设置,即本质上“什么都不做”:
\documentclass{article}
\usepackage{xparse,xcolor}
\ExplSyntaxOn
\NewDocumentCommand{\settitle}{m}
{
\seq_gset_split:Nnn \g_mike_title_seq { \\ } { #1 }
}
\NewDocumentCommand{\printtitlegeneric}{O{}}
{
\mike_title_print:n { #1 }
}
\seq_new:N \l__mike_title_print_seq
\seq_new:N \g_mike_title_seq
\tl_new:N \l__mike_title_color_tl
\cs_new_eq:NN \__mike_title_font: \scan_stop:
\cs_new_eq:NN \__mike_title_color:nn \use_ii:nn
\cs_new_eq:NN \__mike_title_case:n \use:n
\cs_new_protected:Nn \mike_title_print:n
{
\group_begin:
\keys_set:nn { mike / title } { #1 }
\seq_set_map:NNn \l__mike_title_print_seq \g_mike_title_seq
{
\hbox:n
{
\exp_not:N \__mike_title_font:
\exp_not:N \__mike_title_color:nn { \l__mike_title_color_tl }
{
\exp_not:N \__mike_title_case:n { \exp_not:n { ##1 } }
}
}
}
\noindent\seq_use:Nn \l__mike_title_print_seq { \\[-\lineskip] }
\group_end:
}
\keys_define:nn { mike / title }
{
font .code:n = \cs_set_protected:Nn \__mike_title_font: { #1 },
color .code:n =
\tl_set:Nn \l__mike_title_color_tl { #1 }
\cs_set_protected:Nn \__mike_title_color:nn { \colorbox{##1}{##2} },
uppercase .code:n = \cs_set_eq:NN \__mike_title_case:n \text_uppercase:n,
}
\ExplSyntaxOff
\begin{document}
\settitle{My example title \\ goes here}
\printtitlegeneric[color=red,font=\Huge,uppercase]
\bigskip
\printtitlegeneric[color=green!70!blue,font=\Large]
\end{document}
答案3
\documentclass{article}
\usepackage{listofitems,xcolor}
\newcommand\myTitle[1]{%
\setsepchar{\\}%
\readlist*\titlelines{#1}%
\foreachitem\z\in\titlelines[]{%
\ifnum\zcnt=1\relax\else\\[-0.1em]\fi%
\noindent\colorbox{red}{\expandafter\uppercase\expandafter{\z}}%
}%
}
\begin{document}
\myTitle{My example title \\ goes here}
\end{document}
边框大小可以通过长度 进行调整\fboxsep
。但是,如果减小到 的默认值以下,3pt
则可能需要\\[-0.1em]
将值向负方向增加。