Text-Processing
用遵循模式的不同新字元串替換不同的字元串
我有
\title{A64L(3)} somethings \textbf{a64l}() \title{MALLOC(3)} somethings \textbf{malloc}()
我想
\title{\hypertarget{a64l}{A64L(3)}} somethings \textbf{\hyperlink{a64l}{a64l}}() \title{\hypertarget{malloc}{MALLOC(3)}} somethings \textbf{\hyperlink{malloc}{malloc}}()
或者
\title{\hypertarget{a64l}{A64L}(3)} somethings \textbf{\hyperlink{a64l}{a64l}}() \title{\hypertarget{malloc}{MALLOC}(3)} somethings \textbf{\hyperlink{malloc}{malloc}}()
這些是範例文件。可以有任何東西來代替
A64L
andMALLOC
,但遵循模式(例如\title{new_word}
)。我必須這樣做才能獲得描述的功能https://tex.stackexchange.com/questions/407884/how-to-make-a-title-as-link-target
我更喜歡
vim
,sed
,awk
.您的答案也應該適用於以下 -
\documentclass[]{article} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript % use upquote if available, for straight quotes in verbatim environments \IfFileExists{upquote.sty}{\usepackage{upquote}}{} \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex \usepackage[utf8]{inputenc} \else % if luatex or xelatex \ifxetex \usepackage{mathspec} \usepackage{xltxtra,xunicode} \else \usepackage{fontspec} \fi \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase} \newcommand{\euro}{€} \fi % use microtype if available \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{longtable,booktabs} \ifxetex \usepackage[setpagesize=false, % page size defined by xetex unicode=false, % unicode breaks when used with xetex xetex]{hyperref} \else \usepackage[unicode=true]{hyperref} \fi \hypersetup{breaklinks=true, bookmarks=true, pdfauthor={}, pdftitle={A64L(3)}, colorlinks=true, citecolor=blue, urlcolor=blue, linkcolor=magenta, pdfborder={0 0 0}} \urlstyle{same} % don't use monospace font for urls \setlength{\parindent}{0pt} \setlength{\parskip}{6pt plus 2pt minus 1pt} \setlength{\emergencystretch}{3em} % prevent overfull lines \setcounter{secnumdepth}{0} \usepackage{pagecolor} % Set background colour (of the page) \definecolor{weirdbgcolor}{HTML}{FCF4F0} \pagecolor{weirdbgcolor} % Make bold text appear in a particular colour \definecolor{boldcolor}{HTML}{6E0002} \let\realtextbf=\textbf \renewcommand{\textbf}[1]{\textcolor{boldcolor}{\realtextbf{#1}}} % Use underlines instead of emphasis (ugh) \renewcommand{\emph}[1]{\underline{#1}} \hypersetup{breaklinks=false} % % Use fixed-width font by default % \renewcommand*\familydefault{\ttdefault} \title{A64L(3)} \author{} \date{} \begin{document} \maketitle \begin{longtable}[c]{@{}lll@{}} \toprule\addlinespace A64L(3) & Linux Programmer's Manual & A64L(3) \\\addlinespace \bottomrule \end{longtable} \hyperdef{}{NAME}{\section{\hyperref[NAME]{NAME}}\label{NAME}} a64l, l64a - convert between long and base-64 \hyperdef{}{SYNOPSIS}{\section{\hyperref[SYNOPSIS]{SYNOPSIS}}\label{SYNOPSIS}} \textbf{\#include \textless{}stdlib.h\textgreater{}} ~ \textbf{long a64l(char *}\emph{str64}\textbf{);} ~ \textbf{char *l64a(long}\emph{value}\textbf{);} ~ Feature Test Macro Requirements for glibc (see \textbf{feature\_test\_macros}(7)): \\ ~ \textbf{a64l}(), \textbf{l64a}(): ~ \_SVID\_SOURCE \textbar{}\textbar{} \_XOPEN\_SOURCE~\textgreater{}=~500 \textbar{}\textbar{} \_XOPEN\_SOURCE~\&\&~\_XOPEN\_SOURCE\_EXTENDED \hyperdef{}{DESCRIPTION}{\section{\hyperref[DESCRIPTION]{DESCRIPTION}}\label{DESCRIPTION}} These functions provide a conversion between 32-bit long integers and little-endian base-64 ASCII strings (of length zero to six). If the string used as argument for \textbf{a64l}() has length greater than six, only the first six bytes are used. If the type \emph{long} has more than 32 bits, then \textbf{l64a}() uses only the low order 32 bits of \emph{value}, and \textbf{a64l}() sign-extends its 32-bit result. The 64 digits in the base-64 system are: \begin{verbatim} '.' represents a 0 '/' represents a 1 0-9 represent 2-11 A-Z represent 12-37 a-z represent 38-63 \end{verbatim} So 123 = 59*64\^{}0 + 1*64\^{}1 = ``v/''. \hyperdef{}{ATTRIBUTES}{\section{\hyperref[ATTRIBUTES]{ATTRIBUTES}}\label{ATTRIBUTES}} \hyperdef{}{Multithreadingux5fux28seeux5fpthreadsux287ux29ux29}{\subsection{\hyperref[Multithreadingux5fux28seeux5fpthreadsux287ux29ux29]{Multithreading (see pthreads(7))}}\label{Multithreadingux5fux28seeux5fpthreadsux287ux29ux29}} The \textbf{l64a}() function is not thread-safe. The \textbf{a64l}() function is thread-safe. \hyperdef{}{CONFORMINGux5fTO}{\section{\hyperref[CONFORMINGux5fTO]{CONFORMING TO}}\label{CONFORMINGux5fTO}} POSIX.1-2001. \hyperdef{}{NOTES}{\section{\hyperref[NOTES]{NOTES}}\label{NOTES}} The value returned by \textbf{l64a}() may be a pointer to a static buffer, possibly overwritten by later calls. The behavior of \textbf{l64a}() is undefined when \emph{value} is negative. If \emph{value} is zero, it returns an empty string. These functions are broken in glibc before 2.2.5 (puts most significant digit first). This is not the encoding used by \textbf{uuencode}(1). \hyperdef{}{SEEux5fALSO}{\section{\hyperref[SEEux5fALSO]{SEE ALSO}}\label{SEEux5fALSO}} \textbf{uuencode}(1), \textbf{strtoul}(3) \hyperdef{}{COLOPHON}{\section{\hyperref[COLOPHON]{COLOPHON}}\label{COLOPHON}} This page is part of release 3.54 of the Linux \emph{man-pages} project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/. \begin{longtable}[c]{@{}ll@{}} \toprule\addlinespace 2013-06-21 & \\\addlinespace \bottomrule \end{longtable} \end{document}
編輯
由於沒有答案完全符合要求,因此我對問題進行了更改。這種變化也給了我相同的結果,但方式不同。
主要是,我想將所有粗體文本與同一個單詞的標題連結起來。
例如,在我得到的地方,
\textbf{malloc}
我想與\title{MALLOC(3)}
和\textbf{a64l}
建立連結\title{A64L(3)}
。現在,我製作了一個
index
包含標題詞的文件。文件索引
MALLOC(3) A64L(3)
或者
MALLOC A64L
或者
malloc a64l
我想使用
index
文件修改主文件比以前的方法更容易。虛擬碼
while read word do l_word=${word,,} echo $l_word sed -e 's/\\title{$word\(3\)}/\\title{\\hypertarget{$word}{$word\(3\)}}/' -e 's/\\textbf{$l_word}/\\textbf{\\hyperlink{$word}{$l_word}}/' inputfile > output.tex done < index
$$ There some mistakes in this code, that can’t be detected by me $$
#!/bin/bash while read word do l_word=${word,,} sed -e s/\\\\title{$word\(3\)}/\\\\title{\\\\hypertarget{$word}{$word\(3\)}}/g -e s/\\\\textbf{$l_word}/\\\\textbf{\\\\hyperlink{$word}{$l_word}}/g inputfile > output.tex done < index
雖然,這是可行的,但它可以在沒有我無法製作的正則表達式的索引文件的情況下完成。
我想下面的作品請檢查和更新。經過對一些數據的測試,它對我有用
sed "/title/s/{.*/{\hypertarget{&&/g" filename | sed -e "/title/s/A64/a64/1" -e "/title/s/MALLOC/malloc/1" | sed "/textbf/s/{.*}/{\hyperlink&&/g"| sed "s/{\{2\}/{/1" | sed "s/(3)//1"