在 Werner 的帮助下,我成功创建了一个自定义切片命令这里并且——关于可选参数——这个解决方案这里。
是否可以使用 tikz 功能增强分段命令的宏?我想引用标题本身的角落,并考虑将其包装在节点命令中。嗯,值得一试,但也许 tikz 不是合适的工具,或者我只是缺乏对 LaTeX 的深入了解?
关于模型图片,我想
删除 tikz 线水平部分上方的空间(位于 section-command 上方,即空间用蓝色标记)和
让垂直 tikz 线到达标题的下角(tikz 线的红色部分,即紧挨着标题本身)。
这两点可能吗?
在帮助/提示下马丁,我设法创建了我想要的版本,但它显然还没有完全发挥作用(它会产生错误)并且看起来不像它应该的那样。
目标模型
MWE 的屏幕截图(不起作用)
平均能量损失
\documentclass[
11pt,
a4paper,
parskip=false-
]
{scrartcl}
\usepackage{
lmodern,
blindtext,
multicol,
tikz,
etoolbox
}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\RedeclareSectionCommands[
beforeskip=0pt,
afterskip=3pt,
tocentryformat=\small,
toclinefill=\small\TOCLineLeaderFill,
tocpagenumberformat=\small,
% addtokomafont=\Large
]{subsection}
\addtokomafont{subsection}{\Large}
%=================================
% hide section headings - circumvent with fake heading
%src: https://tex.stackexchange.com/a/129985/25683
%=================================
\newcommand{\myownsec}[1]{%
\par\refstepcounter{section}% Increase section counter
\sectionmark{#1}% Add section mark (header)
% \addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}% Add section to ToC
\addcontentsline{toc}{section}{#1}% Add section to ToC
% Add more content here, if needed.
}
%***********************************************************
%***********************************************************
% OLD version - works, but does not look the part
% (src: https://tex.stackexchange.com/a/586911/25683)
%***********************************************************
%***********************************************************
%\NewDocumentCommand{\specialthing}{ o m }{%
%%\par\vspace{0ex}
%\begin{tikzpicture}
%[
%overlay,
%]
%\draw[
%semithick,
%color={black!30!blue},
%] (0,0) -- (0.95\columnwidth,0) -- (0.95\columnwidth,-0.5);
%\draw[
%semithick,
%color={black!50!green}
%] (0.1,-0.1) -- (0.94\columnwidth,-0.1) -- (0.94\columnwidth,-0.4);
%\end{tikzpicture}\par\vspace{0ex}
%\subsection[\IfValueTF{#1}{#1}{#2}]{#2}
%}
%***********************************************************
%***********************************************************
% NEW version - does not work, would probably look like it should
%***********************************************************
%***********************************************************
\newrobustcmd{\specialthing}[1]{%
\texorpdfstring{%
\begin{tikzpicture}
\node (sectionnode) {#1};
\draw[orange] (sectionnode.north west) -- (sectionnode.north east) -- (sectionnode.south east);
\end{tikzpicture}}{8iohsdfg}}
%\DeclareRobustCommand{\specialthing}{\texorpdfstring{\tikz\node{pgf};}{replacement text}}
%\chapter{hello \TikzStuff}
%\usepackage[showframe]{geometry}
\listfiles
\begin{document}
\begin{multicols*}{2}
\myownsec{Word}
%\tikz\node{pgf};\\
\subsection{bla \specialthing{asdf}}
\blindtext[1]
\blindtext[1]
\blindtext[1]
\blindtext[1]
%\specialthing{AAAAAA aaaa bbbb cccc dd eeeee}
\blindtext[1]
\end{multicols*}
\end{document}
答案1
据我所知并在以下人员的帮助下:
https://tex.stackexchange.com/a/11570/25683- 我使用这个回复来估计的水平长度(即宽度)
\thesection
加上它后面的水平空间,即在标题文本本身之前结束的空间)。它似乎大约落在1.1em
。 =>小心如果分段数高于 9(即至少在 2 位数字范围内),则使用此长度的代码部分会产生“丑陋”的结果(因为没有更好的术语)。此外,由于分段数是底部对齐的,我无法影响任何垂直偏移。
关于以下代码的说明:我在实际文档中不使用标题编号,但我也将解决方案应用于该用例。这就是为什么我对将此问题标记为已解决有些怀疑。我想我会将其搁置一周左右,希望你们中的一些人能提供一些提示。如果没有,那也没关系。:)
编辑 2021-03-17-2303 (CET)
secnumdepth > 0 的一个副作用是 TOC 条目很丑陋,因为 KOMA 不知何故没有将其 TOC 样式用于提供给分段命令的字符串。在下面的 MWE 中,这将是Heading with quite
。这看起来很糟糕,这就是为什么我不应该也不会将此回复标记为我的问题的解决方案。
secnumdepth = 0 的屏幕截图
secnumdepth > 0 的屏幕截图
平均能量损失
因此,我目前正在使用的解决方案的对应和增强的 MWE 是:
\documentclass[
11pt,
a4paper,
parskip=false-
]
{scrartcl}
\usepackage{
lmodern,
blindtext,
tikz,
multicol,
etoolbox,
calc,
tikzpagenodes,
}
\usetikzlibrary{calc}
\usepackage[
pdfencoding=auto,
]{hyperref}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\RedeclareSectionCommands[
beforeskip=0pt,
afterskip=3pt,
tocentryformat=\small,
toclinefill=\small\TOCLineLeaderFill,
tocpagenumberformat=\small,
% addtokomafont=\Large
]{subsection}
\addtokomafont{subsection}{\Large}
%\setcounter{secnumdepth}{0}
%=================================
% hide section headings - circumvent with fake heading
%src: https://tex.stackexchange.com/a/129985/25683
%=================================
\newcommand{\myownsec}[1]{%
\par\refstepcounter{section}% Increase section counter
\sectionmark{#1}% Add section mark (header)
% \addcontentsline{toc}{section}{\protect\numberline{\thesection}#1}% Add section to ToC
\addcontentsline{toc}{section}{#1}% Add section to ToC
% Add more content here, if needed.
}
%***********************************************************
%***********************************************************
% NEW version
%***********************************************************
%***********************************************************
\newlength{\randomlength}
\newrobustcmd{\specialthing}[1]{%
\setlength{\randomlength}{\widthof{\thesection}}
\texorpdfstring{%
\begin{tikzpicture}
\node[
inner sep=0pt,
outer sep=1pt,
anchor=south west,
align=left,
% text width=\columnwidth, % <----- perfect if secnumdepth=0
text width=\columnwidth-\randomlength-1.1em, % <------- this is preferrable if the counter secnumdepth is higher than 0 (or whichever number equals the sectioning depth of the commands you intend to use this tikz "add-on" with)
] (sectionnode) {#1};
\draw[semithick, orange] ($(sectionnode.north west -| current page text area.west)+(-0.5\columnwidth,2pt)$) -- ($(sectionnode.north east)+(0,2pt)$) -- ($(sectionnode.south east)+(0,-2pt)$); % <------- this is preferrable if the counter secnumdepth is higher than 0 (or whichever number equals the sectioning depth of the commands you intend to use this tikz "add-on" with)
% \draw[semithick, orange] ($(sectionnode.north west)+(0,2pt)$) -- ($(sectionnode.north east)+(0,2pt)$) -- ($(sectionnode.south east)+(0,-2pt)$); % <----- perfect if secnumdepth=0
\end{tikzpicture}}{#1}}
\usepackage[showframe]{geometry}
\listfiles
\begin{document}
\begin{multicols*}{2}
\myownsec{Word}
\section{\specialthing{Heading with quite}}
\subsection{Heading with words and such}
\section{\specialthing{And way more words in this heading}}
\blindtext[1]
\blindtext[1]
\blindtext[1]
\end{multicols*}
\end{document}