我想创建一个节点,其中的中文文本是垂直书写的。当然,我不希望字符旋转!可以吗?
梅威瑟:
\documentclass[tikz]{standalone}
\usepackage[UTF8]{ctex}
\begin{document}
\begin{tikzpicture}
\node[draw,inner sep=2pt] at (0,0) {文章内容。};
\end{tikzpicture}
\end{document}
编辑:我正在使用PdfLaTeX
并且只需要几个适合单个列的短垂直文本节点。
答案1
请使用 XeLaTeX 或 LuaLaTeX!
\documentclass{article}
\usepackage{tikz}
\usepackage{fontspec}
\usepackage{expl3}
\setmainfont{FandolSong-Regular.otf}
\begin{document}
\ExplSyntaxOn
\cs_new:Npn \__map_function #1 {
\tl_put_right:Nn \l_tmpa_tl {\noindent #1 \par}
}
\cs_new:Npn \__map_function_centering #1 {
\tl_put_right:Nn \l_tmpa_tl {\centering #1 \par}
}
\newcommand{\verticaltext}[1]{
\str_set:Nn \l_tmpa_str {#1}
\tl_clear:N \l_tmpa_tl
\str_map_function:NN \l_tmpa_str \__map_function
\tl_use:N \l_tmpa_tl
}
\newcommand{\verticalcentertext}[1]{
\str_set:Nn \l_tmpa_str {#1}
\tl_clear:N \l_tmpa_tl
\str_map_function:NN \l_tmpa_str \__map_function_centering
\tl_use:N \l_tmpa_tl
}
\ExplSyntaxOff
\begin{tikzpicture}
\node[draw,inner sep=2pt,text width=7mm] at (0,0) {\verticaltext{文章内容。}};
\node[draw,inner sep=2pt,text width=7mm] at (1,0) {\verticaltext{abcde}};
\node[draw,inner sep=2pt,text width=7mm] at (2,0) {\verticalcentertext{文章内容。}};
\node[draw,inner sep=2pt,text width=7mm] at (3,0) {\verticalcentertext{abcde}};
\end{tikzpicture}
\end{document}
答案2
一种 XeLaTeX 方法,请注意这是一种伪垂直排版。
\documentclass[tikz]{standalone}
\usepackage[UTF8]{ctex}
\tikzset{
pseudo vertical/.style={
% 1\ccwd is the width of one Chinese character, see user manual of ctex pkg
text width=1\ccwd,
% reduce line spacing and allow linebreak before Chinese period punct (。)
% c.f. user manual of xeCJK pkg
font=\linespread{1}\selectfont\xeCJKDeclareCharClass{CJK}{`。}
}
}
\begin{document}
\begin{tikzpicture}
\node[draw, inner sep=2pt, pseudo vertical] at (0,0) {文章内容。};
\end{tikzpicture}
\end{document}
答案3
答案4
您可以使用系统字体,例如 Noto 系列。这样您就不必受限于特定系统的特定字体包。
这个答案的变体使用了 tikz positioning
,因此对于短文本很有用。
使用 xelatex\lualatex 进行编译。
平均能量损失
\documentclass[12pt]{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{xcolor}
\usepackage{fontspec}
\setmainfont{Noto Serif}
\newfontface\zhfont[Scale=2.5,Colour=blue]{Noto Serif SC}
\usepackage{lipsum}
\begin{document}
\ \marginpar{
\begin{tikzpicture}[inner sep=3pt,node distance=0mm,font={\zhfont}]
\node (a) {文};
\node (b) [below=of a] {章};
\node (c) [below=of b] {内};
\node (d) [below=of c] {容};
\node (e) [below=of d] {。};
\end{tikzpicture}} \lipsum[2]\lipsum[2]
\end{document}
附录:
或者,问题使用 XeTeX 的竖排中文文本为具有该功能的字体提供“旋转字形”解决方案。它们所在的小页面框也会旋转,因此字符会垂直显示。
这可以适应 tikz。
平均能量损失
\documentclass{article}
\usepackage{graphicx} % for \rotatebox
\usepackage{xeCJK}
\newfontlanguage{Chinese}{CHN}
\setCJKmainfont{Noto Serif CJK SC}
\setCJKfamilyfont{songvert}[RawFeature={vertical;+vert},Script=CJK,Language=Chinese,Vertical=RotatedGlyphs]{Noto Serif SC}
\setmainfont{Noto Serif}
\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{#1}}
\newcommand*\CJKmove{\punctstyle{plain}% do not modify the spacing between punctuations
\let\CJKsymbol\CJKmovesymbol
\let\CJKpunctsymbol\CJKsymbol}
\newcommand\sampletext{『文章内容』。}
\begin{document}
\sampletext\ This is some sample text.
\begin{center}
\rotatebox{-90}{\fbox{\begin{minipage}{10em}
\CJKfamily{songvert}\CJKmove
\sampletext \\
\sampletext \\
\sampletext \\
\sampletext \\
\end{minipage}}}
\end{center}
\sampletext\ This is some sample text.
\end{document}
内联的 tikz 节点,包含旋转的字形及其框:
平均能量损失
\documentclass{article}
\usepackage{xcolor}
\usepackage{graphicx} % for \rotatebox
\usepackage{tikz}
\usepackage{xeCJK}
\newfontlanguage{Chinese}{CHN}
\setCJKmainfont{Noto Serif CJK SC}
\setCJKfamilyfont{songvert}[RawFeature={vertical;+vert},Script=CJK,Language=Chinese,Vertical=RotatedGlyphs]{Noto Serif SC}
\setmainfont{Noto Serif}
\newcommand*\CJKmovesymbol[1]{\raise.35em\hbox{#1}}
\newcommand*\CJKmove{\punctstyle{plain}% do not modify the spacing between punctuations
\let\CJKsymbol\CJKmovesymbol
\let\CJKpunctsymbol\CJKsymbol}
\newcommand\sampletext{『文章内容』。}
\begin{document}
\sampletext\ This is some sample text.
\tikz \node {\rotatebox{-90}{\colorbox{red!4}{
\CJKfamily{songvert}\CJKmove
\sampletext}}};
\sampletext\ This is some sample text.
\end{document}