我正在嘗試製作一個glossaries
可以處理長描述的多列術語表樣式(帶有 ),但我對如何編寫術語表樣式相當不熟悉,並且不完全知道如何實現它。
我想要的是一個有四個欄位的詞彙表;兩對縮寫和描述。如果描述多於一行,則描述應僅在其自己的列中換行,並且縮寫列應跳過任意多行,以使每個縮寫與其描述的開頭對齊。
我所知道的就是製作兩個總列並手動分隔縮寫和描述;透過這段程式碼(我很確定我不久前從 StackExchange 複製貼上了這段程式碼):
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
\glossentrydesc{##1}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
這段程式碼的問題在於,當您有很長的描述時,它只會包含在縮寫詞列中,因為 LaTeX 不會將縮寫詞和描述視為單獨的區塊。您可以在這裡看到問題,以紅色突出顯示:
最終,我想做的就是取出那些包裝好的描述位元(不是小寫字母的位元)並將它們推到一邊,將它們限制在描述列中,並在縮寫列中保留空格。我怎樣才能做到這一點?
MWE 的術語表樣式有問題:
\documentclass{article}
\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries
\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}
\usepackage{multicol}
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}{\textsc{\glossentryname{##1}}}}
\glossentrydesc{##1}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
\begin{document}
\glsunsetall
\gls{point}
\gls{inform}
\printglossary[style=glossabbr]
\end{document}
答案1
這應該是完整解決方案的良好開端:
\documentclass{article}
\usepackage[acronym,nomain]{glossaries}
\setacronymstyle{long-sc-short}
\makeglossaries
\newacronym
{inform}{inform}{informative illocutionary force}
\newacronym
{point}{point}{demonstrative illocutionary force}
\usepackage{multicol}
\newglossarystyle{glossabbr}{%
\renewenvironment{theglossary}%
{\begin{multicols}{2}\raggedright}
{\end{multicols}}
\renewcommand*{\glossaryheader}{}
\renewcommand*{\glsgroupheading}[1]{}
\renewcommand*{\glsgroupskip}{}
\renewcommand*{\glsclearpage}{}
% set how each entry should appear:
\renewcommand*{\glossentry}[2]{
\noindent\makebox[7em][l]{\glstarget{##1}%
{\begin{minipage}[t]{0.2\textwidth}
\textsc{\glossentryname{##1}}
\end{minipage}
}}
\begin{minipage}{0.2\textwidth}
\glossentrydesc{##1}
\end{minipage}\\
}
\renewcommand*{\subglossentry}[3]{%
\glossentry{##2}{##3}
}
}
\begin{document}
\glsunsetall
\gls{point}
\gls{inform}
\printglossary[style=glossabbr]
\end{document}
請注意和minipage
周圍添加的環境。這是一種原始的解決方法。glossentryname
glossentrydesc
您應該嘗試根據需要調整環境 - 寬度可以增加(也許,但這看起來可以接受),並且我在將術語表條目的垂直對齊設置為 top 而不是 center 時遇到問題。
我把它留給你的研究;)